
One data model across the store and the ERP
Magento Integrations
Magento ERP integration for NetSuite, SAP Business One, Dynamics 365, Odoo and Sage Intacct: stock, prices, customers and orders moving both ways on one data model, with every failure reported.
Map the ERP IntegrationWhy integrations fail
1 data model across the store and the ERP, with a named system of record per objectQueued writes through Magento's asynchronous API, worked in order rather than timed out
Most ERP integrations fail quietly. A nightly CSV runs at two in the morning and nobody notices the week it stopped. A connector bought from a marketplace maps the fields it knows and ignores the ones the business added. Stock lives in two places and each one is right about half the time.
The cause is rarely the ERP or the store. It is the layer between them: built once, documented nowhere, owned by whoever has since left.
Magento gives that layer more to work with than most platforms. Its REST and GraphQL APIs read and write every object a store holds, and its asynchronous API takes POST, PUT and DELETE requests, writes each one to a message queue under its own identifier and works through them with a consumer in order, so a forty-thousand-line stock update is queued rather than timed out. GET requests stay synchronous, which is the right split.
An integration built on that, with a mapping document, a queue, retries and a monitor, is a system the merchant owns and can change. That is what this page describes, ERP by ERP.
How you find out
Each of these is a line in someone's job description that should be a line in a sync log. They are the symptoms the mapping document is written to remove.

The storefront shows what the warehouse had at last night's export. Customers buy what has gone, support cancels the order, and the refund costs more than the sale.

Someone retypes every web order into the ERP each morning, with the typos that implies, and the invoice goes out two days after the parcel.

The ERP holds the negotiated prices, the store holds last quarter's, and the sales team tells business customers to ignore what the website says.

A company account exists in the ERP with credit terms and in the store with none, or twice in both, so nobody is sure which record the invoice belongs to.

A scheduled export, an FTP drop and an import script written years ago. It works until a column is added, and then it fails without telling anyone.

The marketplace connector maps the standard fields and not the custom ones, its vendor answers tickets in a week, and every Magento upgrade is a gamble on whether it still runs.
ERP by ERP

Orders, fulfilment, stock and customers through NetSuite's own web services, with scripting on the NetSuite side where a record needs logic of its own.

Business partners, items, orders and invoices mapped through the interface SAP provides for integrations, with warehouses and price lists kept per company.

Customers, items and sales orders through the Business Central REST API, enabled by default online; a field it does not expose gets a custom API rather than a workaround.

Data entities over OData and custom services behind Microsoft Entra sign-in, for the estates that have outgrown Business Central.

Stock, prices and orders over Odoo's XML-RPC external API with an API key per integration user; on Odoo Online that API comes with the Custom plan, which we check first.

Invoices, payments and customers through Intacct's XML web services under a dedicated web services user, because Intacct is where the finance team lives.
Map, build, test, run
What moves, and what you keep
Both ways orders to the ERP, shipments and invoices back, on one mappingYours the mapping, the code, the queue and the monitor, in your repository
The data model is the same for every ERP; only the field names differ. Products and their attributes usually originate in the ERP or a PIM and flow to the store. Stock by warehouse flows to the store, often several times an hour. Prices and price lists flow to the store, with B2B price lists mapped to Magento customer groups or shared catalogs.
Customers originate in the store for consumers and in the ERP for business accounts, so the direction is set per customer type rather than per table. Orders originate in the store and flow to the ERP; shipments, invoices and credit memos flow back. Each of those is a line in the mapping document with a direction, a schedule and an owner.
What you keep: the mapping document, the code in your repository under your licence, the queue and its dashboard, the monitor and its alerts, and the runbook that says what to do when a sync holds.
An integration you can read is one you can change when the ERP is upgraded, the business adds a warehouse or the finance team moves systems. That is the difference between an integration and a dependency.
Pick the way in
The full build for any of the six systems above: the mapping document, the Magento API layer, the ERP connector, the queue with retries, the reconciliation report and the cutover, then the monitor and the runbook in your hands. For stores replacing a nightly CSV or a connector nobody owns.
The most common pairing, on its own page: orders and fulfilment both ways, stock and prices in step, customers and their terms synced, and scripting on the NetSuite side where a record needs logic of its own.
For an integration that exists and needs an owner: the monitor watched, failed syncs released, every Magento release and every ERP update tested against it before production, and a monthly report of what moved and what was held.
Not our word for it

