See all services Shopify Plus Partner

Integration / Makro Middleware

Dynamics 365 F&O × Shopify Pluspath mapped

Dynamics 365 F&O to Shopify Plus, built to fit.

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.

F&O system of record Middleware map · reconcile · audit Shopify Plus buyer self-serve
Live sync feed prod · northbridge
F&O → Shopify · one wayOrders travel both ways

The real problem

F&O runs the business. The store runs the customer.

The work is the space between: finance, inventory, pricing and order management on one side, B2B buyer self-serve on the other.

01 / backbone

F&O is the ledger

Finance, inventory, pricing, order management. The authoritative record the business is run on.

02 / front door

Shopify is self-serve

Where B2B buyers place repeat orders without a phone call, a rep, or an EDI batch.

03 / the gap

The middle is where it breaks

Duplicate customers. Orders written twice. Pricing that drifts. Silent failures at month-end close.

Our position

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

One direction for master data. Both directions for orders.

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

Dynamics 365 F&O

read · never overwritten

The platform

Makro Middleware.

map · reconcile · audit

The storefront

Shopify Plus B2B

where buyers self-serve

Master data: F&O → Makro Middleware → Shopify, one way
Orders: Shopify → F&O, status returns
OData data entitiesIncremental, watermarked delta reads. The platform pulls only changed records and normalizes them before they reach Shopify, never re-reading a catalog that has not moved.F&O → MK
Data Management FrameworkRecurring batch export jobs for bulk and initial loads. Heavy catalog and company loads run as DMF jobs, not per-record OData calls that would throttle under priority-based limits.F&O → MK
Business EventsF&O announces a change instead of being polled. Updates are picked up as they happen, with watermarked delta queries as the fallback so nothing is missed if an event is dropped.F&O → MK
Microsoft Entra ID · OAuth 2.0Server-to-server auth on a least-privilege app registration. No shared user credentials on the wire, scoped to exactly the minimum the integration needs.handshake
Sales order entityOrders captured in Shopify are written into F&O, status flows back. A webhook is HMAC-verified, deduplicated by event id, transformed and pushed once to the sales order surface.Shopify ↕ F&O

The console

This is not a connector. It is something you operate.

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.

console.makro.agency / northbridge-industrial / sync
live
Sync Monitor
Sync Monitor Dead Letter Queue Observability Entity Key Map Schedules Order Relations
Records / 24h
48,210
across 9 entities
Queue depth
3 pending
2 retrying · 1 review
Avg latency
1.2s
event → Shopify
Last reconcile
04:00
0 drift detected
Activitylive · last 60s
Throughputrecords / hr
In queue
3
of 48,210 processed
Auto-retrying
2
transient · rate-limit
Needs review
1
permanent
Resolved / 24h
41
38 auto · 3 manual
Dead Letter Queuenothing is dropped in silence
TimeEntityError classAttemptsNextAction
08:13:04salesOrder · SO-10288PERMANENT · validation3 / 3heldInspect
07:55:22company · CUST-00910TRANSIENT · timeout2 / 509:50Retry now
06:40:11released product · ITEM-44120RATE_LIMIT · OData priority1 / 5pacedInspect
Sync volume7-day · records
Circuit breakersper endpoint
F&O · ODatalast trip · never
closed
Shopify · Admin APIlast trip · 3d ago
closed
Avalara · AvaTaxlast trip · never
closed
Uptime · 90 dayserror rate 0.03%
company · Northbridge Westentity_key_map
F&O idCUST-004182
canonical8f2a-c1d9-4e07-44b0
shopify gidgid://shopify/Company/61…
checksuma91f… unchanged
versionv17
→ decision: SKIP · already in sync

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.

Active schedules
7
all workflows enabled
Runs today
96
0 failures
Next run
09:46
inventory levels
Nightly batch
01:00
DMF · 48,210 records
Workflowstenant · northbridge
Product delta syncOData · watermarkedevery 15 min 09:38 · 142 recordsnext 09:53Run now
Inventory levelsInventory Visibilityevery 5 min 09:41 · 3 SKUsnext 09:46Run now
Price liststrade agreementshourly 09:00 · 1,204 rowsnext 10:00Run now
Companies & customersOData · deltaevery 15 min 09:40 · 6 recordsnext 09:55Run now
Order status returnF&O → Shopifyevery 5 min 09:42 · 11 ordersnext 09:47Run now
Full catalog batchDMF recurring exportnightly · 01:00 01:00 · 48,210 recordsnext 01:00Run now
Daily reconciliationboth systems vs key mapdaily · 04:00 04:00 · 0 driftnext 04:00Run now
Shopify order#1042
gidgid://shopify/Order/57…
companyNorthbridge West
line 1ITEM-99320 × 12
line 2ITEM-44120 × 4
total$8,420.00
F&O sales orderSO-77231
SalesIdSO-77231
customerCUST-004182
line 199320 · qty 12
line 244120 · qty 4
statusconfirmed
Order journey#1042 → SO-77231 · 5s end to end
09:42:04webhook received 09:42:04HMAC ✓ · dedup ✓ 09:42:05transformed 09:42:06pushed to F&O 09:42:09SO-77231 confirmed 09:42:09status → Shopify
drag, scroll, or use the tabs

