Home/Integrations/Square

Square and Google Sheets integration

If you take payments in person on Square, a lot of your business data is sitting in its dashboard. I connect Square to Google Sheets so sales, items and payments land in your sheet on a schedule, and so rows in your sheet can get a Square payment link of their own.

Connect Square to my sheet

What it can do

Common Square jobs I set up. Yours will match how you use Square today.

Daily sales import

Yesterday's payments and orders added to a sales tab each morning, with item, location, tip, tax and fees in their own columns.

Payment links from the sheet

A row for an invoice, deposit or sign-up gets a Square payment link, and the payment is marked against that row once it's made.

Item and category reports

Sales by item, category and location over any date range, using names from your Square catalog.

Payout matching

A tab listing Square payouts and what's inside each one, for matching against your bank deposits.

Customer list sync

Square customer records copied into a sheet you can sort, filter and use for follow-ups.

Online and in-person together

Sales from Square and from other sources, like Stripe or a sign-up sheet, side by side in one report.

How it's built

The script calls Square's REST APIs (Payments, Orders, Catalog, Customers and Payouts) with UrlFetchApp. For your own business, a Square access token from the Square Developer dashboard is stored in the script's properties. If the tool needs to connect to other people's Square accounts, it uses Square's OAuth flow instead.

Square signs its webhooks with a header, and an Apps Script web app can't read request headers, so it can't verify those notifications on its own. I usually skip webhooks and run a time-driven trigger that asks Square for payments or orders updated since the last run, then writes new rows and updates changed ones by their Square ID so nothing is counted twice.

Square's list endpoints return results a page at a time. The script follows the pagination cursor and, for big first imports, works in batches across several runs so it stays under Apps Script's six-minute limit per execution.

Good to know

  • Sales show up on the schedule you choose, such as hourly or overnight, so the sheet isn't a live view of the register.
  • A first import of several years of history can take multiple runs to finish.
  • Square's own fees and plans are unchanged. The integration doesn't replace your Square point of sale.
  • Some reporting details, like certain labor or payroll data, live in parts of Square that I'd need to check are available through the API for your account.

Square questions

Will this change anything in my Square account?

The reporting side only reads data. Creating payment links does add those links in Square, and nothing else is changed unless we've agreed on it.

Can I see sales by location?

Yes. Each payment carries its location, so reports can split by location or combine them.

How far back can it go?

As far back as Square's API returns your history. The first import is usually the slowest; after that, each run only fetches what's new.

Do customers' card numbers come into the sheet?

No. Square only returns details like the card brand and last four digits, and I don't import those unless you need them.

Tell me what your sheet needs to do

A few sentences is enough to start. I'll reply with questions, then a plan and a fixed quote.