Web/Guru

Shopify and Microsoft Dynamics 365 Business Central: the built-in connector vs a custom integration

What Microsoft's Shopify Connector for Business Central syncs, where it stops, and when to extend it with AL or build custom. Mapping table and checklist.

Published
Updated
October 5, 2026
Read time
10 min read
Written by
Webguru
Shopify and Microsoft Dynamics 365 Business Central: the built-in connector vs a custom integration
/On this page01 / 10

If you run Microsoft Dynamics 365 Business Central and sell on Shopify, Microsoft already gives you an integration: the Shopify Connector. It comes preinstalled in new Business Central online environments. It syncs products, prices, stock, customers, B2B companies, orders, shipments, refunds and payouts, and it runs on the job queue.

So the real question isn't "how do we connect Shopify to Business Central?" It's "where does the built-in connector stop for *our* business, and what's the cheapest way to cover the gap?" This guide answers that from Microsoft's own documentation (checked September 25, 2026). It's written for merchants in the UK, the US, Germany/DACH, Australia and New Zealand, where Business Central is common. Outside the US, store prices usually include VAT or GST, which affects how the connector maps prices and taxes.

The short answer

  • Configure the connector first. For a single-currency store selling standard products to consumers, the connector plus a well-set-up shop card usually covers everything.
  • Extend it with AL when the gap is a business rule, such as which customer to use, which dimension to set, or how to calculate available stock. Microsoft provides events, public façade codeunits and extensible enums for exactly this.
  • Build custom only when you need Shopify data or API calls the connector doesn't make, such as volume price breaks, list-type metafields, multi-option variant matrices managed from Business Central, or near-real-time flows the job queue can't give you. Even then, a hybrid (connector plus your own app for the gap) is usually cheaper than replacing it.

What the Microsoft connector does

DataDirectionNotes from Microsoft's docs
Items ↔ products and variantsBothImages, variants, barcodes, vendor item numbers, tags, metafields. Exports item attributes, extended and marketing text, and translations.
PricesBusiness Central → ShopifyPrice and compare-at price from the unit price, customer price group, customer discount group and currency. Market catalogs and B2B catalogs.
InventoryBusiness Central → ShopifyPer mapped location. Two built-in calculations: projected available balance at today, and free (unreserved) inventory.
Customers and B2B companiesBothMatches customers by email or phone, or by bill-to address. Matches companies by email or phone, or by tax ID. Country templates set posting groups.
OrdersShopify → Business CentralOnline Store, POS and B2B orders, with shipping, gift cards, tips, transactions, PO number and fraud risk. Creates a sales order, or a sales invoice if the order is already fulfilled.
ShipmentsBusiness Central → ShopifyPosted sales shipments become fulfillments, with tracking numbers.
Returns and refundsShopify → Business CentralImport only, or automatic credit memos or return orders.
Transactions and payoutsShopify → Business CentralShopify Payments payouts are for information only. They don't post to the general ledger.
Posted sales invoicesBusiness Central → ShopifyExported as orders so buyers see all their invoices in one place.

A few requirements to check before you plan anything:

  • The connector works only with Business Central online. It isn't available on-premises or for Embed Apps, and it doesn't connect to other Dynamics 365 apps such as Sales.
  • You need a Business Central license and a Shopify plan. Users need the SHPFY – ADMIN permission set.
  • You can connect several Shopify shops, each with its own settings, and the same shop can be connected from more than one company or environment. That's useful for testing.
  • Syncs run as job queue reports, such as report 30104 to sync orders and report 30102 to sync stock. Microsoft suggests syncing inventory every 15–30 minutes. Auto Sync Orders starts an order import when Shopify reports a new order, but it doesn't take filters.

Where the connector stops

These are limits that Microsoft documents, not guesses. Check each one against your catalog and processes.

Pricing

  • The connector calculates prices with a temporary sales quote for a quantity of 1. You can't export quantity-based prices or discounts. If you sell to trade customers with volume pricing, those price breaks have to be managed in Shopify or by custom code.
  • It exports one price per product and lets Shopify apply local taxes, currencies and rounding, unless you set up market catalogs with their own price settings.
  • Syncing prices for B2B catalogs requires Shopify Plus, according to Microsoft. Shopify offers B2B on every plan, but assigning catalogs directly to companies and company locations is Plus-only.

Products and variants

  • Business Central has a single variant code. If a Shopify product uses two or more options (for example Size × Color), the connector can't create new variants on it, and you can't add an item as a variant to it.
  • Units of measure as variants share one availability figure, so stock for "box of 6" and "single" can be briefly wrong between syncs.
  • Metafields: list types, rich text, link and rating aren't supported. Clearing a value in Business Central doesn't delete it in Shopify.
  • Only custom collections can be assigned. Smart collections are rule-based and can't be.
  • Bundles: the Shopify Bundles app blocks inventory updates through the API. Microsoft recommends mapping bundle products to non-inventory items, which the stock sync skips.

