Stripe Receipt Emails and QuickBooks Sales Receipts

Stripe sends your customer a receipt email. QuickBooks holds a Sales Receipt record. They share a word and nothing else, and one can exist without the...

Acodei Content Team · 9/22/2026 · 9 min read

Your customer forwards you an email from Stripe. It says "Receipt from Northwind Supply," it carries an amount and a date, and it looks exactly like proof that a sale happened. You open QuickBooks, search for a sales receipt matching that amount, and find nothing.

Nothing is broken. You are looking for the wrong object.

Two systems produce two different things, and both are called a receipt. Stripe's is a message. QuickBooks' is an accounting record. They are created at different moments, by different software, for different readers, and neither one causes the other to exist.

Start a free trial and see how Stripe activity lands in QuickBooks.

The two objects, side by side

A Stripe receipt email is a notification. Stripe sends it to your customer to confirm a payment succeeded. Its job is customer service. It carries your logo, your support address, and a link the customer can open in a browser.

A QuickBooks Sales Receipt is a bookkeeping entry. It records a sale that was paid at the point of sale, posts revenue against your mapped products, and deposits the money somewhere. Its job is your general ledger. Your customer never sees it, and it has no email address attached to it. Our glossary entry on the QuickBooks Sales Receipt covers the record itself in full.

The two share a word and nothing else. Not a trigger, not a timestamp, not an audience. Once you hold them apart, most of the confusing support questions answer themselves.

What actually sends the Stripe email

The receipt email is controlled entirely inside Stripe, in one place. In the Dashboard it lives under Settings > Business > Customer emails, where Stripe gives you two separate toggles under Payments: Successful payments and Refunds. They are independent. You can email customers about charges and stay silent about refunds, or the reverse.

Stripe is precise about when nothing goes out at all. Per Stripe's receipts documentation, "receipts are only sent if the payment succeeds. Nothing is sent if a payment fails or gets declined." A failed charge produces no email and no QuickBooks record, which is the one case where the two sides agree by accident.

Stripe also creates receipts whether or not you email them. The documentation says Stripe "creates receipts for all successful payments and refunds, including invoice payments and recurring payments as part of a subscription." Creation and delivery are separate. Every successful charge has a receipt object sitting behind it; the toggle only decides whether a message leaves the building.

Three practical details follow from that split:

You can send one by hand. Open Transactions > Payments, click the successful payment, find Receipt history, and use the overflow menu to send a receipt. You can confirm or change the address, and you can send to several people at once as a comma-separated list. The receipt history on that page displays up to 10 receipts, so a payment someone has re-sent a dozen times will not show you the whole trail.

Test mode sends nothing automatically. If you need a receipt for a test payment, Stripe's answer is to send a manual one. Do not read a quiet test account as a broken configuration.

Some information is not optional. Stripe requires your legal business name, customer support address, customer support email, and privacy policy URL on receipts for compliance reasons. If the name your customer sees is your incorporation name rather than your trading name, that is where it comes from.

The case where the email is right and the missing record is also right

This is the version of the question worth understanding, because both halves are working correctly and the answer is not a bug report.

How your Stripe charges become QuickBooks records depends on how your sync is configured. On a real-time account, each successful charge becomes its own itemized sales record deposited into your holding account, and each refund becomes its offsetting record. Search for one charge, find one record.

On a daily-summary account, that per-charge record does not exist. Charges are aggregated into one receipt per day instead. Your customer still gets their Stripe receipt email the moment the charge succeeds, because Stripe does not know or care how your books are configured. But there is no individual QuickBooks record with that customer's name and that exact amount on it, and there never will be. The sale is inside the day's summary.

So "my customer got a receipt, why is there no sales receipt in QuickBooks" has at least one answer that is not a failure. Check which way the account syncs before you go looking for a missing record.

Which record type a charge becomes when it does get one is a separate question with its own moving parts, and it is decided by your account settings rather than by anything on the charge. We cover that in full in Stripe charge in QuickBooks: sales receipt vs payment.

The second collision, and this one is sharper

The word "receipt" collides once on the sale side. It collides again, harder, on the refund side, because here both objects use the same two words.

Turn on Stripe's Refunds toggle and Stripe emails your customer what everyone calls a refund receipt.

Separately, when a refund comes through, a Refund Receipt is the actual QuickBooks record type that gets created against the customer, drawing from the holding account, with line items mirroring what was refunded.

Same two words. One is a message to your customer; the other is a named QuickBooks entity that moves money in your ledger. When someone says "the refund receipt is wrong," your first question has to be which one they are looking at, because the fix is in a completely different system depending on the answer.

