Daily Slack digest of transactions your books cannot categorize

Every weekday at 4pm, get one Slack message asking about the handful of transactions your bookkeeping could not categorize, while you still remember them.

Agentic Task
PuzzleSlack BotFinanceOperationsDaily DigestsNotifications & Alerts
PromptCreate

Every weekday at 4pm, chase down the recent transactions my bookkeeping still cannot categorize, while the context is fresh, instead of leaving them to pile up until month end. Use Puzzle as the source of truth for the books and Slack to ask me about them.

Start by calling Puzzle's Get Current User to resolve which company to work on. It returns the companies my login can access, each with an id prefixed co_. If there is exactly one company, use it. If there is more than one, use the company I named when setting this up, and if I did not name one, use the first and say which company the digest is for in the Slack message.

Puzzle returns a 409 RESOURCE_PROCESSING error while a company is still syncing. Treat that as a retry, not as an empty result. Wait a short time and try again a few times before giving up, and if it is still syncing at the end, say the books were still syncing rather than reporting that there was nothing to review. Silently reporting zero uncategorized transactions when the sync just was not finished is the worst possible outcome here.

Before pulling any transactions, call Puzzle's Get Tasks to load the tasks that are already open for this company. It supports status and transaction filters. Build the set of transactions that already have an open task against them. Anything in that set has already been asked about and must not be raised again, no matter how many days it stays unanswered. This check is what keeps the workflow from nagging.

Now call Puzzle's Get Transactions filtered to the last 14 days and to an uncategorized or needs review status. Then call Get Puzzle Categories and Get Vendors so you have the valid category list and the existing vendor list for this company in hand.

Apply a materiality threshold, defaulting to 250 dollars, and only ask me about transactions at or above it. Puzzle returns money as an object with an amount as a decimal string and a currency code, so parse the amount as a decimal, compare on its absolute value so that refunds and credits are judged on size rather than sign, and be careful with any transaction whose currency is not my home currency. Do not drop the smaller items on the floor: count them and mention the count in one closing line so I know how much is being left for the bookkeeper.

For each transaction above the threshold, propose one specific category and one specific vendor. Both must be real entries from the Get Puzzle Categories and Get Vendors results. Never invent a category name or a vendor that does not exist in the company's books, because a suggestion I cannot actually apply is worse than no suggestion. Use the merchant description, the amount, the account it hit, and how similar past transactions were treated to make the call. Where you are genuinely torn between two valid categories, name both and ask me to pick rather than guessing confidently.

Roll everything into exactly one Slack message per day using the Slack Bot Send a Message action. Never send one ping per transaction. Open with the date and the number of items and their total value, then list each transaction on its own numbered line with the date, the amount, the merchant as it appears on the statement, and the suggested category and vendor, phrased as a question I can answer in a single reply. Number the lines so I can write back something as short as "1 software, 2 travel, 3 yes contractor". Keep it skimmable on a phone, use Slack mrkdwn formatting with single asterisks for bold, and close with the count of smaller items left for the bookkeeper. If there is nothing above the threshold that has not already been asked about, send nothing at all: a message in the channel should always mean something genuinely needs me.

After the Slack message is sent, call Puzzle's Create Task once for each item you asked about, so the open question is tracked inside Puzzle itself and shows up for whoever is doing the close. Give each task a title that names the merchant and amount, a description carrying the suggested category and vendor, and a link back to the transaction it concerns.

Puzzle's task endpoints are flagged experimental, so treat task creation as non-blocking and always do it after the Slack message rather than before. If Create Task fails, still consider the run a success, note in the run summary that task tracking degraded and the Slack message went out on its own, and accept that an item without a task may be raised again on a later run. Getting the question in front of me matters more than the bookkeeping of the question.

Let me set the Slack destination, which can be a channel or a direct message to me, the materiality threshold, and the 14 day lookback window as inputs, with 250 dollars and 14 days as the defaults.

Example output

Bookkeeping questions for Wed 12 Feb (4 items, $4,310 total) Answer with the numbers, for example "1 software, 2 travel, 3 yes contractor". 1. Feb 10, $1,850.00 to AWS EMEA. Suggest: Infrastructure and Hosting, vendor Amazon Web Services. Correct? 2. Feb 9, $1,200.00 to STRIPE ATLAS. Suggest: Legal and Professional Fees, vendor Stripe Atlas. Or should this sit in Formation Costs? 3. Feb 8, $760.00 to J. MORENO. Suggest: Contractor Expense, vendor Jordi Moreno. Is this the design contractor? 4. Feb 6, $500.00 to APOLLO.IO. Suggest: Software and Subscriptions, vendor Apollo. Correct? 11 smaller uncategorized transactions under $250 were left for the bookkeeper. All 4 questions above are now tracked in Puzzle.

