Daily Slack digest of transactions your books cannot categorize

By General Input

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

Integrations

  • Puzzle
  • Slack Bot

Type

Agentic Task

Categories

  • Finance
  • Operations

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.

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