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.
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
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?
Will it pester me about every small purchase?
What if I do not reply to a question one day?
Do I have to reply in a particular format?
What happens on a day when everything is categorized?
Does this change my books on its own?
Related templates
When someone leaves, we check which shared passwords they used in their final months and post a ranked rotation list to your security channel.
Every Monday, check every S3 bucket for public exposure, missing encryption and weak backup settings, then get the risks ranked in Slack.
Twice every weekday, the conversations from your social inbox land on the right HubSpot contact timelines, with a Slack recap for sales.
Every morning, find the addresses that hard bounced or filed a spam complaint, update the matching HubSpot contacts, and post a short Slack recap.
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.
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.
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.