Orders, locations and fulfillment

  • Archived orders can't be imported. Turn off automatic order archiving in Shopify.
  • If an order is edited in Shopify after Business Central has processed it, the connector flags the conflict but doesn't change your sales document.
  • A Shopify line fulfilled from two locations becomes one Business Central line with one location. Orders with the same product on two lines (for example Buy X get Y) can't be fulfilled from Business Central.
  • When you add a new Shopify location, Shopify doesn't create inventory records for existing products there, so the connector can't sync stock to it until you assign them.
  • Taxes are recalculated in Business Central when the sales document is created. Wrong posting groups mean wrong VAT, even though the Shopify order was right.

B2B customers

  • A Shopify company must have a main contact, or it's skipped. Only the main contact is imported, and the oldest company location is used to create the customer.

Field-mapping reference

Agree on these before the first sync. Changing SKU mapping later means re-mapping products.

Shopify fieldBusiness Central fieldDirectionWatch out for
Product titleItem description, or item translationBothUpdated only if Can Update Shopify Products is on
Variant titleVariant codeBC → ShopifyUses the code because Shopify needs unique variant titles
SKUItem no., item no. + variant code, vendor item no. or barcode (per SKU Mapping)BothChoose one scheme and make SKUs unique first
BarcodeItem reference of type barcodeBothChecked first when matching. Custom builds on Shopify API 2026-10 or later should use the new barcodes field, because ProductVariant.barcode is deprecated
Price / compare-at priceCalculated price at quantity 1BC → ShopifyOn import, the price sets the unit price of newly created items only
Cost per itemUnit costBothOn import, used for newly created items only
Product type / vendorItem category (by description) / vendor (by name)BothMatched by name, so keep names identical in both systems
InventoryAvailable stock per mapped locationBC → ShopifyNon-inventory and service items are skipped
CustomerCustomer, with templates per countryBothNeeds an address. Export needs an email and a unique phone number
Company tax IDVAT Registration No. or Registration No.BothPick one in Company Tax ID Mapping
PO numberExternal Document No.Shopify → BC
Shipping lineShipping charges G/L account, item or item chargeShopify → BCOnly the first shipping charge sets the shipment method
RefundSales credit memo or return orderShopify → BCThe original order must already be processed
Fulfillment and trackingPosted shipment, shipping agent, package tracking no.BC → Shopify

Extend the connector or build your own?

ApproachWhat it isGood forTrade-off
ConfigureShop card settings, mappings, job queueStandard DTC storesNone, but know the limits above
Per-tenant extension (AL)Subscribe to the connector's events, call its façade codeunits, add enum optionsBusiness rules on data the connector already movesMicrosoft says you can't change the connector's API calls
HybridConnector plus your own unlisted Shopify app for the missing callsVolume pricing, unsupported metafields, extra webhooksYou own a second integration and its API upgrades
Fully customShopify app plus Business Central APIs or custom API pages, usually with middlewareUnusual data models, on-premises Business CentralYou own everything: mapping, retries, monitoring, upgrades

Many gaps are AL-sized. Here's a small extension that copies the Shopify order number into Your Reference, a standard sales header field your document layouts can print. External Document No. is left alone because the connector already fills it with the buyer's PO number:

al
codeunit 50120 "Shopify Order Reference"
{
    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Shpfy Order Events", OnAfterCreateSalesHeader, '', false, false)]
    local procedure SetYourReference(OrderHeader: Record "Shpfy Order Header"; var SalesHeader: Record "Sales Header")
    begin
        // Parameter names must match the publisher: OrderHeader, SalesHeader.
        SalesHeader."Your Reference" := CopyStr(OrderHeader."Shopify Order No.", 1, MaxStrLen(SalesHeader."Your Reference"));
        SalesHeader.Modify(true);
    end;
}

If you go custom, plan for these constraints:

  • Shopify's API terms. An app whose primary purpose is sending merchant data to a third party needs Shopify's prior written consent. Microsoft flags this for anyone who wants to publish their own Business Central connector and suggests checking whether an unlisted app fits instead. For one merchant, that usually means a custom-distributed app, but review the terms with your legal team either way. Our custom vs public app guide explains the distribution options.
  • Order history. Apps see only the last 60 days of orders unless Shopify approves the read_all_orders scope.
  • Business Central limits. OData requests are limited per user: 6,000 in a five-minute sliding window, 5 processed at the same time, and 100 operations per $batch. A request times out after 8 minutes. Over the limit, you get HTTP 429.
  • Business Central webhooks expire after three days unless you renew them. They're sent about 30 seconds after a change, and a burst of more than 1,000 changes arrives as one "collection" notification that you have to re-query.

Your client should back off on 429 and 503, and check for an existing document before it creates one:

js
// Node 18+. Creates a sales order once, keyed on the Shopify order number.
async function bc(url, token, options = {}, attempt = 0) {
  const res = await fetch(url, {
    ...options,
    headers: { Authorization: `Bearer ${token}`, "Content-Type": "application/json" },
  });
  if ((res.status === 429 || res.status === 503) && attempt < 5) {
    await new Promise((r) => setTimeout(r, 2 ** attempt * 1000));
    return bc(url, token, options, attempt + 1);
  }
  if (!res.ok) throw new Error(`Business Central ${res.status}: ${await res.text()}`);
  return res.status === 204 ? null : res.json();
}
async function createOrderOnce(base, token, shopifyOrder) {
  const ref = shopifyOrder.name.replace(/'/g, "''");
  const found = await bc(`${base}/salesOrders?$filter=externalDocumentNumber eq '${ref}'`, token);
  if (found.value.length) return found.value[0]; // already created on an earlier delivery
  return bc(`${base}/salesOrders`, token, {
    method: "POST",
    body: JSON.stringify({
      customerNumber: shopifyOrder.bcCustomerNumber, // resolved by your own customer mapping
      externalDocumentNumber: shopifyOrder.name,
    }),
  });
}

Reliability practices

  • Choose a system of record per entity before go-live. Microsoft's own advice is to decide whether item and customer data is owned by Business Central or by Shopify, and not to mix directions without a rule.
  • Put related job queue entries in the same category. Microsoft recommends this so order, customer and product syncs don't collide.
  • Check skipped records. A job queue run completes successfully even when it skips blocked items or invalid customers, so review the Shopify Skipped Records page each week.
  • Upgrade Business Central on time. The connector uses a fixed Shopify API version, adopted at each major release. Shopify supports each version for at least 12 months. Microsoft's own example: the October 2025 connector uses API version 2025-07, which was supported until July 1, 2026. Don't count on using the full five-month update window that Business Central allows.
  • In custom code, don't trust webhooks alone. Verify, deduplicate and reconcile on a schedule. See Shopify webhooks you can trust. Build on the GraphQL Admin API, not REST. See Moving from REST to GraphQL.

Go-live checklist

  1. Test with a Business Central sandbox and a Shopify development store or trial. If you must test against Business Central production, first turn off auto-creating items, customers and sales documents.
  2. Back up your products and customers from Shopify before the first sync.
  3. Set SKU Mapping and fix duplicate or empty SKUs and barcodes.
  4. Map locations, shipment methods, payment methods and payment terms.
  5. Set up customer templates per country, with general business, customer and VAT posting groups.
  6. For UK, EU, Australian and New Zealand stores with tax-inclusive prices, turn on Prices including VAT and set the domestic VAT business posting group on the shop card.
  7. Set the G/L accounts for shipping, sold gift cards, tips, refunds and (for POS) cash rounding.
  8. Turn off automatic order archiving in Shopify.
  9. Check that the time zone is set on your company's post code, so order dates convert correctly.
  10. Place test orders for each scenario: gift card, partial refund, return, POS, B2B, an order edited after import, and a line split across locations.
  11. Schedule the job queue and set the Shopify Activities cue thresholds.
  12. Note which Shopify API version your Business Central release uses and when your next major upgrade is due.

When you don't need us

If the connector covers your catalog and processes, you don't need custom development. A Business Central partner can configure it, and Microsoft supports the connector through its standard support model. Bring in developers when you've hit a documented limit that costs you money every week, such as manual B2B price updates or stock errors on bundles.

Want help with a Shopify and Business Central integration?

We build AL extensions for the connector, hybrid apps for the gaps, and fully custom integrations, and we can review an existing setup against the limits above. Tell us what's breaking on our Shopify API and ERP integration page. For store, theme and app work around the integration, see our Shopify development services, or hire a Shopify developer with ERP experience to work with your BC partner.

Sources

/Tags#Shopify#Business Central#ERP Integration

Written by

Webguru

Shopify Development Team

Webguru.pk is a Shopify development team in Lahore, Pakistan, building stores, custom apps and integrations for brands worldwide.

/Share

Need a hand with this?

We design, build and fix this kind of work for Shopify, SaaS and AI products.

/faqs

Shopify and Business Central Integration: Frequently Asked Questions

Yes. Microsoft's Shopify Connector is preinstalled in new Business Central online environments. It syncs items and variants, prices, inventory, customers and B2B companies, orders, shipments, refunds and Shopify Payments payouts, and runs on the job queue.

No. Microsoft documents that the connector is available only for Business Central online, not for on-premises deployments or Embed Apps. On-premises setups need a custom integration.

It can sync prices for market catalogs and B2B catalogs, but Microsoft says B2B catalog price sync requires Shopify Plus. Prices are calculated for a quantity of 1, so quantity-based prices and volume discounts can't be exported.

Yes. You can build a per-tenant AL extension that subscribes to the connector's events, calls its public façade codeunits and adds options to its extensible enums. Microsoft notes that extensions can't change the connector's API calls, so missing Shopify data needs a separate app alongside it.

The connector can't import archived orders, so turn off automatic order archiving in Shopify. It also imports only orders created or changed since the last sync, and it skips orders excluded by the filters on the Sync Orders from Shopify request page.

As often as you schedule its job queue reports. Microsoft suggests syncing inventory every 15 to 30 minutes, and the Auto Sync Orders setting starts an order import when Shopify reports a new order.

Hit a limit in the Business Central connector?

Tell us which sync is costing you time, and we'll suggest whether configuration, an AL extension or a custom integration will fix it.

or write to+44 7882 755642