Adobe Certified Expert
7 professionals
Adobe Certified Expert
4 masters
Adobe Certified Expert
9 experts
Adobe Certified Expert
14 experts
Adobe Certified Expert
14 experts
Google Analytics Certification
6 expertsTrusted by 100+ companies
Keep reading



FAQ
Tell us about your store and we will come back with straight answers.
Talk to usNetSuite, SAP Business One, Microsoft Dynamics 365 Business Central, Dynamics 365 Finance and Supply Chain Management, Odoo and Sage Intacct are the six Magento stores ask us about most often, and the page above says how each one is reached. An ERP not on the list is a question of whether it exposes an interface we can write to; most do, and the mapping step is where we find out.
A marketplace connector fits a store whose data model is standard: simple products, one warehouse, one price list, no custom fields. The moment the business has added a field, a warehouse or a B2B price list, the connector maps what it knows and silently drops the rest. A built integration costs more at the start and is the one you can read, change and keep when the ERP is upgraded. We say which fits after the mapping, not before.
As often as the ERP can be asked. Most stores run stock every few minutes for the products that move and hourly for the rest, with a full reconciliation overnight. The schedule is a line in the mapping document per object, and Magento's asynchronous API means a large stock update is queued and worked through rather than timing out the request.
Yes. Magento's inventory model holds stock per source, so each warehouse in the ERP maps to a source in the store and the storefront shows what is sellable from the sources assigned to that website or channel. Transfers, reservations and the rule for which warehouse ships an order are set in the mapping and tested at your real volume before cutover.
Yes. ERP price lists map to Magento customer groups, or on Adobe Commerce to shared catalogs with per-company prices, and company accounts carry their credit terms and payment methods across. Business customers originate in the ERP and consumers in the store, so the direction is set per customer type and nobody ends up with two records for one company.
The failed record goes to a dead-letter queue with the reason, the monitor alerts on the first failure rather than the thousandth, and your team can see the item and release it once the cause is fixed, without touching anything else in flight. Retries handle the transient cases, such as an ERP that was busy, on their own. A failure that is never seen is the thing the design exists to prevent.
The mapping takes the first two to three weeks and tells us the rest. A standard model with one warehouse and one price list is a matter of weeks after that; a B2B estate with several warehouses, company accounts and custom fields on both sides takes months. The estimate names the number, and the staging run at real volume decides when cutover is safe.
Fixed scope after the mapping document. Every object in the document is code to write and test, and no two mappings have the same objects, so the price follows the document rather than a list. There is no price list on this site. The monitor and the ongoing cover are a monthly service with their own fixed scope.
Yes, and we would rather. Your ERP partner owns the ERP side: the custom fields, the workflows, the environment access. We own the Magento side and the layer between. The mapping document is the contract between the two, and the reconciliation report is how both sides prove the numbers match before the old process is switched off.
Yes. It lives in your repository under your licence, with the mapping document, the queue configuration, the monitor and the runbook beside it. We set it up, document it and support it if you want us to; you own it, another team can read it, and nothing we build depends on a licence key or a service of ours staying switched on.
It is tested against the new release on staging before production, the same way a patch is. Magento's REST and asynchronous APIs are stable across releases, so most upgrades change nothing; where an API or an extension the integration touches does move, that is caught on staging and fixed before the upgrade goes live. Patch cover and the upgrade service run this for you.
The design does not change; the plumbing does. On Cloud the message queue consumers run through the project's cron and the asynchronous API's route sits in a slightly different place; on Adobe Commerce as a Cloud Service the store scope is set in a header rather than the URL. We build for the environment you run, and the mapping document is the same either way.
Yes. We read the code and the ERP configuration inside two business days, reconcile both systems to find out what is actually out of step, and give you a written answer: repair it, replace the broken part, or rebuild the layer. A connector with no documentation and no owner usually costs less to rebuild on the mapping than to keep patching.
Let’s build something great together!
Tell us which ERP you run and what goes wrong today. We come back with the first draft of the mapping document and a written estimate.