🔓 Unlock all 10,000+ workflows & prompts free Join Newsletter →
✅ Full access unlocked — explore all 10,000 AI workflow and prompt templates Browse Templates →
Home n8n Workflow
January 22, 2026

Shopify to Business Central, orders logged accurately

Lisa Granqvist Partner Workflow Automation Expert

Getting Shopify orders into Business Central sounds simple until you’re stuck reformatting line items, fixing taxes, and creating “duplicate-but-slightly-different” customers. Then someone asks why revenue doesn’t match last week’s payout. Again.

Operations Managers feel the drag first. But a bookkeeper cleaning up invoices and a founder trying to trust the numbers will hate it too. This Shopify BC automation moves paid orders into Microsoft Dynamics 365 Business Central with consistent customers, taxes, and item lines, so your books stop needing constant babysitting.

Below you’ll see how the workflow runs, what results to expect, and what you need to plug it into your own store and Business Central environment.

How This Automation Works

The full n8n workflow, from trigger to final output:

n8n Workflow Template: Shopify to Business Central, orders logged accurately

The Problem: Orders Don’t Match Your Accounting System

Shopify is great at taking orders. Business Central is great at accounting for them. The messy part is the bridge between the two. One order might need to be a Sales Order (web order), while a POS sale should become a Sales Invoice because you’re not “fulfilling” anything. If you handle that manually, you end up switching screens, copying customer details, rebuilding line items, and then discovering taxes or discounts don’t line up. Worse, you often only find out when reconciliation week hits and everything is suddenly urgent.

It adds up fast. Here’s where it breaks down.

  • POS and web orders get treated the same way, which creates the wrong document type and downstream confusion.
  • Customer matching is inconsistent, so one person becomes three “different” customers in Business Central.
  • Taxes, discounts, and shipping lines get entered differently each time, and your totals stop matching Shopify reports.
  • When something fails mid-entry, you can be left with half-created documents that someone has to hunt down and delete.

The Solution: Automatically Create the Right BC Sales Docs

This workflow watches for paid Shopify orders on a schedule, pulls in the details it needs (including fulfillment context), and then builds the correct Business Central document automatically. If the order came from POS, it creates a Sales Invoice in Business Central. If it came from the web, it creates a Sales Order instead. Along the way, it checks whether the customer already exists in Business Central and creates them only when needed, so you don’t inflate your customer list with duplicates. Finally, it posts the order or invoice lines using consistent mappings for items, taxes, and discounts, which keeps totals clean and reduces reconciliation surprises.

The workflow starts with a scheduled run in n8n, then fetches paid orders from Shopify using your filter rules. It processes each order in batches, validates or creates the matching customer in Business Central, and submits either a Sales Order or Sales Invoice with properly structured lines. If something goes wrong, it can remove the partially created record so you don’t inherit cleanup.

What You Get: Automation vs. Results

Example: What This Looks Like

Say you process 25 paid orders a day. Manually, even a “quick” workflow is usually about 10 minutes per order once you account for customer matching, line items, and tax checks. That’s roughly 4 hours a day of careful data entry. With this automation, you set the schedule, let it fetch and process orders in the background, then spend maybe 20 minutes doing a quick spot-check. You’re not eliminating accounting work. You’re eliminating reentry.

What You’ll Need

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Shopify to provide paid order data.
  • Microsoft Dynamics 365 Business Central to create Sales Orders and Invoices.
  • Business Central API access (get it from your Azure AD app registration and BC environment settings).

Skill level: Intermediate. You’ll paste IDs, set filters, and test with real orders, but you won’t be writing an app.

Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).

How It Works

A scheduled run checks Shopify. n8n triggers on a schedule you control (hourly, daily, whatever fits). Then it fetches Shopify orders using your “paid order” and other filter rules.

Orders are prepared for accounting. The workflow retrieves fulfillment context, maps the important fields, and preprocesses data so Business Central receives a payload in the structure it expects. This is where a lot of manual workflows quietly fall apart.

