Skip to main content

How Sales Tax Is Calculated and Handled for Concierge Orders

Updated over a week ago

Zest handles sales tax calculation automatically so you can focus on running your gifting program. You control your tax settings directly from the Zest Partners portal. This article covers how tax works end to end in Concierge: how Zest calculates it, how to configure your settings, and how tax data flows to Shopify and your filing platform.

Before you start:

  • Make sure you have access to the Zest Partners portal and have completed onboarding.

  • Know which U.S. states you have sales tax nexus in. If you're unsure, consult your accountant or tax advisor.

  • Ensure your product categories are correctly assigned (e.g., "Food & Groceries," "Wine," "Nuts and Seeds") — Zest reads these when calculating tax codes.

Overview: How Zest Calculates Sales Tax

Zest uses TaxJar as its built-in tax engine. For every order, Zest combines three inputs to calculate the correct tax:

  1. The recipient's shipping address.

  2. Your product tax codes (read automatically from Shopify).

  3. The U.S. states where you have sales tax nexus (configured in your Zest settings).

Tax is calculated at the sub-jurisdiction level — meaning Zest accounts for state, county, city, and special district rates individually. This calculation happens in real time, per recipient, at checkout.

Zest calculates and collects tax, but you are responsible for remitting taxes through your existing tax filing platform (such as Avalara, TaxJar, Vertex, or Numeral). Zest is not a tax remittance service.

Configuring Tax Nexus States

You control nexus configuration entirely on your own — no engineering or CSM back-and-forth is needed.

  1. Log in to the Zest Partners portal.

  2. Navigate to Settings > Payment.

  3. Scroll to the Tax nexus addresses section.

  4. Click Add nexus address and enter the state (and optionally, a full address).

  5. Click Add address.

Repeat for each state where you have nexus. You can remove states at any time using the Remove button (an X) next to each entry.

Important notes about tax nexus

  • Nexus settings in Zest do not sync automatically from Shopify. If you gain nexus in a new state, you must update both your Shopify tax settings and your Zest nexus settings separately.

  • Zest only collects tax in states where you have configured nexus. If a recipient's state is not in your nexus list, $0 tax is applied for that recipient — even if a tax rate would otherwise apply.

  • Zest CSMs can guide you through the configuration process but will not make changes to your tax settings directly, due to the accounting implications.

Tip: State-level nexus is sufficient for most brands. TaxJar calculates accurate city, county, and special district rates from the full recipient address, as long as you have nexus configured at the state level.

Product Tax Codes and Category Mapping

Zest reads product tax codes from Shopify, or other ecommerce platform, and maps them to TaxJar codes automatically. You do not need to re-enter tax codes in Zest — but you do need to make sure your Shopify product data is correctly set up.

How Zest determines the tax code for a product (in priority order):

  1. Tax code on the Shopify product variant — If you use Avalara and it has synced a tax code to your Shopify product variant (e.g., PF050002), Zest maps it to the equivalent TaxJar code automatically.

  2. Shopify product taxonomy category — If no variant-level code is present, Zest reads the Shopify product category (e.g., "Nuts and Seeds," "Wine," "Food & Groceries") and maps it to a TaxJar category.

  3. Shopify product type — If no category match is found, Zest falls back to the product type field in Shopify (e.g., "Wine," "Coffee," "Candles").

If none of these match, the order is sent to TaxJar without a specific product code, and TaxJar applies its default rate.

Cross-state category mapping note: Changing a product's category to fix a tax issue in one state may affect how tax is calculated in other states, since state-level definitions of product categories vary. For example, switching an ice cream product's category to resolve a Florida tax issue could inadvertently affect rates in other states. Review the cross-state impact before making category changes, and consult your tax advisor.

Tax Calculation for Direct Ship Orders

For direct ship (physical) orders, Zest calculates tax individually for each recipient based on their specific shipping address.

How it works:

  1. At checkout, Zest queries TaxJar for each recipient using their shipping address, your nexus states, and the product tax codes for items in the order.

  2. Tax amounts are broken out by jurisdiction: state, county, city, and special district.

  3. The total order tax is the sum of all individual recipient tax amounts.

  4. Tax is calculated at the time the order is placed (when payment is captured). If tax rates change between the order date and the ship date, the originally calculated rate applies. Shopify does not recalculate taxes after an order is placed.

Multi-recipient orders: Each recipient in a Concierge order gets their own tax calculation based on their unique shipping address. Zest processes these simultaneously and aggregates the results into a single order total.

Recipient CSV uploads: When recipients are uploaded via CSV in Concierge, tax is calculated based on the addresses in the file. Make sure all recipient addresses are complete and accurate before generating the invoice — tax amounts are included in the invoice once generated.

Important: Concierge invoice edits

If you manually edit a Concierge invoice after it has been created, the tax amounts in the invoice may no longer match what gets pushed to Shopify.

Best practice: edit product prices at the order level (before invoice generation), not on the invoice itself, and never manually add tax amounts to invoices.

How Tax Data Flows to Shopify and Your Tax Filing Service

Zest pushes itemized tax data into Shopify Child Orders after payment is processed. Your tax filing service then reads those Shopify orders for remittance.

