Articles in this section

Shopify – Microsoft Dynamics 365 Business Central D2C B2B implementation guide

Summary: This article explains how to install, configure, and enable the Shopify – Microsoft Dynamics 365 Business Central (GraphQL) D2C B2B integration template in Celigo. It covers prerequisites, connection setup, initial data setup, settings configuration, flow enablement, and troubleshooting. The template ships with 43 pre-built flows covering orders, fulfillment, inventory, billing, refunds, returns, cancellations, payouts, and B2B commerce.

The Shopify – Microsoft Dynamics 365 Business Central (GraphQL) integration template connects your Shopify storefront to Business Central so that both systems share a single, accurate version of your business data. It ships as 43 pre-built flows across 11 modules covering orders, fulfillment, inventory, billing, refunds, returns, cancellations, payouts, and B2B commerce; no custom development is required for standard operations.

Just getting started? Start here

For a core D2C go-live (orders, customers, fulfillment, and inventory), follow these sections in order:

  1. Prerequisites
  2. Install the template
  3. Initial setup
  4. Configure settings
  5. Enable flows and schedule
  6. Troubleshooting

You can add billing automation, refunds, returns, payouts, and the B2B module after the core flows are running.

What the Shopify – Business Central D2C and B2B template automates

The template automates the full commerce lifecycle between Shopify and Business Central:

  • Orders: Every Shopify order lands in Business Central as a Sales Order within minutes. Discounts, taxes, shipping, tips, gift cards, duties, and state delivery fees each post as clearly labeled lines against your chosen G/L accounts.
  • Customers: Customer records sync in both directions. Business Central customers can be published to Shopify, and Shopify customers are created or updated in Business Central on order import.
  • Fulfillment: When a warehouse posts a sales shipment in Business Central, the order is marked fulfilled in Shopify, and the customer receives a tracking notification. The reverse direction also works for third-party logistics (3PL)-fulfilled orders.
  • Inventory: Business Central inventory levels publish to Shopify in near real time. Multi-location inventory and in-transit transfers are supported.
  • Billing: Auto-billing posts ship-and-invoice in Business Central. Shopify payment transactions post to Cash Receipt Journals. Payout reconciliation accounts for fees, disputes, and variances.
  • Refunds and returns: Shopify refunds create Business Central credit memos; returns flow through Sales Return Orders with approval, receipt, and refund-back-to-Shopify all automated.
  • B2B (Shopify Plus): B2B companies, company locations, and contacts sync with Business Central customers and contacts. Business Central price lists publish as Shopify B2B catalogs. B2B orders post against the correct company customer.

How the template uses Business Central

Area Business Central concept used
Orders Every Shopify order is a Sales Order (BC uses no cash-sale document)
Returns Sales Return Order (→ Return Receipt → Credit Memo)
Refunds Sales Credit Memo (+ refund written back to Shopify)
Data sourcing OData delta queries via Celigo eTail API pages
Shopify ↔ item linking Celigo eTail Item ID Map table in Business Central
Pricing Item Unit Price + Sales Price Lists (per-market and B2B catalogs)
Kits and bundles Assembly BOM (no integration code; configure in BC)
Lot and serial numbers Native Item Tracking with FEFO (first expired, first out) auto-assign
Market segmentation Dimension stamping on Sales Orders (via the Celigo eTail Shopify extension)

D2C vs. B2B: which flows each commerce model uses

This template covers two distinct commerce models in one integration. You can run either or both, depending on your Shopify plan.

  D2C (Direct-to-Consumer) B2B
Who places orders Individual shoppers on your Shopify storefront Business buyers purchasing through Shopify B2B companies
Shopify plan required Any plan Shopify Plus
How orders route in BC Sales Order against the individual buyer's customer record Sales Order against the company's BC customer (Partner Type = Company)
Flows Flows 1–35 (General through Payout) Flows 36–43 (B2B module)
Key setup Item ID map, customer sync, location map, tax and discount settings All D2C setup plus B2B company and contact sync, price list to catalog sync

D2C covers the full order lifecycle for consumer orders: order import, customer sync, fulfillment, inventory, billing, refunds, returns, cancellations, and payout reconciliation.

B2B adds company account management on top of D2C: Shopify B2B companies and their locations sync with BC customers, contacts sync in both directions, and BC Sales Price Lists publish as Shopify B2B catalogs so each company sees its negotiated prices at checkout. When Sync Shopify B2B (company) orders via the B2B module is on, B2B orders are routed to the B2B order flow (the D2C order flow always filters them out, so there is no overlap).

To start, set up and validate D2C flows first. Once D2C is stable, layer in the B2B module.

Shopify to Business Central data model and record mapping

Shopify Business Central
Order Sales Order
Order line (by SKU) Sales Order line, resolved via Item ID Map (SKU = Item No.)
Customer Customer (Sell-to, Bill-to, and Ship-to addresses)
Product variant Item (matched by SKU = BC Item No.)
Fulfillment Posted Sales Shipment
Refund Sales Credit Memo
Return Sales Return Order
Inventory level Item Ledger quantity (queried via BC inventory API)
Inventory transfer Transfer Order
Payment and payout Cash Receipt Journal entry or General Journal entry
Market Dimension on the Sales Order (Shopify Market meta field)
B2B Company Customer (Partner Type = Company)
B2B Company Location Ship-to Address on the company customer
B2B Contact Contact
B2B Catalog Sales Price List

All 43 flows at a glance

The table below lists all 43 flows by module, with direction (SHP → BC or BC → SHP) and trigger type. Use it to plan your enablement sequence and scheduling. See Enable flows and schedule for the recommended order.

Module # Flow name Direction Trigger
General 1 Business entities to Business Central (add) SHP → BC On-demand
General 2 Markets to Business Central (add) SHP → BC On-demand
Product 3 Business Central items to Shopify products (productSet) BC → SHP Scheduled
Product 4 Business Central variant items to Shopify products (add or update) BC → SHP Scheduled
Product 5 Business Central item metafields to Shopify (add or update) BC → SHP Scheduled
Product 6 Business Central price lists to Shopify market price lists (add or update) BC → SHP Scheduled
Product 7 Shopify products to Microsoft Dynamics 365 Business Central item ID map (add or ignore) [GraphQL] SHP → BC Scheduled or on-demand
Product 8 Shopify inactive products to Business Central item ID map (delete) [GraphQL] SHP → BC Scheduled
Order 9 Shopify orders to Microsoft Dynamics 365 Business Central sales orders (add or ignore) SHP → BC Scheduled
Order 10 Shopify draft orders to Business Central sales quote / order (by stage) SHP → BC Scheduled
Order 11 Shopify edited orders to Business Central sales order (update) SHP → BC Scheduled
Order 12 Shopify exchange to Business Central sales order (add) SHP → BC Scheduled
Order 13 Shopify customers to Microsoft Dynamics 365 Business Central customers (add or update) SHP → BC Scheduled
Order 14 Microsoft Dynamics 365 Business Central customers to Shopify customers (add or update) BC → SHP Scheduled
Order 15 Business Central order to Shopify order (add) BC → SHP Scheduled
Fulfillment 16 Microsoft Dynamics 365 Business Central posted sales shipment to Shopify fulfillment (add) BC → SHP Scheduled
Fulfillment 17 Shopify fulfillment to Business Central (add) SHP → BC Scheduled
Fulfillment 18 Shopify hold fulfillments on payment pending release SHP Scheduled
Inventory 19 Microsoft Dynamics 365 Business Central inventory to Shopify inventory (add or update) BC → SHP Scheduled
Inventory 20 Business Central transfer order to Shopify inventory transfer (add) BC → SHP Scheduled
Inventory 21 Shopify received inventory transfer to Business Central (add) SHP → BC Scheduled
Billing 22 Business Central sales order to posted invoice (auto-bill) BC internal Scheduled
Billing 23 Microsoft Dynamics 365 Business Central posted sales invoices to Shopify billing (add) BC → SHP Scheduled
Billing 24 Shopify transaction to Business Central payment (add) SHP → BC Scheduled
Billing 25 Shopify order transaction to Business Central customer deposit (add) SHP → BC Scheduled
Billing 26 Business Central posted sales invoices to Shopify orders (invoice export) BC → SHP Scheduled
Refund 27 Shopify refund to Microsoft Dynamics 365 Business Central sales credit memo (add) SHP → BC Scheduled
Refund 28 Business Central credit memo to Shopify refund (add) BC → SHP Scheduled
Cancellation 29 Shopify order cancellation to Business Central (add) SHP → BC Scheduled
Cancellation 30 Microsoft Dynamics 365 Business Central cancellation to Shopify cancellation (add) BC → SHP Scheduled
Returns 31 Shopify returns to Business Central sales return order (add) SHP → BC Scheduled
Returns 32 Business Central return to Shopify (approve) BC → SHP Scheduled
Returns 33 Business Central received return to Shopify (process) BC → SHP Scheduled
Returns 34 Business Central rejected return to Shopify (cancel) BC → SHP Scheduled
Payout 35 Shopify payout to Business Central deposit and journals SHP → BC Scheduled
B2B 36 Shopify companies and locations to Business Central customers (add or update) SHP → BC Scheduled
B2B 37 Business Central customers to Shopify companies (add or update) BC → SHP Scheduled
B2B 38 Shopify company contacts to Business Central contacts (add or update) SHP → BC Scheduled
B2B 39 Business Central contacts to Shopify company contacts (add or update) BC → SHP Scheduled
B2B 40 Business Central price lists to Shopify B2B catalogs (add or update) BC → SHP Scheduled
B2B 41 Business Central price list prices to Shopify B2B catalog prices (add or update) BC → SHP Scheduled
B2B 42 Reconcile Shopify B2B catalog products with Business Central price lists (remove deleted) BC → SHP Scheduled
B2B 43 Shopify B2B orders to Business Central sales orders (add or ignore) SHP → BC Scheduled

