{"id":11303,"date":"2026-08-31T19:22:49","date_gmt":"2026-08-31T16:22:49","guid":{"rendered":"https:\/\/www.firstidea.gr\/?p=11303"},"modified":"2026-08-31T19:24:50","modified_gmt":"2026-08-31T16:24:50","slug":"how-to-connect-eshop-erp-xml","status":"publish","type":"post","link":"https:\/\/www.firstidea.gr\/en\/blog\/e-commerce\/how-to-connect-eshop-erp-xml\/","title":{"rendered":"How do you connect an eShop to ERP or XML? A practical guide to products, stock and orders"},"content":{"rendered":"\n<div class=\"wp-block-group firstidea-platform-fit-insight firstidea-erp-xml-insight is-layout-flow wp-block-group-is-layout-flow\">\n\n<div class=\"wp-block-group platform-fit-answer is-layout-flow wp-block-group-is-layout-flow\">\n<p class=\"eyebrow wp-block-paragraph\"><span aria-hidden=\"true\"><\/span> The short answer<\/p>\n<h2 class=\"wp-block-heading\">A reliable integration does not start with a connector. It starts by deciding which system manages each datum.<\/h2>\n<p class=\"wp-block-paragraph\">Before code is written, the team must define product identifiers, the primary source for pricing and stock, the direction of orders, operational exceptions and how failures become visible. ERP, eShop and supplier feeds do not need to exchange everything, and every update does not need to be real time. They need explicit rules, validation and safe retries.<\/p>\n<div class=\"platform-fit-router\" aria-hidden=\"true\"><span>DATA FLOW \/ CONTROLLED<\/span><div><b>ERP \/ FEED<\/b><i><\/i><strong>MAP<\/strong><i><\/i><b>ESHOP<\/b><\/div><ol><li>PRODUCT<\/li><li>PRICE<\/li><li>STOCK<\/li><li>ORDER<\/li><\/ol><\/div>\n<\/div>\n\n<div class=\"wp-block-group platform-fit-source-note is-layout-flow wp-block-group-is-layout-flow\"><p class=\"wp-block-paragraph\"><strong>Updated: August 2026.<\/strong> This guide distinguishes XML as a data format, an API as an interface and ERP as an operational system. It is grounded in the <a href=\"https:\/\/www.w3.org\/TR\/xml\/\" target=\"_blank\" rel=\"noopener\">W3C XML specification<\/a>, the <a href=\"https:\/\/developer.woocommerce.com\/docs\/apis\/rest-api\/v3\/\" target=\"_blank\" rel=\"noopener\">current WooCommerce REST API v3 documentation<\/a>, the <a href=\"https:\/\/ref.gs1.org\/standards\/gtin-management\/\" target=\"_blank\" rel=\"noopener\">GS1 GTIN Management Standard<\/a> and the <a href=\"https:\/\/docs.opencart.com\/\" target=\"_blank\" rel=\"noopener\">official OpenCart documentation<\/a>. Actual capabilities always depend on system versions, licences and available interfaces.<\/p>\n<\/div>\n<div class=\"wp-block-group platform-fit-brief is-layout-flow wp-block-group-is-layout-flow\"><p class=\"wp-block-paragraph\"><span>01<\/span><strong>Which data moves?<\/strong><small>Products, variations, pricing, stock, customers, orders, documents and shipment updates.<\/small><\/p>\n<p class=\"wp-block-paragraph\"><span>02<\/span><strong>Which system manages it?<\/strong><small>Each field receives one primary source and an explicit change rule.<\/small><\/p>\n<p class=\"wp-block-paragraph\"><span>03<\/span><strong>What happens on failure?<\/strong><small>Validation, logs, alerts, retries and human decisions for genuine exceptions.<\/small><\/p>\n<\/div>\n<h2 class=\"wp-block-heading\">What does \u201cconnecting an eShop to ERP\u201d actually mean?<\/h2>\n<p class=\"wp-block-paragraph\">It is a controlled data flow between the online store and a commercial or accounting system. One flow may publish products, prices and availability to the store; another may send new orders to ERP; a third may return a document number or shipment status. It is not necessarily one bridge that does everything.<\/p>\n<p class=\"wp-block-paragraph\">A dependable solution is divided into smaller flows, each with its own trigger, data, permissions, cadence and failure behavior. A temporary product-feed issue should not have to stop order export, and retrying one failed order should not create a duplicate ERP record.<\/p>\n<h2 class=\"wp-block-heading\">ERP, API and XML are not the same thing.<\/h2>\n<p class=\"wp-block-paragraph\">ERP is the operational system in which a business may manage products, inventory, customers, orders and accounting documents. An API is an agreed interface through which applications request or send data. XML is a data representation format; it can be delivered as a file or feed, but it does not define when imports run, how fields are mapped or how errors are handled.<\/p>\n<p class=\"wp-block-paragraph\">A supplier may offer a product XML feed without an order API. An ERP may expose an API, a scheduled export or a connector limited to a particular version. Technical discovery begins with what is genuinely available rather than assuming every vendor supports the same method.<\/p>\n<h2 class=\"wp-block-heading\">Every field needs one primary data source.<\/h2>\n<p class=\"wp-block-paragraph\">If a price can be changed in ERP and eShop without a priority rule, the next update may undo a correct change. The same applies to stock, titles, descriptions, tax, categories and images. The team decides where each datum is maintained and which system is allowed to update it.<\/p>\n<p class=\"wp-block-paragraph\">A common pattern keeps item code, price and accounting stock in ERP while the eShop owns commercial titles, descriptions, SEO fields, categories and media. That is not a universal rule; it is one possible architecture that must match the business operation.<\/p>\n<div class=\"platform-fit-router\" aria-hidden=\"true\"><span>PRIMARY SOURCE \/ WRITE RULE<\/span><div><b>ERP \/ FEED<\/b><i><\/i><strong>MAP<\/strong><i><\/i><b>ESHOP<\/b><\/div><ol><li>ID<\/li><li>PRICE<\/li><li>STOCK<\/li><li>CONTENT<\/li><\/ol><\/div>\n<h2 class=\"wp-block-heading\">SKU, barcode and GTIN provide the matching foundation.<\/h2>\n<p class=\"wp-block-paragraph\">A product name is not a safe identifier. It can change, be translated or be reused across variations. Each trade item needs a stable code and a clear relationship between the internal item code, store SKU, barcode or GTIN and supplier identifier.<\/p>\n<p class=\"wp-block-paragraph\">GS1 notes that unique identification and communication of changes between trading partners are essential to correct product presentation and fulfilment in eCommerce. Before bulk import, the process audits duplicate codes, missing IDs, variations and identifier changes.<\/p>\n<h2 class=\"wp-block-heading\">Product mapping is a business rule, not a field-copying exercise.<\/h2>\n<p class=\"wp-block-paragraph\">A feed may call a category \u201cLiving room\u201d, the store may use \u201cHome furniture\u201d and ERP may represent the same group with a numeric code. Mapping is required for categories, attributes, units, tax, weight, dimensions, brand, images and variations. The process also defines what happens when a required field is absent or invalid.<\/p>\n<p class=\"wp-block-paragraph\">A safe importer does not automatically publish every incomplete record. It may keep new items in draft, reject unsafe rows or route exceptions for review. That protects catalogue quality, SEO and the buying experience.<\/p>\n<h2 class=\"wp-block-heading\">Pricing and stock need an explicit cadence and safety rules.<\/h2>\n<p class=\"wp-block-paragraph\">Real time is not always necessary or available. A fast-moving store with scarce inventory may require more frequent updates than a made-to-order catalogue. Cadence depends on volume, API limits, processing cost and commercial risk.<\/p>\n<p class=\"wp-block-paragraph\">The design may include stock buffers, checks for zero or negative prices, tolerance for temporarily stale data and a defined response when the source is unavailable. A failed feed must not zero an entire catalogue or publish a price that failed validation.<\/p>\n<h2 class=\"wp-block-heading\">Order export needs to be safely repeatable.<\/h2>\n<p class=\"wp-block-paragraph\">An order contains more than line items: customer, addresses, tax, discounts, shipping, payment and status. The business must decide when an order becomes ready for ERP \u2014 at creation, after payment or following human review.<\/p>\n<p class=\"wp-block-paragraph\">Each export uses a stable identifier so a retry cannot create a second order. The result is stored with the ERP number or failure message. Returns, cancellations and partial fulfilment are designed separately because they are not simple reversals of the original flow.<\/p>\n<div class=\"wp-block-group platform-integration-slip is-layout-flow wp-block-group-is-layout-flow\" aria-hidden=\"true\"><p class=\"wp-block-paragraph\"><span>INTEGRATION CONTROL<\/span><b>PRODUCT SOURCE<\/b><i>\u2192<\/i><b>STOCK<\/b><i>\u2192<\/i><b>ORDER<\/b><i>\u2192<\/i><b>ERP<\/b><i>\u2192<\/i><b>STATUS<\/b><strong>VALIDATE \/ LOG \/ RETRY \/ ALERT<\/strong><\/p><\/div>\n<h2 class=\"wp-block-heading\">One-way or two-way integration? Only what the operation genuinely needs.<\/h2>\n<p class=\"wp-block-paragraph\">Two-way editing increases the number of possible conflicts. If ERP sends stock and the store sends orders, those are two separate one-way flows \u2014 not necessarily full synchronisation of every field in both directions.<\/p>\n<p class=\"wp-block-paragraph\">Start with the flows that remove the most manual error or resolve the largest operational problem. Additional directions can be enabled after data, logs and real operating experience are strong enough to support them.<\/p>\n<h2 class=\"wp-block-heading\">Validation, logs, alerts and retries make an integration operable.<\/h2>\n<p class=\"wp-block-paragraph\">The useful question is not whether an error will ever occur, but whether it will be found quickly and understood. Logs identify the flow, record, time, result and an actionable message. They should not retain unnecessary personal data or access secrets.<\/p>\n<p class=\"wp-block-paragraph\">Temporary failures can retry at a controlled rate. Permanent failures, such as an unknown tax code or malformed XML, stop the affected record and raise an alert. Endless blind retries load the systems and hide the underlying defect.<\/p>\n<h2 class=\"wp-block-heading\">Security requires least privilege and controlled secrets.<\/h2>\n<p class=\"wp-block-paragraph\">API keys and credentials do not belong in public code or browser-downloadable files. Every account receives only the permissions it needs, connections use encryption where supported, and keys should be replaceable without rebuilding the complete solution.<\/p>\n<p class=\"wp-block-paragraph\">When customer or order data moves, the business must define what is necessary, who can access it, how long logs are retained and how its obligations are handled. Technical delivery does not replace legal or accounting advice.<\/p>\n<h2 class=\"wp-block-heading\">WooCommerce, OpenCart or custom commerce: the principle is shared, implementation differs.<\/h2>\n<p class=\"wp-block-paragraph\">WooCommerce provides a REST API for products, orders and other resources. OpenCart offers an extensible architecture, while the available integration route depends on version, extensions and existing custom code. A custom commerce system requires documentation or a technical audit of its endpoints and data model.<\/p>\n<p class=\"wp-block-paragraph\">Firstidea builds integrations for <a href=\"https:\/\/www.firstidea.gr\/en\/e-shop-development\/e-shop-development-with-wordpress-woocommerce\/\">WooCommerce<\/a>, <a href=\"https:\/\/www.firstidea.gr\/en\/e-shop-development\/e-shop-development-with-opencart\/\">OpenCart<\/a> and custom systems. Platform choice follows catalogue, operations, team and future change \u2014 not simply whether a connector exists. See also <a href=\"https:\/\/www.firstidea.gr\/en\/blog\/e-commerce\/woocommerce-vs-opencart-which-eshop-platform-should-you-choose\/\">WooCommerce or OpenCart<\/a>.<\/p>\n<h2 class=\"wp-block-heading\">Testing must cover normal flows and intentional failures.<\/h2>\n<p class=\"wp-block-paragraph\">Before production, representative products cover simple items, variations, missing images, special tax, identifier changes and zero stock. Orders cover discounts, shipping, multiple payment methods, cancellation and safe retry.<\/p>\n<p class=\"wp-block-paragraph\">Rollout is staged: a read-only check or limited sample first, then one flow, then the remaining flows. The release has a backup, rollback route, monitoring for the first cycles and a named decision owner for every exception.<\/p>\n<h2 class=\"wp-block-heading\">What determines the time and cost of an integration?<\/h2>\n<p class=\"wp-block-paragraph\">Field count alone is not enough. Important factors include documentation quality, available interfaces, versions, licences, volume, variations, update directions, exceptions, historical data and the required monitoring level.<\/p>\n<p class=\"wp-block-paragraph\">A responsible estimate begins with samples and technical answers from all parties. Firstidea\u2019s <a href=\"https:\/\/www.firstidea.gr\/en\/e-shop-development\/erp-xml-integrations\/\">ERP and XML integration service<\/a> structures that work from inventory and mapping through testing, controlled rollout and support.<\/p>\n<div class=\"wp-block-group platform-fit-scorecard is-layout-flow wp-block-group-is-layout-flow\" aria-hidden=\"true\"><p class=\"wp-block-paragraph\"><span>INTEGRATION READINESS<\/span><b>INTERFACES<\/b><i><\/i><b>DATA<\/b><i><\/i><b>EXCEPTIONS<\/b><i><\/i><b>MONITORING<\/b><strong>TEST \/ RELEASE \/ SUPPORT<\/strong><\/p><\/div>\n<h2 class=\"wp-block-heading\">Checklist before requesting an estimate.<\/h2>\n<p class=\"wp-block-paragraph\">You do not need a finished technical specification. You do need the real environment and the main operational priorities.<\/p>\n<ul class=\"wp-block-list platform-choice-list\"><li>Exact ERP, eShop and critical-extension versions.<\/li><li>Technical contact or authorised ERP partner.<\/li><li>API documentation, sample XML\/CSV or export description.<\/li><li>Fields that need to move and intended direction.<\/li><li>Representative products, variations, orders and exceptions.<\/li><li>Required cadence and acceptable delay for each flow.<\/li><li>Current manual steps, frequent errors and business impact.<\/li><li>Logging, alerting, reporting and support requirements.<\/li><\/ul>\n<h2 class=\"wp-block-heading\">Where does this guide sit in Firstidea\u2019s eCommerce silo?<\/h2>\n<p class=\"wp-block-paragraph\">The main <a href=\"https:\/\/www.firstidea.gr\/en\/e-shop-development\/\">eCommerce development hub<\/a> explains the wider commerce system. The <a href=\"https:\/\/www.firstidea.gr\/en\/e-shop-development\/erp-xml-integrations\/\">ERP and XML specialist page<\/a> owns the commercial service and delivery process. This guide answers the technical and operational questions that come before a decision.<\/p>\n<p class=\"wp-block-paragraph\">For customer-specific pricing, roles and order approval, see <a href=\"https:\/\/www.firstidea.gr\/en\/e-shop-development\/b2b-ecommerce-development\/\">B2B eCommerce<\/a>. For supplier-fed catalogues, see <a href=\"https:\/\/www.firstidea.gr\/en\/dropshipping-e-shop-construction\/\">dropshipping eShop development<\/a>. These pages connect because they share real data flows, not to manufacture an artificial web of links.<\/p>\n<h2 class=\"wp-block-heading\">Frequently asked questions<\/h2>\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Can any ERP be connected to an eShop?<\/summary><p class=\"wp-block-paragraph\">Only when a technically safe exchange method exists, such as an API, connector or controlled file export. Version, licences and ERP-provider cooperation affect the feasible depth.<\/p>\n<\/details>\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Does the integration need to be real time?<\/summary><p class=\"wp-block-paragraph\">Not always. The right cadence depends on operational risk, volume, system limits and the acceptable delay for each flow.<\/p>\n<\/details>\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Is API better than XML?<\/summary><p class=\"wp-block-paragraph\">There is no universally better option. An API may support more interactive flows, while a well-defined XML feed is sufficient for many scheduled imports. Interface quality and stability matter most.<\/p>\n<\/details>\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>How are duplicate products prevented?<\/summary><p class=\"wp-block-paragraph\">Stable IDs, explicit SKU\/GTIN\/supplier-code mapping, uniqueness constraints and checks before every create or update operation.<\/p>\n<\/details>\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>How are duplicate orders prevented?<\/summary><p class=\"wp-block-paragraph\">Each order uses a stable external identifier, and retries check whether the ERP record already exists. The ERP result or record number is stored with the order.<\/p>\n<\/details>\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Can descriptions remain in the eShop while prices come from ERP?<\/summary><p class=\"wp-block-paragraph\">Yes, when that rule is explicit. Different fields commonly have different primary sources so commercial content is not overwritten during a price update.<\/p>\n<\/details>\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>What if a supplier changes its XML without warning?<\/summary><p class=\"wp-block-paragraph\">The importer validates structure and required fields before writing. An incompatible change stops the affected flow and raises an actionable alert.<\/p>\n<\/details>\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Can you take over a failing existing integration?<\/summary><p class=\"wp-block-paragraph\">Yes, after reviewing code, scheduled jobs, logs, credentials, samples and real incidents to locate the issue across store, ERP, feed or infrastructure.<\/p>\n<\/details>\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Is staging required?<\/summary><p class=\"wp-block-paragraph\">For changes affecting catalogue, price, stock or orders, a representative safe environment materially reduces risk. Production rollout should still be staged and monitored.<\/p>\n<\/details>\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Who maintains the integration after launch?<\/summary><p class=\"wp-block-paragraph\">That responsibility must be agreed before release: who monitors logs, who owns the ERP response, who reviews commercial exceptions and who approves field or flow changes.<\/p>\n<\/details>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>A practical guide to connecting an eShop with ERP, API or XML: products, pricing, stock, orders, validation, monitoring and controlled rollout.<\/p>\n","protected":false},"author":1,"featured_media":11305,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_firstidea_insight_topic":"eCommerce integrations","_firstidea_insight_seo_title":"How to Connect an eShop to ERP or XML | Firstidea","_firstidea_insight_description":"How eShop\u2013ERP and XML integrations work: identifiers, products, pricing, stock, orders, logging, testing and ongoing maintenance.","_firstidea_insight_legacy_url":"https:\/\/www.firstidea.gr\/en\/blog\/e-commerce\/how-to-connect-eshop-erp-xml\/","_firstidea_insight_author":"Firstidea eCommerce & integrations team","_firstidea_insight_reviewer":"Firstidea technical & eCommerce review","_firstidea_insight_status":"current","_firstidea_insight_last_verified":"2026-08-31","_firstidea_insight_legacy_id":0,"footnotes":""},"categories":[35],"tags":[],"firstidea_insight_hub":[51,51],"class_list":["post-11303","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-e-commerce-en"],"_links":{"self":[{"href":"https:\/\/www.firstidea.gr\/en\/wp-json\/wp\/v2\/posts\/11303","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.firstidea.gr\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.firstidea.gr\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.firstidea.gr\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.firstidea.gr\/en\/wp-json\/wp\/v2\/comments?post=11303"}],"version-history":[{"count":2,"href":"https:\/\/www.firstidea.gr\/en\/wp-json\/wp\/v2\/posts\/11303\/revisions"}],"predecessor-version":[{"id":11310,"href":"https:\/\/www.firstidea.gr\/en\/wp-json\/wp\/v2\/posts\/11303\/revisions\/11310"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.firstidea.gr\/en\/wp-json\/wp\/v2\/media\/11305"}],"wp:attachment":[{"href":"https:\/\/www.firstidea.gr\/en\/wp-json\/wp\/v2\/media?parent=11303"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.firstidea.gr\/en\/wp-json\/wp\/v2\/categories?post=11303"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.firstidea.gr\/en\/wp-json\/wp\/v2\/tags?post=11303"},{"taxonomy":"firstidea_insight_hub","embeddable":true,"href":"https:\/\/www.firstidea.gr\/en\/wp-json\/wp\/v2\/firstidea_insight_hub?post=11303"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}