01 / backbone
F&O is the ledger
Finance, inventory, pricing, order management. The authoritative record the business is run on.
Integration / Makro Middleware
Your ERP stays the system of record. Shopify Plus becomes where the order gets placed. We build custom F&O to Shopify Plus middleware on OData, the Data Management Framework and Business Events for B2B pricing, tax, payouts and real-time inventory.
The real problem
The work is the space between: finance, inventory, pricing and order management on one side, B2B buyer self-serve on the other.
01 / backbone
Finance, inventory, pricing, order management. The authoritative record the business is run on.
02 / front door
Where B2B buyers place repeat orders without a phone call, a rep, or an EDI batch.
03 / the gap
Duplicate customers. Orders written twice. Pricing that drifts. Silent failures at month-end close.
We built a product around that exact gap. Dynamics 365 F&O plugs into it as a first-class adapter, its path mapped to OData, DMF, Business Events and Entra ID.
How we build it
Companies, products, inventory and pricing are read out of F&O and pushed to Shopify. The storefront never writes to the ledger. Orders are the only thing that travels both ways, and F&O stays the source of truth.
System of record
read · never overwritten
The platform
map · reconcile · audit
The storefront
where buyers self-serve
The console
Every sync, every failure, every reconciliation is visible. This is the same Makro Middleware console your team would watch in production. Move through the views.
| Time | Entity | Error class | Attempts | Next | Action |
|---|---|---|---|---|---|
| 08:13:04 | salesOrder · SO-10288 | PERMANENT · validation | 3 / 3 | held | Inspect |
| 07:55:22 | company · CUST-00910 | TRANSIENT · timeout | 2 / 5 | 09:50 | Retry now |
| 06:40:11 | released product · ITEM-44120 | RATE_LIMIT · OData priority | 1 / 5 | paced | Inspect |
Every record carries three identities at once: its F&O id, a stamped canonical id, and its Shopify gid. The middleware reads this row before every write and decides create, update, or skip.
Sync a record twice and it updates. Delete and recreate it in one system, and the mapping still holds in the other. This is what stops duplicate customers and double-posted orders before they reach your ledger.
Change detection runs on the stored checksum, so a catalog of 50,000 items with 12 real edits syncs 12 records, not 50,000.
entity key map · every id matched before write
Inside the platform
Ten engineered subsystems sit between Dynamics 365 F&O and Shopify Plus. None of them is a setting you toggle. Each is something we built, and something your team can watch run.
01 / 10
When a record fails
Follow one failed record. It is classified before it is retried, and nothing disappears into a log file. Colour carries the verdict: amber is sorted, teal retries, red is held, green replays.
A record fails to write to Shopify or F&O. Instead of disappearing into a log, it enters the pipeline and gets a verdict.
capturedEvery failure is sorted before anything is retried, so a bad record never loops forever. An OData priority rate-limit is paced, a validation error is held.
classifiedTransient and rate-limit failures retry with exponential backoff and pacing. An OData priority throttle backs off until the priority window clears.
A permanent failure routes straight to the dead-letter queue for review. It is never retried blindly or lost.
held for reviewFix the cause, replay from the queue. A daily reconciliation pass catches anything the live path missed.
replayed · reconciledThe failure modes no vendor page admits
F&O to Shopify integrations break at predictable points. Commerce Scale Unit, most iPaaS templates and quick OData scripts handle the happy path and skip these.
CSU is not a switch. It needs a Commerce licence most F&O shops do not hold, a full CDX sync, channel-DB and identity wiring, and hours of downtime to stand up.
→ OData-first reaches ~85 to 90% with no new SKUsGetActivePrices assumes quantity one and skips multi-line discounts. Sync that price and it is wrong at the second unit.
→ CalculateSalesDocument or trade-agreement replicationCSU has no live GetTax, and routing every cart through F&O is a slow synchronous ERP round-trip. The ledger records tax; it does not calculate the cart fast.
→ Shopify to AvaTax directly, F&O authoritative for the posted documentPer-request OData calls for on-hand throttle under load. Storefront traffic should never land raw on your ERP.
→ Inventory Visibility Add-in at cart timeShopify and F&O settle currency on different rates. Only fixed foreign-currency prices copy cleanly; conversions drift into penny variances.
→ F&O authoritative + FX-tolerance reconciliationQuote-to-order is the one operation OData does not cover cleanly. Pretending the gap is not there is how integrations rot.
→ a single narrow F&O service, named not hiddenClaims you can check
Every reality below is grounded in the F&O surface itself: OData, DMF, Business Events, the Inventory Visibility Add-in, Custom Fields. This is the difference between a team that read the marketing and a team that shipped against the documentation.
GetActivePrices assumes quantity one and skips multi-line discounts. Real B2B pricing with volume breaks needs CalculateSalesDocument or trade-agreement replication, mapped deliberately rather than shipping a price that is wrong at the second unit.GetTax, and routing every cart through F&O is slow. We take Shopify to AvaTax directly for cart-time calculation and keep F&O authoritative for the posted document, so checkout stays fast and the ledger stays right.The decision guide
There are three paths: Commerce Scale Unit, an iPaaS template, or OData-first custom middleware. The right choice depends on whether you hold a Commerce licence, your B2B complexity, and how many systems must stay in sync.
Option 01
Microsoft's commerce runtime. Powerful for full POS and e-commerce, but a project, not a switch.
Right for shops that already hold a Commerce licence and genuinely need the full CSU runtime, not just a B2B storefront.
Option 02
Subscription middleware on a shared platform. Strong for standard multi-system sync across templated connectors.
Right for standard multi-system sync where the B2B logic fits a fixed-mapping template and volume breaks are not load-bearing.
Option 03 · our build
Built on standard Microsoft surfaces around your exact order flow and B2B logic, owned by you, operated with a support agreement.
Right for Shopify B2B contract pricing with volume breaks, AvaTax at the cart, real-time stock, multi-currency, and teams who do not want a CSU project.
How long it takes
An F&O to Shopify Plus build lands in one of three bands depending on B2B pricing complexity, tax and inventory needs, and how many break points are in play.
Band 01 · foundation
single store · standard catalog
Band 02 · B2B
Shopify Plus B2B · trade agreements
Band 03 · multi-entity
multi-currency · ISV fields · quote-to-order
We price an F&O integration as an engineering engagement: a build with a support agreement, not a per-record meter or a platform seat that renews forever. Enterprise iPaaS commonly runs $30,000 to $100,000+ a year before the work begins, and a CSU stand-up carries its own Commerce licence and project cost on top.
Security posture
F&O and Shopify secrets are held as encrypted fields, isolated per tenant and rotatable without downtime.
Every Shopify webhook is HMAC-verified before it is trusted, then deduplicated so a replay cannot create a second order.
Authentication runs through Microsoft Entra ID on an app registration scoped to exactly what the integration touches.
An append-only audit trail logs every operation, source-tagged, so you can prove what happened during month-end close.
Frequently asked questions
The details that separate a team that read the docs from a team that shipped against them.
GetActivePrices assumes quantity one and skips multi-line discounts. Real B2B pricing with volume breaks needs CalculateSalesDocument or trade-agreement replication. We map this deliberately rather than shipping a price that is wrong at the second unit.GetTax, and routing every cart through F&O is slow. We take Shopify to AvaTax directly for cart-time calculation and keep F&O authoritative for the posted document, so checkout stays fast and the ledger stays right.The framework underneath
Every ERP sits behind the same contract: authenticate, fetch master data, push orders, validate, report. The platform runs in production today against a live enterprise ERP. Dynamics 365 F&O is a registered target on that same framework, its path mapped to OData, DMF, Business Events and Entra ID.
We say this plainly: the credibility is a real platform and a precisely understood F&O path, not a decade of F&O traffic. That distinction is exactly what your architect can verify, which is why we lead with it.
Proof and outcomes
Clarius · NetSuite + Salesforce + Shopify PlusWe built a unified account page integrating Clarius' NetSuite ERP, Salesforce CRM and Shopify Plus into a single view of customer information, orders and invoices across three enterprise systems. Combined with Shopify Flow automation feeding order data into the ERP, it eliminated manual order entry and reduced operational costs by over $100,000 a year. The same platform carries the F&O adapter.
Automated tests across 139 suites, run on every change.
Coverage gate enforced before any deploy.
Running enterprise integrations in production since.
Error classes, each with its own pre-decided retry policy.
Source of truth, enforced in the orchestrator.
A real conversation about your F&O environment, your B2B catalog, and the three sharp questions you already have.