One useful property of the QuickBooks side: on a resync of a refund that was already booked, the existing record is updated rather than a second one created. A re-sent Stripe email does not multiply; neither does the record behind it.

This one generates a support ticket every few months and the answer is written down.

Every Stripe receipt has a URL. In the API it is the receipt_url attribute on the Charge object, which is what you would use to link a customer to their receipt from inside your own application.

Stripe's rule on those links: "Receipts don't expire, but for security reasons, links to receipts expire after 30 days." When a customer opens a stale link, Stripe asks them for the email address on the original transaction, then generates a fresh link and sends it to that address.

So a customer telling you "your receipt link is broken" three months after the fact is describing documented behavior, not a fault. The receipt still exists. The link aged out.

Connect changes whose settings apply

If you run a platform, the receipt email does not necessarily use your settings, and which account's settings apply depends on the charge type.

Stripe documents it cleanly. Destination charges and separate charges and transfers use the platform account's Customer emails, Branding, and Public details settings. Direct charges use the connected account's settings instead.

That is worth checking before you conclude that a connected account's receipts are misbranded. With direct charges, the branding your customer sees was configured by the connected account, and the platform's own settings are not in play. Platforms can also send a receipt on behalf of a connected account by passing receipt_email on the charge request.

Answering the question in practice

When someone brings you a Stripe receipt and asks where the QuickBooks record is, work in this order.

  1. Confirm which object they are holding. A forwarded email with a logo and a Stripe link is the notification. It is not evidence about your ledger either way.
  2. Check how the account syncs. If it summarizes daily, stop looking for a per-charge record. Find the day's summary instead.
  3. Check whether the charge belonged to an invoice. Invoice-linked charges do not produce a standalone sales receipt; they apply against the invoice that already exists.
  4. Search by amount and date, not by the receipt number. Stripe's receipt numbering and QuickBooks' document numbering are unrelated sequences. Matching them is not a thing you can do.
  5. Only then treat it as a sync problem. If the account posts per charge, the charge had no invoice, and the day's records exist but that one does not, now you have something worth investigating.

Most of the tickets that start as "the receipt did not sync" end at step two or three.

Frequently asked questions

Does turning off Stripe receipt emails change what reaches QuickBooks?

No. The Customer emails toggles in Stripe control whether a message is sent to your customer. They are a Stripe Dashboard setting about outbound email, and they do not change the charge, the refund, or anything derived from them. Your books are built from the transaction, not from the notification.

My customer got a receipt but there is no sales receipt in QuickBooks. Is something broken?

Not necessarily. The most common innocent explanation is that the account posts a daily summary rather than per-charge records, in which case the sale is inside that day's receipt and no individual record was ever meant to exist. The second is that the charge belonged to a Stripe invoice, so it applied against that invoice instead of creating a standalone sale.

Can I resend a Stripe receipt?

Yes, from the Dashboard. Open the payment under Transactions, find Receipt history, and send from the overflow menu. You can edit the address and send to multiple recipients as a comma-separated list. Note that the receipt history view shows up to 10 receipts.

Stripe expires receipt links after 30 days for security, while the receipt itself does not expire. If the customer opens an old link, Stripe asks for the email address used on the original transaction and sends them a new link.

Is a Stripe receipt the same as a Stripe invoice?

No. Stripe can also generate paid invoice receipts, which it describes as including more detail than standard receipts. Subscriptions generate invoices automatically, and for one-time payments you enable invoice creation on the checkout session. Stripe is explicit that invoice receipts go out only after the payment completes successfully, not when the checkout session ends, which is why delayed methods like ACH Direct Debit, SEPA Direct Debit, and Boleto take longer to trigger one.

Will a duplicate webhook create two QuickBooks records?

It should not. With Duplicate Protection enabled, the QuickBooks DocNumber is set to the Acodei transaction id, so a re-sent webhook collides with the existing record rather than creating a second one.

Stop translating between the two

The naming collision is permanent. Stripe is not going to rename its emails and Intuit is not going to rename its record types, so the only durable fix is knowing which object you are looking at and what each one is evidence of.

What you can remove is the manual work underneath. When every charge, refund, and fee lands in QuickBooks in the right shape without anyone re-keying it, the question stops being "did this sync" and becomes "which record am I looking at," which takes ten seconds instead of an afternoon.

Start a free trial and see what your Stripe activity looks like on the QuickBooks side.

Share

Automate your Stripe to QuickBooks sync

Save hours every month. Acodei automatically syncs your Stripe transactions, invoices, and payouts to QuickBooks Online.

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

Get more operational finance guides like this one

We will only send high-value product and finance content.