Skip to main content

How Zest Handles E-Gift Sales Tax

Updated over 2 weeks ago

Sales tax can feel complicated — but Zest is built to take the heavy lifting off your plate. Zest automatically calculates sales tax at checkout, pushes itemized tax data to Shopify, and keeps everything ready for your tax filing platform to handle remittance.

Overview: How Zest Calculates Sales Tax

Zest uses TaxJar (a Stripe company) as its built-in tax engine. During onboarding, you provide two key inputs:

  1. Which states you have sales tax nexus in — where you're legally required to collect tax.

  2. Product tax codes for your SKUs — configured in Shopify and read automatically by Zest.

For each order, Zest combines the recipient's shipping address, your product tax codes, and your nexus states to calculate tax rates in real time via TaxJar's API. Tax is calculated at the sub-jurisdiction level — broken out by state, county, city, and special district — and applied per line item, per recipient.

A note on remittance: Zest handles tax calculation and collection at checkout. Your team remains responsible for remitting taxes through your existing tax platform (Avalara, TaxJar, Vertex, Numeral, etc.).

Configuring Tax Nexus States

Before Zest can collect tax in a state, you need to tell it where you have nexus. You control this configuration entirely yourself — no help from engineering required.

To configure your nexus states:

  1. Log in to the Zest portal and navigate to Settings.

  2. Select the Payment tab.

  3. Scroll to the Tax nexus addresses section.

  4. Click Add nexus address and add every state where you have sales tax nexus.

  5. Click Add address to save each state.

Important: Your Zest nexus settings do not sync automatically from Shopify. If you gain nexus in a new state, you must update your Zest settings manually — and also update your Shopify settings and your tax filing platform separately.

Your Zest CSM can guide you through this setup and answer questions, but will not make changes to your tax settings on your behalf. Because these settings have direct accounting implications, this is a change only your team should make.

Product Tax Codes and Category Mapping

Zest reads product tax codes directly from Shopify and translates them into TaxJar equivalents for accurate jurisdiction-level calculation. No configuration is needed inside Zest — you just need to make sure your Shopify catalog is set up correctly.

Where do tax codes come from?

Tax codes are set in Shopify — either by assigning Shopify product categories (e.g., "Wine," "Nuts and Seeds," "Food & Groceries") or through a tax software integration like Avalara that syncs codes to your Shopify products.

How Zest reads tax codes (lookup order):

  1. Shopify variant-level tax code — if an Avalara code is present, Zest translates it to its TaxJar equivalent automatically.

  2. Shopify product category taxonomy — e.g., "Wine" maps to TaxJar's wine/alcohol code; "Nuts and Seeds" maps to a food ingredient code.

  3. Shopify product type field — a product type of "wine," "coffee," or "cookie" will map to a TaxJar equivalent.

  4. TaxJar default rules — if no code is found, TaxJar applies its own jurisdiction defaults.

Important: Make sure your Shopify product categories are correctly assigned — for example, "Nuts and Seeds" for nut products, "Wine" for wine, or "Food & Groceries" for general food items. Incorrect or missing categories can result in the wrong tax rate being applied.

Cross-state category mapping tradeoffs: Changing a product's TaxJar category mapping to resolve a tax issue in one state can sometimes affect calculations in other states, since product category definitions vary by jurisdiction. Always review the cross-state impact before making category changes. Reach out to your Zest CSM before adjusting product mappings.

Tax Calculation for E-Gift Orders (Billing Address vs. Flat Rate)

With e-gift orders, the recipient's shipping address isn't known at purchase time — so Zest needs a different approach to estimate tax at checkout. You have two options.

Option 1: Calculate tax using the gifter's billing address (default)

By default, Zest calculates e-gift tax based on the gifter's billing address at checkout. Once the recipient enters their shipping address and the order ships, your tax filing platform (e.g., Avalara, TaxJar) independently recalculates tax using the recipient's actual address for remittance purposes.

This approach is accurate in many cases, but small discrepancies may occur when the gifter and recipient are in different tax jurisdictions — this is expected behavior.

Option 2: Apply a flat "Tax & Fees" rate

Alternatively, Zest can apply a flat percentage to all e-gift orders, displayed at checkout as Tax & Fees. Brands typically set this at their highest applicable state tax rate (e.g., 8–12%). Any difference between the flat rate collected and the actual tax owed is treated as a fee rather than a shortfall.

