Stripe Tax-Exempt Customers: Getting QuickBooks Right
Stripe charges the tax, so Stripe is where a customer's exemption has to live. Where to set it, why it fails to apply, and what QuickBooks should show.
A school district buys $3,000 of classroom software from you through a Stripe invoice. You charge sales tax in their state, and the invoice goes out with $210 of tax on it. Two days later their purchasing office emails an exemption certificate and a polite note: public schools don't pay sales tax here. Now you have a tax amount on an invoice that should never have carried one, and you have to decide where the fix goes: Stripe, QuickBooks, or both.
The short answer is that the exemption belongs in Stripe, because Stripe is the system that calculates and collects the tax. QuickBooks has its own tax-exempt checkbox, and it matters for tax QuickBooks calculates itself, but it can't stop Stripe from charging a customer. This post covers where Stripe records an exemption, the one integration detail that decides whether it's applied at all, the certificate Stripe leaves to you, what QuickBooks should and shouldn't show afterwards, and a worked month with one exempt school that ties out. If you'd rather have Stripe's tax reach QuickBooks without keying it in, start a free trial.
Who is usually exempt, and what "exempt" means
Exemption is a property of the buyer, not the product. Intuit's help article on setting up sales tax exemptions names the usual cases: items bought for resale, raw materials used to make other goods, and sales to nonprofit organizations. Stripe's documentation on zero tax amounts adds government entities to the list and makes the key point: each taxing jurisdiction decides who is eligible. The same school can be exempt in one state and taxable in the next.
That makes exemption different from the other ways a sale ends up with no tax:
- Exempt customer. The buyer is exempt. The same product sold to anyone else would be taxed.
- Non-taxable or exempt product. The item isn't taxed in that jurisdiction, whoever buys it.
- Not registered. You haven't registered to collect in the buyer's state, so nothing is collected.
- Reverse charge. A cross-border business sale where the buyer accounts for the tax. That case runs through tax IDs, and it's covered in our post on Stripe customer tax IDs.
Stripe keeps these apart. Every tax line it calculates carries a taxability_reason, and an exempt buyer produces customer_exempt, which is distinct from product_exempt, not_collecting and reverse_charge. When you audit a zero-tax sale later, that field tells you which justification you are relying on.
Where Stripe records the exemption
There are two mechanisms, and they work at different levels.
The customer's tax status. Every Stripe Customer has a tax_exempt field with three values: none, exempt and reverse. Stripe's zero-tax page tells you to set exempt buyers to exempt, either in the Dashboard or through the API. This setting is global. Stripe's exemptions documentation describes it as making the customer "either taxable, fully exempt, or subject to reverse charge everywhere."
Per-jurisdiction exemptions. Stripe also documents tax exemptions scoped to a US state, a Canadian province or tax type, or a country, each with optional start and end dates. This feature is in private preview at the time of writing, so check whether your account has it. It solves the problem the global status can't: a customer exempt in one state but not another. Its rules are worth knowing before you rely on it:
- The customer's global tax status must be Taxable for these exemptions to work. If the status is Exempt or Reverse charge, that setting "takes full precedence over any exemptions you've added."
- A US exemption applies to a whole state, including local jurisdictions. You can't exempt a single city or county.
- Exemptions always produce zero tax. There is no partial or reduced-rate exemption.
- You can't record the exemption type (resale, government or nonprofit) in Stripe.
- Overlapping date ranges are allowed, so you can load next year's renewal before this year's exemption lapses.
- On a subscription, Stripe evaluates the customer's active exemptions on each invoice. If an exemption expires between cycles, the next invoice is taxed normally.
The integration detail that decides whether it applies
An exemption lives on a Customer object, so Stripe can only apply it when the transaction points at that Customer. Stripe's zero-tax page says to "provide the customer ID when creating a subscription, invoice, or Checkout Session." The exemptions page is more explicit: pass customer as a reference to an existing Customer, "not as inline customer_details or customer_email," so Stripe can load the exemptions.
This is where exemptions quietly fail. A school that pays through a checkout flow which creates a fresh customer each time, or passes only an email address, is a new buyer to Stripe, with no exemption on file. The tax gets charged, the receipt is correct as far as Stripe is concerned, and the problem surfaces only when the school's accounts payable team pushes back.
If you sell to exempt buyers regularly, route them through invoices or checkout sessions created against their saved Customer record. Then confirm the result on the first transaction: the tax line should read customer_exempt.
Invoices freeze the status at finalization
Stripe invoices copy the customer's exemption status onto the invoice as customer_tax_exempt. Stripe's invoice object documentation says that until the invoice is finalized this field equals the customer's status, and "Once the invoice is finalized, this field will no longer be updated."
So the order of operations matters. Set the exemption, then finalize the invoice. Setting it afterwards fixes the Customer and every future invoice, but not the invoice already finalized. That one keeps its tax.
To correct a finalized invoice, don't try to strip the tax with a partial refund. Stripe's tax reporting documentation warns that refunding a tax amount out of proportion to the subtotal makes tax reporting unreliable, and that it "won't reflect the reason for the tax reversal (such as product exempt, customer exempt, or reverse charge)." Stripe recommends the opposite: fully reverse the transaction and create a new one with the right inputs. For an invoice, that means a credit note for the full amount and a new invoice issued after the exemption is on the Customer.
The certificate is yours to keep, not Stripe's
Stripe is explicit that it doesn't handle the paperwork. The zero-tax page says Stripe Tax "doesn't validate required documentation for supporting an exemption, such as customer exemption certificates," and that you are responsible for validating the customer's status and collecting the documentation. The exemptions page repeats it: Stripe Tax doesn't let you "upload, store, validate, or track exemption certificates." Stripe points to a Stripe App from EXEMPTAX for collecting and verifying certificates, if you'd rather not do it by hand.
Intuit says the same from the other side: when you sell to tax-exempt organizations, you need a copy of the buyer's tax-exempt number or certificate from their state.
In practice, keep three things together for every exempt customer: the certificate, its expiry date, and the Stripe Customer ID it applies to. When a certificate expires, change the Stripe setting the same day. What counts as valid documentation in a given state is a question for your accountant, not your billing system.
What QuickBooks does with an exempt customer
QuickBooks has its own exemption setting. In the customer profile's Additional info section, you select This customer is tax exempt, then choose a Reason for exemption. Intuit's customer setup article covers the steps. That flag controls tax QuickBooks calculates on invoices and sales receipts you create inside QuickBooks.
It doesn't reach back into Stripe. If Stripe charged the school tax, the school paid it, whatever the QuickBooks customer record says. Ticking the box in QuickBooks can make the books look right while the customer is still being overcharged. Fix the exemption in Stripe first.
How the QuickBooks side should look after that depends on how Stripe's tax reaches your books. We wrote about the two tax engines in detail in recording Stripe Tax in QuickBooks Online. The short version for a US company using Acodei:
- Acodei's tax sync requires Stripe Tax to be active in your Stripe account. Acodei carries the tax Stripe calculated; Stripe does the calculating and collecting.
- Acodei's Stripe Tax documentation describes a Tax Product method for US QuickBooks accounts. All of Stripe's tax is grouped onto one non-inventory product, such as "Sales Tax", tied to a liability account. Acodei's docs say US accounts are limited by Intuit's rules to this method.
- Acodei captures the sales tax Stripe calculated and adds it as a line item. It doesn't use QuickBooks' sales tax functionality, as Acodei's troubleshooting guide explains.
- For the state-by-state breakdown at filing time, Acodei's docs point you to Stripe's own reports.
For an exempt customer, that means the tax reaching the liability account is whatever Stripe collected. If Stripe charged the school nothing, that sale adds no tax to the liability account, and there is no tax to strip out in QuickBooks.
The QuickBooks "fix" that breaks your payouts
Here's a failure worth knowing in advance. Someone notices that QuickBooks' Sales Tax Liability report shows almost everything as non-taxable, decides the products are set up wrong, and marks them Taxable in QuickBooks.
Intuit's Sales Tax Liability report article explains why the report looks that way: sales land in the Non-Taxable Amount column when the customer is exempt, when tax isn't selected on the sales form, or when the product is marked non-taxable.
Acodei's product mapping documentation requires every QuickBooks product used in mapping to be marked non-taxable. Stripe's tax syncs separately through the Stripe Tax setting, and making the products taxable in QuickBooks conflicts with the sales and payout math. The symptom is described in Acodei's troubleshooting guide: the sales receipt total can exceed what Stripe paid out, and the payout fails with "This deposit does not match the Stripe payout amount ... #3. You have sales tax enabled on QuickBooks." The fix in those docs is to set the products back to Nontaxable, then resync the sales, refunds and payouts.
The lesson for exempt customers is the same as for everyone else. If you use the Tax Product method, QuickBooks' sales tax report isn't the source of truth for Stripe-collected tax. The liability account is, and Stripe's reports carry the detail.
A worked month with one exempt school
A company sells classroom software through Stripe Billing, uses Stripe Tax, and is registered in one state with a 7% combined rate. It syncs to QuickBooks using the Tax Product method. October looks like this:
| Sale | Customer status | Subtotal | Tax | taxability_reason |
|---|---|---|---|---|
| 40 subscriptions to private tutors | none | $9,000.00 | $630.00 | standard_rated |
| District license, first invoice (finalized Oct 3) | none at finalization | $3,000.00 | $210.00 | standard_rated |
| Credit note reversing the first invoice (Oct 6) | -$3,000.00 | -$210.00 | ||
| District license, reissued invoice (Oct 6) | exempt | $3,000.00 | $0.00 | customer_exempt |
The district's certificate arrived on October 5. The team set the district's Stripe Customer to exempt, issued a credit note for the full first invoice, and finalized a new one against the same Customer. The new invoice shows zero tax with customer_exempt, which is the evidence you want on file next to the certificate.
At month end, the numbers are:
- Sales: $9,000 + $3,000 = $12,000. The first district invoice and its credit note cancel out.
- Tax collected: $630 + $210 - $210 = $630.
- Sales tax liability account: $630, all of it from the tutors.
- Stripe's itemized tax export: the district's reissued invoice line shows zero tax, with
customer_exemptin both thetaxability_reasonandcustomer_taxability_overridecolumns. Stripe's reports documentation lists both as export columns.
The check that matters is that the liability account and Stripe's tax for the period agree at $630. If QuickBooks shows $840, the reversal of the first invoice never reached your books. If the district's reissued invoice shows tax, it was finalized before the exemption was set, or it wasn't created against the district's saved Customer.
On refunds, Acodei's Stripe Tax documentation recommends credit note refunds, because tax is then adjusted properly in QuickBooks. Refunds made at the payment level don't always carry line-level detail from Stripe, so the tax may need a manual adjustment. That's one more reason to correct an exemption mistake with a full credit note rather than a partial refund.
If your prices include tax
Most US sellers price tax-exclusive, so the exempt buyer simply pays the subtotal. If you price tax-inclusive, check which engine you use, because Stripe documents two different results:
- Stripe Tax: the zero-tax page says a customer exemption "doesn't affect the total amount paid by the customer." The inclusive price stays the same, and the whole amount is the unit price.
- Manual tax rates: Stripe's tax rates documentation says an exempt customer pays the price minus the tax that would have applied. On a $110 price with a 10% inclusive rate, $10 of that price is tax, so the exempt customer pays $100.
The same exempt school pays a different amount depending on your setup. Make sure the quote you send them matches the engine you use.
A checklist for every new exempt customer
- Get the certificate or exemption number before the first invoice, and file it with the Stripe Customer ID and the expiry date.
- Set the exemption in Stripe:
tax_exempt=exemptfor a buyer exempt everywhere, or a state-scoped exemption if your account has the preview and the buyer is exempt only in some states. - Make sure their purchases are created against their saved Customer, not an email address or inline details.
- Finalize after the exemption is set. If an invoice went out with tax, reverse it in full with a credit note and reissue it.
- Check the first transaction's taxability reason reads
customer_exempt. - In QuickBooks, you can tick This customer is tax exempt on the customer record for your own reference, but don't make your Stripe-mapped products taxable.
- Diary the certificate's expiry. When it lapses, update Stripe the same day.
Frequently asked questions
How do I make a customer tax exempt in Stripe?
Set the Customer's tax status to exempt in the Dashboard, or set tax_exempt to exempt through the API. Then create invoices, subscriptions and Checkout Sessions with that customer's ID so Stripe can apply the status. Stripe also has state-scoped exemptions in private preview for buyers exempt in only some jurisdictions.
Does Stripe store tax exemption certificates?
No. Stripe's documentation says Stripe Tax doesn't upload, store, validate or track exemption certificates, and that collecting and validating them is your responsibility. Keep each certificate with the customer's Stripe ID and its expiry date, and ask your accountant what your states accept.
Why was my tax-exempt customer still charged sales tax on Stripe?
Usually for one of three reasons. The exemption was set after the invoice was finalized, and finalized invoices keep the old status. The purchase wasn't created against the customer's saved Stripe Customer. Or a state-scoped exemption doesn't cover the state the sale was taxed in, or it has expired.
Should I mark the customer tax exempt in QuickBooks too?
You can, but it doesn't change what Stripe charges. QuickBooks' exemption setting applies to tax QuickBooks calculates on its own forms. If Stripe calculates your tax, the exemption has to be set in Stripe to stop the customer being charged.
How do I fix an invoice that charged an exempt customer tax?
Reverse the whole invoice with a credit note and issue a new one after the exemption is set on the customer. Stripe advises against refunding only the tax portion, because a partial tax refund makes Stripe's tax reporting unreliable and doesn't record why the tax was reversed.
Where do exempt sales show up in QuickBooks' Sales Tax Liability report?
Intuit's documentation says sales to exempt customers appear in the Non-Taxable Amount column, alongside products marked non-taxable and sales where tax wasn't selected. If Stripe's tax reaches QuickBooks as a line on a liability account, that report won't give you Stripe's tax by jurisdiction. Use Stripe's reports for filing detail and reconcile the liability account to them.
Where to go from here
Set the exemption where the tax is calculated, which for Stripe sellers means Stripe. Make sure every exempt buyer's purchases reference their saved Customer. Keep the certificates yourself, and correct mistakes with full reversals rather than partial tax refunds. On the QuickBooks side, leave your mapped products non-taxable and reconcile the sales tax liability account to Stripe's numbers each month. For the full picture of why those numbers can drift, see why the Stripe Tax report and QuickBooks don't match.
If you'd rather have Stripe's tax land on the right QuickBooks liability account automatically, start a free trial of Acodei.
Automate your Stripe to QuickBooks sync
Save hours every month. Acodei automatically syncs your Stripe transactions, invoices, and payouts to QuickBooks Online.
14-day free trial · card required · cancel anytime
How Acodei handles this in your stack
Stripe QuickBooks Integration
See how Acodei syncs Stripe payments, fees, refunds, invoices, and payouts into QuickBooks Online automatically.
Or go straight to a capability
Advanced Product Mapping
Map Stripe products to QuickBooks with rule-based logic on product ID, price ID, metadata, and account. Set rule priority and extend mapping to refunds and fees.
Automated Invoice Sync
Bring Stripe invoices into QuickBooks and auto-apply payments and credit memos, with numbering, invoice matching, and quantity tracking to cut double-entry.
Multi-Currency Mastery
Sync Stripe transactions across currencies with automatic exchange rate handling and currency-specific customer records. Our team enables multicurrency on request, and zero-decimal currencies such as JPY are not supported.
Class Mapping
Map Stripe products to QuickBooks classes for scalable categorization and multi-entity reporting. Class tracking requires QuickBooks Online Plus or Advanced.
Historical Data Import
Backfill historical Stripe data into QuickBooks by month range. Preview volume and cost before syncing so reporting starts from a complete baseline.
How to Connect Stripe to QuickBooks Online
Connect Stripe to QuickBooks Online in minutes. Acodei links both accounts with secure OAuth and syncs payments, fees, refunds, and payouts automatically.
Reconcile Stripe Payments in QuickBooks
Reconcile Stripe in QuickBooks Online automatically. Acodei splits out fees, matches payouts to deposits, and keeps every charge audit-ready.
Related articles
Acodei Journal
Stripe Donations in QuickBooks: A Nonprofit Setup Guide
Acodei Content Team
Stripe Donations in QuickBooks: A Nonprofit Setup Guide
9/29/2026
Acodei Journal
Stripe Gift Cards in QuickBooks: Book the Liability Right
Acodei Content Team
Stripe Gift Cards in QuickBooks: Book the Liability Right
9/28/2026
Acodei Journal
One Stripe Dispute Covering Several Subscription Charges
Acodei Content Team
One Stripe Dispute Covering Several Subscription Charges
9/27/2026
Get more operational finance guides like this one
We will only send high-value product and finance content.