What does this prompt do?

  • Checks your books each weekday afternoon for recent transactions that are still uncategorized or flagged for review, looking back over the last 14 days
  • Suggests a specific category and vendor for each one, chosen from the categories and vendors that already exist in your books rather than invented labels
  • Posts a single grouped Slack message listing each transaction with its date, amount and merchant, written as questions you can answer in one reply
  • Opens a tracked item in your accounting workspace for every question asked, and checks what is already open first so you are never asked about the same charge twice
  • Only asks about spend above a materiality threshold you set, so small coffee runs never interrupt your afternoon

What do I need to use this?

  • A Puzzle account with your bank and card accounts connected and syncing
  • A Slack workspace, and the channel or direct message where you want the daily question posted
  • A dollar threshold for what is worth asking about, set to $250 by default
  • Someone who can answer category questions, usually the founder or whoever owns the spend

How can I customize it?

  • Change the timing: 4pm on weekdays keeps it fresh, but a morning run works just as well if you prefer to clear questions with your coffee
  • Raise or lower the $250 threshold, or drop it entirely in the first month while your categorization rules are still learning
  • Send it to a private finance channel, a shared channel with your bookkeeper, or a direct message to just the founder
  • Widen or narrow the 14 day lookback window depending on how quickly your accounts sync

FAQs

Why not just deal with this at month end?
Because by then the context is gone. A $900 charge from three weeks ago is a puzzle, but the same charge this afternoon is something you still remember signing up for. Asking while the spend is fresh means you answer from memory instead of digging through email.
Will it pester me about every small purchase?
No. It only asks about transactions above the threshold you set, which starts at $250. Anything smaller is left for your bookkeeper to handle in the normal course of the close.
What if I do not reply to a question one day?
Nothing breaks. The item stays open in your accounting workspace, and because the workflow checks what is already open before it writes anything new, you will not get the same question repeated the next afternoon.
Do I have to reply in a particular format?
No. The message numbers each transaction so you can answer in one short reply, something like "1 is software, 2 is travel". It is written to be answerable on a phone in under a minute.
What happens on a day when everything is categorized?
You hear nothing. The workflow stays silent when there is nothing above your threshold that needs a decision, so a message in your channel always means something genuinely needs you.
Does this change my books on its own?
No. It proposes categories and asks questions, but the actual categorization stays with you and your bookkeeper. Think of it as a well prepared question, not an automatic edit.

Related templates

Build a credential rotation checklist when someone leaves

When someone leaves, we check which shared passwords they used in their final months and post a ranked rotation list to your security channel.

1Password
Rippling
Slack Bot
+1
Agentic Task
Weekly Amazon S3 bucket security audit posted to Slack

Every Monday, check every S3 bucket for public exposure, missing encryption and weak backup settings, then get the risks ranked in Slack.

Amazon S3
Slack Bot
Google Sheets
Agentic Task
Log Agorapulse social conversations to HubSpot contacts

Twice every weekday, the conversations from your social inbox land on the right HubSpot contact timelines, with a Slack recap for sales.

Agorapulse
HubSpot
Slack Bot
Agentic Task
Clean up HubSpot contacts from your Amazon SES suppression list

Every morning, find the addresses that hard bounced or filed a spam complaint, update the matching HubSpot contacts, and post a short Slack recap.

Amazon SES
HubSpot
Slack Bot
Agentic Task
Draft polite follow-ups for emails that never got a reply

Every weekday at 4pm, spot the threads that went quiet, stage a ready-to-send nudge in your mailbox, and get a ranked Slack recap.

Aurinko
Google Sheets
Slack Bot
Agentic Task
Replay failed SQS messages when a bug fix is merged

When you merge a fix in GitHub, this agent checks the matching dead-letter queue, replays the failed messages, and reports back on the pull request and in Slack.

Amazon SQS
GitHub
Slack Bot
Agentic Task

Stop meeting your uncategorized transactions for the first time at month end.

Get one Slack message each afternoon with the few charges that actually need your memory, and answer them all in a single reply.