Post yesterday's Square sales into QuickBooks every night

Every day at 2am, yesterday's Square takings are booked in QuickBooks with processing fees split out, so your books match what actually lands in the bank.

Deterministic Code
SquareQuickBooks OnlineSlack BotFinanceOperationsData SyncNotifications & Alerts
PromptCreate

Every day at 2am, post yesterday's Square takings into QuickBooks Online so the books reconcile without any manual data entry. Trigger this on a cron schedule.

Start with the Square List Payments action, filtered to the previous calendar day. Use the full day in the business's local timezone, from 00:00:00 to 23:59:59, not a rolling 24 hour window. If the day returned no payments at all, skip the run entirely and post nothing. Do not create a zero value sales receipt on days the business was closed.

From that list of payments, total four figures for the day: gross sales, processing fees, refunds, and net deposit. Gross sales is the sum of the payment amounts. Processing fees come from the processing_fee amounts on each payment. Refunds come from the refunded_money on each payment. Net deposit is gross sales minus fees minus refunds, and should represent what actually reaches the bank.

Important: Square returns all monetary amounts using its Money object, where the value is in the smallest currency unit. For USD that means cents, so 1000 means $10.00. Convert every amount from cents to dollars before posting anything to QuickBooks or reporting it in Slack. Getting this wrong posts figures inflated by 100x, so do the conversion once, in one place, immediately after totalling.

Record the day's sales total in QuickBooks using the Create Sales Receipt action. Date the receipt to the day being reconciled rather than the day the workflow runs, and label it clearly as the Square daily sales summary for that date so it is easy to find at month end.

Then book the processing fees as a separate expense line using the QuickBooks Create Journal Entry action, debiting the merchant fees expense account and crediting the account the sales receipt was deposited to. Keeping fees on their own line is what makes the net in QuickBooks match the actual bank deposit instead of the headline sales figure.

Finally, confirm the run in Slack using the Slack Bot Send a Message action. Show the date being reconciled plus all four figures: gross sales, processing fees, refunds, and net deposit, formatted as currency. If the run was skipped because there were no payments, either stay silent or send a brief note saying there were no sales to post, rather than reporting zeros as if they were real.

Two accuracy notes worth handling. First, details from offline point of sale orders can take up to 72 hours to appear in Square, so a given day's figures can be slightly incomplete if the business trades offline; mention this caveat in the setup notes. Second, a refund issued yesterday against a payment taken last week will not appear in yesterday's payment list, so if refund accuracy matters, also pull Square List Payment Refunds for the same day window and use that as the refunds figure instead of the per payment refunded_money.

The Square connection needs the PAYMENTS_READ scope. If the seller uses Xero rather than QuickBooks, the same structure applies with the equivalent Xero sales and journal actions.

What does this prompt do?

  • Adds up everything you took through Square the day before: gross sales, refunds, processing fees, and the net amount that actually reaches your bank account.
  • Records the day as a single summary receipt in QuickBooks Online instead of dozens of individual transactions cluttering your ledger.
  • Books Square's processing fees on their own separate line, so the net figure in your books lines up with the deposit on your bank statement.
  • Posts a short confirmation to Slack each morning showing gross, fees, refunds, and net, so you spot a bad day before your bookkeeper does.

What do I need to use this?

  • A Square account with permission to view payments
  • A QuickBooks Online company file
  • A Slack workspace where a bot can post to the channel you choose
  • The QuickBooks accounts you want daily sales and processing fees posted to

How can I customize it?

  • Change the 2am run time, or the Slack channel that receives the daily confirmation
  • Point sales and fees at different QuickBooks accounts, or break the summary out by Square location
  • Only get pinged when something looks unusual, such as refunds above a threshold you set

FAQs

What happens on a day with no sales?
The run is skipped entirely. Nothing gets posted, so you never end up with empty zero value receipts cluttering your books on days you were closed.
Will the total in QuickBooks match my bank deposit?
Yes, that is the whole point of splitting the fees out. Square's processing fees are booked on their own line, so the net figure after fees matches what actually lands in your account rather than the headline sales number.
Does this replace my bookkeeper?
No, it removes the manual typing. Your bookkeeper still reviews and closes the books, but they start from accurate daily numbers instead of re-keying a week of takings by hand.
What about payments taken while my card reader was offline?
Card payments taken offline can take up to 72 hours to appear in Square. Those will be picked up by a later day's run rather than missed, but if you often trade offline it is worth a monthly review to confirm everything landed.
I use Xero, not QuickBooks. Can I still use this?
Yes. The same nightly rollup works with Xero as the accounting system; you would point the sales total and the fee line at your Xero accounts instead.

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 re-keying yesterday's takings.

Let each day's Square sales, fees, and refunds land in QuickBooks before you open up in the morning.