Contents6 sections ↓
Shopify charges the customer tax at checkout. NetSuite then has to record that same tax on the order, the invoice or cash sale, and the tax reports. When the two systems calculate tax separately, they disagree by a few cents or a few dollars, and orders fail to import or the GL drifts. Moving NetSuite to SuiteTax changes how that tax is stored, and integrations that wrote tax the legacy way stop working.
Direct answer: SuiteTax replaces NetSuite's legacy tax codes on each line with a Tax Details subtab calculated by a tax engine. It is account-wide and cannot be turned off once enabled. For Shopify orders, the rule that keeps totals right is the same before and after SuiteTax: the amount the customer paid in Shopify wins. With SuiteTax, the integration does that by checking Tax Details Override on the transaction and writing Shopify's tax amounts as tax detail lines, with an integration role that has Tax Details permissions. Watch invoices and cash sales created later: NetSuite recalculates tax on them unless the integration carries the order's tax over. "SuiteTax vs Avalara" is a false choice: SuiteTax is the framework, and Avalara's AvaTax can run inside it as the tax engine.
Checked on November 5, 2026 against Oracle's SuiteTax documentation and Celigo's Shopify integration app documentation, linked at the end.
What SuiteTax changes
| Legacy tax | SuiteTax | |
|---|---|---|
| Where tax lives | Tax code and rate on each item line | Tax Details subtab: tax type, code, basis, rate and amount per line, linked by a Tax Details Reference |
| Who calculates | NetSuite's legacy engine from tax codes and tax groups | A tax engine chosen by nexus: NetSuite's SuiteTax Engine or a third-party engine plug-in |
| US rates | Each state updated manually | Rate updates provided monthly; ZIP+4, origin and destination rules |
| Nexus | Ship-to address only | Ship-to, location, billing or subsidiary address |
| Manual override | Not supported | Nexus and tax details can be overridden on the transaction |
| Reverting | — | Not possible: "SuiteTax is a non-reversible feature" |
| Reporting data | NetSuite.com data source | NetSuite2.com data source; reading tax details needs the Transaction Tax Details permission |
The last two rows are the ones integrations trip on. Any flow that sets a tax code on item lines, or reads legacy tax fields, has to be rewritten for the Tax Details subtab before the switch.
Oracle's known limitations also matter for commerce: SiteBuilder websites must be inactive or set to an information-only scope, and SuiteCommerce supports SuiteTax for the US and Canada only with current bundles. If you run SuiteCommerce next to Shopify, check those first.
Why Shopify tax and NetSuite tax disagree
Shopify calculates tax at checkout from its own rules and rates. NetSuite, left alone, calculates again from its engine, its nexus logic and its item tax settings. The two answers can differ for ordinary reasons:
- Rounding. Per-line rounding against per-order rounding is a cents-level difference on almost every multi-line order.
- Shipping and discounts. Whether shipping is taxable, and whether a discount reduces the taxable amount, differs by state and by how each system is configured.
- Nexus. SuiteTax can pick the nexus from the location or subsidiary, not only the ship-to address, so it may apply a different jurisdiction from Shopify.
- Exemptions. A B2B buyer exempt in Shopify may not be exempt on the NetSuite customer record.
When the order total in NetSuite does not equal the amount Shopify collected, the payment does not match: deposits don't apply cleanly, cash sales fail, and reconciliation against Shopify Payments payouts breaks.
Make Shopify the source of truth for tax
The customer already paid. NetSuite should record what Shopify charged, not recompute it. Celigo's Shopify integration app offers three ways to bring tax in (Settings > Order > Tax, "How would you like to bring sales tax into NetSuite"):
| Option | What it does | When to use |
|---|---|---|
| Overwrite taxes with Shopify tax amounts | Writes Shopify's tax on each line, with a default tax code as fallback. Celigo calls it the leading practice | Most brands |
| NetSuite calculates taxes using its own tax engine | The integration doesn't touch tax; NetSuite calculates | Only if NetSuite's tax setup is the reference and you accept variances |
| Add total tax against a single line item | Posts Shopify's total tax on one non-inventory line | Simple setups; loses line-level tax detail |
After each order, Celigo compares NetSuite's calculated tax with Shopify's and stores the difference in the eTail Tax Total Variance field on the sales order. A saved search on that field is the fastest way to see whether your setup is working.
What "overwrite" means under SuiteTax
With legacy tax, overwriting meant setting a tax code and rate on each item line. With SuiteTax, there is no tax code on the item line. The integration has to:
- Check Tax Details Override on the transaction, so the tax engine does not replace the values.
- Write tax detail lines (tax type, tax code, basis, rate, amount), each tied to its item line through the Tax Details Reference. Oracle requires all five values on each line when overriding.
- Set the nexus if the transaction has no calculated tax yet: Oracle requires Nexus Override and a nexus before you enter tax details manually.
- Give the integration role the right permissions. Oracle requires at least Edit on the Tax Details Tab permission to override; for its SuiteTax setup on marketplace orders, Celigo also documents Tax Details (Lists, Full) and Tax Reports (Reports, View).
Celigo documents this SuiteTax pattern for its marketplace integration apps, including checking Tax Details Override and setting per-line tax details; for Shopify, confirm the SuiteTax setting with your integration app version before you migrate.
The invoice and cash sale trap
The sales order can be right and the invoice wrong. A Celigo community thread shows the pattern: per-line taxes on sales orders matched Shopify and the variance was zero, but invoices created from those orders did not, because NetSuite recalculates tax when it creates the invoice. Celigo's suggestion was to bill through the integration's invoicing flow, which reuses the sales order's tax, rather than NetSuite's standard billing. Test billing as carefully as order import.
SuiteTax vs Avalara
They are not alternatives. SuiteTax is NetSuite's tax framework: the Tax Details subtab, nexus determination, overrides and reporting. Inside it, a tax engine does the calculation. NetSuite ships its own SuiteTax Engine, and third parties plug in: Avalara announced AvaTax for SuiteTax as a certified integration in 2019, and Sovos documents a SuiteTax connector.
The real question for a Shopify brand is which engine calculates tax for orders that do not come from Shopify (wholesale, EDI, manual orders), and whether Shopify and that engine agree:
| Setup | Fits |
|---|---|
| SuiteTax Engine for NetSuite orders; Shopify amounts overwritten on Shopify orders | US brands with simple nexus and mostly DTC |
| AvaTax inside SuiteTax for NetSuite orders, Shopify amounts overwritten on Shopify orders | Many states, B2B exemptions, marketplace and wholesale volume |
| Same engine on both sides (for example AvaTax in Shopify and in NetSuite) | When you want both systems to calculate identically and still keep the overwrite as a safety net |
Whichever engine you choose, keep the overwrite on for Shopify orders. The engine sets the rules; the overwrite makes sure the books match the money collected.
Planning a SuiteTax move with Shopify orders in the mix?
We map your Shopify tax flows to the Tax Details subtab, test billing and refunds in sandbox and run the cutover with your tax team.
Plan the SuiteTax migrationA migration checklist for Shopify brands
- Inventory every flow that writes or reads tax: order import, billing, refunds, payouts, reports, saved searches, scripts.
- Check compatibility: SiteBuilder scope, SuiteCommerce bundles, POS, and any app listed in Oracle's known limitations.
- Rebuild in sandbox with SuiteTax enabled: Tax Details Override, tax detail lines, nexus, role permissions.
- Test the full life of an order: import, partial fulfillment, invoice or cash sale, partial refund, return. Compare every total against Shopify. Refund flows matter here too; see Shopify refunds in NetSuite.
- Rebuild tax reports on the NetSuite2.com data source and tax point dates.
- Pick the switch date at a period boundary, and remember there is no way back.
Sources
- Differences between SuiteTax and Legacy Tax (Oracle NetSuite help center)
- Known Limitations of SuiteTax (Oracle NetSuite help center)
- Tax Details on Transactions in SuiteTax (Oracle NetSuite help center)
- Importing Tax Details for Transactions in SuiteTax (Oracle NetSuite help center)
- Sales tax handling in the Shopify integration app (Celigo)
- SuiteTax with the integration app (Celigo)
- How does "Overwrite taxes with Shopify tax amounts" work? (Celigo community)
- Avalara and NetSuite announce AvaTax for SuiteTax (Avalara)
What clients ask before signing
Cristina · BrokenRubik
Replies by email within 24 hours
Cristina
Connecting a store, a 3PL or another app to NetSuite? Name the two systems and we'll reply with the approach we'd take.

Mercedes Lerena
Co-founder & CEO
Co-founder and CEO of BrokenRubik, leading strategic vision and business operations for over a decade. Expert in building and scaling NetSuite consulting teams, with deep experience in enterprise software delivery and client relationship management.
