Resources Pricing Docs FAQ Start Free
Resources / Checkout
Checkout screen showing a pricing card with sales tax broken out before payment
Checkout

Show the Tax Before Checkout, Not After

Checkout shock from a surprise tax line is one of the top reasons buyers abandon carts. Show an honest estimate before checkout instead.

A buyer sees "$50/month" on your pricing page, clicks Get Started, then watches the total jump to $59.50 at checkout once VAT or state sales tax is added. That jump is checkout shock, and it's one of the most avoidable reasons a high-intent buyer leaves.

What It Costs You

Baymard Institute's checkout research, based on a survey of US adult online shoppers, found that extra costs like shipping, tax, and fees are the single biggest reason people abandon checkout: 39% cite it directly. A further 14% abandon simply because they can't see or calculate the total cost before committing (baymard.com/learn/reduce-cart-abandonment).

Showing an honest estimate on the pricing page, before the buyer ever reaches checkout, removes both problems at once.

Two Nuances That Matter

Nexus thresholds. Most jurisdictions (EU, UK, individual US states) only require you to collect tax once your sales in that region cross a legal threshold. Showing tax before you've actually crossed it inflates your price for no reason.

US address volatility. You only know a visitor's city or state from IP before they type a full address. Rather than guess a single rate, show a labeled state-wide estimate: "Estimated Tax: ~$4.43 (8.85% CA avg), calibrated at checkout."

What Powers the Estimate

{
  "location": { "country": "United States", "country_code": "US", "state": "California" },
  "commerce": {
    "currency": { "code": "USD" },
    "sales_tax": {
      "label": "SUT",
      "rate": 7.25,
      "rate_with_local_addons": { "min": 7.25, "max": 10.75 },
      "threshold": 500000
    }
  }
}
function renderPricingSummary(gviData, planBasePriceUSD = 50, yourAnnualSalesInRegion = 0) {
  const { location, commerce } = gviData;
  const { sales_tax } = commerce;

  const belowThreshold = sales_tax?.threshold != null && yourAnnualSalesInRegion < sales_tax.threshold;
  if (!sales_tax || belowThreshold) {
    return { subtotalUSD: planBasePriceUSD, estimatedTaxUSD: 0, totalUSD: planBasePriceUSD, taxLabel: "No tax applied" };
  }

  let taxNote;
  let effectiveRatePct;

  if (location.country_code === "US") {
    const { min, max } = sales_tax.rate_with_local_addons;
    effectiveRatePct = (min + max) / 2;
    taxNote = `Est. ${location.state} sales tax (${min.toFixed(1)}%–${max.toFixed(1)}%, calibrated at checkout)`;
  } else {
    effectiveRatePct = sales_tax.rate;
    taxNote = `Est. ${location.country} ${sales_tax.label} (${effectiveRatePct.toFixed(0)}%)`;
  }

  const estimatedTaxUSD = planBasePriceUSD * (effectiveRatePct / 100);
  return {
    subtotalUSD: planBasePriceUSD,
    estimatedTaxUSD: estimatedTaxUSD.toFixed(2),
    totalUSD: (planBasePriceUSD + estimatedTaxUSD).toFixed(2),
    taxLabel: taxNote
  };
}

Where This Wins

ApproachLate Surprise RiskSetupTrust Impact
Hidden until paymentHighLowDrives the 39% drop-off above
Flat static tax labelHigh, wrong in untaxed regionsLowConfuses more than it helps
GVI location-aware estimateNoneOne API callClear upfront pricing

Sign up at GetVisitor.info to add tax intelligence to your pricing page.

Ready to try it in your own stack?
Start Free