# 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.

- Workflow type: code
- Services: Square, QuickBooks Online, Slack Bot
- Categories: Finance, Operations
- Published: 2026-08-10

## What it does

- 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 you'll need

- 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

## Prompt

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.

## How to customize

- 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

## FAQ

### 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.

Use this prompt in General Input: https://www.generalinput.com/prompts/post-yesterdays-square-sales-into-quickbooks-every-night