Connect Square to sync your customers, appointments, and purchase activity into AlpacaRelay.
Square works in the opposite direction to an ESP integration. Rather than pushing a design out, AlpacaRelay pulls your business data in — customers, orders, payments, refunds, and appointments — so you can see your business at a glance and email the people in it.
Square doesn’t send your emails and doesn’t receive your designs. If you’re looking to push a finished design into a sending platform, see the integrations overview.
Revenue, orders, refunds, appointments, and customer counts, read from your synced Square data.
Contacts to email
Import your Square customers as AlpacaRelay contacts, then segment and send to them.
AlpacaRelay keeps its own copy of your Square data rather than calling Square each time you open a page. That’s what makes the dashboard fast and keeps it working when Square is briefly unavailable.
Square Appointments activated, if you want appointment data. It’s a separate product in your Square dashboard; without it, everything else still syncs.
Go to Settings → Connected apps, then click Connect app and choose Square.
2
Sign in to Square
Square’s authorization page opens. Sign in as the seller whose data you want to sync.
3
Accept every requested permission
Approve all of them. AlpacaRelay requests read-only access — it never modifies anything in your Square account, and never charges or refunds.
Declining any permission leaves the connection in a state that can’t sync. Square grants permissions once, at the moment you authorize, so a partial approval can only be fixed by reconnecting and accepting everything.
4
Wait for the first sync
Connecting automatically starts a 12-month backfill of your history. Larger accounts take longer — the connection shows Syncing your Square data… until it finishes.
Square reports more states than a simple connected/disconnected, because the fixes differ:
State
What it means
What to do
Connected
Syncing normally
Nothing
Syncing your Square data…
First sync, or a sync in progress
Wait — the dashboard fills in as it goes
Authorization is no longer valid
Access was revoked or expired
Reconnect
Missing permissions
You connected but declined something
Reconnect and accept all permissions
The last sync failed
A transient failure
Nothing — it retries automatically
Automatic synchronization has stopped
Someone disconnected it
Connect again
If we add a new Square permission in future, you’ll be asked to reconnect. Square can’t add a permission to an authorization that already exists, so this is unavoidable — we batch permission changes to keep it rare.
Business isn’t in the sidebar yet. Reach it by adding ?section=business to your workspace URL — for example app.alpacarelay.com/app/your-workspace?section=business.
Six tiles summarize the selected date range: Gross revenue, Net revenue, Refunds, Orders, Appointments, and Customers. Below them, tabs list the underlying records: Payments, Orders, Appointments, Refunds, and Customers.A few things worth knowing before you read a number as gospel:
Tiles count completed activity only
An open order, or a payment that’s authorized but not captured, isn’t revenue yet and isn’t counted. This is usually why a tile reads lower than your Square dashboard for the same day.
Processing fees appear only once a payment settles
Square doesn’t report the fee until then. Rather than guess at it, AlpacaRelay tells you fees are still pending — so Net revenue on very recent payments is incomplete rather than wrong.
The date range applies to some tabs, not all
Payments, Orders, and Refunds are filtered by the selected range, which defaults to the last 30 days. Customers isn’t filtered — you see everyone synced.
Appointments shows upcoming bookings only
Past appointments aren’t browsable yet. A business with no future bookings sees an empty tab even when it has history.
Multi-location businesses are fully covered
Every location is synced and its records carry the location they belong to. Revenue figures cover all of them, not just your main location.
Click Sync now in the Business section to pull recent changes. That catches anything created or updated in roughly the last four days — deliberately wider than it sounds, because Square can take up to 72 hours to receive orders taken on a point-of-sale terminal that was offline.
There’s no scheduled sync yet. After the initial backfill, your data stays as it is until someone clicks Sync now. If a dashboard number looks stale, that’s the first thing to check.
The 12-month backfill runs only when you first connect. To re-run a full history sync, disconnect and reconnect.
This is what turns Square data into email you can actually send.
1
Go to Contacts
Open Audience → Contacts in the sidebar.
2
Import from Square
Choose Square as the import source. Your customers are read live from Square, so you don’t need to sync first.
3
Review the result
You’ll see how many customers were scanned, how many became contacts, and how many were skipped.
Imports bring across email address, first name, and last name. Up to 10,000 customers are imported at a time.Customers are skipped when they have no email address, or an address that isn’t valid — Square accepts customer records without one, but there’s nothing to send to. Skipped records are counted so the numbers reconcile.
Check consent before you send. Square only records whether someone has unsubscribed — it has no positive opt-in signal — and imported contacts arrive with consent marked unknown rather than opted-in. Unknown is not consent. If you have people in Square who unsubscribed there, review your contacts before sending a marketing campaign to a freshly imported list.
Once imported, Square customers behave like any other contact: build a segment from them, and send.
Appointment data needs Square Appointments switched on in your Square dashboard. It’s a separate Square product, not a permission.If it isn’t active, Square refuses appointment requests and AlpacaRelay records a warning against that one data type — the sync still completes and everything else still syncs. You’ll see a note above the Appointments tab explaining it.
This case looks identical to an expired authorization from Square’s side. If you see a warning about appointments specifically while payments and customers sync fine, the fix is in your Square dashboard, not in reconnecting.
If you’ve been testing with a Square sandbox seller, none of that data exists in your real Square account. They’re entirely separate systems with separate merchants and separate records — connecting production gives you a fresh backfill of your real history.
Synced customer records include personal data: email addresses, phone numbers, postal addresses, birthdays, and any notes on the customer in Square. Treat the Business section accordingly, and remember that importing customers as contacts copies their email addresses into AlpacaRelay.AlpacaRelay never stores your Square access tokens. Authorization is held by our integration provider, and access is read-only throughout.
The first sync walks 12 months of history and takes time on a busy account. The connection shows a syncing state while it runs.
The dashboard is still empty later
Check the date range first — Payments, Orders, and Refunds default to the last 30 days, and a quiet month looks like a broken integration. Then check the Customers tab, which isn’t date-filtered: if customers are there, syncing works and the range is the issue.
Numbers are lower than my Square dashboard
Tiles count completed activity only, and processing fees on unsettled payments are still pending. Both make recent figures conservative rather than wrong.
Appointments is empty but I take bookings
Either Square Appointments isn’t active, or you have no upcoming appointments — the tab is forward-looking and doesn’t show past bookings.
I'm asked to reconnect repeatedly
A missing-permission state can’t be cleared by reconnecting alone. Reconnect and make sure you accept every requested permission on Square’s page.
Data hasn't changed in days
Expected — there’s no scheduled sync yet. Click Sync now.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"AlpacaRelay","colors":{"primary":"#F76D34","light":"#F99D86","dark":"#D9531F"},"logo":{"light":"https://mintcdn.com/alpacarelay-2b28e4cc/7eFkRELY_99-ZD1V/logo/light.svg?fit=max\u0026auto=format\u0026n=7eFkRELY_99-ZD1V\u0026q=85\u0026s=cd7852dd437352aeb9535328a42b061d","dark":"https://mintcdn.com/alpacarelay-2b28e4cc/7eFkRELY_99-ZD1V/logo/dark.svg?fit=max\u0026auto=format\u0026n=7eFkRELY_99-ZD1V\u0026q=85\u0026s=b28adcee770cc4ddb70393ed1f86a7c9","href":"https://alpacarelay.com"},"favicon":"https://mintcdn.com/alpacarelay-2b28e4cc/pwo-LazOMElnlpVT/favicon.svg?fit=max\u0026auto=format\u0026n=pwo-LazOMElnlpVT\u0026q=85\u0026s=00ffcb7e1cfbdb449cb4c4928733e543","navbar":{"links":[{"href":"https://app.alpacarelay.com/auth/login","label":"Log in"}],"primary":{"type":"button","label":"Get started free","href":"https://app.alpacarelay.com/auth/signup"}},"footer":{"socials":{"x":"https://x.com/AlpacaRelay","instagram":"https://www.instagram.com/alpaca_relay","reddit":"https://www.reddit.com/user/Alpaca_Relay","discord":"https://discord.gg/fq6mtPaQNE","facebook":"https://www.facebook.com/profile.php?id=61585314470700"}},"fonts":{"heading":{"family":"Geist"},"body":{"family":"Geist"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"alpacarelay-2b28e4cc","hasAudioNarration":false,"actualSubdomain":"alpacarelay-2b28e4cc","customDomains":["docs.alpacarelay.com"],"gitSource":{"type":"github","owner":"alpacarelay","repo":"alpacarelay-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6aa11ab38339cfa7b30806b8","collectionId":"a675f4f8-5ef4-4900-92d8-a8500a166c39","liveDeploymentHistoryId":"6aa11ab38339cfa7b30806b8","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6aa11ab38339cfa7b30806b8","clientVersion":"0.0.3964","searchFilterCounts":[{"language":"default","tag":"Integrations","count":6},{"language":"default","tag":"Send through your ESP","count":4},{"language":"default","tag":"Documentation","count":3},{"language":"default","tag":"Get started","count":3},{"language":"default","tag":"Booking Platform","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":"#topbar-cta-button a span.bg-primary-dark{background-color:#171717!important}#topbar-cta-button a:hover span.bg-primary-dark{background-color:#2a2a2a!important;opacity:1!important}.dark #topbar-cta-button a span.bg-primary-dark{background-color:#fff!important}.dark #topbar-cta-button a:hover span.bg-primary-dark{background-color:#e5e5e5!important}.dark #topbar-cta-button a span:not(.bg-primary-dark),.dark #topbar-cta-button a svg{color:#171717!important}.navbar-link a{color:#171717!important}.dark .navbar-link a{color:#fff!important}"}],"page":{"pagePath":"integrations/square","slug":"/integrations/square","pageMetadata":{"title":"Square","description":"Connect Square to sync your customers, appointments, and purchase activity into AlpacaRelay.","icon":"/images/providers/square.svg","href":"/integrations/square"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Connect Square to sync your customers, appointments, and purchase activity into AlpacaRelay.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Card,Columns,Heading,Info,Note,Step,Steps,Table,Tip,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Card)_missingMdxReference(`Card`,true);if(!Columns)_missingMdxReference(`Columns`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Square works in the opposite direction to an ESP integration. Rather than pushing a design out, AlpacaRelay pulls your business data `,_jsx(_components.strong,{children:`in`}),` — customers, orders, payments, refunds, and appointments — so you can see your business at a glance and email the people in it.`]}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`Square doesn’t send your emails and doesn’t receive your designs. If you’re looking to push a finished design into a sending platform, see the `,_jsx(_components.a,{href:`/integrations/overview`,children:`integrations overview`}),`.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`what-you-get`,children:`What you get`}),`\n`,_jsxs(Columns,{cols:2,children:[_jsx(Card,{title:`A business dashboard`,icon:`chart-line`,children:_jsx(_components.p,{children:`Revenue, orders, refunds, appointments, and customer counts, read from your synced Square data.`})}),_jsx(Card,{title:`Contacts to email`,icon:`users`,children:_jsx(_components.p,{children:`Import your Square customers as AlpacaRelay contacts, then segment and send to them.`})})]}),`\n`,_jsx(_components.p,{children:`AlpacaRelay keeps its own copy of your Square data rather than calling Square each time you open a page. That’s what makes the dashboard fast and keeps it working when Square is briefly unavailable.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Synced from Square`}),_jsx(_components.th,{children:`What it’s used for`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Customers`}),_jsx(_components.td,{children:`Contact import, segmentation, personalization`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Orders`}),_jsx(_components.td,{children:`Purchase history, top products and services`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Payments`}),_jsx(_components.td,{children:`Gross and net revenue, processing fees`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Refunds`}),_jsx(_components.td,{children:`Net revenue, refund reporting`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Appointments`}),_jsx(_components.td,{children:`Upcoming bookings — requires Square Appointments`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`what-you-need`,children:`What you need`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`A Square account with a seller you can authorize.`}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Square Appointments activated`}),`, if you want appointment data. It’s a separate product in your Square dashboard; without it, everything else still syncs.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`connect-square`,children:`Connect Square`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Open Connected apps`,children:_jsxs(_components.p,{children:[`Go to `,_jsx(_components.strong,{children:`Settings`}),` → `,_jsx(_components.strong,{children:`Connected apps`}),`, then click `,_jsx(_components.strong,{children:`Connect app`}),` and choose `,_jsx(_components.strong,{children:`Square`}),`.`]})}),_jsx(Step,{title:`Sign in to Square`,children:_jsx(_components.p,{children:`Square’s authorization page opens. Sign in as the seller whose data you want to sync.`})}),_jsxs(Step,{title:`Accept every requested permission`,children:[_jsx(_components.p,{children:`Approve all of them. AlpacaRelay requests read-only access — it never modifies anything in your Square account, and never charges or refunds.`}),_jsx(Warning,{children:_jsx(_components.p,{children:`Declining any permission leaves the connection in a state that can’t sync. Square grants permissions once, at the moment you authorize, so a partial approval can only be fixed by reconnecting and accepting everything.`})})]}),_jsx(Step,{title:`Wait for the first sync`,children:_jsxs(_components.p,{children:[`Connecting automatically starts a `,_jsx(_components.strong,{children:`12-month backfill`}),` of your history. Larger accounts take longer — the connection shows `,_jsx(_components.strong,{children:`Syncing your Square data…`}),` until it finishes.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`connection-states`,children:`Connection states`}),`\n`,_jsx(_components.p,{children:`Square reports more states than a simple connected/disconnected, because the fixes differ:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`State`}),_jsx(_components.th,{children:`What it means`}),_jsx(_components.th,{children:`What to do`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Connected`})}),_jsx(_components.td,{children:`Syncing normally`}),_jsx(_components.td,{children:`Nothing`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Syncing your Square data…`})}),_jsx(_components.td,{children:`First sync, or a sync in progress`}),_jsx(_components.td,{children:`Wait — the dashboard fills in as it goes`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Authorization is no longer valid`})}),_jsx(_components.td,{children:`Access was revoked or expired`}),_jsx(_components.td,{children:_jsx(_components.strong,{children:`Reconnect`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Missing permissions`})}),_jsx(_components.td,{children:`You connected but declined something`}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Reconnect`}),` and accept all permissions`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`The last sync failed`})}),_jsx(_components.td,{children:`A transient failure`}),_jsx(_components.td,{children:`Nothing — it retries automatically`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Automatic synchronization has stopped`})}),_jsx(_components.td,{children:`Someone disconnected it`}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Connect`}),` again`]})]})]})]}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`If we add a new Square permission in future, you’ll be asked to reconnect. Square can’t add a permission to an authorization that already exists, so this is unavoidable — we batch permission changes to keep it rare.`})}),`\n`,_jsx(Heading,{level:`2`,id:`view-your-business-data`,children:`View your business data`}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`Business`}),` section shows what’s been synced.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Business isn’t in the sidebar yet. Reach it by adding `,_jsx(_components.code,{children:`?section=business`}),` to your workspace URL — for example `,_jsx(_components.code,{children:`app.alpacarelay.com/app/your-workspace?section=business`}),`.`]})}),`\n`,_jsxs(_components.p,{children:[`Six tiles summarize the selected date range: `,_jsx(_components.strong,{children:`Gross revenue`}),`, `,_jsx(_components.strong,{children:`Net revenue`}),`, `,_jsx(_components.strong,{children:`Refunds`}),`, `,_jsx(_components.strong,{children:`Orders`}),`, `,_jsx(_components.strong,{children:`Appointments`}),`, and `,_jsx(_components.strong,{children:`Customers`}),`. Below them, tabs list the underlying records: `,_jsx(_components.strong,{children:`Payments`}),`, `,_jsx(_components.strong,{children:`Orders`}),`, `,_jsx(_components.strong,{children:`Appointments`}),`, `,_jsx(_components.strong,{children:`Refunds`}),`, and `,_jsx(_components.strong,{children:`Customers`}),`.`]}),`\n`,_jsx(_components.p,{children:`A few things worth knowing before you read a number as gospel:`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Tiles count completed activity only`,id:`tiles-count-completed-activity-only`,children:_jsx(_components.p,{children:`An open order, or a payment that’s authorized but not captured, isn’t revenue yet and isn’t counted. This is usually why a tile reads lower than your Square dashboard for the same day.`})}),_jsx(Accordion,{title:`Processing fees appear only once a payment settles`,id:`processing-fees-appear-only-once-a-payment-settles`,children:_jsxs(_components.p,{children:[`Square doesn’t report the fee until then. Rather than guess at it, AlpacaRelay tells you fees are still pending — so `,_jsx(_components.strong,{children:`Net revenue`}),` on very recent payments is incomplete rather than wrong.`]})}),_jsx(Accordion,{title:`The date range applies to some tabs, not all`,id:`the-date-range-applies-to-some-tabs-not-all`,children:_jsx(_components.p,{children:`Payments, Orders, and Refunds are filtered by the selected range, which defaults to the last 30 days. Customers isn’t filtered — you see everyone synced.`})}),_jsx(Accordion,{title:`Appointments shows upcoming bookings only`,id:`appointments-shows-upcoming-bookings-only`,children:_jsx(_components.p,{children:`Past appointments aren’t browsable yet. A business with no future bookings sees an empty tab even when it has history.`})}),_jsx(Accordion,{title:`Multi-location businesses are fully covered`,id:`multi-location-businesses-are-fully-covered`,children:_jsx(_components.p,{children:`Every location is synced and its records carry the location they belong to. Revenue figures cover all of them, not just your main location.`})})]}),`\n`,_jsx(Heading,{level:`2`,id:`keep-your-data-fresh`,children:`Keep your data fresh`}),`\n`,_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Sync now`}),` in the Business section to pull recent changes. That catches anything created or updated in roughly the `,_jsx(_components.strong,{children:`last four days`}),` — deliberately wider than it sounds, because Square can take up to 72 hours to receive orders taken on a point-of-sale terminal that was offline.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`There’s no scheduled sync yet.`}),` After the initial backfill, your data stays as it is until someone clicks `,_jsx(_components.strong,{children:`Sync now`}),`. If a dashboard number looks stale, that’s the first thing to check.`]})}),`\n`,_jsx(_components.p,{children:`The 12-month backfill runs only when you first connect. To re-run a full history sync, disconnect and reconnect.`}),`\n`,_jsx(Heading,{level:`2`,id:`import-square-customers-as-contacts`,children:`Import Square customers as contacts`}),`\n`,_jsx(_components.p,{children:`This is what turns Square data into email you can actually send.`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Go to Contacts`,children:_jsxs(_components.p,{children:[`Open `,_jsx(_components.strong,{children:`Audience`}),` → `,_jsx(_components.strong,{children:`Contacts`}),` in the sidebar.`]})}),_jsx(Step,{title:`Import from Square`,children:_jsx(_components.p,{children:`Choose Square as the import source. Your customers are read live from Square, so you don’t need to sync first.`})}),_jsx(Step,{title:`Review the result`,children:_jsx(_components.p,{children:`You’ll see how many customers were scanned, how many became contacts, and how many were skipped.`})})]}),`\n`,_jsxs(_components.p,{children:[`Imports bring across `,_jsx(_components.strong,{children:`email address, first name, and last name`}),`. Up to 10,000 customers are imported at a time.`]}),`\n`,_jsxs(_components.p,{children:[`Customers are skipped when they have `,_jsx(_components.strong,{children:`no email address`}),`, or an address that isn’t valid — Square accepts customer records without one, but there’s nothing to send to. Skipped records are counted so the numbers reconcile.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Check consent before you send.`}),` Square only records whether someone has `,_jsx(_components.em,{children:`unsubscribed`}),` — it has no positive opt-in signal — and imported contacts arrive with consent marked unknown rather than opted-in. Unknown is not consent. If you have people in Square who unsubscribed there, review your contacts before sending a marketing campaign to a freshly imported list.`]})}),`\n`,_jsx(_components.p,{children:`Once imported, Square customers behave like any other contact: build a segment from them, and send.`}),`\n`,_jsx(Heading,{level:`2`,id:`appointments-and-square-appointments`,children:`Appointments and Square Appointments`}),`\n`,_jsxs(_components.p,{children:[`Appointment data needs `,_jsx(_components.strong,{children:`Square Appointments`}),` switched on in your Square dashboard. It’s a separate Square product, not a permission.`]}),`\n`,_jsx(_components.p,{children:`If it isn’t active, Square refuses appointment requests and AlpacaRelay records a warning against that one data type — the sync still completes and everything else still syncs. You’ll see a note above the Appointments tab explaining it.`}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`This case looks identical to an expired authorization from Square’s side. If you see a warning about appointments specifically while payments and customers sync fine, the fix is in your Square dashboard, not in reconnecting.`})}),`\n`,_jsx(Heading,{level:`2`,id:`sandbox-and-production-are-separate`,children:`Sandbox and production are separate`}),`\n`,_jsx(_components.p,{children:`If you’ve been testing with a Square sandbox seller, none of that data exists in your real Square account. They’re entirely separate systems with separate merchants and separate records — connecting production gives you a fresh backfill of your real history.`}),`\n`,_jsx(Heading,{level:`2`,id:`privacy`,children:`Privacy`}),`\n`,_jsx(_components.p,{children:`Synced customer records include personal data: email addresses, phone numbers, postal addresses, birthdays, and any notes on the customer in Square. Treat the Business section accordingly, and remember that importing customers as contacts copies their email addresses into AlpacaRelay.`}),`\n`,_jsx(_components.p,{children:`AlpacaRelay never stores your Square access tokens. Authorization is held by our integration provider, and access is read-only throughout.`}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting`,children:`Troubleshooting`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`The dashboard is empty right after connecting`,id:`the-dashboard-is-empty-right-after-connecting`,children:_jsx(_components.p,{children:`The first sync walks 12 months of history and takes time on a busy account. The connection shows a syncing state while it runs.`})}),_jsx(Accordion,{title:`The dashboard is still empty later`,id:`the-dashboard-is-still-empty-later`,children:_jsx(_components.p,{children:`Check the date range first — Payments, Orders, and Refunds default to the last 30 days, and a quiet month looks like a broken integration. Then check the Customers tab, which isn’t date-filtered: if customers are there, syncing works and the range is the issue.`})}),_jsx(Accordion,{title:`Numbers are lower than my Square dashboard`,id:`numbers-are-lower-than-my-square-dashboard`,children:_jsx(_components.p,{children:`Tiles count completed activity only, and processing fees on unsettled payments are still pending. Both make recent figures conservative rather than wrong.`})}),_jsx(Accordion,{title:`Appointments is empty but I take bookings`,id:`appointments-is-empty-but-i-take-bookings`,children:_jsx(_components.p,{children:`Either Square Appointments isn’t active, or you have no upcoming appointments — the tab is forward-looking and doesn’t show past bookings.`})}),_jsx(Accordion,{title:`I'm asked to reconnect repeatedly`,id:`i-m-asked-to-reconnect-repeatedly`,children:_jsx(_components.p,{children:`A missing-permission state can’t be cleared by reconnecting alone. Reconnect and make sure you accept every requested permission on Square’s page.`})}),_jsx(Accordion,{title:`Data hasn't changed in days`,id:`data-hasnt-changed-in-days`,children:_jsxs(_components.p,{children:[`Expected — there’s no scheduled sync yet. Click `,_jsx(_components.strong,{children:`Sync now`}),`.`]})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Square","description":"Connect Square to sync your customers, appointments, and purchase activity into AlpacaRelay.","icon":"/images/providers/square.svg","href":"/integrations/square"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"What you get","slug":"what-you-get","depth":2,"children":[]},{"title":"What you need","slug":"what-you-need","depth":2,"children":[]},{"title":"Connect Square","slug":"connect-square","depth":2,"children":[]},{"title":"Connection states","slug":"connection-states","depth":2,"children":[]},{"title":"View your business data","slug":"view-your-business-data","depth":2,"children":[]},{"title":"Keep your data fresh","slug":"keep-your-data-fresh","depth":2,"children":[]},{"title":"Import Square customers as contacts","slug":"import-square-customers-as-contacts","depth":2,"children":[]},{"title":"Appointments and Square Appointments","slug":"appointments-and-square-appointments","depth":2,"children":[]},{"title":"Sandbox and production are separate","slug":"sandbox-and-production-are-separate","depth":2,"children":[]},{"title":"Privacy","slug":"privacy","depth":2,"children":[]},{"title":"Troubleshooting","slug":"troubleshooting","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"alpacarelay-2b28e4cc","siteName":"AlpacaRelay","title":"Square - AlpacaRelay","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-09T07:10:49.119Z","originalFileLocation":"integrations/square.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Connect Square to sync your customers, appointments, and purchase activity into AlpacaRelay.\">\u003cmeta data-mint-head name=\"application-name\" content=\"AlpacaRelay\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/alpacarelay-2b28e4cc/FHKDFeWX1emjeB2j/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/alpacarelay-2b28e4cc/FHKDFeWX1emjeB2j/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/alpacarelay-2b28e4cc/FHKDFeWX1emjeB2j/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/alpacarelay-2b28e4cc/FHKDFeWX1emjeB2j/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/alpacarelay-2b28e4cc/FHKDFeWX1emjeB2j/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/alpacarelay-2b28e4cc/FHKDFeWX1emjeB2j/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/alpacarelay-2b28e4cc/FHKDFeWX1emjeB2j/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/alpacarelay-2b28e4cc/FHKDFeWX1emjeB2j/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/alpacarelay-2b28e4cc/FHKDFeWX1emjeB2j/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Square - AlpacaRelay\">\u003cmeta data-mint-head property=\"og:description\" content=\"Connect Square to sync your customers, appointments, and purchase activity into AlpacaRelay.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"AlpacaRelay\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.alpacarelay.com/integrations/square\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://alpacarelay-2b28e4cc.mintlify.app/_mintlify/api/og/v2?division=Booking+Platform\u0026amp;title=Square\u0026amp;description=Connect+Square+to+sync+your+customers%2C+appointments%2C+and+purchase+activity+into+AlpacaRelay.\u0026amp;theme=b6e30f86ed4e152908699506\u0026amp;signature=c1f4af7270d2cb2fb11b0f7c5f2e3af4202a35c3603fd1e478031416e4e79a7c\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Square - AlpacaRelay\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Connect Square to sync your customers, appointments, and purchase activity into AlpacaRelay.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://alpacarelay-2b28e4cc.mintlify.app/_mintlify/api/og/v2?division=Booking+Platform\u0026amp;title=Square\u0026amp;description=Connect+Square+to+sync+your+customers%2C+appointments%2C+and+purchase+activity+into+AlpacaRelay.\u0026amp;theme=b6e30f86ed4e152908699506\u0026amp;signature=c1f4af7270d2cb2fb11b0f7c5f2e3af4202a35c3603fd1e478031416e4e79a7c\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/alpacarelay-2b28e4cc/FHKDFeWX1emjeB2j/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"AlpacaRelay\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#F76D34\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.alpacarelay.com/integrations/square\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/integrations/square.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.alpacarelay.com/#organization\",\"name\":\"AlpacaRelay\",\"url\":\"https://docs.alpacarelay.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/alpacarelay-2b28e4cc/7eFkRELY_99-ZD1V/logo/light.svg?fit=max\u0026auto=format\u0026n=7eFkRELY_99-ZD1V\u0026q=85\u0026s=cd7852dd437352aeb9535328a42b061d\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.alpacarelay.com#website\",\"name\":\"AlpacaRelay\",\"url\":\"https://docs.alpacarelay.com\",\"publisher\":{\"@id\":\"https://docs.alpacarelay.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.alpacarelay.com/integrations/square#webpage\",\"url\":\"https://docs.alpacarelay.com/integrations/square\",\"name\":\"Square\",\"description\":\"Connect Square to sync your customers, appointments, and purchase activity into AlpacaRelay.\",\"dateModified\":\"2026-09-09T07:10:49.119Z\",\"isPartOf\":{\"@id\":\"https://docs.alpacarelay.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.alpacarelay.com/integrations/square#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.alpacarelay.com/integrations/square#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"AlpacaRelay\",\"item\":\"https://docs.alpacarelay.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Square\",\"item\":\"https://docs.alpacarelay.com/integrations/square\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.alpacarelay.com/integrations/square#article\",\"headline\":\"Square\",\"name\":\"Square\",\"description\":\"Connect Square to sync your customers, appointments, and purchase activity into AlpacaRelay.\",\"url\":\"https://docs.alpacarelay.com/integrations/square\",\"mainEntityOfPage\":{\"@id\":\"https://docs.alpacarelay.com/integrations/square#webpage\"},\"dateModified\":\"2026-09-09T07:10:49.119Z\",\"publisher\":{\"@id\":\"https://docs.alpacarelay.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.alpacarelay.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"AlpacaRelay\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"AlpacaRelay","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":""}]},{"tab":"Integrations","pages":[{"title":"Integrations overview","sidebarTitle":"Overview","icon":"plug","href":"/integrations/overview"},{"group":"Send through your ESP","pages":[{"title":"Mailchimp","icon":"mailchimp","href":"/integrations/mailchimp"},{"title":"Klaviyo","icon":"https://mintlify.s3.us-west-1.amazonaws.com/alpacarelay-2b28e4cc/images/providers/klaviyo.svg","href":"/integrations/klaviyo"},{"title":"SendGrid","icon":"https://mintlify.s3.us-west-1.amazonaws.com/alpacarelay-2b28e4cc/images/providers/sendgrid.svg","href":"/integrations/sendgrid"},{"title":"Postmark","description":"Connect Postmark with a server API token to import standard templates and push AlpacaRelay designs back as templates.","icon":"https://mintlify.s3.us-west-1.amazonaws.com/alpacarelay-2b28e4cc/images/providers/postmark.svg","href":"/integrations/postmark"}]},{"group":"Booking Platform","pages":[{"title":"Square","icon":"https://mintlify.s3.us-west-1.amazonaws.com/alpacarelay-2b28e4cc/images/providers/square.svg","href":"/integrations/square"}]}]}]},"title":"Square - AlpacaRelay","buildId":"dpl_HcHmUS6i3UwswnTHJUEdcTtwfdTQ","deploymentId":"dpl_HcHmUS6i3UwswnTHJUEdcTtwfdTQ","dynamics":[],"chunks":[]}