Inside the platform

Feature by feature.

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

Integrations are judged by how they fail.

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.

01

It arrives

A record fails to write to Shopify or F&O. Instead of disappearing into a log, it enters the pipeline and gets a verdict.

captured
02

It gets classified

Every 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.

transientrate-limitpermanent
classified
03

Transient retries

Transient and rate-limit failures retry with exponential backoff and pacing. An OData priority throttle backs off until the priority window clears.

retrying
04

Permanent is held

A permanent failure routes straight to the dead-letter queue for review. It is never retried blindly or lost.

held for review
05

You replay it

Fix the cause, replay from the queue. A daily reconciliation pass catches anything the live path missed.

replayed · reconciled

The failure modes no vendor page admits

Where off-the-shelf connectors break.

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 complexity

Commerce Scale Unit licensing and stand-up

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 SKUs
9/10 severity

Live B2B pricing with volume breaks

GetActivePrices assumes quantity one and skips multi-line discounts. Sync that price and it is wrong at the second unit.

→ CalculateSalesDocument or trade-agreement replication
8/10 severity

Tax at the cart

CSU 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 document
8/10 severity

Real-time stock without hammering F&O

Per-request OData calls for on-hand throttle under load. Storefront traffic should never land raw on your ERP.

→ Inventory Visibility Add-in at cart time
core to Plus

Multi-currency and FX

Shopify 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 reconciliation
the missing piece

Quote-to-order conversion

Quote-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 hidden

Claims you can check

What you will hear, and what the docs actually say.

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.

01
The claim"Just turn on Commerce Scale Unit and you're integrated, out of the box."
The realityCSU 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. For a B2B storefront an OData-first architecture reaches ~85 to 90% of the surface with no new Microsoft SKUs.
02
The claim"Just call GetActivePrices and you have live B2B pricing."
The realityGetActivePrices 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.
03
The claim"CSU gives you live cart tax through GetTax."
The realityCSU has no live 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.
04
The claim"Just read stock from F&O at cart time."
The realityPer-request OData calls for on-hand throttle under load. The Inventory Visibility Add-in exposes on-hand at cart time without putting storefront traffic on your ERP.
05
The claim"F&O has a requests-per-minute rate limit you tune against."
The realityF&O throttles OData by priority, not a flat per-minute quota. An integration built as thousands of per-record calls will hit it, which is why bulk runs through DMF and updates come from Business Events.
06
The claim"Every custom or ISV field means another fragile, hand-coded endpoint."
The realityMicrosoft's no-code Custom Fields feature flows user-defined fields straight to OData. Most needs come down to two to four small custom data entities, mapped through our engine with no hardcoded translations.
07
The claim"Polling F&O on a timer keeps the catalog fresh."
The realityBlind polling burns the OData priority budget. Business Events let F&O announce a change instead of being polled, with watermarked delta reads as the fallback so nothing is missed.
08
The claim"The connector dedupes orders, so you'll never get duplicates."
The realityReliable idempotency requires the entity key map: three identities per record, upsert by canonical id, plus exactly-once keying on the Shopify event id. A retried create cannot silently double-post a sales order.
09
The claim"OData covers the whole order flow."
The realityQuote-to-order conversion is the one operation OData does not cover cleanly. We close it with a single narrow F&O service rather than pretend the gap is not there. Naming it is how you know the rest is solid.
10
The claim"Web orders mean ripping out EDI and rep-entered orders."
The realityWeb orders are one more channel writing to the same sales order surface. The entity key map keeps identities straight, so EDI flows and rep workflows stay untouched.

The decision guide

Three ways to connect F&O and Shopify.

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

Commerce Scale Unit

Microsoft's commerce runtime. Powerful for full POS and e-commerce, but a project, not a switch.

  • licenceCommerce SKU required
  • stand-upCDX sync · downtime
  • taxno live GetTax
  • scopefull commerce runtime

Right for shops that already hold a Commerce licence and genuinely need the full CSU runtime, not just a B2B storefront.

Option 02

iPaaS: Celigo, Boomi, Jitterbit

Subscription middleware on a shared platform. Strong for standard multi-system sync across templated connectors.

  • mappingstemplate-bound
  • tenancyshared platform
  • pricingannual fee
  • B2Boften an afterthought

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

OData-first custom middleware

Built on standard Microsoft surfaces around your exact order flow and B2B logic, owned by you, operated with a support agreement.

  • surfacesOData · DMF · events
  • tenancysingle-tenant
  • recoveryDLQ + replay
  • SKUsno new Microsoft licence

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

Timeline by scope, not a contact-us wall.

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

4-6

single store · standard catalog

  • Companies, products and inventory one way, read-only out of F&O
  • Orders both ways with idempotent upsert
  • Inventory Visibility levels sync
  • Dead-letter queue and daily reconciliation

Band 02 · B2B

8-10