Customers and documents are created intelligently. For each order, it searches Business Central for the customer record. New customer? It creates one, assigns the BC Customer ID, then continues. It also checks whether a Sales Order or Invoice already exists so you don’t accidentally create duplicates on re-runs.

Line items get posted, then finalized. The workflow splits out order items and invoice items, submits the lines, and finishes the flow. If posting lines fails, it can remove the partially created Sales Order/Invoice so you don’t inherit a cleanup task.

You can easily modify the Shopify filters to match your store’s rules (for example, only certain payment gateways or sales channels) based on your needs. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Scheduled Run Trigger

Set the workflow schedule so it runs automatically on a recurring interval.

  1. Add the Scheduled Run Trigger node as the workflow trigger.
  2. In Scheduled Run Trigger, set the Rule to run at the Interval field minutes.
  3. Connect Scheduled Run Trigger to BC Environment Config.
If you want hourly or daily runs, change the schedule rule in Scheduled Run Trigger before going live.

Step 2: Connect Business Central Environment Settings

Define Business Central tenant and company values that will be reused throughout the workflow.

  1. Open BC Environment Config and enable Keep Only Set.
  2. Set tenantId to {tenandId}, environmentName to Production, and companyId to {CompanyId}.
  3. Set discountItemSku to N8N_DISCOUNT and taxItemSku to N8N_TAX_AMOUNT.
  4. Enable taxesAsLineItem and discountsAsLineItem as true if you want taxes and discounts added as separate line items.
⚠️ Common Pitfall: Make sure {tenandId} and {CompanyId} are replaced with real Business Central values before testing.

Step 3: Connect Shopify and Retrieve Paid Orders

Fetch Shopify orders, filter for paid transactions, and enrich them with fulfillment data.

  1. Open Fetch Shopify Orders and set Operation to getAll, Return All to true, and Authentication to accessToken.
  2. In Fetch Shopify Orders, set Status to any and Updated At Min to ={{$now.minus({days: 1})}}.
  3. Credential Required: Connect your shopifyAccessTokenApi credentials in Fetch Shopify Orders.
  4. Configure Filter Paid Orders with Value 1 ={{ $json.financial_status }} and Value 2 paid.
  5. In Retrieve Fulfillment Orders, set URL to =https://integrocloud.myshopify.com/admin/api/2024-01/orders/{{ $json.id }}/fulfillment_orders.json.
  6. Credential Required: Connect your httpHeaderAuth and shopifyAccessTokenApi credentials in Retrieve Fulfillment Orders.
Use a shorter updatedAtMin window in Fetch Shopify Orders if you need near-real-time syncs.

Step 4: Map and Preprocess Orders for Business Central

Normalize Shopify order fields, enrich line items, and prepare records for Business Central processing.

  1. In Map Order Fields, enable Keep Only Set and map key fields such as id to ={{ $('Filter Paid Orders').item.json.id }} and line_items to ={{ $('Filter Paid Orders').item.json.line_items }}.
  2. Ensure Map Order Fields includes fulfillment data using fulfillment_orders = ={{ $json.fulfillment_orders }}.
  3. In Preprocess Order Data, keep Mode as runOnceForEachItem and retain the provided JavaScript to append tax/discount line items based on BC Environment Config.
  4. Use Iterate Orders to process orders in batches (default settings are fine for sequential processing).
  5. Configure Assign BC Customer ID with order = ={{ $('Preprocess Order Data').item.json }} and bc_customer.id = ={{ $json.value.isEmpty() ? $json.id : $json.value[0].id}}.
  6. Set Check POS Source to compare Value 1 ={{ $json.order.source_name }} with Value 2 pos for routing.
⚠️ Common Pitfall: If Map Order Fields does not include currency or created_at, later payload builders will fail.

Step 5: Configure Customer Lookup and Creation