The flow:

  1. Zest calculates tax via TaxJar at checkout.

  2. Tax amounts are stored per recipient in Zest.

  3. Zest pushes Child Orders to Shopify with itemized tax line items broken out by: State Tax, County Tax, City Tax, and Special District Tax.

  4. Your tax filing platform reads the Shopify Child Orders and independently recalculates tax for remittance.

  5. The two calculations (Zest/TaxJar and your filing platform) typically align closely. Minor differences of a few cents are normal due to rounding.

Parent Orders vs. Child Orders:

  • Child Orders contain all product, pricing, and tax data. These are the orders your tax filing platform should be reading.

  • Parent Orders are Zest's system-level records and should never be taxed by third-party tax apps. Taxes are calculated on Child Orders and rolled up into the Parent Order total. If your tax app is applying taxes to Parent Orders, this can cause checkout total mismatches, stuck Child Orders, and incorrect charges.

Note: If your tax app (e.g., Avalara) is incorrectly taxing Parent Orders or Zest system SKUs, update your tax app settings in Shopify to exclude Zest system SKUs from taxation. Contact your tax provider's support team if you need assistance.

How Zest works with third-party tax providers

Zest uses TaxJar as its built-in calculation engine. Product tax codes from Avalara (if you use it) are automatically translated to TaxJar-equivalent codes when your Shopify catalog syncs. When Child Orders flow into Shopify, your existing tax provider (Avalara, Vertex, etc.) independently recalculates tax for remittance. The two engines typically produce matching results but are independent calculations.

Tax-Exempt Orders

If you're processing an order for a tax-exempt organization (such as a 501(c)(3) nonprofit, university, or 403(b) organization), you can disable tax collection for that specific order in Concierge.

How to mark a Concierge order as tax-exempt:

  1. Open the Concierge order draft.

  2. Find the Tax section in the order form.

  3. Use the dropdown to select Do not calculate.

  4. Complete the order as normal. No tax will be calculated or collected for any recipient on this order.

Important notes about tax exempt Concierge orders:

  • Only use "Do not calculate" for genuinely tax-exempt organizations. For $0 orders that are simply free gifts (not tax-exempt), leave tax collection enabled — no tax will be charged on a $0 order anyway.

  • Tax-exempt processing is only available through Concierge. There is no way to exempt individual customers from tax on self-service Storefronts. Tax-exempt orders must be routed through Concierge.

  • By default, new Concierge orders are set to Calculate by recipient address. You must manually change this for each tax-exempt order.

Troubleshooting Common Tax Issues

Tax isn't being collected for some recipients

Check your nexus configuration first. Zest only collects tax in states where you've added a nexus address. If a recipient's state is not in your nexus list, Zest applies $0 tax for that recipient automatically. Navigate to Settings > Payment > Tax nexus addresses to verify and update your nexus states.

Tax rates seem incorrect for a product

Check your Shopify product categories. Zest reads tax codes from Shopify categories — an uncategorized or miscategorized product can result in TaxJar applying an incorrect or default rate. Correct the product category in Shopify and allow time for the sync to complete before testing again.

Zest tax amounts don't match my tax platform reports

Minor differences (a few cents) are normal due to rounding. Larger discrepancies can stem from:

  • Different calculation engines: Zest uses TaxJar; your filing platform may use Avalara or another engine. These are independent calculations and may handle edge cases differently — such as ZIP codes spanning multiple counties, regional transport fees, or Colorado's retail delivery fee.

  • Concierge invoice edits: If a Concierge invoice was manually edited after creation, tax amounts may be misaligned between the invoice and what was pushed to Shopify.

  • Bundle product tax: For bundled products, tax is applied to the primary bundle component only. This is expected behavior and does not affect the total tax amount remitted.

Tax is being charged on Zest Parent Orders

Your tax app may not be excluding Zest system SKUs from taxation. This can cause checkout total mismatches and stuck Child Orders. Update your tax app settings in Shopify to exclude Zest system SKUs. If you need help identifying the SKUs to exclude, contact Zest support.

County or city-level taxes seem wrong

Some states (such as Illinois) have regional transport taxes or county-level rates that TaxJar may not fully capture. ZIP codes can sometimes span multiple counties, causing inconsistent rates. TaxJar uses the full recipient address (not just the ZIP code) for its calculation, but certain special fees — such as Colorado's retail delivery fee or California's CRV deposit — are not classified as sales taxes and are not supported by TaxJar.

If you operate in states with complex sub-jurisdiction rules, contact your CSM for guidance.

Alcohol-specific tax questions

TaxJar recognizes wine and alcohol product codes and applies alcohol-specific rates where applicable. However, some state-specific alcohol markups (such as New Hampshire's 8% alcohol markup) are not classified as sales tax and are not captured by TaxJar. Many wine and spirits brands use a blended "taxes and fees" approach with legal sign-off to handle complex alcohol tax scenarios. If you sell wine or alcohol and have questions about your specific situation, contact your CSM.

The "Taxes & Fees" label at checkout doesn't match my brand's language

Zest supports a custom label and tooltip next to the "Taxes & Fees" line item at checkout. Common examples:

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

  • "Customization and Handling Fee"

Note that taxes and fees are displayed as a single combined line item — a detailed breakdown of taxes versus fees separately is not currently available at checkout. To request a custom label or tooltip, reach out to your CSM.

Did this answer your question?