Use case

Invoice in QuickBooks, Collect Through Stripe

For businesses whose invoices are raised in QuickBooks Online rather than in Stripe, and who need the Stripe payment to settle that invoice instead of booking a second sale beside it.

14-day free trial · card required · cancel anytime

Who this is for

  • +You raise customer invoices in QuickBooks Online, not in Stripe.
  • +Customers pay those invoices by card, through a Stripe payment link, a hosted page, or your own checkout.
  • +Your invoices stay open in A/R after the customer has clearly paid.
  • +Your income looks too high and you suspect the same sale is in the file twice.

The problem

The invoice already exists. You raised it in QuickBooks, it is sitting in Accounts Receivable, and the revenue on it was recognized the moment you saved it. Then the customer pays by card, Stripe collects the money, and the sync writes a sales receipt.

A sales receipt recognizes income and receives cash in one document. So now the same sale is in the file twice: once on the invoice you raised, once on the receipt the sync wrote. Meanwhile nothing has been applied to the invoice, so it is still open, still aging, and still showing on a collections report for a customer who paid you three weeks ago.

The instinct is that this is a bug, or a setting someone forgot to turn on. It is neither. It is what happens when an invoice exists in a system the sync was never looking at.

Why the sync cannot see the invoice you raised

A Stripe charge can become a payment applied to a QuickBooks invoice, and that path is real. The condition on it is the part that decides your case: it applies where the charge belongs to a Stripe invoice that Acodei has already synced. The link runs from a Stripe invoice, through the record Acodei wrote for it, to the QuickBooks invoice on the other end.

An invoice you raised in QuickBooks has none of that. It was never a Stripe invoice, so no Stripe object points at it, and Acodei never wrote it. From the sync's side there is nothing connecting the incoming charge to the document sitting in your A/R, and Acodei's documentation says so directly: payments cannot be automatically applied to invoices created in QuickBooks Online.

There is a second reason worth knowing, because it explains why changing your invoicing habits does not change the outcome on its own. The choice between writing a sales receipt and writing a payment is made from the settings on your connection, not from anything about the charge. The charge does not get a vote, and neither does whatever happens to be open in QuickBooks.

What the default record does to your books

By default a successful Stripe charge becomes a sales receipt in QuickBooks, deposited to the holding account resolved for that Stripe account and currency. The Stripe fee is recorded on it as a negative line using your mapped fee product, so the receipt nets down to what actually reached your Stripe balance. Under a fee-as-expense configuration the fee posts as a separate expense instead and the receipt stays gross.

Against a QuickBooks-raised invoice, that record is correct in isolation and wrong in context. It is a well-formed sales receipt. It is also the second time that sale has been recognized, and it does nothing at all to the receivable.

The damage compounds quietly rather than loudly. Revenue is overstated by the value of every invoice paid through Stripe. A/R is overstated by the same amount, because none of those invoices ever closed. Both numbers are wrong in the same direction, which means the books still balance and nothing forces the question until someone runs an aging report and finds it full of customers who have paid.

The setting that changes which record you get

There is a different routing available. On a connection with Sales as Payment enabled, a successful charge becomes a standalone payment against the customer rather than a sales receipt. It is worth being precise about what that payment is, because the phrase suggests more than it delivers: it is a payment credited to the customer and not linked to an invoice.

That is still not automatic application, and it should not be sold as one. What it gives you is the right kind of record. Cash arrives against the customer without a second sale being recognized, and the payment is then something you can match to the open invoice in QuickBooks yourself. Acodei's documentation describes exactly this: payment receipts are created on a Stripe payment, which you manually match.

So the honest description of the workflow is that the sync stops making your revenue wrong and hands you a matching job. For a business raising a handful of invoices a month that is a good trade. For one raising several hundred, the matching is the thing to think hard about before choosing this route, because it does not get smaller as you grow.

One consequence to plan for: until a payment is matched, it is an unapplied payment, and QuickBooks reports unapplied payments in its own way on a cash basis. Our post on sales receipts versus payments covers that reporting behavior and the account it creates.

The customer name is doing more work than you think

A standalone payment is only useful if it lands on the customer whose invoice you are trying to settle, and that is a name question rather than an accounting one.

Acodei resolves the customer by checking its own stored mapping first, then querying QuickBooks for a customer whose display name matches. That match is case-insensitive but otherwise character for character. If your QuickBooks customer is "Acme Inc." and the Stripe customer is "Acme Inc", the search finds nothing and a second customer record is created. The payment then lands correctly on a customer who has no invoices, next to the customer who has the one you wanted to close.

This is worth an hour before you turn anything on. Reconciling your Stripe customer names against the QuickBooks names you already invoice under is cheap in advance and tedious afterwards, because Acodei does not update customer records once they exist and there is no manual record linking to fall back on.

Or move the invoice to the side the sync can see

The other answer is to stop raising the invoice in QuickBooks. If the invoice originates in Stripe, Invoice Sync mirrors it into QuickBooks as an open invoice in A/R, and the payment against it settles that invoice rather than sitting beside it. The link the sync needs exists because Acodei built both ends of it.

That is a real change rather than a preference, and it should be weighed as one. Your customer-facing invoice template, your numbering, your payment terms and your dunning all move to Stripe, and Acodei documents the switch to the invoice and payment workflow as a mode change best done at onboarding rather than mid-life. What Acodei syncs is the invoices and charges Stripe Billing produces. It does not run dunning, retries or proration for you, so those become Stripe configuration rather than something the sync provides.

