Daily AR aging digest in Slack from Tabs

By General Input

Every weekday at 9am ET, post a clean Slack digest of overdue Tabs invoices, grouped into aging buckets with totals and a callout when a customer's balance jumps.

Integrations

  • Tabs
  • Slack Bot

Type

Agentic Task

Categories

  • Finance
  • Operations

Build me an agent workflow that posts a daily AR aging digest from Tabs to our #finance Slack channel.

Trigger: a cron schedule that fires every weekday (Monday through Friday) at 9:00am America/New_York.

On each run, the agent should:

1. Call Tabs List Invoices to fetch every invoice that is unpaid and past its due date. Use the filter query parameter to scope by status (anything not paid/void) and by due date in the past, and paginate until you have them all. For each invoice keep at minimum: invoice id, customer id, total amount, balance due, due date, status, and a link to the invoice in Tabs.

2. Resolve customer names (and account owner or primary contact if available) by calling Tabs Get Customer for each unique customer id, or by calling Tabs List Customers once and joining locally — pick whichever is cheaper given how many distinct customers show up. Cache results within the run so we do not refetch the same customer.

3. Compute days overdue as today minus the due date, and bucket each invoice into 1 to 30, 31 to 60, 61 to 90, or 90+ days overdue. For each bucket compute the total balance due and the number of distinct customers represented.

4. Compare each customer's current total overdue balance against the prior run's snapshot. Persist a small JSON state (customer id -> total overdue) between runs in workflow storage so we can diff. Flag any customer whose total overdue grew by a meaningful amount (default: more than $500 or more than 10%, whichever is larger) and call them out as 'balance jumped' in the digest.

5. Call Slack Send a Message (Slack Bot integration) to post one tidy digest to #finance. Use Slack mrkdwn formatting. The message should be in this shape:

• Header line: 'AR aging — <date>' and the total open overdue balance across all buckets.

• Bucket totals table at the top: 1–30, 31–60, 61–90, 90+ each with total $ and customer count.

• Top 10 largest overdue invoices, sorted by balance due descending. Each line: customer name, amount, days overdue, and a clickable link to the invoice.

• 'Balance jumped vs yesterday' section: one short line per flagged customer with the prior total, the new total, and the delta. Skip the section entirely if nothing jumped.

Keep it concise — this is a glance-and-act board, not a dump of every invoice. If there is nothing overdue, post a short all-clear message instead.

Inputs the user should set when installing the workflow: Slack channel (default #finance), schedule time and time zone, the bucket boundaries, the top-N count, the 'balance jumped' threshold ($ and %), and an optional minimum balance to include an invoice.

Use the Slack Bot integration (xoxb) for posting since this is automated team output, not a message from a specific person. Use Tabs with an API key.

Related prompts

Explore more prompts
A brand asset library your marketing team actually searchesTurn Mailjet email clicks into ranked HubSpot follow-upsClean out the Looker dashboards and Looks nobody opensLiveKit live operations console for room moderationWake up dormant Keap leads with a researched reasonLiveChat coverage board for planning next week's shiftsPhone routing control panel for LiveKit voice agentsLinkedIn Ads budget pacing dashboard for every client accountGive your team Looker numbers without buying more seatsPause marketing emails to escalated customers, then restore them