Skip to content
SystemSyncer
Menu

Guide · Operations

Sales Tax in Ecommerce ERP Integrations: Nexus, Tax Engines, and Data Flow

How US sales tax should flow between Shopify, a tax engine, and your ERP — nexus after Wayfair, marketplace orders, exemptions, refunds, and reconciliation.

Last reviewed:
Reading time
4 min read
Intermediate

Part 10 of 10: Shopify–ERP order-to-cash

Short answer

Pick one system to calculate sales tax — usually the storefront or a tax engine connected to it at checkout — and post the calculated tax to the ERP by jurisdiction instead of recalculating it. Since South Dakota v. Wayfair (2018), states can require out-of-state sellers to collect based on economic activity, and thresholds and measurement periods vary by state, so nexus tracking needs data from every channel. Treat marketplace orders where the channel is liable for the tax differently from your own liabilities, reverse tax on refunds, store exemption certificates for B2B buyers, and reconcile the tax report, the ERP liability accounts, and filed returns every period. This page is integration guidance, not tax advice.

Data flow Where sales tax is calculated and recorded
  1. Checkout Tax calculated
  2. Tax engine Rates
  3. ERP Liability by jurisdiction
  4. Returns Filed and reconciled

Sales tax is where ecommerce integrations quietly create the most expensive problems: a few cents of rounding on every order, marketplace tax reported twice, refunds that never reverse their tax, or nexus that crept up in a state nobody was watching. This guide covers how tax data should flow between the store, a tax engine, and the ERP. It’s written for the people building and running the integration. It is not tax or legal advice — your obligations depend on your products, states, and facts, so confirm the design with a qualified tax professional. As on every page, documented marks statements from official sources, and recommendation marks our guidance.

Why nexus is now an integration problem

Documented: in South Dakota v. Wayfair (2018), the US Supreme Court held that physical presence is not necessary for a state to require a seller to collect sales tax, overruling the prior physical-presence rule. The South Dakota law at issue applied to sellers that delivered more than $100,000 of goods or services into the state, or engaged in 200 or more separate transactions there, in a year.

Documented: states adopted their own economic nexus rules. Thresholds and measurement periods vary by state — Shopify’s US tax reference lists, for example, different thresholds and periods such as the previous or current calendar year, a rolling twelve months, or the previous four quarters. Many states also have marketplace facilitator rules that require marketplaces to collect and remit tax on sales they facilitate, and states differ on whether marketplace sales count toward a remote seller’s own threshold.

Recommendation: because nexus depends on sales into each state across all channels — your store, wholesale, marketplaces, phone orders — the data has to come from wherever every channel meets. In most integrated stacks, that’s the ERP or a tax engine that receives every transaction, not the storefront alone.

Rule 1: one system calculates tax

Recommendation: choose a single tax authority for each channel:

Channel Typical calculator ERP receives
Shopify store (D2C) Shopify’s tax calculation or a tax engine (such as Avalara, Vertex, or TaxJar) connected at checkout Tax lines as calculated, by jurisdiction
B2B / wholesale Tax engine called by the ERP or B2B storefront, honoring exemption certificates Same, plus certificate reference
Marketplaces The marketplace, where it’s the facilitator Tax marked as collected and remitted by the marketplace

The ERP then records tax; it doesn’t recalculate it. Recalculation causes penny differences on thousands of orders and, more seriously, different answers on exempt customers, shipping, or product taxability than the customer was charged.

Rule 2: keep tax at jurisdiction level

Documented (Shopify): each Shopify order exposes tax lines with a title, rate, amount, and a channelLiable flag that indicates whether the channel that submitted the tax is liable for remitting it.

Recommendation: map each tax line to an ERP tax code and liability account by jurisdiction rather than posting one “sales tax” total. A typical mapping record:

{
  "source": "shopify",
  "orderId": "gid://shopify/Order/5551234",
  "taxLines": [
    { "title": "CA State Tax", "rate": 0.0725, "amount": "3.63", "channelLiable": false,
      "erpTaxCode": "CA-STATE", "liabilityAccount": "2310-CA" },
    { "title": "Los Angeles County Tax", "rate": 0.0025, "amount": "0.13", "channelLiable": false,
      "erpTaxCode": "CA-LA-CNTY", "liabilityAccount": "2310-CA" }
  ]
}

Illustrative only. Rates, titles, and jurisdictions here are examples, not current rates. Maintain the mapping as data so finance can update it without a code release, and alert on any tax line that has no mapping instead of posting it to a default account. See data mapping.

Rule 3: marketplace tax is not your liability