The choice is genuinely between two workable setups, and it turns on where you want the invoice to live. Keep invoicing in QuickBooks and you keep your template and your process, and you accept a matching step on every payment. Move invoicing to Stripe and the settlement becomes automatic, and you rebuild your invoicing around Stripe to get it.

What Acodei actually does here

By default, each successful or captured Stripe charge becomes a QuickBooks sales receipt, itemized from your product mapping and deposited into the holding account resolved for that Stripe account and currency. The Stripe fee is a negative line on the receipt using your mapped fee product, unless your configuration records fees as an expense, in which case the fee posts separately and the receipt stays gross.

On a connection with Sales as Payment enabled, or where a client-specific payment rule applies to the account, the same charge becomes a standalone payment against the customer instead, explicitly not linked to an invoice. The routing between those two is chosen from the settings on the account, not from whether the charge has an invoice attached.

The one path that produces a payment applied to a QuickBooks invoice is the path where the charge belongs to a Stripe invoice Acodei has already synced. Acodei's documentation states plainly that payments cannot be automatically applied to invoices created in QuickBooks Online, and that what it can do is create payment receipts on a Stripe payment for you to match by hand.

Two boundaries are worth stating so they are not assumed away. Duplicate protection keys on the identifier Acodei writes on its own records, so it is a guard against Acodei posting the same Stripe transaction twice, not a check against invoices or payments that you or your bookkeeper entered in QuickBooks. And accounts on daily summary get no per-charge record at all, since their charges are aggregated into one receipt per day, so there is no individual payment to match to anything.

Want to see this on your own Stripe data?

Start a free trial

14-day free trial · card required · cancel anytime

What you need in place

  • +A connected QuickBooks Online company with an authenticated token in Acodei.
  • +A decision on which system raises the invoice, because that decides whether settlement is manual or automatic.
  • +Sales as Payment set on the connection if you want charges to arrive as payments rather than sales receipts. Confirm it with Acodei for your connection rather than assuming the default.
  • +Stripe customer names reconciled against the QuickBooks customers you invoice, since resolution is an exact display-name match and a near miss creates a second customer.
  • +A real-time connection rather than daily summary, which produces no per-charge record to match.
  • +Invoice Sync instead, if you decide to move invoicing into Stripe. It is a paid-plan feature set per company, and the switch is documented as an onboarding-time change.

Frequently asked questions

Can Acodei apply a Stripe payment to an invoice I created in QuickBooks?

Not automatically. Acodei's documentation is explicit that payments cannot be automatically applied to invoices created in QuickBooks Online. What it can do is create a payment receipt on the Stripe payment, which you then match to the open invoice yourself. Automatic settlement only happens where the invoice originated in Stripe and Acodei synced it.

Why is my QuickBooks invoice still open after the customer paid through Stripe?

Because the charge was written as a sales receipt rather than applied to the invoice. A sales receipt recognizes income and receives the cash in one document and never touches Accounts Receivable, so the invoice stays open and the sale is now recorded twice. The invoice you raised in QuickBooks was never visible to the sync as something to settle.

How do I stop the sync recognizing the same sale twice?

Change what the charge becomes. With Sales as Payment enabled on the connection, a charge arrives as a standalone payment credited to the customer instead of a sales receipt, so no second sale is recognized. The payment is not linked to an invoice, so you still match it to the open invoice in QuickBooks, but your revenue stops being overstated.

Is there a way to avoid matching payments by hand?

Only by moving the invoice to Stripe. If the invoice is raised in Stripe and synced by Invoice Sync, the payment against it settles that invoice automatically, because Acodei created both records and holds the link between them. Keeping invoicing in QuickBooks means keeping a matching step.

Will duplicate protection catch the double-counting for me?

No, and it is important not to rely on it here. Duplicate protection works by stamping an identifier on the records Acodei writes so that a re-sent Stripe webhook collides instead of creating a second record. An invoice you raised in QuickBooks carries no such identifier, so it is not something the check can see or compare against.

My payment arrived on a customer who has no invoices. What happened?

Almost certainly a name mismatch. Customer resolution queries QuickBooks for a display name that matches the Stripe customer, case-insensitive but otherwise character for character, so "Acme Inc." and "Acme Inc" are different customers. When the search finds nothing, a new customer is created and the payment lands there. Acodei does not update customer records after creation and offers no manual record linking, so the names are worth reconciling before you start.

Does this apply if I am on daily summary rather than real-time sync?

No. Daily summary accounts get no per-charge record, because charges are aggregated into a single receipt per day. There is no individual sales receipt or payment for a given charge, so there is nothing to apply to an invoice and nothing to match.

What customers say about running Stripe through Acodei

Stripe Verified Partner BadgeQuickBooks Intuit Badge
If you're testing out all the different Stripe/QuickBooks integration apps right now, let me save you some time. This one is the best one by far.
RyanOwner at Indie Music Academy
Works well and is really helpful for massive transactions. The support is really fast and helpful. 100% recommended.
AndresCo-founder and CEO at Kanguro Collections and Reinsurance

Ready to try Acodei?

Connect Stripe to QuickBooks Online in minutes and let the fees, refunds, and payouts land where your accountant expects them.

14-day free trial · card required · cancel anytime