Give sales a daily view of open meeting follow-ups

Bring open Krisp meeting action items into a morning Slack digest with owners and due dates, giving sales a shared view of commitments still waiting on action.

Automate.ax team6 min read

Integrations used in this example

Make outstanding meeting commitments visible each morning

Every weekday morning, Automate.ax asks Krisp for unfinished action items from meetings visible to the connected user. It posts a Slack digest with each item's title, assignee, due date, source meeting, and Krisp item ID.

A sales manager can review missing owners and overdue commitments with the team. The workflow does not decide whether Krisp extracted the right action items or write notes back into the CRM; the team still verifies the conversation and updates the source records.

The team said reps often wrote vague or missing notes after calls, so follow-ups and customer success handoffs lacked a clear account of what had been discussed.Source: An eight-rep sales team's inconsistent follow-ups on Reddit

What you'll tell the agent

  • The Slack conversation where the sales team reviews meeting commitments.
  • The time zone for the weekday 9 a.m. digest.
  • A Krisp Meeting Assistant API key with read access and account authorization.

The agent will create the project and ask you for these details. When Automate.ax asks you to connect an account, authorize the integrations you want this workflow to use.

Krisp Meeting Assistant API access requires a Core or Advanced plan. Automate.ax currently requires a paid Slack workspace connection. The agent can help find the Slack conversation ID after authorization.

The automation

A weekday schedule fetches up to 200 open Krisp action items and posts the returned list to Slack. If more exist, the message says so.

krisp-sales-followup-digest.automation.ts
import { automation, onSchedule, t, transform } from "automate.ax"
import { krisp } from "automate.ax/krisp"
import { slack } from "automate.ax/slack"

export default automation(
  "Review open sales meeting action items",
  {
    parameters: [
      {
        label: "Sales follow-up Slack conversation ID",
        name: "reviewConversationId",
        type: "text",
      },
      {
        label: "Schedule time zone",
        name: "timeZone",
        type: "text",
        defaultValue: "UTC",
      },
    ],
  },
  ({ parameters }) => {
    const morning = onSchedule({
      schedule: "0 9 * * 1-5",
      timeZone: parameters.timeZone,
    })
    const openItems = krisp.listActionItems({ completed: false, limit: 200 })
    const digest = transform(
      [openItems, morning],
      ({ items, nextCursor, total }) => ({
        count: total,
        moreAvailable: nextCursor !== null,
        lines: items.map((item) => {
          const owner =
            [item.assignee?.firstName, item.assignee?.lastName]
              .filter(Boolean)
              .join(" ") ||
            item.assignee?.email ||
            "unassigned"
          return `• ${item.title} — ${owner}; meeting: ${item.meetingTitle}; due: ${item.dueDate ?? "not set"}; Krisp item: ${item.id}`
        }),
      }),
    ).filter(({ count }) => count > 0)

    slack.sendMessage({
      conversation: parameters.reviewConversationId,
      text: t`${digest.count} open Krisp meeting action items. Showing up to 200:\n${digest.lines.transform((lines) => lines.join("\n"))}\n${digest.moreAvailable.transform((more) => (more ? "More items are available in Krisp." : "This is the full returned list."))}`.transform(
        escapeSlackText,
      ),
      unfurlLinks: false,
    })
  },
)

/** Keeps provider text from becoming Slack mentions or control markup. */
function escapeSlackText(text: string) {
  return text
    .replaceAll("&", "&")
    .replaceAll("<", "&lt;")
    .replaceAll(">", "&gt;")
}

What a run looks like

Example input

Krisp lists two unfinished items from yesterday's sales meetings, one without an assignee.

Expected result

The sales channel gets one digest naming both commitments, their meetings, due dates, and the missing owner.

Set it up

  1. Copy the setup prompt at the top into your coding agent.
  2. Ask the agent to connect Krisp with a read-enabled personal API key and authorize a paid Slack workspace.
  3. Choose the sales review conversation and the time zone for the 9 a.m. weekday schedule.
  4. Deploy the project, run the automation once with controlled Krisp meeting items, and compare the digest with Krisp's open-item list.

Check the result

With a few known open and completed Krisp action items, run the automation from a safe test schedule. Confirm the Slack digest includes open items, omits completed ones, and names any unassigned item.

Where this workflow stops

  • Krisp's personal API key can read meetings the connected user owns or that have been shared directly with them. It does not see every workspace meeting automatically.
  • The example requests the first 200 open items. The Slack message warns if Krisp reports another page; add pagination if that volume is common.
  • This digest depends on Krisp extracting and updating action items. It does not judge whether they accurately reflect the call or create tasks in the CRM.

Common questions

Will this update HubSpot or send prospects a follow-up?

No. It gives the sales team an internal Slack review list. Reps still confirm the next steps and update their CRM.

What if our team has more than 200 open items?

The digest says more items are available in Krisp. Ask the agent to add pagination or a narrower owner rule.

More automation examples