Zest makes sales tax straightforward for your gifting program — you configure your settings once, and Zest handles the math on every order. This article explains how tax is calculated, how to configure your nexus states and product codes, and how your tax data flows downstream to Shopify and your preferred tax filing service.
Before you start:
You'll need admin access to your Zest portal.
Ensure your product categories are up to date.
Have your nexus states ready — check with your tax advisor if you're unsure where you have nexus.
Overview: How Zest Calculates Sales Tax
Zest uses TaxJar (a Stripe company) as its built-in tax engine. For every order, Zest combines three inputs to calculate accurate sales tax:
Your nexus states — the states where you're required to collect tax.
Product tax codes — assigned in Shopify, these tell TaxJar how to categorize your products for tax purposes.
Recipient shipping address — tax is calculated at the destination, broken out by state, county, city, and special district.
Tax is calculated at the sub-jurisdiction level, applied per line item, per recipient. You don't need any engineering help to get this set up — just configure your nexus states in the Zest portal and make sure your Shopify products have the right categories.
Configuring Tax Nexus States
Where to configure nexus
Nexus states are configured in Settings > Payment in the Zest portal, under the Tax nexus addresses section.
How to add a nexus state
Navigate to Settings, then select the Payment tab.
Under Tax nexus addresses, click Add nexus address.
Select the state where you have nexus.
Click Add address.
Repeat for each state where you're required to collect sales tax.
How to remove a nexus state
Navigate to Settings > Payment > Tax nexus addresses.
Click the remove icon (an X) next to the state you want to remove.
Important: Your Zest nexus settings do not automatically sync from Shopify. If you gain nexus in a new state, update both your Shopify tax settings and your Zest Tax nexus addresses manually.
Note: Zest CSMs can guide you on using this feature, but will not make changes to your tax settings on your behalf, because tax configuration has direct accounting implications. All changes are in your control.
Product Tax Codes and Category Mapping
How Zest gets your product tax codes
Zest reads product tax codes directly from Shopify and maps them to TaxJar equivalents for accurate calculation. Zest checks the following, in order:
Shopify variant-level tax code — if populated (for example, by Avalara or another tax app), this is used first.
Shopify product category — if no variant-level code is found, Zest falls back to the product's Shopify taxonomy category (e.g., "Food & Groceries," "Wine," "Nuts and Seeds").
Shopify product type — if neither of the above is populated, Zest uses the product type field.
Action required: Make sure your Shopify product categories are correctly assigned. After Shopify removed the variant-level tax code field without notice, Zest now primarily relies on the product category field. A product with no category may fall back to a general merchandise tax code, which could result in incorrect tax rates in certain states.
Common category examples
Product type | Recommended Shopify category |
Food/snacks | Food & Groceries |
Wine | Wine |
Beer | Beer |
Spirits | Spirits |
Nuts/seeds | Nuts and Seeds |
Gift cards | Gift Cards |
If you use Avalara for tax codes
If your Shopify store uses Avalara, your Avalara tax codes are automatically mapped to TaxJar equivalents by Zest — no extra steps needed. Verify that Avalara codes are populated at the Shopify product level.
Note: Changing a product's tax category to fix a rate in one state can sometimes affect tax calculations in other states, because states define product categories differently. For example, reclassifying ice cream to resolve a Florida tax issue may affect how it's taxed in other states. Always review cross-state impact before changing product category assignments in Shopify.
Tax Calculation for Direct Ship Orders
Per-recipient tax calculation
For direct ship orders, Zest calculates tax individually for each recipient using their specific shipping address. Each recipient is processed through TaxJar with:
Their shipping address (state, city, county, zip).
The product tax codes on their items.
Your configured nexus states.
If a recipient is in a state where you don't have nexus, no tax is charged for that recipient.
Volume discounts and multi-recipient orders
When an order includes a volume discount, the discount is spread proportionally across line items per recipient before tax is calculated. Tax applies to the discounted amount.
Tax timing
Tax is calculated at the time of order creation (when payment is captured). If tax rates change between the order date and the ship date, the originally calculated amount stands. Shopify does not recalculate taxes after an order is placed.
County, city, and special district taxes
Some states (e.g., Illinois) have regional transport fees or county-level rates that sit outside the standard sales tax framework. Similarly, certain fees — like Colorado's retail delivery fee or California's CRV — are not classified as sales taxes and are not handled by TaxJar. If you sell in states with complex local tax structures, consult with your tax advisor about how these fees should be handled.
How Tax Data Flows to Shopify and Your Tax Filing Service
The tax data flow
Zest calculates tax at checkout via TaxJar.
When the order is pushed to Shopify, Zest creates itemized tax lines on each Child Order, broken out by:
State tax
County tax
City tax
Special district tax
Your tax filing service (Avalara, TaxJar, Vertex, Numeral, etc.) ingests those Shopify orders and independently recalculates tax for remittance.
Parent Orders and Child Orders
Zest creates a Parent Order in Shopify that represents the overall order, and Child Orders for each recipient or fulfillment. Tax is calculated and stored on Child Orders — not on the Parent Order. Parent Orders should never be taxed.
Important: If you use a tax app like Avalara in Shopify, make sure it is configured to exclude Zest's system SKUs from taxation. If your tax app taxes Parent Orders, it can cause checkout total mismatches, stuck Child Orders, and incorrect charges. Contact your tax provider's support team to configure exclusion rules if needed.
Why Zest and your tax platform may differ slightly
Zest calculates tax using TaxJar; your tax filing service uses its own engine. The two typically align closely, but small differences can occur due to:
Rounding differences between independent engines.
E-gift orders (billing address at checkout vs. recipient address at remittance).
Invoices created before all recipient data is complete.
Concierge invoice edits after order creation.
Edge cases like ZIP codes that span multiple counties or special districts.
Remittance is your responsibility
Zest calculates and collects sales tax at checkout (processed through Stripe), but brands are fully responsible for remitting taxes through their existing tax platform. Zest does not remit taxes on your behalf.
Self-service storefronts and tax-exempt customers
There is currently no way to exempt specific customers from tax in self-service Storefronts. Tax-exempt orders must be routed through Concierge instead.
For resale certificate holders or other exempt buyers, there is no automated exemption process in Zest. Workarounds include using promotional codes or directing customers to file a right-to-refund claim with their state tax authority.
Alcohol and wine-specific tax considerations
TaxJar recognizes wine, beer, and spirits product codes and applies the appropriate state tax rates. However, some state-specific alcohol markups (for example, New Hampshire's alcohol markup) are not classified as traditional sales tax and may not be fully captured by TaxJar. Wine brands with complex alcohol tax requirements often work with their legal and tax advisors to establish a blended "taxes and fees" approach. Contact your CSM if this applies to your brand.
Troubleshooting Common Tax Issues
Tax amounts don't match my tax report or Shopify orders
Discrepancies usually fall into one of these categories:
Scenario | Explanation |
E-gift orders | Tax calculated on buyer billing address at checkout; recalculated on recipient shipping address by your tax platform. |
Concierge invoice edits | Editing an invoice after order creation misaligns tax amounts between the invoice and Shopify. |
Parent Order being taxed | Should never happen — ensure your tax app excludes Parent Orders and Zest system SKUs. |
Engine differences | Independent tax engines may handle zip codes, special districts, or regional fees slightly differently. |
Incomplete recipient data | Invoices created before all recipient addresses are entered may not include tax. |
Best practice: Do not manually add tax to invoices. Edit product prices at the order level, not the invoice level.
My product tax codes look wrong
Check that Shopify product categories are correctly assigned for your product types.
If you use Avalara, confirm that Avalara tax codes are populated at the Shopify product level.
Contact your CSM if you see consistently incorrect tax codes for a product type.
Tax isn't being calculated for some recipients
Check that the recipient's state is included in your Tax nexus addresses (Settings > Payment). If a state isn't listed, Zest will not charge tax for orders shipping there.
Verify that Zest has access to the recipient's full shipping address before order creation.
My tax app is charging tax on Parent Orders or system SKUs
Update your tax app settings in Shopify to exclude Zest system SKUs from taxation.
If you use Avalara, contact Avalara support to configure exclusion rules for Zest's parent-level SKUs.
Customizing the Taxes & Fees display at checkout
Zest can display a custom info tooltip next to the "Taxes & Fees" line at checkout. Common examples include:
"Taxes are remitted based on nexus requirements and the address of the recipient."
"Customization and Handling Fee."
Taxes and fees are displayed as a combined line item — a detailed breakdown between taxes and fees is not currently available at checkout. To request custom tooltip text or a custom label, contact your CSM.