Find existing Business Central customers or create new ones for each Shopify order.

  1. In Find Customer Records, set URL to =https://api.businesscentral.dynamics.com/v2.0/{{ $('BC Environment Config').item.json["tenantId"] }}/{{ $('BC Environment Config').item.json["environmentName"] }}/api/v2.0/companies({{ $('BC Environment Config').item.json["companyId"] }})/customers?$filter=email eq '{{ $json.customer.email }}' and contains(email,'@')&$select=id,number,email.
  2. Credential Required: Connect your oAuth2Api credentials in Find Customer Records.
  3. Configure Is New Customer with Value 1 ={{ $json.value.length }} and Value 2 1.
  4. If no customer is found, use Create Customer Record to POST a new record with fields like displayName = ={{ $('Preprocess Order Data').item.json.customer.first_name }} {{ $('Preprocess Order Data').item.json.customer.last_name }}.
  5. Credential Required: Connect your oAuth2Api credentials in Create Customer Record.

Step 6: Configure Sales Order Creation and Line Posting

Create sales orders for non-POS orders and post line items to Business Central.

  1. In Search Sales Order, set URL to =https://api.businesscentral.dynamics.com/v2.0/{{ $('BC Environment Config').item.json["tenantId"] }}/{{ $('BC Environment Config').item.json["environmentName"] }}/api/v2.0/companies({{ $('BC Environment Config').item.json["companyId"] }})/salesOrders?$filter=externalDocumentNumber eq '{{ $json.order.id.toString() }}'&$select=id,number,externalDocumentNumber.
  2. Credential Required: Connect your oAuth2Api credentials in Search Sales Order.
  3. Configure Is New Sales Order to check Value 1 ={{ $json.value.length }} with operation smallerEqual.
  4. In Build Order Payload, map fields like customerId = ={{ $('Assign BC Customer ID').item.json.bc_customer.id }} and externalDocumentNumber = ={{ $('Assign BC Customer ID').item.json.order.id.toString() }}.
  5. Submit the order using Submit Sales Order with JSON Body set to ={{$json}}.
  6. Credential Required: Connect your oAuth2Api credentials in Submit Sales Order and Post Order Lines.
  7. Prepare and split line items using Prepare Order Lines and Split Order Items with Field to Split Out = =line_items.
  8. Post each line in Post Order Lines with lineObjectNumber = ={{ $json.line_items.sku }} and unitPrice = ={{ $json.line_items.price*1 }}.
  9. End the order flow at Finish Orders Flow.

Step 7: Configure Sales Invoice Creation and Line Posting

Create sales invoices for POS orders and post invoice line items.

  1. In Search Sales Invoice, set URL to =https://api.businesscentral.dynamics.com/v2.0/{{ $('BC Environment Config').item.json["tenantId"] }}/{{ $('BC Environment Config').item.json["environmentName"] }}/api/v2.0/companies({{ $('BC Environment Config').item.json["companyId"] }})/salesInvoices?$filter=externalDocumentNumber eq '{{ $json.order.id.toString() }}'&$select=id,number,externalDocumentNumber.
  2. Credential Required: Connect your oAuth2Api credentials in Search Sales Invoice.
  3. Configure Is New Invoice to check Value 1 ={{ $json.value.length }} with operation smallerEqual.
  4. Build the invoice in Build Invoice Payload using invoiceDate = ={{ DateTime.fromISO($('Assign BC Customer ID').item.json.order.created_at).toFormat('yyyy-MM-dd').toString() }}.
  5. Submit the invoice with Submit Sales Invoice and JSON Body = ={{$json}}.
  6. Prepare and split lines using Prepare Invoice Lines and Split Invoice Items with Field to Split Out = =line_items.
  7. Post each line in Post Invoice Lines using lineObjectNumber = ={{ $json.line_items.sku }} and unitPrice = ={{ $json.line_items.price*1 }}.
  8. End the invoice flow at Finish Invoice Flow.

