Shopify
WooCommerce
Price Sync Agent
The LinkyFlow Price Sync Agent keeps the list prices of one or more target stores in step with one master store, SKU by SKU, every hour. In Monitor mode it reports every difference and writes nothing; in Auto mode it sets a target's list price to the master's, only when it actually differs, and reads it back to confirm it. It works with Shopify and WooCommerce, in one currency, and never converts a price.
Sign in or create your LinkyFlow account, then set this agent up.
How the workflow works
What this agent does
Master
- Reads the list price of every SKU
- The source of truth — never written
- Target price = master price, same currency
Compare
- Matches items by exact SKU only
- Compares the currency first, then the amount
- Reports missing or ambiguous SKUs
Targets
- Monitor mode: reports the difference
- Auto mode: sets the price, then reads it back
- Guard-rails before every write
Examples
What the agent returns in real situations
1. Already in sync
SYNCED
- Master
- €19.90
- Target
- €19.90
- Action
- No write
Nothing to do: the target already carries the master's list price, in the same currency.
2. Prices differ, in Monitor mode
OUT_OF_SYNC
- Master
- €19.90
- Target
- €17.50
- Action
- No write
Reported, not written. Monitor mode is the dry run: switch the agent to Auto once the differences it reports are the ones you expect.
3. Prices differ, in Auto mode
UPDATED
- Master
- €19.90
- Target
- €17.50 → €19.90
- Action
- Set to €19.90, read back €19.90
Counted as updated only because the price read back is the one written. The change is 13.7 % of the target's price, within the 50 % guard-rail.
4. Target sells in another currency
CURRENCY_MISMATCH
- Master
- €19.90 · EUR
- Target
- £16.90 · GBP
- Action
- No write
Prices are never converted: nothing is compared or written. Reported as a case until both stores price in the same currency.
Every possible result
| Result | What it means |
|---|---|
| SYNCED | The target already carries the master's list price, in the same currency. Nothing to do. |
| OUT_OF_SYNC | The target differs and the agent is in Monitor mode: reported, not written. |
| UPDATED | The price was written, read back, and the price read back is the one that was wanted. |
| WRITE_BLOCKED | A guard-rail refused the write — or the target may not be written at all. The case says which. |
| WRITE_FAILED | The store refused the write, or the agent could not read the item back to confirm it. Nothing is assumed about a change it could not see. |
| WRITE_MISMATCH | The store accepted the write and the price read back afterwards is not the one written — another change landed in between. It is re-evaluated on the next run. |
| SKU_NOT_FOUND | The master SKU exists on no priced item of the target. |
| SKU_AMBIGUOUS | The SKU names more than one item on the master or on the target. It is never guessed. |
| CURRENCY_MISMATCH | The two stores do not price in the same currency, or one of them could not say which. Prices are never converted. |
| INVALID_MASTER_PRICE | The master price cannot be read: the item carries no list price, or not a readable amount in its currency. |
What you can do with the results
From result to action
Review exceptions
See the SKUs that could not be matched, the writes that were blocked or failed and the targets that still differ — with both prices, the currency and the reason.
Open in Excel
Review the current price sync, open exceptions, runs and the detail of a past run in a live workbook.
Run again now
Start a sync on demand after fixing a SKU or changing a price on the master.
Ask an assistant
Ask ChatGPT or Claude which SKUs are out of sync, why a write was blocked — or to switch the agent from Monitor to Auto.
Controlled write behaviour
The only thing this agent can change is the list price of a matched item at a target store — in Auto mode, and only when the price actually differs. The master is read and never written. Every write is a set, never an adjustment: it passes guard-rails first and is read back before it counts as updated. Sale prices, compare-at prices, stock, titles and orders are never touched, and every agent starts in Monitor mode, which writes nothing.
Capabilities
- Writes list prices only
- Runs every hour
- Runs on demand
- Every write read back
- Live Excel workbook views
- ChatGPT and Claude, via MCP
What is the Price Sync Agent?
Selling the same products on a Shopify store and a WooCommerce site means keeping two price lists in step by hand — and the day one of them drifts, a customer pays the wrong price on one channel. The Price Sync Agent takes one store as the truth, keeps the others at its list prices every hour, and tells you about every SKU it could not settle.
You choose a master store and one or more target stores. For every SKU of the master, the agent reads its list price, finds the same SKU on each target, and compares the two in the same currency — then, depending on the mode, reports the difference or sets the target's price and reads it back to confirm it.
The rule is deliberately simple:
target list price = master list price (same currency, never converted)
There is no margin, no rounding rule, no per-channel markup and no exchange rate: this agent replicates one authoritative list price, and that is all it does.
What it is, and what it is not
This is not a pricing engine. The master is the only source of truth. A target never influences the master, and two targets never influence each other. If a target's price is changed by hand, it diverges from the master until the next run — the agent then sets it back to the master's price; it does not carry the change to the master.
If your ERP, your PIM or one of your stores is where prices are actually decided, make that store the master. If no single place holds the truth, this agent is not the right tool yet.
Which price, on which stores?
The agent syncs the list price and nothing else:
- Shopify — the price of each product variant, in the shop's currency. The compare-at price and per-market prices are never read or written.
- WooCommerce — the regular price of simple products and of the variations of variable products, in the store's currency. The sale price is never read or written.
The same provider can be used for the master and a target (two Shopify stores, say), and two targets can be of the same provider. A store cannot be its own target, and the same store cannot be listed twice.
Two agents that write cannot target the same store, and two writers cannot each target the other's master: the second configuration is refused, naming the first. An agent in Monitor mode writes nothing, so any number of them can watch the same stores.
Two modes
| Mode | What happens with a difference | Writes to the stores? |
|---|---|---|
| Monitor | It is reported as OUT_OF_SYNC, with both prices. | Never. |
| Auto | The target's list price is set to the master's, then read back. Only when the price read back is the one wanted is the SKU counted as UPDATED. | Yes — the list price of a matched item at a target, and nothing else. |
Every agent starts in Monitor: it is the dry run. Read what it reports, and switch to Auto once the differences are the ones you expect. Switching is the one setting that lets the agent change something at a store on its own, and the screen says so in red where you make that choice. There is no approval mode in this version: Monitor is the preview, Auto is the write.
Matching is by SKU, exactly
A master SKU is matched to a target item by exact SKU and nothing else. There is no matching by title and no "close enough". When the match is not clean the agent reports it and never guesses:
- a SKU the target does not carry is SKU_NOT_FOUND;
- a SKU that names two items on one side is SKU_AMBIGUOUS — nothing is written until the catalogue is fixed;
- a product without a SKU on the master is counted and skipped;
- a WooCommerce variable product carries no price of its own: its prices live on its variations, which are matched by their own SKUs;
- an archived or trashed product is not for sale and is skipped;
- a master item with no list price, or with one that is not a readable amount, is INVALID_MASTER_PRICE.
No model decides a price. The only place one appears is on a SKU that could not be matched: it may add a note to the case suggesting which target SKU was probably meant. That note never changes a result and never writes anything.
One currency
A price is only comparable in a stated currency, so the agent settles the currency before it looks at any amount. Shopify states the shop currency on every variant; WooCommerce keeps it in the store settings, read once per connection at the start of a run.
When the master and a target do not price in the same currency, every SKU of that target is CURRENCY_MISMATCH: nothing is compared, nothing is written, and nothing is converted — there is no exchange rate anywhere in the agent. The same verdict is given when a store's currency cannot be established at all, rather than guessing one.
Guard-rails
A wrong master reading — a connection pointed at the wrong store, an import that zeroed a catalogue, a decimal separator gone astray — would otherwise be replicated to every target within the hour. So every automatic write passes through guard-rails, and each one turns the write into a WRITE_BLOCKED case instead of performing it:
| Guard-rail | Default | What it refuses |
|---|---|---|
| Max change per SKU (%) | 50 % | A single write that would change a SKU's price by more than this share of its current target price. Not applied when the target carries no price yet, or a price of zero. |
| Max share of the catalogue changed per run | 25 % | The circuit breaker, per target store: when more than this share of the SKUs that were in sync at the previous run suddenly need a correction, every write to that store in the run is refused. |
| Allow zero price propagation | off | Whether a master at zero may set a target to zero. A price at zero is almost always a data error, and a product sold for nothing on every channel is the one mistake that cannot be undone — so it stays off until you switch it on. |
A target is also never written when its connection was not granted the right to write products, or when another price sync agent already writes it: the comparison is still made and reported, and the write is refused with the reason. The defaults are conservative on purpose, and you can change them per agent.
Only a difference is written
A write is a set of the exact list price, never an adjustment, and it only happens when the target actually differs: a target already at the master's price costs no write at all, and a retried write leaves the same price. Prices are compared as money, so 19.9 and 19.90 are one price and nothing is written between them.
Concurrency, honestly
A price can be changed on a target between the moment the agent reads it and the moment it writes. Neither Shopify nor WooCommerce offers a check against that on a price: the write goes through and the read-back catches the difference as WRITE_MISMATCH. The window is a few hundred milliseconds, and a mismatch is re-evaluated an hour later.
How does the agent run?
- Automatically, once per hour. The whole catalogue is compared each time; nothing is assumed from a previous run.
- On demand too, from the agent's page or from ChatGPT.
- Not in real time. There is no webhook: a price changed at 10:05 is replicated during the 11:00 run.
A run reads up to 100,000 priced items per connection by default. A larger catalogue is reported as truncated rather than partly synced in silence, and a run that reaches its time budget stops cleanly and lets the next run finish.
Exceptions are cases, not alerts
Every result other than SYNCED and UPDATED is a case about one SKU at one target. The same difference seen every hour is one case with a count; when a later run finds the target back in step — because it was written, or because you fixed it by hand — the case closes itself and says so.
Each case carries the SKU, both stores, both prices and their currency, the price the agent wanted, the action, the result and the reason in a sentence: enough to understand it without opening either store.
What a run did, later
What one run decided — every SKU, both prices, the price wanted, the price read back after a write, the result and the reason — is kept as that run's own record for 30 days, and does not change afterwards. After 30 days the record says so, rather than showing an empty list.
Reviewing results in Excel and on the web
The agent's page shows where every SKU stands and what each run did. Four live views are available, in the web workspace and as a connected Excel workbook:
- Current price sync — one row per SKU and target: master and target prices, the currency, the price read back after a write, the action, the result and the reason.
- Open exceptions — the cases that need you.
- Runs — one row per run: SKUs checked, matched, different, not matched, in error, updated and blocked.
- Historical run detail — the rows of one specific run, kept for 30 days.
Asking ChatGPT or Claude
With LinkyFlow connected to ChatGPT, Claude or any MCP client:
Set up my price sync: master "EU boutique", target "Outlet", in monitor mode.
Run my price sync now.
Which SKUs have a different price on the outlet?
Show me the blocked writes and why.
Switch my price sync to auto mode.
The last one is a real change at your target stores, and the assistant tells you so before it is made.
Current limitations
- One master, one or more targets, one direction. It replicates an authoritative list price. It does not compute prices, apply margins or carry a target's change back to the master.
- Shopify and WooCommerce only. eBay offers are not read or written in this version.
- The list price only. Sale prices, compare-at prices and per-market prices are never read or written.
- Exact SKU only. No matching by title, barcode or similarity.
- One currency. A target in another currency is reported, never converted.
- The only write is a list price. Stock, titles, products and orders are never touched.
- Hourly, with no webhook.
- No approval mode. Monitor is the preview, Auto is the write.
- Detailed run data is kept for 30 days. Run summaries and the current sync stay.
Next steps
Frequently asked questions
Does the agent write to my stores?
Only in Auto mode, and only the list price of an item at a target store that differs from the master's. The master store is never written. Monitor mode, where every agent starts, writes nothing at all.
Which price is synced?
The list price: the variant price on Shopify, the regular price on WooCommerce. Sale prices, compare-at prices and per-market prices are never read or written. On WooCommerce a sale price is a separate field and is left alone; on Shopify the variant price is the price customers pay, so a discount made by lowering it is a difference the agent reports — and, in Auto mode, sets back to the master's.
Which stores can be the master or a target?
Shopify (product variants, by SKU) and WooCommerce (simple products, and the variations of variable products). The same provider can be used on both sides — two Shopify stores, say. eBay is not supported in this version.
What happens when my stores sell in different currencies?
Nothing is written. A target that prices in another currency than the master is reported as CURRENCY_MISMATCH on every SKU. Prices are never converted, and there is no exchange rate anywhere in the agent.
How are products matched between stores?
By exact SKU and nothing else. There is no matching by title or similarity: a SKU missing on a target, or shared by two items, is reported and never guessed. A model may add a note to such a case suggesting which SKU was probably meant; that note never changes a result and never writes anything.
What stops a wrong master price from being copied everywhere?
Guard-rails checked before every automatic write: a maximum change per SKU (50 % of the target's current price by default), a circuit breaker when more than 25 % of a synced catalogue suddenly needs a correction, and a switch — off by default — before a master at zero may set a target to zero. A refused write becomes a WRITE_BLOCKED case.
How often does the price sync run?
Automatically once per hour, and on demand. The whole catalogue is compared on every run, and there is no webhook: a price changed at 10:05 is replicated during the 11:00 run.
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.