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.
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?
Will the total in QuickBooks match my bank deposit?
Does this replace my bookkeeper?
What about payments taken while my card reader was offline?
I use Xero, not QuickBooks. Can I still use this?
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 re-keying yesterday's takings.
Let each day's Square sales, fees, and refunds land in QuickBooks before you open up in the morning.