Step 8: Add Error Handling

Remove partially created records if line posting fails.

  1. Verify Post Order Lines has an error output connected to Remove Order on Error.
  2. Verify Post Invoice Lines has an error output connected to Remove Invoice on Error.
  3. Credential Required: Connect your oAuth2Api credentials in Remove Order on Error and Remove Invoice on Error.
⚠️ Common Pitfall: If the delete endpoints are pointed to the wrong environment, failed orders won’t be cleaned up correctly.

Step 9: Test and Activate Your Workflow

Run a manual test to confirm orders flow through customer lookup, order creation, and invoice creation paths correctly.

  1. Click Execute Workflow to run the workflow manually with recent Shopify orders.
  2. Confirm that paid orders pass through Filter Paid Orders and that Retrieve Fulfillment Orders returns data.
  3. Verify that Submit Sales Order or Submit Sales Invoice creates records in Business Central and that lines are posted in Post Order Lines or Post Invoice Lines.
  4. When satisfied, toggle the workflow to Active to enable scheduled execution.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Common Gotchas

  • Microsoft Dynamics 365 Business Central credentials can expire or need specific permissions. If things break, check your Azure AD app permissions and the connection details in your Business Central lookup node first.
  • If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
  • Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.

Frequently Asked Questions

How long does it take to set up this Shopify BC automation automation?

About an hour if you already have Business Central API access.

Do I need coding skills to automate Shopify BC automation?

No. You will mostly paste IDs, connect accounts, and adjust a few mapping values. The “hard” part is testing with a couple real orders and confirming totals match.

Is n8n free to use for this Shopify BC automation workflow?

Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Microsoft Dynamics 365 Business Central licensing and any API-related governance your tenant requires.

Where can I host n8n to run this automation?

Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.

Can I customize this Shopify BC automation workflow for separating B2B and B2C orders?

Yes, and it’s a common tweak. You can adjust the “Shopify Order Filter” logic to tag orders by company name, customer tags, or sales channel, then route them through different mappings in the order payload and invoice payload steps. Some teams also change the “Check POS Source” decision to include other sources beyond POS. If you need different tax items or discount items by segment, update those values in your “D365 BC Environment Settings” configuration so the rest of the workflow stays consistent.

Why is my Microsoft Dynamics 365 Business Central connection failing in this workflow?

Usually it’s expired credentials or missing API permissions in Azure AD. Regenerate or re-consent your app, then update the Business Central connection details used by the customer lookup and document creation requests. Also check you’re using the correct Company ID and Tenant ID in your environment settings, because one wrong value can make every call look “unauthorized.”

How many orders can this Shopify BC automation automation handle?

A lot, within reason. On n8n Cloud Starter, you’re working within your monthly execution quota, so high-volume stores may need a higher plan. If you self-host, there’s no execution cap, but you’re limited by your server and by Shopify/Business Central API rate limits. In practice, most teams comfortably run this on an hourly schedule and process dozens to hundreds of orders per run, as long as the split/batch settings are tuned.

Is this Shopify BC automation automation better than using Zapier or Make?

Often, yes. This flow does more than “create a record” because it branches on POS vs web, checks for existing Sales Orders/Invoices, and posts line items in multiple calls, which is where simpler tools get clunky or expensive. n8n also gives you a self-hosted option and better control over retries and error cleanup. Zapier or Make can still be fine for a basic two-step push, but they tend to struggle once you need idempotency (no duplicates) and multi-line documents. Talk to an automation expert if you want help choosing.

Once this is running, Business Central becomes the system of record without the daily copy-paste tax. Set it up, test it, then let the workflow carry the boring part.

Need Help Setting This Up?

Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.

Lisa Granqvist

Workflow Automation Expert

Expert in workflow automation and no-code tools.

×

Use template

Get instant access to this n8n workflow Json file

💬
Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Launch login modal Launch register modal