Prerequisites

Complete every item in this section before installing the template. Missing prerequisites are the most common cause of errors on new installations.

Install after, not before. Install the template only after all prerequisites are confirmed. Installing first and discovering a missing extension or permission afterward means reconfiguring connections and re-running setup steps.

Business Central requirements

Business Central online environment

The template connects to Business Central online via https://api.businesscentral.dynamics.com. Have your environment name (for example, Sandbox or Production), your tenant ID, and your company name ready before you begin.

Install the Celigo Business Central extensions

Two extensions must be deployed to your Business Central environment. Install them from the Extension Management page or the Business Central admin center.

Extension What it provides
Celigo Shopify Integration for Dynamics 365 Business Central The Celigo eTail API pages the template reads and writes: item ID map, eTail item card, eTail customer card, eTail sales order, eTail credit memo, inventory query, and eTail cross-reference fields on standard documents.
Celigo eTail Shopify extension (this release requires v1.3.0.0) Table extensions for Shopify metadata (order tags, source, financial status, market, presentment currency, variances, customer tags, item tags, product type, published scope, sales channel), variant-grouping fields on the item (product group, Option 1/2/3 name and value, variant scope, variant catalog, image URLs), the item-tracking auto-assign codeunit (lot FEFO and serial first-available), the Applies-to Doc No. API used for multi-invoice refunds, and the price list API used for per-market pricing and B2B catalogs.

Important: Features that depend on the Celigo eTail Shopify extension. This release requires version v1.3.0.0. If it is not installed or is outdated, the following features fail silently or with a 404 Not Found error on /api/celigo/etail/... endpoints: Shopify metadata stamping on orders and customers, order variance stamping, published scope sync, item tags and product type sync, variant grouping and publishing, per-market price lists, B2B catalogs and prices, and item-tracking auto-assign. Deploy the Celigo eTail Shopify extension before enabling any flow that uses these features. Deployment steps are in DEPLOYMENT-STEPS.md shipped with the extension.

Register a Microsoft Entra ID application

The template authenticates to Business Central with OAuth 2.0 (service-to-service, client credentials):

  1. In the Azure portal, register a new application in your tenant.
  2. Grant it the Dynamics 365 Business Central API permission API.ReadWrite.All (application permission) and grant admin consent.
  3. Create a client secret and record the Application (client) ID, the secret value, and your tenant ID.
  4. In Business Central, open Microsoft Entra Applications, register the client ID, and assign a permission set with full access to sales documents, items, customers, contacts, price lists, journals, and the Celigo eTail tables (or SUPER in a sandbox).

Prepare master data

Before going live, confirm the following in Business Central:

  • Every item you sell on Shopify exists in Business Central, and the Shopify variant stock-keeping unit (SKU) matches the Business Central Item No. exactly: this is the matching convention used throughout the template. A mismatch means any order containing that item will fail to import.
  • Items are enabled for the store on the Celigo eTail item card; this controls which items participate in product, inventory, and order-line resolution.
  • Create the non-inventory service items for order line tracking. You only need the items for the scenarios you transact with; at minimum, create a shipping cost item and, if you run promotions, cart and line discount items. Common items include: shipping cost, cart discount, line discount, shipping discount, gift card redemption, gift card sales, tips, cash rounding, duties, custom items, taxes as line items (if used), order variances, refund adjustments, restocking fee, return shipping fee, zero-value exchange tracking, Colorado retail delivery fee, Minnesota road improvement fee, store-credit liability, gift-card refund lines, and a substitute item for kit/lot/serial refund lines.
  • Create the journal batches used by billing and payouts: a Cash Receipt Journal batch and a General Journal batch in Business Central before enabling those flows.
  • Verify your Customer Posting Groups before go-live. When the template creates a customer record in Business Central and no posting group is explicitly mapped, it defaults to DOMESTIC. If your chart of accounts uses different group codes (for example, FOREIGN for international customers or a custom group for B2B accounts), configure the mapping in the customer flow settings before the first order syncs. A customer posted to the wrong group will have G/L entries that do not match your accounting setup.

Shopify requirements

A Shopify store with Admin API access on a plan that supports custom apps. For the B2B module, you need a Shopify Plus plan; B2B companies, catalogs, and price lists are Plus-only features.

The connection uses OAuth to the Shopify Admin GraphQL API (2026-07). Grant all scopes requested during authorization. The template requires the following scopes:

Scope Used for
read_orders, write_orders, read_all_orders Order sync, edits, cancellations
read_draft_orders, write_draft_orders Exchange upsell flows
write_order_edits, read_order_edits Shopify order edit sync
read_products, write_products, read_product_listings, write_product_listings Product publish, item ID map, metafields
read_inventory, write_inventory Inventory level sync and transfers
read_locations, write_locations Location mapping, buy online, pick up in store (BOPIS) pickup locations
read_fulfillments, write_fulfillments Fulfillment sync (BC shipment → Shopify and Shopify → BC)
read_assigned_fulfillment_orders, write_assigned_fulfillment_orders Fulfillment order hold and release
read_merchant_managed_fulfillment_orders, write_merchant_managed_fulfillment_orders Merchant-managed fulfillment flows
read_third_party_fulfillment_orders, write_third_party_fulfillment_orders 3PL fulfillment flows
read_customers, write_customers Customer sync in both directions
read_returns, write_returns Return request, approve, decline, process, and restock
read_shipping, write_shipping Shipping profiles
read_markets, write_markets Markets setup flow, per-market price lists
read_payment_terms, write_payment_terms Payment terms on B2B orders
read_publications, write_publications Published scope sync (requires the Celigo eTail Shopify extension)
write_files File uploads (metafields)
read_shopify_payments_payouts, read_shopify_payments_accounts, write_shopify_payments_disputes, read_shopify_payments_disputes Payout and reconciliation flows. Requires Shopify Payments.
read_companies, write_companies B2B company and location sync (Shopify Plus only)
customer_read_companies, customer_write_companies, customer_read_locations, customer_write_locations B2B customer-scoped company and location access (Shopify Plus only)
customer_read_orders, customer_write_orders B2B order access scoped to the purchasing company (Shopify Plus only)
customer_read_customers, customer_write_customers, customer_read_draft_orders, customer_read_markets, customer_read_metaobjects B2B customer-scoped reads (Shopify Plus only)
read_analytics, read_reports, write_reports Analytics and reporting
read_content, write_content Storefront content access
read_themes, write_themes, write_theme_code Theme access
read_script_tags, write_script_tags Script tag management
read_price_rules, write_price_rules Discount and price rule access
read_marketing_events, write_marketing_events Marketing event tracking
read_resource_feedbacks, write_resource_feedbacks App resource feedback
unauthenticated_read_product_listings, unauthenticated_read_content, unauthenticated_write_customers Unauthenticated storefront access

