01 / backbone
Fusion is the ledger
Financials, Receivables, Order Management, Pricing, inventory. The authoritative record the business is run on, across legal entities and ledgers.
Integration / Makro Middleware
Your ERP stays the system of record. Shopify Plus becomes where the order gets placed. We build custom Oracle Fusion ERP to Shopify Plus middleware for B2B price lists, multi-org routing and real-time inventory.
The real problem
The work is the space between: financials, receivables, order management, pricing and inventory on one side, B2B buyer self-serve on the other.
01 / backbone
Financials, Receivables, Order Management, Pricing, inventory. The authoritative record the business is run on, across legal entities and ledgers.
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. NetSuite runs in production on it today. Oracle Fusion Cloud ERP plugs in as a first-class, path-mapped adapter on the same contract.
Before anyone scopes a connector
"Oracle ERP" is four different products with different data models, APIs, and auth. The connector that fits one will not fit the others. This page is about Oracle Fusion Cloud ERP specifically. Confirm yours before a single line is scoped.
This page subject
The SaaS suite: Financials Cloud, Receivables, Order Management, Pricing. REST under /fscmRestApi, FBDI and BICC for bulk, OAuth 2.0 via OCI IAM. The product this page maps.
Adjacent Oracle ERP
A separate cloud ERP with SuiteQL, SuiteTalk, RESTlets and token auth. We run NetSuite middleware in production today. Different surface entirely.
→ see the NetSuite ⇄ Shopify pageAdjacent Oracle ERP
The on-premise / EBS line, integrated through ISG and AIS endpoints with its own pricing internals. Mention it so we route correctly. Not the Fusion surface.
→ confirm before scopingAdjacent Oracle ERP
EnterpriseOne / World, a distinct platform with its own orchestrator and adapter sets. Different again. Tell us which Oracle you mean.
→ confirm before scopingIf a prospect says "Oracle ERP," we confirm which one before scoping. Everything below is Oracle Fusion Cloud ERP. The NetSuite build is documented on its own page and cross-linked in the footer.
The decision guide
There are three ways to connect Shopify to Oracle Fusion Cloud ERP. The right method is decided by number of legal entities and ledgers, order-to-cash complexity, and integration throughput, not by price alone.
Option one
Oracle Integration Cloud, Oracle's own iPaaS, with its native Shopify adapter. Message-volume priced. You still own the orchestration, FBDI templates, callback wiring, and reconciliation.
Right for single-entity stores with standard order and inventory sync, on teams that own OIC.
Option two
A prebuilt connector or iPaaS such as Celigo, Cleo, Alumio, Commercient, or eZintegrations. Fixed field mappings against Oracle's standard model. The richest prebuilt Shopify content targets NetSuite, so against Fusion it is thinner.
Right for standard catalogs and order flows that fit the template the connector happens to support.
Option three Makro builds this
A custom build from a Shopify Plus partner, around your exact order-to-cash flow, owned by you. OIC gives you the pipes. We build the logic that runs through them: routing, B2B pricing, buffered inventory, reconciliation.
Right for Plus, B2B, multi-currency, and multi-org merchants that have outgrown a fixed-mapping connector.
Choose the OIC native adapter or a prebuilt connector for single-entity stores with standard order and inventory sync. Choose a custom build from a Shopify Plus partner like Makro when multi-legal-entity routing, multi-ledger finance, Shopify B2B, or high throughput against the connector ceiling makes a fixed-mapping connector overspill.
Architecture
Customers, items, inventory and pricing are read out of Oracle Fusion and pushed to Shopify. The storefront never writes to the ledger. Orders are the only thing that travels both ways.
System of record
read · never overwritten
The platform
map · reconcile · audit
The storefront
where buyers self-serve
/fscmRestApi. Query grammar of q / fields / expand, max page size 500, always paginate on hasMore. The default transport for live sync.Oracle ⇄ MKErpImportBulkDataEvent; the platform picks it up, with ESS-job polling as the recovery fallback.Oracle → MKOrderKey, transformed, and pushed once.Shopify ↕ OracleThe 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 | order · SHOP-10288 | PERMANENT · validation | 3 / 3 | held | Inspect |
| 07:55:22 | account · 0091-MERIDIAN-W | TRANSIENT · timeout | 2 / 5 | 09:50 | Retry now |
| 06:40:11 | item · ITM-44120 | RATE_LIMIT · 429 | 1 / 5 | paced | Inspect |
Every record carries its identities at once: the Oracle internal key, the external Source System Reference, and the Shopify gid. The middleware reads this row before every write and decides create, update, or skip.
Orders are idempotent because of the OrderKey, SourceOrderSystem:SourceTransactionId. Push the Shopify order id and a repeat is rejected as a duplicate, not doubled. Customers de-dupe on the Accounts Source System Reference child.
Change detection runs on the stored checksum, so a catalog of 50,000 items with 12 real edits syncs 12 records, not 50,000.
OrderKey · duplicate source id rejected, never doubled
Inside the platform
Ten engineered subsystems, the same ones that run the in-production NetSuite build. What changes per ERP is the adapter, not the machine.
01 / 10
When a record fails
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 write to Shopify or Oracle Fusion fails, or an FBDI callback never lands. Instead of disappearing into a log, it enters the pipeline.
capturedEvery failure is sorted before anything is retried, so a bad record never loops forever.
classifiedTimeouts and HTTP 429 pod throttling retry with exponential backoff and jitter, automatically, until they clear.
A validation or permission 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 missed ErpImportBulkDataEvent is recovered by polling ESS job status. A daily reconciliation pass catches the rest.
The failure-mode surface no vendor page admits
Generic connectors map Oracle's standard model, not yours. The edge cases below are exactly where a fixed-mapping connector needs custom logic, in OIC or in bespoke middleware.
Oracle Fusion supports multi-legal-entity, multi-ledger, multi-currency and intercompany natively, but prebuilt connectors do not map an order into the right entity and ledger. Pricing resolves per business unit. That routing logic has to be built.
→ one Shopify store ↔ one Oracle business unitA customer's price resolves through a rank-based waterfall: segment, strategy, price list, discount, agreement. Reading the stored price list gives you the cube, not the resolved price. Generic connectors skip the account hierarchy.
→ call priceSalesTransaction, do not replicate the cubeRaw on-hand over-promises: it includes stock already reserved to other demand. Org, subinventory and locator have to map onto Shopify's flat locations, with non-sellable subinventories excluded and drop-ship handled.
→ feed available-to-reserve, buffer the feedPartial refunds and cancellations have to reconcile back into Receivables as credit memos with line detail and correct tax allocation. Connectors that collapse multi-line refunds distort item margin and break the audit trail.
→ order return line → receivablesCreditMemosOracle Fusion Tax is invoice-driven, so it only fires when a transaction exists in Oracle. Cart-time tax belongs in Shopify's engine. If the two sides taxed against different rules, the booked AR invoice would not match the cart.
→ same certified provider on both sidesFusion throttles at the pod, runs synchronous calls under 60 to 300 second timeouts, and steers volume above roughly 100 records onto FBDI. A naive per-order REST loop fails under flash-sale load. The OIC Shopify adapter is bound by Shopify's 2 req/sec REST ceiling.
→ buffer / Parking Lot, back off on 429Claims you'll hear vs. what the docs say
Every reality below traces to a primary Oracle or Shopify source. Your architect can verify each one.
Available Quantity Details resource, never on-hand alone. Drop-ship and back-to-back lines can have zero on-hand yet be fully sellable.priceSalesTransaction, with the cart context and read back the resolved net price. Oracle does not "shop for the lowest price," lower numeric rank wins.OrderKey, SourceOrderSystem:SourceTransactionId: push the Shopify order id and a repeat is rejected as a duplicate, not doubled. Customers de-dupe only via the Accounts Source System References child. Everywhere else, persist the Oracle internal key and read before write.expand and are not in the default payload. Request them with expand=DFF, write them via the __FLEX_Context block keyed by the immutable developer API name, not the UI label, and only against published config. Sandbox-configured flexfields are invisible to integrations until published.ErpImportBulkDataEvent leaves orders that may or may not have posted, with no automatic notification. Recovery means polling getESSJobStatus and reading ESS execution details. Off-the-shelf connectors rarely build that loop. A custom layer persists, dead-letters and replays.Source of truth, made explicit
Master data flows one way, Oracle Fusion to Shopify. Orders flow both ways. Oracle stays the system of record on every line.
Oracle → Shopify · one way
Items via itemsV2, the resolved net price via priceSalesTransaction, B2B and contract pricing per business unit. Browse uses Price Book Retrievals, the live call is reserved for cart.
source of truth · Oracle Fusion
Shopify ⇄ Oracle · both ways
Orders write to salesOrdersForOrderHub, ship-confirm flows back as the Shopify fulfillment and tracking, returns post as a return line and receivablesCreditMemos. Idempotent on the OrderKey.
written in Shopify · booked in Oracle
Oracle → Shopify · one way
Available-to-reserve fed per location with delta updates, only changed quantities. The feed is buffered into Shopify for fast browse, and GOP quickAvailabilityCheck is reserved for true order promising at checkout, not every PDP.
overselling prevented by · buffer logic
The under-served ICP
The merchants who outgrow a fixed-mapping connector first: enterprise and multi-entity brands whose finance, catalog, or order volume has passed what a generic iPaaS subscription was built to model.
Shopify Plus B2B
Oracle price-list and account-hierarchy structure maps onto Shopify B2B companies, locations and catalogs as first-class sync entities, not flattened afterthoughts. The right price level is resolved per company.
customer price list → company catalog
Oracle multi-org
The clean topology is one Shopify store to one Oracle business unit. Pricing, agreements and ledger routing all resolve per business unit, so an order lands in the right entity and the right ledger.
store ↔ business unit ↔ ledger
Multi-currency
Currency is part of the price context sent to the engine and resolved server-side, so the storefront shows the price the customer will actually be billed, and the booked AR invoice matches it.
currency in · resolved net price out
How long it takes
It scales with the number of legal entities, ledgers and sync points. Oracle's longer discovery is acknowledged in the bands below.
Basic · single entity
single entity
Standard · finance depth
finance depth
Full · B2B / multi-org
B2B / multi-org
A fully custom build is priced as an engineering engagement, a scoped build plus a support agreement, not a per-record meter. Market context for comparison: prebuilt connectors start around $15K and run $30K to $100K for complex multi-entity workflows; platform-only subscriptions start around $99/month; Oracle Integration Cloud itself is priced on message volume. Your band is set from your real order-to-cash flow in the working session.
Security posture
OAuth 2.0 Client Credentials against OCI IAM, on a dedicated least-privilege service user whose name matches the OAuth Client ID, carrying only the function and data security in scope. Not Administrator.
Fusion buyers run LBAC, network ACLs and OCI WAF IP allowlisting. The middleware presents stable, declarable egress IPs your team adds to the allowlist, so it never 401s from an un-listed address.
Every Shopify webhook is HMAC-verified before it is trusted, then deduplicated by event id so a replay cannot create a second order.
Oracle and Shopify secrets are encrypted and rotatable without downtime, and an append-only audit trail logs every operation, source-tagged, so you can prove what happened during close.
The questions we have already answered
The details that separate a team that read the docs from a team that shipped against them. Open any one.
priceSalesTransaction, with the cart context (sold-to customer, business unit, currency, lines) and read back the resolved net price. For browse we use Price Book Retrievals and reserve the live call for cart and checkout. B2B and contract pricing all feed the same engine.Available Quantity Details resource, never raw on-hand which over-promises. The feed is buffered into Shopify's own inventory levels for fast browse, and GOP quickAvailabilityCheck is reserved for true order promising at checkout, not every product page. Org, subinventory and locator map onto Shopify's flat locations.expand, not in the default payload, and they are written via the __FLEX_Context block keyed by the immutable developer API name, only against published config. We introspect the flexfield metadata instead of hard-coding. On the Oracle side we use standard published surfaces only, REST, FBDI, BICC, business events, OCI IAM. The middleware is our platform, but your data, your mappings and the full audit trail are yours, documented and exportable.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 NetSuite. Oracle Fusion Cloud ERP is a registered target on that same framework, its path mapped to REST, FBDI, BICC, business events and OAuth 2.0 via OCI IAM.
We say this plainly: the credibility is a real platform and a precisely understood Oracle Fusion path, not a decade of Oracle traffic. That distinction is exactly what your architect can verify, which is why we lead with it.
The engineering standard
Oracle Fusion is path mapped, not yet in production, so the proof is the platform itself, and a NetSuite ERP integration the same platform already runs. The numbers are counted in the repository, not rounded for the slide.
Clarius · NetSuite + Salesforce + Shopify PlusThe same platform already runs an ERP integration in production. For Clarius, Makro unified NetSuite ERP, Salesforce CRM and Shopify Plus into a single account view of orders and invoices, with Shopify Flow feeding order data into NetSuite, eliminating manual order entry and reducing operational costs by over $100,000 annually. That is a NetSuite outcome, documented on the NetSuite page, and it evidences the platform's ERP-integration track record. There is no Oracle Fusion outcome to claim yet, and we will not borrow one.
Automated tests across 139 suites, run on every change. No code reaches your production data without passing them.
Coverage gate enforced before any deploy.
End-to-end browser tests, Chromium, Firefox, WebKit.
Failure classes, each with its own pre-decided policy.
Credentials stored in plaintext, anywhere, ever.
A real conversation about your Oracle Fusion environment, your data, and the three sharp questions you already have.