Recommendation: when a tax line is marked as channel-liable — or an order comes from a marketplace that is the facilitator in that state — record the tax so it’s clearly collected and remitted by the marketplace. Include those sales in nexus tracking where the state counts them, but keep them out of the tax you remit yourself. Double-reporting marketplace tax is one of the most common reconciliation errors.

Rule 4: refunds reverse tax

Recommendation: refunds must carry their own tax lines, reversing tax in the same jurisdictions and in the same period logic your returns use. A refund posted as a single negative amount with no tax breakdown leaves the liability overstated. Partial refunds, refunds of shipping only, and returns of exempt items each need a test case. See refunds and cancellations.

Rule 5: exemptions live with the customer record

Recommendation: for B2B buyers, store exemption certificate details (state, certificate reference, expiry) on the customer in the ERP or tax engine and sync the exemption status to the B2B storefront. Expired certificates should block exemption — not silently keep it — and every exempt sale should reference the certificate used.

Reconcile every period

Recommendation: before each filing period closes, reconcile three numbers per state:

  1. Tax collected according to the store’s (or tax engine’s) tax report.
  2. Tax recorded in the ERP liability accounts.
  3. Tax filed on the return.

Differences usually trace back to refunds, cancelled orders posted late, channel-liable tax, or unmapped tax lines. Investigate them while the period is still open. The same discipline as inventory reconciliation applies: automate the comparison, route exceptions to a person.

Nexus monitoring

Documented (Shopify): Shopify’s US tax liability insights mark states as “Action required” where potential liability has been identified and “Monitoring” where sales reached at least 80% of a state’s economic nexus threshold, calculated on net sales. External sales that aren’t imported into Shopify may be excluded, depending on the state.

Recommendation: if you sell through more than one channel, make sure the system tracking nexus sees all of them — import wholesale and marketplace sales or track nexus in the tax engine or ERP. Review the report monthly and decide on registration before crossing a threshold, not after.

Common pitfalls

  • Tax recalculated in the ERP, creating differences from what customers paid.
  • One “sales tax” account with no jurisdiction detail, making returns a manual exercise.
  • Marketplace tax reported as your own and remitted twice.
  • Refunds without tax lines, leaving liabilities overstated.
  • Nexus tracked on the storefront only while wholesale and marketplace sales grow elsewhere.
  • Expired exemption certificates still honored at checkout.

Frequently asked questions

Should the ERP recalculate sales tax on web orders?

Usually not. The customer paid the tax calculated at checkout; recalculating it in the ERP produces rounding differences and, worse, different decisions on exemptions or shipping taxability. Post the checkout amounts by jurisdiction and let the ERP record the liability. Confirm the approach with your tax advisor.

What changed with South Dakota v. Wayfair?

In 2018 the US Supreme Court held that physical presence in a state is not necessary for that state to require a seller to collect its sales tax, overruling the earlier physical-presence rule. The South Dakota law at issue applied to sellers with more than $100,000 in sales or 200 or more separate transactions into the state per year. States then adopted their own economic nexus rules, with thresholds and measurement periods that vary.

How should marketplace orders be recorded?

In states with marketplace facilitator laws, the marketplace may be required to collect and remit the tax on sales it facilitates. Shopify's order data indicates, per tax line, whether the channel that submitted the tax is liable for remitting it. Record that tax as collected and remitted by the marketplace, not as your own liability, so returns don't double-report it.

Does Shopify track where I might have nexus?

Shopify's US tax liability insights flag states where potential liability has been identified and states where your sales reached at least 80% of an economic nexus threshold, and Shopify says the calculation uses net sales. Sales from channels not imported into Shopify may not be counted, so feed every channel into whatever system tracks nexus.

What tax data should the integration keep for audits?

For each order and refund — jurisdiction, taxable and exempt amounts, rate, tax amount, the tax engine's transaction reference, exemption certificate references for B2B customers, and whether a marketplace was liable. Keep it linked to the ERP transaction so any line on a return can be traced back to orders.

Sources and further reading

Platform-specific statements on this page were checked against these sources on . Vendor APIs change; confirm details in the current documentation before you build.

  1. [1] South Dakota v. Wayfair, Inc., 585 U.S. 162 (2018) — Supreme Court of the United States
  2. [2] Marketplace facilitator state guidance — Streamlined Sales Tax Governing Board
  3. [3] US tax liability insights — Shopify Help Center
  4. [4] US tax reference (economic nexus thresholds) — Shopify Help Center
  5. [5] TaxLine (GraphQL Admin API) — Shopify