To set up a flat rate: Contact your Zest CSM with your desired percentage. Common examples include 5%, 8%, and 9.1%. The flat rate can be configured independently for e-gift versus direct-ship orders, so you're not locked into one approach across your whole catalog.

Customizing the checkout tooltip: When a flat rate is enabled, an info icon (ℹ️) appears next to the "Tax & Fees" line at checkout. Zest can customize the tooltip text that customers see — for example:

  • "Taxes are remitted based on nexus requirements and the address of the recipient."

  • "Customization and Handling Fee."

To set your tooltip text, share your preferred language with your Zest CSM.

Tax is captured at order creation time: Tax is always calculated when payment is captured — not at ship time. If tax rates change between the order date and the ship date, the originally calculated amount stands.

How Tax Data Flows to Shopify and Your Tax Filing Service

Here's what happens after a Zest checkout:

  1. Zest calculates tax in real time via TaxJar, broken out by state, city, county, and special district — per line item, per recipient.

  2. Zest pushes Child Orders to Shopify, each carrying its own itemized tax line items. The Parent Order in Shopify reflects the sum of all Child Order taxes.

  3. Your tax filing service (Avalara, TaxJar, Vertex, Numeral, etc.) ingests the Shopify orders and independently recalculates tax for remittance purposes.

The two calculations — Zest's and your tax platform's — typically align closely. Small differences of a few cents can occur due to rounding or edge case handling; this is expected.

Remittance is your responsibility: Zest calculates and collects tax at checkout, but you remit taxes through your own platform. Use Zest's reports for validation, but anchor on Shopify / your tax filing platform as the source of truth for filing.

Platform fees: Zest's service fees are passed to Shopify as a separate line item and are explicitly marked as non-taxable. No tax is ever charged on Zest fees.

Tax-Exempt Orders

There is currently no way to exempt specific customers from tax in self-service storefronts. Tax-exempt customers must be routed through Concierge instead.

Troubleshooting Common Tax Issues

My Zest tax totals don't match my Shopify orders or tax reports.

Discrepancies can arise from several sources:

  • E-gift billing address vs. shipping address: Zest collects tax based on the gifter's billing address at checkout; your tax platform recalculates using the recipient's actual shipping address. Both are correct — they reflect different points in time.

  • Incomplete invoices: Invoices created before recipient data is finalized may not include tax. Tax is added when recipient information is complete.

  • Independent recalculation by your tax platform: TaxJar and Avalara are separate engines that may handle edge cases differently — zip codes that span county lines, regional transport fees, etc.

  • Shopify tax display: Shopify may show combined or separated state/local tax lines depending on your settings, which can look different from Zest's itemized breakdown.

Best practice: Use Shopify and your tax filing platform as the source of truth for remittance. Use Zest reports to identify and investigate discrepancies.

My tax app is charging tax on Parent Orders or Zest system SKUs.

Parent Orders should never be taxed — Zest calculates tax on Child Orders and rolls it up to the Parent Order. If your tax app is taxing Parent Orders, it can cause:

  • Checkout total mismatches.

  • Stuck Child Orders.

  • Overcharges to customers.

Resolution: Update your tax app's settings in Shopify to exclude Zest's system SKUs from taxation. Your tax provider's support team can help identify and exclude these SKUs if needed.

I run a wine or alcohol brand and my tax amounts look off.

Zest maps wine, beer, and spirits product categories to TaxJar's alcohol-specific tax codes, so TaxJar applies alcohol tax rates where they apply. However, certain state-specific alcohol charges — such as New Hampshire's 8% alcohol markup — are classified as markups rather than sales tax and may not be captured by TaxJar.

Many wine brands use the flat "Tax & Fees" approach with legal sign-off to handle complex alcohol tax scenarios. Talk to your Zest CSM about the best approach for your catalog.

Tax isn't calculating correctly for certain counties or cities.

Some states — such as Illinois — have regional transport taxes or county-level rates that TaxJar may not fully capture. Additionally, certain special fees are not classified as sales tax and are not supported by TaxJar:

  • Colorado's retail delivery fee.

  • California's CRV (California Redemption Value).

TaxJar does use the full shipping address (not just the ZIP code) for calculation. However, ZIP codes that span multiple counties can still result in inconsistent rates in some cases.

Did this answer your question?