Shopify Plus B2B · trade agreements

  • Everything in foundation
  • Volume-break pricing via CalculateSalesDocument or trade-agreement replication
  • Per-company Shopify price lists
  • AvaTax at the cart, F&O authoritative for the posted document

Band 03 · multi-entity

12-16

multi-currency · ISV fields · quote-to-order

  • Everything in B2B
  • Multi-currency with FX-tolerance reconciliation
  • Custom Fields and ISV data entities mapped
  • Quote-to-order via a narrow F&O service
Cost · scoped per build

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

Built to pass your IT review, and your Microsoft partner's questions.

encryptedString · per-tenant

Credentials never in plain config

F&O and Shopify secrets are held as encrypted fields, isolated per tenant and rotatable without downtime.

HMAC · replay-safe

Inbound traffic is verified

Every Shopify webhook is HMAC-verified before it is trusted, then deduplicated so a replay cannot create a second order.

Entra ID · OAuth 2.0

Least-privilege access to F&O

Authentication runs through Microsoft Entra ID on an app registration scoped to exactly what the integration touches.

append-only · source-tagged

Everything is on the record

An append-only audit trail logs every operation, source-tagged, so you can prove what happened during month-end close.

Frequently asked questions

Where F&O integrations get hard, and where we land.

The details that separate a team that read the docs from a team that shipped against them.

01"Just turn on Commerce Scale Unit."+
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. For a B2B storefront, an OData-first architecture reaches roughly 85 to 90 percent of the surface with no new Microsoft SKUs and no CSU project. We choose CSU only when the requirement genuinely needs it, never by default.
02Live B2B pricing, with volume breaks+
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.
03Tax at the cart+
CSU has no live 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.
04Real-time stock without hammering F&O+
The Inventory Visibility Add-in exposes on-hand at cart time without per-request OData calls that throttle under load. Inventory stays current without putting storefront traffic on your ERP.
05Your ISV and custom fields+
Custom fields do not each need a bespoke API. Microsoft's no-code Custom Fields feature flows user-defined fields straight to OData. Most needs come down to two to four small custom data entities, mapped through our engine with no hardcoded translations.
06The genuinely missing piece+
Quote-to-order conversion is the one operation OData does not cover cleanly. We close it with a single narrow F&O service rather than pretend the gap is not there. Naming it is the point: it is how you know the rest is solid.
07What about OData throttling under real load?+
F&O throttles OData by priority, and an integration designed as thousands of per-record calls will hit it. We design around it from day one: DMF batch jobs for bulk, Business Events instead of blind polling, watermarked delta reads, and the Inventory Visibility Add-in for stock. Storefront traffic never lands raw on your ERP.
08How do you phase a build like this?+
Master data first: companies, catalog, pricing, read-only out of F&O. Then inventory. Orders last, and into a UAT environment first. We parallel-run against real orders and reconcile daily before anything touches production. Cutover is a decision you sign off on, not a moment that happens to you.
09What do you need from our team?+
Three things: an Entra ID app registration with least-privilege scope, access to a sandbox or UAT F&O environment, and your F&O functional lead in the entity-mapping workshops. Your Microsoft partner is welcome in every session. We would rather they ask hard questions early.
10Can this run alongside EDI and rep-entered orders?+
Yes. Web orders are one more channel writing to the same sales order surface, and the entity key map keeps identities straight across all of them. Your EDI flows and rep workflows stay untouched. Buyers who never move to self-serve never notice anything changed.
11Are we locked into a black box?+
No. On the F&O side we use standard Microsoft surfaces only: OData, DMF, Business Events, Entra ID. Nothing proprietary gets buried in your ERP. The middleware is our platform, but your data, your field mappings, and the full audit trail are yours, documented and exportable. Your team can inspect how every record moved.
12Will rollout touch our production ledger?+
Not until you decide it does. Master data syncs are read-only against F&O. Order writes go to UAT first, then through a parallel-run with daily reconciliation. Production posting starts when the reconciliation report says zero drift and you sign off, and the audit trail covers every record from day one.

The framework underneath

A proven platform. Your ERP is an adapter, not a rebuild.

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.

adapter contractbase.ts
01authenticate()Entra ID / OAuth
02fetchMasterData()OData / DMF
03pushOrder()sales entity · idempotent
04validate()schema check
05report()audit + status
NS
NetSuite
SuiteQL · token auth · saved search
middleware in production
D3
Dynamics 365 F&O
OData · DMF · Business Events · Entra ID
path mapped
BC
Business Central · SAP · Infor M3 · Acumatica
REST / OData adapters
by engagement

Proof and outcomes

Claims you can check.

$100K+ / yr

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.

1,700+

Automated tests across 139 suites, run on every change.

85%

Coverage gate enforced before any deploy.

2014

Running enterprise integrations in production since.

3

Error classes, each with its own pre-decided retry policy.

1

Source of truth, enforced in the orchestrator.

Bring your F&O lead and your Microsoft partner. We will walk the architecture, not a deck.

A real conversation about your F&O environment, your B2B catalog, and the three sharp questions you already have.

d365 f&o / final