Celigo requirements

  • An active Celigo integrator.io account licensed for this template.
  • The person performing setup must be able to authorize both connections (account owner or admin with connection permissions).

Install the template

Install the template from the Celigo Marketplace and configure both connections before running any setup flows.

  1. Find the template in the Celigo Marketplace. Go to Marketplace, search for Shopify – Microsoft Dynamics 365 Business Central (GraphQL) D2C, and select Preview. Review the template contents, then select Install now.
  2. Configure the Shopify connection. Select Configure and select an existing Shopify connection, or create a new one. Enter your store name (the your-store part of your-store.myshopify.com) and authorize via OAuth. The base URI resolves to https://your-store.myshopify.com/admin/api/2026-07/graphql.json. Grant all scopes requested during authorization.
  3. Configure the Business Central connection. Select Configure and select an existing Business Central connection, or create a new one. The connection uses OAuth 2.0 client credentials to https://api.businesscentral.dynamics.com. Enter your Microsoft Entra application (client) ID, client secret, environment name (for example, Sandbox or Production), and the token endpoint for your tenant: https://login.microsoftonline.com/<tenantId>/oauth2/v2.0/token with scope https://api.businesscentral.dynamics.com/.default.
  4. Verify the Celigo Business Central extensions. Select Install. Setup detects whether the Celigo Shopify Integration for Dynamics 365 Business Central and Celigo eTail Shopify extension are already installed in your Business Central environment and installs them if needed. If the extensions cannot be verified automatically, install them manually from the Business Central Extension Management page, then return to integrator.io and select Verify now.
  5. Copy resources. Select Install to create the integration with all 43 flows. All flows are installed as disabled; no data moves until you complete initial setup and enable flows deliberately.

Both connections are shared across all 43 flows. If either connection expires or is re-authorized with different credentials, every flow using it is affected. See OAuth token expirations in Troubleshooting.

Initial setup: configure connections and map settings for your store

Before you enable any transactional flow, complete all seven steps below in order. Getting this right prevents the most common category of hard-to-diagnose errors.

Step Action Where
1 Fill in Business Central identity settings Celigo integration Settings (General)
2 Run the Business entities setup flow Celigo flow dashboard
3 Run the Markets setup flow Celigo flow dashboard
4 Run the Item ID map flow Celigo flow dashboard
5 Configure the location map Celigo integration Settings (General)
6 Create tracker and discount items in Business Central and select them in Settings Business Central + Celigo Settings
7 Configure shipping, payment, and payment terms maps Celigo Order settings

Step 1: Business Central identity settings

Open the integration's Settings page (General section) and fill in:

Setting What to enter
Primary Business Central Connection The BC connection you authorized during install.
Primary Shopify Connection The Shopify connection you authorized during install.
Business Central tenant ID Your Microsoft Entra tenant ID.
Business Central environment The environment name, for example Sandbox or Production.
Business Central company name URL-encoded company name for OData requests (for example CRONUS%20USA%2C%20Inc.).
Business Central company ID (GUID) The API v2.0 company GUID; find it via GET /api/v2.0/companies. Used by Celigo eTail Shopify extension API page endpoints for price lists and B2B catalogs.

Step 2: Sync business entities

Run Business entities to Business Central (add). This records your Shopify business entity (or entities) in Business Central so that payout flows and the optional business-entity dimension can attribute transactions correctly. Re-run on-demand if your Shopify Payments legal-entity setup changes.

Step 3: Sync markets

Run Markets to Business Central (add). This reads your Shopify Markets configuration (names, currencies, regions) so the order flow can stamp the correct market on each Business Central order and per-market price list sync can resolve markets. Re-run whenever you add a Shopify Market.

Step 4: Build the item ID map

Run Shopify products to Microsoft Dynamics 365 Business Central item ID map (add or ignore) [GraphQL]. This reads your Shopify catalog and creates cross-reference records in Business Central mapping each Shopify variant (by SKU) to its Business Central item.

This map is the structural backbone of the integration: the order, fulfillment, inventory, refund, and returns flows all resolve Shopify line items through it.

Confirm SKU alignment first. The flow matches Shopify variant SKU to Business Central Item No. exactly. If a variant's SKU has no matching Business Central item, that variant gets no map record and any order containing it will fail to import. Resolve all SKU mismatches before going live with the order flow.

Step 5: Configure the location map

In General settings, map each Business Central location to a Shopify location (one-to-one or many-to-one). Set Action to take if unique match not found to Fail record (recommended; silent defaulting posts data to the wrong location) and optionally select a default Shopify location.

Step 6: Set up tracker and discount items

For every extra-line feature you plan to use (shipping cost, discounts, gift cards, tips, order variances, and return fees), create a non-inventory item in Business Central posting to the G/L account where you want that amount to land, then select that item in the corresponding Settings field (Order, Refund, or integration-level).

Minimum required. At minimum, configure the shipping cost item. If you run promotions, configure the cart discount and line discount items as well. Orders carrying a discount will fail at import if the discount items are not selected in Settings.

Step 7: Shipping, payment, and payment terms maps

In Order settings, map each Shopify shipping method to a Business Central Shipment Method Code, each Shopify payment gateway to a Business Central Payment Method Code, and (if applicable) Shopify payment terms to Business Central Payment Terms Codes. Each map supports a default fallback value. Skipping these maps when multiple values exist means all records land on the default and report incorrectly downstream.

Settings reference: General, module-level, and B2B

Settings control how data moves between Shopify and Business Central. They live at the integration level (General) and on each module (Product, Order, Fulfillment, Inventory, Billing, Refund, Cancellation, Returns, Payout, B2B). Most are configured once at go-live.

Each setting is tagged:

Tag Meaning
Required Must be set before the related flow can be enabled.
Optional Can be left at its default in most implementations.
Conditional Effectively required when a specific scenario applies (described inline).

General settings

Setting Tag What it does
Primary connections, tenant ID, environment, company name, company GUID Required Business Central identity; see Initial setup Step 1.
Map Business Central locations with Shopify locations Required One-to-one or many-to-one location map used by Inventory, Fulfillment, and BOPIS.
Action to take if unique match not found Required Fail record (recommended) or fall back to the default Shopify location.
Select a default Shopify location Conditional Required when the action above is set to use a default.
Default Market Conditional Market assumed when an order has no ship-to or billing country. Required for multi-market stores to keep market stamping and dimension routing intact.
Sync records in Shopify presentment currency Optional When on, orders and refunds sync amounts in the buyer's presentment currency instead of shop currency.
Business Central item to track restocking fee Conditional Required if your return policy charges a restocking fee: it posts as its own credit-memo line.
Business Central item to track return shipping fee Conditional Required if your return policy charges return shipping: it posts as its own credit-memo line.
Sync the return shipping fee as a negative amount Optional Checked (recommended): the credit-memo total equals the amount actually refunded to the buyer.
Sync Shopify B2B (company) orders via the B2B module Conditional Master switch for B2B order routing. D2C order flow always filters out purchasing-company orders; turn this on so the B2B order flow processes them. When off, company orders are not synced at all.

Product settings

