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.
- Checkout Tax calculated
- Tax engine Rates
- ERP Liability by jurisdiction
- 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:
- Tax collected according to the store’s (or tax engine’s) tax report.
- Tax recorded in the ERP liability accounts.
- 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] South Dakota v. Wayfair, Inc., 585 U.S. 162 (2018) — Supreme Court of the United States
- [2] Marketplace facilitator state guidance — Streamlined Sales Tax Governing Board
- [3] US tax liability insights — Shopify Help Center
- [4] US tax reference (economic nexus thresholds) — Shopify Help Center
- [5] TaxLine (GraphQL Admin API) — Shopify
Related reading
- ERP integrations Shopify QuickBooks Online Integration: Orders, Payouts, and Inventory How to connect Shopify to QuickBooks Online — per-order vs. daily summary posting, Shopify Payments payout reconciliation, inventory limits, API throttles, and webhooks.
- ERP integrations Shopify NetSuite Integration: Architecture, APIs, and Pitfalls How to integrate Shopify with Oracle NetSuite — REST web services, OAuth 2.0, external-ID upserts, concurrency limits, order and inventory flows, and connector options.
- Guides How to Synchronize Shopify Orders with an ERP How to export Shopify orders to an ERP reliably — choosing the trigger, mapping lines, taxes, discounts and payments, handling edits, and avoiding duplicates.
- Guides How to Handle Refunds and Cancellations in an ERP Integration Model ecommerce refunds, cancellations, and returns in an ERP — credit notes, restocking, partial refunds, shipping refunds, and which system initiates each action.
- Concepts What Is Data Mapping in Integrations? What data mapping means in ecommerce-ERP integrations — field, value, and structural mapping — with examples, common pitfalls, and how to document and test mappings.
- Concepts What Is Inventory Reconciliation? What inventory reconciliation is, why stock drifts between an online store and an ERP, how to compare and correct quantities safely, and how often to reconcile.