Shopify
Shopify Finance Sync Agent
The LinkyFlow Shopify Finance Sync Agent keeps a normalised copy of one Shopify store's finance data: orders, transactions, refunds, Shopify Payments payouts and balance transactions, and disputes. It reads the history once, then what changed every hour, and keeps one row per item, with gross, tax, fee and net apart, in the currency the source states them in. It is read-only: it never changes anything in Shopify.
Sign in or create your LinkyFlow account, then set this agent up.
How the workflow works
What this agent does
Reads
- The whole history once, through Shopify's bulk operations where the read allows it
- Then what changed, every hour, from where it stopped
- A source it may not read is reported and does not stop the others
Keeps
- One row per item, however often it is read
- Gross, tax, fee, net and currency apart
- A column the source does not state stays empty
Ties together
- The order, payout, transaction, refund and dispute ids of each row
- The payment processor's reference of a transaction
- Where and when each row was read
Examples
What the agent returns in real situations
1. A movement on the balance
SYNCED
- Gross
- 120.00 EUR
- Fee
- 3.50 EUR
- Net
- 116.50 EUR
One row, tied to its order and its payout. Read again unchanged, it stays one row.
2. A scope the store did not grant
NOT_GRANTED
- Source
- Shopify Payments payouts
- Scope
- read_shopify_payments_payouts
That source is reported and asked again once the connection's scopes are synced. The others go on.
3. A store without Shopify Payments
NOT_ON_SHOPIFY_PAYMENTS
- Source
- Shopify Payments payouts
- Rows
- 0
The run says the store has no such rows, rather than leaving an empty list to explain itself.
Every possible result
| Result | What it means |
|---|---|
| SYNCED | The source was read to the end of its window. Its rows are up to date as of this run. |
| IN_PROGRESS | The source is not finished, and nothing is wrong: Shopify is still preparing a bulk read, or the run reached its time budget. The next run carries on where this one stopped. |
| THROTTLED | Shopify or the plan's quota said not now. The source keeps its place and is read again by a later run. |
| DEFERRED | The source was not asked in this run: its last read failed, and it is tried again after a growing delay. |
| NOT_GRANTED | The connection lacks the Shopify scope for this source. It is asked again once the connection's scopes are synced. |
| NOT_ON_SHOPIFY_PAYMENTS | The store has no Shopify Payments account, so it has no such rows. |
| READ_FAILED | The read failed. It is retried after a growing delay, and the rows already read stand. |
What you can do with the results
From result to action
Open in Excel
Review the current finance rows, the runs and the detail of a past run in a live workbook.
Run again now
Start a run on demand, after granting a scope for instance.
Ask an assistant
Ask ChatGPT or Claude where each source stands, or to list what a run found.
Read-only
This agent changes nothing at Shopify: it has no write of any kind. It stores what the store states and computes no amount. It holds no document: Shopify publishes no billing invoice as a PDF, and none is invented.
Capabilities
- Read-only
- Runs every hour
- Runs on demand
- Incremental: re-reads only what changed
- Live Excel workbook views
- ChatGPT and Claude, via MCP
What is the Shopify Finance Sync Agent?
It keeps one Shopify store's finance data as rows you can read in a sheet: one row per order, transaction, refund, Shopify Payments payout, balance transaction and dispute, with the money apart and the ids that tie each row to the others.
What it reads
The first run reads each source's whole history: through Shopify's bulk operations for orders, transactions,
refunds and disputes, by pages for the payouts and the balance transactions. How far back orders go depends on what
Shopify serves the connection: 60 days without the read_all_orders scope. Every run after that reads what changed
since the last one, with a small overlap, so an update that lands late is not missed.
What it does not do
It writes nothing at Shopify, and it computes no amount. It decides nothing about your sales: that is the work of a reconciliation. It holds no PDF, because Shopify publishes none for its billing invoices.
Frequently asked questions
Does it reconcile my sales?
No. It keeps the rows a reconciliation needs, with the amounts apart and the ids that tie them together. It decides nothing, and it opens no case.
Why is a fee or a net empty on some rows?
Because that source does not state it. A balance transaction states amount, fee and net; an order states its total and its tax; a payout states gross and net. An empty column means Shopify did not say, never zero.
Which currency are the amounts in?
The one the source states. On an order, a transaction and a refund, what the buyer was charged, with the store's own currency beside it when it differs. On a Shopify Payments movement, the currency of the balance. Nothing is converted.
How often does it run?
Once per hour, and on demand. A payout's status, the payout a movement joins and a dispute's outcome change with no date to filter on, so those are read again once a day.
How long does the first run take?
On a small store, minutes. On a large one, several hours: Shopify prepares each bulk read in its own time, one at a time per store, and the agent looks again at the next run. In the meantime a bulk export you start on the same store waits for it, and the reverse.
Does it hold invoices or PDFs?
No. Shopify publishes no billing invoice as a document, so the agent holds none and invents none.
How long are the rows kept?
A row not changed for 180 days expires. The detail of each run is kept for 30 days.
I am a Shopify Partner. Does it read my earnings?
With a Shopify Partner connection, yes: your transactions, and the events that state money, as rows of the same shape. It is optional, and the store's rows do not depend on it.
Related agents
Launch this agent
Add it to your LinkyFlow account in a few steps. It starts running as soon as its setup is complete.