Setting Tag What it does
Business Central currency for product price Required The base item Unit Price is always local currency; confirm this matches your Shopify store currency.
Unique title for each Shopify product Optional Prevents creating two Shopify products with the same title.
Add GST/VAT to item price Conditional Required for value-added tax (VAT)- or goods and services tax (GST)-inclusive storefronts: syncs the tax-inclusive price from the item card.
Sync published scope from Business Central to Shopify Conditional Controls whether items publish to Online Store (web), Online Store and POS (global), or remain as drafts (draft). Driven by the Shopify Published Scope field on the BC item card. Requires the Celigo eTail Shopify extension. For per-variant sales channel or catalog publishing, use Flow 4 and the item's Shopify Variant Scope and Shopify Variant Catalog fields.
Sync price lists per market Conditional Publishes per-market prices from BC Sales Price Lists to Shopify market catalog price lists. Requires the Celigo eTail Shopify extension and the map below.
Price lists per market (map) Conditional One row per market: Shopify market, currency, BC Sales Price List code, and optional compare-at list code.
Metafields to sync (BC field map) Conditional Each row maps one BC item field to a Shopify metafield, entered as namespace | key | owner (product or variant) | type. Namespace and key are required, owner defaults to product, and type is optional (resolved from your store's metafield definitions when left blank).
Send BC item Shopify metadata (tags, product type) Conditional Includes item tags and product type in the product sync. Requires the Celigo eTail Shopify extension.
Weight unit for product sync Optional The unit for variant shipping weight.
Shopify collections per BC item category Conditional Items whose Item Category matches a row are added to the specified Shopify manual collection (used for collection-based tax overrides).
Customer Price Group for storefront pricing Conditional The BC Customer Price Group whose Sales Price List lines set the Shopify storefront price; the list/All-Customers price becomes the compare-at price when it's higher than the group's discounted price.
Sync HS code and country of origin Optional When on, sends the item's HS (tariff) code and country/region of origin to the Shopify product's inventory item, for Shopify Markets and customs.
Business Central field for HS code Conditional BC item field holding the HS/tariff code. Leave blank to use the standard Tariff No. field.
Business Central field for country of origin Conditional BC item field holding the 2-letter ISO country/region of origin code. Leave blank to use the standard Country/Region of Origin field.
Async productSet variant threshold Optional Products with at least this many variants are created asynchronously; their variant metafields apply on a later run once variant IDs exist. Default 100.
Metafield batch size Optional Number of metafields sent per metafieldsSet call. Maximum 25.

Note: Running Flows 3 and 4 together on a mixed catalog. Flow 3 skips any item that has a Shopify Product Group value, so Flows 3 and 4 can run together on a mixed catalog without creating duplicate products. Set the product group before an item's first sync. If an item is synced as a standalone product and grouped later, the old product stays in Shopify until you remove it manually.

Note: Variant limits. Shopify allows up to 3 options and up to 2,048 variants per product (the product of all option values), and up to 250 media files per product. Each item's first Shopify Image URLs value becomes that variant's image.

Order settings

Order settings cover 58 settings grouped into these areas:

Area Key settings Tag
Delta and filtering Filter order by (Last updated time recommended), lag for next flow run (10–15 min recommended), sync orders created prior to, financial status filter, fulfillment status filter Required
Historical orders Sync orders created prior to the delta start: to catch up older orders at onboarding, back-date the order flow's start (or run it on demand for a date range). This reuses the standard order import, so it never double-posts. This is a setting, not a separate flow. Orders older than about 60 days require the read_all_orders Shopify scope. Optional
On-demand sync Shopify order IDs (up to 5, comma-separated): run the flow manually to pull specific orders Optional
Order status Assign BC order status as Pending Approval for high-risk orders Conditional
Extra line items BC items for: shipping cost, duties, custom items, gift card redemption, gift card sales, tips, cash rounding, zero-value exchanges, state delivery fees, and order variances (plug line) Conditional: configure each item type you transact with
Discounts Cart-level discount mode: post as a single negative line against the cart discount item (recommended), or as Line Discount Amount on each item line. Line-level discount mode: post each discount as a new line directly below the discounted item (recommended), or as Line Discount Amount. Shipping discount mode: post gross shipping plus a negative shipping-discount line, or post net (discounted) shipping only. Each mode has a corresponding BC item picker. Conditional: required if you run promotions
Taxes Sync sales tax as overwrite (recommended) or BC-native. Tax overwrite items and per-line breakdown. Default tax code, default Canada tax code, Canada taxes map (province to BC Tax Area Code). Tax-inclusive countries, GST/VAT deduction options, marketplace liability exclusion, break-up tax as line items. Required (tax method) or Conditional (the rest)
Customers Sync all orders against a default BC customer, or against a default customer per Shopify market. Customer posting groups per country (customer templates). Trim customer name, first name fallback, merge tags. Conditional
Point of sale (POS) and BOPIS Buy online, pick up in-store (BOPIS): adds a fulfillment-info step that reads each line's assigned fulfillment location and stamps the corresponding BC Location Code on the order line; inventory deducts from the correct store. Pickup-only orders use the pickup store's address as the Ship-to address. An order can mix shipped and pickup lines: shipped lines keep the buyer's ship-to address, pickup lines get the store's location, and the fulfillment flow never ships a pickup fulfillment order. Auto-bill paid POS / immediately-paid orders: tags the order so the auto-bill flow can invoice it without a separate fulfillment event, with its own forced payment term. Conditional: required for BOPIS or POS merchants
Maps Shipping method to Shipment Method Code, payment gateway to Payment Method Code, payment terms to Payment Terms Code. Each with a default fallback. Conditional: required with multiple values
Sales channel filtering Hold non-native-channel orders out of Business Central: off by default; when on, orders placed through non-native Shopify sales channels (TikTok, other marketplace apps) are held out of BC. Optional map of Shopify sales channel to a BC value (a dimension or code). Every synced order's Shopify sales channel is recorded on the BC order. Optional
Order edits Sync Shopify order edits to BC (recommended: on). Ship-to address edits made after the order is fulfilled are held back by default; a separate toggle allows pushing them anyway. A ship-to address edit recalculates tax for the new address. Optional
Reverse flow BC order status gate for BC-origin order export to Shopify. Conditional
Metadata Stamp Shopify metadata and order variances on BC records (requires the Celigo eTail Shopify extension). Map individual Shopify order metafields to BC sales-order fields, or sync all order metafields as raw JSON. Optional
Draft orders as quotes Sync Shopify draft orders as Business Central sales quotes (opt-in, ships disabled). When on, an open Shopify draft order syncs as a BC Sales Quote; completing the draft converts the existing quote into a Sales Order. Powers Flow 10. Conditional
Multi-entity Tag order with business entity as a BC dimension; dimension value map. Conditional
G/L account posting for charges Off by default: shipping, sold gift card, and tip charges post against the configured item fields above. On: they post as native BC "G/L Account" order lines, with separate G/L account fields for shipping, sold gift cards, and tips. Each charge falls back to its item line when its G/L account is blank. The exchange flow (Flow 12) uses the same shipping settings to post the exchange shipping fee. Conditional

Fulfillment settings

Setting Tag What it does
Notify customer Optional Sends the Shopify shipment-notification email when the fulfillment is created in Shopify.

Inventory settings

Setting Tag What it does
Select Business Central locations to pick inventory from Required Which BC locations contribute quantities to Shopify. Use the location map (many-to-one) to aggregate quantities from multiple BC locations into one Shopify location.

Billing settings

Setting Tag What it does
Financial status filter for order transactions Optional Only transactions on orders with the selected statuses post as BC payments.
Auto-assign item tracking (lot/serial) before posting Conditional Auto-assigns lot numbers (FEFO, first expired first out) and serial numbers (first available) before auto-billing posts ship-and-invoice. Required if items carry Item Tracking codes. Requires the Celigo eTail Shopify extension.
Export posted invoices to Shopify Conditional BC posted invoices that did not originate from Shopify are exported to Shopify as fulfilled, tax-exempt orders.
Shopify shop currency for invoice export Conditional Shopify accepts only the shop currency for invoice export; invoices in any other currency fail with a per-record error.
Allow partial billing Optional When on, auto-bill posts an invoice for only the shipped-but-not-yet-invoiced quantity per line and leaves the unshipped remainder open to bill later. When off, an order is billed only once fully shipped.
Include gift card / store credit tenders in the customer deposit / cash receipt Optional Off by default; gift card and store credit tenders post as order lines rather than deposits, to avoid double-posting.

Refund settings

Setting Tag What it does
Add GST/VAT to refund total Conditional Refunds the VAT-inclusive credit-memo line total. Required for GST/VAT setups where BC stores order amounts excluding tax.
Business Central item to track custom refund adjustments Conditional Item for Shopify custom refund adjustments (shipping refunds, manual adjustments).
Allow store credit as refund option Conditional When on, a BC credit memo whose Payment Method Code matches the configured method issues a Shopify store credit instead of refunding to the original tender. Leave the payment method empty to send all credit memos to store credit.
Payment method for store credit Conditional The BC Payment Method Code that triggers the store-credit refund path.
Number of days until store credit expiration Conditional Days until the issued store credit expires. Leave empty for no expiration.
Business Central item for gift-card refund lines Conditional BC item (a gift-card liability item) used to post the gift-card-funded portion of a Shopify refund as its own negative credit-memo line, so the cash credit is reduced by the gift-card amount.
Business Central item to track store-credit liability Optional BC store-credit liability item that the store-credit-funded portion of a refund (and store-credit tender on an order) posts against, so store credit is tracked on its own G/L account, separate from gift cards and cash. Leave blank to skip a dedicated store-credit line.
Business Central item for kit / item-group / lot / serial refund lines Conditional Non-inventory BC item used to post refunds for item-group, kit, lot, or serial lines, so the credit memo doesn't fail on the item-group master. Leave blank to skip substitution.
Item-group / kit item numbers Conditional Comma-separated BC item numbers treated as kit/item-group/lot/serial; their refund lines post against the substitute item above.
Store-credit currency (fallback) Optional ISO currency code used when issuing store credit if the BC document has no currency.
Sync refund adjustment lines as G/L Account credit-memo lines Optional Off by default: refund shipping, discrepancy, and downsell-adjustment lines post against the refund adjustment item. On: they post as native BC "G/L Account" credit-memo lines.
Refund adjustments G/L account Conditional BC G/L account that refund shipping/discrepancy/downsell-adjustment credit-memo lines post to when the option above is on. Leave blank to keep posting them against the refund adjustment item.

Cancellation settings

Setting Tag What it does
Notify customer Optional Sends the Shopify cancellation email when the cancellation is processed.
Restock Optional Restocks committed inventory when a Shopify order is cancelled.
Allow partial cancellation Optional When on, cancelling a partially-fulfilled order cancels only its open (unshipped, uninvoiced) quantities; shipped/invoiced quantities are handled by the return/refund path instead.

Returns settings

Setting Tag What it does
Create BC sales return orders in Pending Approval status Conditional Requires a Sales Return Order approval workflow configured in Business Central.
Notify customer Optional Sends a Shopify notification when the return is approved.
Process all exchange items Optional Checked (default): as soon as any return item is received in BC, all exchange items on the Shopify return are confirmed. Unchecked: exchange items are held until the return is fully received in BC.
Auto-release fulfillment hold Optional Shopify keeps exchange replacement fulfillments on hold until the return is processed. Checked: the integration releases the hold immediately after processing. Unchecked: staff release it manually in Shopify.
Notify customer when a return is declined Optional Notifies the Shopify customer when BC rejects or closes a return that was already open. Powers Flow 34.

Payout settings

Setting Tag What it does
Payout status for syncing Required Typically paid. Add in_transit to record payouts before they settle.
Transaction types to exclude Optional Exclude specific Shopify Payments transaction types from the payout sync.
Accounts mapping Required One row per business entity plus transaction type. Each Shopify Payments business entity can post its payout charges, refunds, fees, adjustments, and variances to its own BC G/L accounts. Leave Business entity empty on a row to apply it to all entities. The transaction-type list includes Shop Cash and Shop Pay types, so those payouts are supported; use Custom transaction types (comma-separated) for any type not in the list. Map at least CHARGE, REFUND, ADJUSTMENT, FEE, and VARIANCE for each entity.
Account to record variances Required Fallback G/L account for payout variances, used only when a business entity has no variance row in the mapping grid above.
Cash Receipt Journal batch name Required The BC Cash Receipt Journal batch for charge transactions. Create this batch in BC before enabling.
General Journal batch name Required The BC General Journal batch for refunds, fees, and adjustments. Create this batch in BC before enabling.
Payout lookback (days) Required The number of days before the last run that the flow re-queries. Ensures payouts that changed status (in_transit → paid) are captured. Also bounds the query for performance.
Reconciliation window (days) Optional How far back to look for the matching posted invoice when applying payout charges. Leave blank to search all history.
Use the payout-run date as the journal posting date Optional When on, every journal line for a payout posts with the flow-run date instead of the individual transaction date, so the whole deposit lands in one posting period.
Store currency differs from payout (settlement) currency Conditional Turn on when your Shopify store currency differs from the payout currency; journal lines are then stamped with the payout currency so BC posts the deposit in it.

B2B settings

Setting Tag What it does
Sync Shopify companies to BC customers Conditional Each Shopify B2B company becomes one BC customer (Partner Type = Company). Company locations become Ship-to Addresses on that customer.
Sync BC customers to Shopify as B2B companies Conditional BC customers with Partner Type = Company export as Shopify companies with a default company location.
Sync Shopify company contacts to BC contacts Conditional Shopify contacts sync to BC Contact records linked to the company customer (deduplicated by email).
Sync BC contacts to Shopify company contacts Conditional BC contacts export to Shopify as company contacts.
Permission for exported company contacts Conditional The role assigned to exported contacts on the company's default location.
Payment terms map (BC code ↔ Shopify template) Conditional Used in both directions (for example, Net 30).
Customer posting groups per country (company templates) Conditional Posting groups for auto-created company customers, keyed by billing country. Format: Customer|Gen. Bus.|VAT Bus. (for example, FOREIGN|EXPORT|EXPORT).
Sync BC price lists to Shopify B2B catalogs Conditional BC Sales Price Lists with Source Type = Customer become Shopify B2B catalogs with fixed prices. Catalogs start empty and contain only the priced products. If an item is priced in more than one catalog for the same location, Shopify shows the lowest price. Requires the Celigo eTail Shopify extension.
BC item to track B2B order shipping cost Conditional Shipping on B2B orders posts against this non-inventory item.
Remove B2B catalog products when their price line is deleted in Business Central Optional When on, a reconcile flow compares each Shopify B2B catalog against its BC price list and removes catalog products whose price line was deleted or set inactive in BC. Powers Flow 42. This setting deletes products from catalogs, so turn it on only when the BC price list is the complete source for the catalog. Requires Sync BC price lists to Shopify B2B catalogs. Each run reads the first 250 priced variants per catalog; the rest are handled on later runs.
Tax-exempt VAT Bus. Posting Group (B2B) Conditional VAT Bus. Posting Group applied to a BC customer when its Shopify company location is marked tax-exempt, so BC computes zero VAT. Leave empty to keep the country-template group.
Tax-exempt Tax Area Code (B2B) Conditional Tax Area Code stamped on a BC customer when its Shopify company location is tax-exempt (US/sales-tax localizations). Leave empty to leave the Tax Area unchanged.
Sync B2B shipping charges as a G/L Account order line Optional Off by default: B2B shipping charges post against the configured B2B shipping item. On: they post as a native BC "G/L Account" sales-order line.
B2B shipping charges G/L account Conditional BC G/L account number that B2B shipping charges post to when the option above is on. Leave blank to keep posting B2B shipping as the configured B2B shipping item.

All flows by module: General, Product, Order, Inventory, and B2B

This section describes what each flow does and what it depends on. Configure settings for a module before enabling its flows.

General

  • Flow 1: Business entities to Business Central (add): Reads your Shopify business entity records (your Shopify Payments legal entities) and registers them in Business Central. Run this once during initial setup, then re-run on-demand whenever your Shopify Payments entity configuration changes. The payout flow and the optional business-entity dimension depend on these records.
  • Flow 2: Markets to Business Central (add): Reads your active Shopify Markets (names, currencies, regions) and registers them in Business Central. Run once during initial setup, then re-run whenever you add a Shopify Market. The order flow uses these records to stamp each BC sales order with the correct market, and the per-market price list flow uses them to resolve which price list applies to which market.

Product

  • Flow 3: Business Central items to Shopify products (productSet): Publishes BC items to Shopify as single-variant products using Shopify's productSet GraphQL mutation. Syncs item title, description, price, weight, SKU, status, and (with the Celigo eTail Shopify extension) published scope, tags, and product type. Depends on items being enabled for the store on the Celigo eTail item card.
  • Flow 4: Business Central variant items to Shopify products (add or update): Publishes BC items that share the same Shopify Product Group value as one Shopify product with variants, using productSet. Each item becomes a variant with its own SKU, price, barcode, weight, and up to three options taken from the item's Option 1/2/3 Name and Value fields. Each variant is then published to the sales channels in its Shopify Variant Scope field and the catalogs in its Shopify Variant Catalog field. Depends on the same item-enabled-for-store prerequisite as Flow 3.
  • Flow 5: Business Central item metafields to Shopify (add or update): Publishes the BC item fields you map in Product settings to Shopify product metafields. Run after Flow 3 (Shopify products must exist). Configure the metafield map in Settings before enabling.
  • Flow 6: Business Central price lists to Shopify market price lists (add or update): Publishes per-market prices from BC Sales Price Lists to Shopify market catalog price lists using the Celigo eTail Shopify extension's price list API. Requires the per-market map configured in Product settings and the Markets setup flow (Flow 2) to have run. Depends on Shopify products existing (Flow 3).
  • Flow 7: Shopify products to Business Central item ID map (add or ignore) [GraphQL]: Reads the Shopify product catalog and creates cross-reference records in Business Central that map each Shopify variant (by SKU) to its BC item. This is the structural backbone of the integration: run it during initial setup before enabling any order, fulfillment, inventory, refund, or returns flow. Run on-demand whenever new products are added.
  • Flow 8: Shopify inactive products to Business Central item ID map (delete) [GraphQL]: Removes the item ID map record when a Shopify product/variant is deactivated or deleted, keeping the map from accumulating stale cross-references. Run on the same schedule as Flow 7.

Order

  • Flow 9: Shopify orders to Business Central sales orders (add or ignore): The primary D2C order flow. Imports Shopify orders as BC Sales Orders, mapping all order lines (resolved through the item ID map), customer, shipping address, discounts, taxes, shipping cost, tips, gift cards, duties, and fees as labeled BC order lines. Orders placed by a B2B purchasing company are always filtered out of this flow; they are processed by Flow 43. Depends on Flow 7, Flows 13/14 (customer flows), and the location map.
  • Flow 10: Shopify draft orders to Business Central sales quote / order (by stage) (opt-in, ships disabled): When Sync Shopify draft orders as Business Central sales quotes is turned on in Order settings, this flow syncs an open Shopify draft order as a BC Sales Quote; when that draft is later completed into a real order, the same flow converts the existing quote into a Sales Order instead of creating a duplicate. Off by default — enable only if you use Shopify draft orders for quoting. Schedule it at or just before Flow 9.
  • Flow 11: Shopify edited orders to Business Central sales order (update): Picks up Shopify order edits (items added, removed, or quantity changed after the original order was placed) and updates the corresponding BC sales order. Depends on Flow 9: the original order must already exist in BC.
  • Flow 12: Shopify exchange to Business Central sales order (add): Creates a new BC Sales Order for exchange items on a Shopify return (items the customer is receiving in place of returned goods). Depends on Flow 9 and the return being created in Shopify.
  • Flow 13: Shopify customers to Business Central customers (add or update): Imports Shopify customers to BC as Customer records. Enable before or alongside Flow 9 so that customer records exist in BC when orders arrive. Syncs name, email, phone, address, tags, and (with the Celigo eTail Shopify extension) customer metadata.
  • Flow 14: Business Central customers to Shopify customers (add or update): Exports BC Customer records to Shopify. Use this to pre-populate Shopify with existing BC customers. Enable alongside Flow 13 for bidirectional sync.
  • Flow 15: Business Central order to Shopify order (add): Exports BC-origin sales orders (orders that did not originate from Shopify) to Shopify as fulfilled orders. Conditional: only relevant for merchants who create orders directly in BC. Configure the status gate in Order settings before enabling.

Fulfillment

  • Flow 16: Business Central posted sales shipment to Shopify fulfillment (add): The primary fulfillment flow. When a warehouse posts a sales shipment in BC, this flow creates the fulfillment in Shopify, marking the order fulfilled, sending the tracking notification to the customer, and closing the fulfillment order. Multiple tracking numbers are supported. Depends on the original order existing in Shopify (Flow 9) and the BC location mapping to a Shopify location.
  • Flow 17: Shopify fulfillment to Business Central (add): The reverse direction for merchants whose 3PL fulfills through Shopify. When a fulfillment is created in Shopify, this flow records it in BC. Enable only if your fulfillment workflow starts in Shopify rather than BC.
  • Flow 18: Shopify hold fulfillments on payment pending release: Monitors Shopify fulfillment orders that are on hold pending payment and releases the hold when payment completes, so the exchange replacement can ship. Enable it only if you process exchanges where the replacement costs more than the returned item.

Inventory

  • Flow 19: Business Central inventory to Shopify inventory (add or update): Publishes BC inventory quantities to Shopify inventory levels. Sources quantities from the BC locations configured in Inventory settings and maps them to Shopify locations via the location map. Depends on Flow 7 (item ID map) and the inventory location settings.
  • Flow 20: Business Central transfer order to Shopify inventory transfer (add): Creates a Shopify inventory transfer when a BC Transfer Order is posted. Keeps in-transit inventory visible in Shopify for multi-location operations. Enable only for merchants using BC Transfer Orders for inter-location stock movements.
  • Flow 21: Shopify received inventory transfer to Business Central (add): Records the receipt of a Shopify inventory transfer in BC when the transfer is marked received in Shopify. Depends on Flow 20 (the transfer must have originated from BC) and the item ID map.

Billing

  • Flow 22: Business Central sales order to posted invoice (auto-bill): Auto-bills BC sales orders: posts the sales shipment and the resulting invoice in a single step. This is what closes the order in BC and creates the invoice that the refund, payment, and payout flows reference. Enable this flow before any billing, payment, or refund flow. If your items use Item Tracking codes (lots or serials), enable the Auto-assign item tracking setting in Billing settings to auto-assign tracking before posting.
  • Flow 23: Business Central posted sales invoices to Shopify billing (add): Marks a Shopify order as paid (or updates its financial status) after the corresponding BC posted invoice is created. Depends on Flow 22.
  • Flow 24: Shopify transaction to Business Central payment (add): Creates a BC Cash Receipt Journal entry for each successful Shopify payment transaction on a paid order. Depends on the BC sales order and its posted invoice (Flows 9 and 22).
  • Flow 25: Shopify order transaction to Business Central customer deposit (add): For billing models where payment is taken at checkout but invoicing happens later, records the checkout payment as a BC customer deposit against the sales order. Enable it for deferred-billing models (for example, billing after fulfillment or for terms customers).
  • Flow 26: Business Central posted sales invoices to Shopify orders (invoice export): Exports BC-origin posted invoices (invoices not created from a Shopify order) to Shopify as fulfilled orders. Conditional: only relevant for merchants billing outside Shopify who need reconciliation visibility in Shopify.
    Note: Shopify accepts only the shop currency; invoices in any other currency fail per record.

Refund

  • Flow 27: Shopify refund to Business Central sales credit memo (add): Imports Shopify refunds as BC Sales Credit Memos. Each refunded line posts against the original order lines; shipping refunds and adjustments post against the configured refund adjustment item. If a refund spans several posted invoices, the flow creates one credit memo per invoice, each applied to its own invoice. Depends on the original BC sales order and its posted invoice.
  • Flow 28: Business Central credit memo to Shopify refund (add): Exports BC-origin credit memos (credit memos created in BC rather than from a Shopify refund) back to Shopify as refunds, including the refunds for received returns. A credit memo tied to a Sales Return Order is held until the return order is fully received. If store credit is configured, a credit memo with the store-credit Payment Method Code issues a Shopify store credit instead of refunding to the original tender. Enable it if you use the returns flows or store-credit refunds, or if you initiate refunds in BC.

Cancellation

  • Flow 29: Shopify order cancellation to Business Central (add): When a Shopify order is cancelled, this flow cancels or voids the corresponding BC sales order. Depends on Flow 9 (the original order must exist in BC).
  • Flow 30: Business Central cancellation to Shopify cancellation (add): Cancels a Shopify order when the corresponding BC sales order is cancelled in BC. The Notify customer and Restock options in Cancellation settings apply to this cancellation. Conditional: enables the reverse cancellation direction for merchants who cancel orders in BC.

Returns

The four returns flows work together as a single lifecycle; enable all four together.

  • Flow 31: Shopify returns to Business Central sales return order (add): When a buyer submits a return request in Shopify, this flow creates a BC Sales Return Order. If Pending Approval is configured in Returns settings, the return order lands in approval status. Depends on Flow 9 (the original order must exist in BC).
  • Flow 32: Business Central return to Shopify (approve): When the BC Sales Return Order is approved (or released from Pending Approval status), this flow updates the Shopify return to approved status. Must be enabled alongside Flow 31.
  • Flow 33: Business Central received return to Shopify (process): When return items are received against the BC Sales Return Order (Return Receipt posted), this flow processes the Shopify return, confirming receipt, restocking items per their disposition, triggering any exchange orders, and (if configured) releasing the fulfillment hold on exchange replacement shipments. Depends on Flows 31 and 32.
  • Flow 34: Business Central rejected return to Shopify (cancel): When a BC Sales Return Order is rejected or closed, this flow cancels the corresponding Shopify return request while it is still in the requested state. Enable alongside Flows 31–33 as part of the same returns lifecycle.

Payout

  • Flow 35: Shopify payout to Business Central deposit and journals: Posts each Shopify Payments payout to BC in one flow: charges post to the Cash Receipt Journal batch and refunds/fees/adjustments post to the General Journal batch (using the account mapping in Payout settings), and any residual variance posts to the variance account. Requires Shopify Payments on the store and both journal batches created in BC before enabling. Increase Payout lookback (days) if payouts are missed after status changes from in_transit to paid. Each payout posts as one grouped deposit with Document No SPFY-<payoutId>. A payout that is already posted is never posted again, so re-runs are safe.

B2B

D2C and B2B order flow split. The D2C order flow (Flow 9) has a built-in filter that excludes all orders placed by a purchasing company (B2B orders). The B2B order flow (Flow 43) has a matching filter that includes only purchasing-company orders. These two filters are the only mechanism enforcing the D2C/B2B split; do not edit them. Editing them makes the D2C flow sync company orders against the buyer's personal email, and double-post them if Flow 43 is also enabled. When the B2B module is not in use, company orders are not synced.

  • Flow 36: Shopify companies and locations to Business Central customers (add or update): Imports Shopify B2B companies as BC customers (Partner Type = Company) and company locations as Ship-to Addresses. Syncs company name, addresses, payment terms, and tax registration IDs. Requires Shopify Plus.
  • Flow 37: Business Central customers to Shopify companies (add or update): Exports BC customers with Partner Type = Company to Shopify as B2B companies with a default company location. Enable alongside Flow 36 for bidirectional company sync.
  • Flow 38: Shopify company contacts to Business Central contacts (add or update): Imports Shopify B2B company contacts as BC Contact records linked to the company customer. Deduplicated by email. Depends on Flow 36 (company customer must exist in BC).
  • Flow 39: Business Central contacts to Shopify company contacts (add or update): Exports BC contacts to Shopify as company contacts, assigning the role configured in Permission for exported company contacts. Depends on Flow 37 (Shopify company must exist).
  • Flow 40: Business Central price lists to Shopify B2B catalogs (add or update): Creates or updates a Shopify B2B catalog for each BC Sales Price List with Source Type = Customer. The catalog's products and pricing are populated by Flow 41. Requires the Celigo eTail Shopify extension.
  • Flow 41: Business Central price list prices to Shopify B2B catalog prices (add or update): Publishes item prices from BC Sales Price Lists to the corresponding Shopify B2B catalog. Depends on Flow 40 (catalog must exist in Shopify) and Flow 7 (Shopify variants must exist in the item ID map).
  • Flow 42: Reconcile Shopify B2B catalog products with Business Central price lists (remove deleted) (opt-in): Compares each Shopify B2B catalog against its source BC Sales Price List and removes catalog products whose price line was deleted or set inactive in BC. Depends on Flows 40–41 (catalog and prices must exist).
  • Flow 43: Shopify B2B orders to Business Central sales orders (add or ignore): Imports Shopify orders placed by a purchasing company (B2B orders) as BC Sales Orders, posting them against the company's BC customer record. Depends on Flows 36–37 (company customer must exist in BC), Flow 7 (item ID map), and the Sync Shopify B2B (company) orders via the B2B module toggle in General settings.

Enable flows and schedule

Important: Do not mass-enable all flows at once. All 43 flows ship disabled. Enable them one module at a time in the order below. Enabling a flow before its dependencies are met produces reference errors that are difficult to diagnose under load.

Flow dependency overview

Flow or group Depends on
Business entities and Markets setup flows (1–2) Run first, on-demand; no other dependencies
BC items → Shopify products, variants, metafields, price lists (3–6) Items enabled for the store; Celigo eTail Shopify extension for scope, tags, per-market prices, and variant grouping
Item ID map + cleanup (7–8) BC items with SKU = Item No.
Customer flows (13–14) No dependencies; enable before the primary order flow so customers exist in BC
Primary D2C order flow (9) Item ID map (7), customer flows (13–14), location map, order settings
Draft orders as quotes (10, opt-in) Sync Shopify draft orders as Business Central sales quotes toggle on; a default Business Central customer for quotes; primary order flow (9)
Order edits and exchanges (11–12) Primary order flow (9)
BC order → Shopify (15) Items in both systems; BC order status gate configured
Fulfillment flows (16–18) Primary order flow (9); location map
Inventory flows (19–21) Item ID map (7); inventory locations; location map
Auto-bill (22) Primary order flow (9); journal batches; item tracking settings if applicable
BC posted invoices → Shopify billing; payments and deposits (23–25) Auto-bill (22)
Invoice export (26) Billing settings; shop currency confirmed
Refund flows (27–28) Primary order flow (9) and auto-bill (22): original transactions must exist
Cancellation flows (29–30) Primary order flow (9)
Returns flows (31–34) Primary order flow (9): enable all four together
Payout flow (35) All transactional flows syncing; payout settings and journal batches; Shopify Payments active
B2B flows (36–43) B2B settings; Celigo eTail Shopify extension for catalogs, prices, and reconcile; Sync Shopify B2B (company) orders via the B2B module toggle for the order split

First-time enablement sequence

  1. General setup flows (run once, on-demand): Run Business entities (Flow 1), then Markets (Flow 2). Do not schedule; re-run on-demand when entity or market configuration changes.
  2. Product: Enable BC items to Shopify products (Flow 3) first and let it run. Then enable variant items (Flow 4) if you use grouped variants. Then enable metafields (Flow 5). Build the item ID map (Flow 7) and, alongside it, the inactive-item cleanup (Flow 8): both can run on-demand and should be re-run whenever products are added or deactivated. Add per-market price lists (Flow 6) last if in scope.
  3. Order: customers: Enable both customer flows (Flows 13 and 14) and let them run at least once before enabling the primary order flow.
  4. Order: primary D2C flow: Enable Shopify orders → BC sales orders (Flow 9) and monitor the first runs closely: resolve item map gaps and settings issues before volume builds. Then enable order edits (Flow 11) and exchanges (Flow 12). Opt-in: if you use Shopify draft orders for quoting, turn on Sync Shopify draft orders as Business Central sales quotes and enable Flow 10, scheduled at or just before Flow 9.
  5. Fulfillment: Enable BC posted sales shipment → Shopify fulfillment (Flow 16). Enable Shopify fulfillment → BC (Flow 17) only if a 3PL fulfills through Shopify. Enable the hold-release flow (Flow 18) only if exchange upsells are in scope.
  6. Inventory: Enable BC inventory → Shopify (Flow 19). Enable transfer order flows (Flows 20–21) only for multi-location operations.
  7. Billing: Enable auto-bill (Flow 22) first. Then enable BC posted invoices → Shopify billing (Flow 23), then payments (Flow 24) and customer deposits (Flow 25). Enable invoice export (Flow 26) only if BC-origin invoices are in scope.
  8. Refund: Enable both directions (Flows 27 and 28).
  9. Cancellation: Enable both directions (Flows 29 and 30).
  10. Returns: Enable all four flows (Flows 31, 32, 33, and 34) together; they form one lifecycle.
  11. Payout: Enable last, after all transactional flows have been syncing (Flow 35).
  12. B2B (Shopify Plus only): Enable company flows both directions (Flows 36 and 37), then contacts both directions (Flows 38 and 39), then catalogs (Flow 40) and prices (Flow 41), then the catalog reconcile flow (Flow 42) if in scope, then B2B orders (Flow 43). Turn on the Sync Shopify B2B (company) orders via the B2B module toggle in General settings at the same time you enable Flow 43.

Scheduling best practices

Flow group Recommended schedule Reason
General setup flows (1–2) On-demand only Run once; re-run only when entity or market configuration changes.
Product flows (3–6) Hourly or a few times a day Catalog changes are planned; no need for high frequency.
Item ID map + cleanup (7–8) Daily or on-demand Re-run when products are added or deactivated; daily keeps the map current.
Primary order flow (9) Every 15 min, 10–15 min lag Orders need time to reach their final financial status in Shopify.
Draft orders as quotes (10, opt-in) Same cadence as Flow 9, scheduled just before it So a completed draft converts its quote before Flow 9 would otherwise add a new order.
Order edits and exchanges (11–12) Every 15–30 min Keep close to the order flow cadence.
Customer flows (13–14) Every 15–30 min Keep customer data near-real-time for order import accuracy.
Fulfillment (16–18) Every 15 min, ~5 min lag Tracking numbers need time to land on the posted shipment before the flow reads.
Inventory (19–21) Every 15–30 min Quantities are point-in-time; no lag needed.
Billing and payments (22–25) Every 30–60 min Follows the order flow; less time-sensitive than fulfillment.
Refund (27–28) Every 15–30 min Refunds should post promptly to keep accounts receivable accurate.
Cancellation (29–30) Every 15–30 min Matches the order flow cadence.
Returns (31–34) Every 15–30 min Keeps the return lifecycle in sync with customer expectations.
Payout (35) Daily, lookback 3–7 days Payouts settle daily; the lookback catches in_transit → paid transitions.
B2B masters (36–41) Hourly or daily Company and catalog data changes slowly.
Catalog reconcile (42, opt-in) Daily Cleanup pass; doesn't need high frequency.
B2B orders (43) Every 15 min Same as the D2C order flow; B2B orders are equally time-sensitive.

Note: After pausing a flow for maintenance. When you re-enable a paused flow, verify that the delta timestamp advanced correctly. A stuck delta is the most common cause of records appearing "missing" after a maintenance window.

Troubleshooting common errors in the Shopify – Business Central D2C and B2B template

For general debugging steps, see General debugging approach at the end of this section. The sections below cover the most common failure modes.

Orders not syncing

  • Financial status filter: the order's financial status must match the filter configured in Order settings. Orders with a status not in the filter are skipped silently.
  • Lag and delta: an order placed inside the lag window appears on the next run. If the flow was paused, check that the delta timestamp advanced.
  • B2B orders filtered out: orders placed by a purchasing company are always excluded from the D2C order flow (Flow 9) by its built-in output filter. They only sync when Sync Shopify B2B (company) orders via the B2B module is on in General settings and Flow 43 is enabled. If a company order appears "ignored" in the Flow 9 dashboard, the filter is working as intended.
  • Item map gaps: a line whose SKU has no matching BC item (or whose item is not enabled for the store on the Celigo eTail card) fails the import. Find the SKU in the error, create or fix the BC item, re-run the item ID map flow, then retry the order.
  • Missing tracker items: an order carrying a discount, tip, gift card, duty, or state fee errors if the corresponding BC non-inventory item is not selected in Settings.
  • Sales channel: if Hold non-native-channel orders out of Business Central is on, orders from non-native channels (for example, TikTok or other marketplace apps) are held out of BC by design.
  • Draft orders: with Sync Shopify draft orders as Business Central sales quotes on, an open draft order becomes a BC sales quote, not a sales order. When the draft is completed, Flow 10 converts that quote into a sales order.
  • Older orders: orders older than about 60 days are returned only when the Shopify connection has the read_all_orders scope.

Location match not found

If Action to take if unique match not found is set to Fail record, any order, fulfillment, or inventory record whose BC location has no Shopify mapping fails by design. Add the missing mapping in General settings (or set a default location) rather than suppressing the error; silent defaulting posts data to the wrong location.

404 errors on BC OData endpoints (/api/celigo/etail/...)

One or both Celigo BC extensions are not installed in the environment the connection points to. Check the Extension Management page in Business Central and confirm that both Celigo Shopify Integration for Dynamics 365 Business Central and Celigo eTail Shopify extension are deployed to the correct environment. Also verify the environment and companyId settings in Celigo match the BC environment.

Business Central OData errors

  • 412 Precondition Failed: a concurrency conflict: the record changed between the flow's read and its PATCH. Retry the record; the flows send If-Match tokens automatically.
  • 400 BadRequest_MethodNotImplemented on $filter: BC OData does not support or across different fields on eTail pages. If you have customized a lookup, keep filters to a single field.
  • 401 Unauthorized: the Entra app's client secret has expired, or the app has lost its BC permission set. Rotate the secret and re-authorize the connection.

Fulfillment errors

  • The Shopify order must have open fulfillment orders; an already-fulfilled order rejects fulfillmentCreate.
  • The posted shipment's BC location must map to the Shopify location holding the fulfillment order.
  • Multiple tracking numbers are supported (separated by <BR>, comma, semicolon, pipe, or newline).
  • If a Shopify order has no open fulfillment order, Flow 16 marks it as handled and skips it instead of failing.
  • Flow 17 posts a full shipment in BC. For any one order, use either Flow 17 or auto-bill's ship-and-invoice, not both.
  • Pickup fulfillment orders are skipped; the store completes pickup lines in Shopify.

Refund and return errors

  • Return-linked refunds are gated: a BC credit memo tied to a Sales Return Order does not export to Shopify until the return order is fully received. Partial-refund closure in Shopify would orphan later receipts, so this is intentional.
  • Store-credit refunds require the correct Payment Method Code on the credit memo and the Allow store credit setting enabled.
  • Refund routing: an invoiced order gets a credit memo, a prepaid (deposit) order gets a customer ledger refund, and an order not yet posted in BC gets no document. If a refund created nothing, confirm the order was invoiced or posted in BC.
  • Refund amount cap: refund amounts are capped at Shopify's refundable amount and split across the original payment methods, so a refund can look smaller than the raw Shopify amount. Store-credit refunds bypass the cap.
  • Gift-card refund lines: the gift-card-funded part of a refund posts as its own line only when Business Central item for gift-card refund lines is set.

Returns processing

  • Received quantities: received quantities come from the BC return receipt (capped at the quantity still open in Shopify), not the requested quantity.
  • Approve or cancel: a Shopify return is approved only when the BC Sales Return Order is Open or Released. If BC rejects or closes it, Flow 34 cancels the Shopify return, so enable both flows together.

Invoice export failures

Shopify accepts only the shop currency for exported invoices (Flow 26). Posted invoices in any other currency fail with a per-record error; no currency conversion is attempted. Confirm the Shopify shop currency for invoice export setting matches the shop currency before enabling this flow.

Payout issues

  • Payout flows require the store to use Shopify Payments; stores using third-party payment providers have no payout data.
  • Small variances (fees, disputes, rounding) are expected and post to the variance account. Investigate only amounts above your own reconciliation threshold.
  • If payouts are missed after changing status from in_transit to paid, increase Payout lookback (days) in Payout settings.
  • Create the Cash Receipt Journal and General Journal batches in BC before enabling payout flows; posting fails without them.

GraphQL rate limits and throttling

Shopify's GraphQL API uses a leaky-bucket cost limit. If flows report THROTTLED, reduce the export page size in the flow's export step and lengthen the schedule interval. Inventory syncs already batch via inventorySetQuantities to stay under cost limits.

OAuth token expirations

  • The Shopify connection token is invalidated by an app uninstall and reinstall or a scope change: all Shopify flows fail simultaneously when this happens. Re-authorize the connection in Celigo.
  • The BC client secret expires per its Entra app configuration. Rotate it on a schedule (90–180 days is common) and update the Celigo connection before it expires.
  • Set connection failure alerts in Celigo so a connection outage is caught immediately rather than discovered through missing records.

General debugging approach

  1. Find the failing record in the Celigo flow dashboard and read its error log.
  2. Identify the failing step: export (connection or query), lookup (missing record in the target system), transformation (mapping or hook), or import (payload shape or permissions).
  3. For lookup failures: find the saved search or OData query in the failing step, preview it with the same filter values, and confirm the expected record exists.
  4. For transformation failures: check handlebars expressions and field references in the mapping.
  5. Fix the root cause before retrying in bulk; unresolved root causes generate noise that makes later diagnosis harder.