Stripe Quotes That Become Invoices, and What QuickBooks Receives
Accepting a Stripe quote creates an invoice, subscription or schedule. Only one of them bills itself. What reaches QuickBooks Online, and exactly when.
Sales says the deal closed on Tuesday. The customer signed off on the quote, everybody moved on, and three weeks later somebody notices there is no invoice in QuickBooks and no money in the bank. Nobody did anything wrong. Stripe did exactly what it documents.
Accepting a quote in Stripe does not always produce the same kind of thing. Depending on what was on the quote, it creates an invoice, a subscription, or a subscription schedule, and the invoice that comes out the far end is configured differently in each case. In one of those cases Stripe will finalize and collect on its own. In the other it will sit in draft forever, waiting for a human, and a draft invoice is not a bill.
That difference is the whole article. It decides when a sale becomes a receivable in your books, and it is set at the moment of acceptance by a property most people have never looked at.
Start a free trial and see how your Stripe invoices arrive in QuickBooks Online.
A quote is a document, not a transaction
Stripe describes quotes plainly: they "allow you to provide your customers with a price estimate for requested goods or services", and you can "combine recurring and one-off line items, and include any discounts or taxes". After the customer accepts, you "can convert it into a recurring subscription or a one-time invoice".
A quote moves through four statuses, and Stripe defines each one:
draftis "The starting status for all quotes." You can still edit it here.openmeans "The quote has been finalized and is awaiting action from the customer." At this point you can only edit the expiration date.acceptedmeans "The customer has accepted the quote and invoice, subscription or subscription schedule has been created."canceledmeans "The quote has been canceled and is no longer valid."
Finalizing a quote does one thing worth knowing for reconciliation later: it assigns a number. Stripe documents the format as four parts, the prefix QT, the customer's invoice prefix, the quote sequence and the revision sequence. Their example is QT-68BB114-0001-1, the first quote for a customer on its first revision. QT-68BB114-0001-2 is the same quote revised, and QT-68BB114-0002-1 is that customer's second quote.
So a quote has a number, a total, a customer, line items, tax and discounts. It looks like a bill in every respect except the one that matters. No money moves. Nothing is owed. There is no receivable, because nothing has been billed.
This is the correct accounting treatment and it is worth stating out loud, because the objection comes up on every finance team that starts using quotes seriously: should a signed quote be recognized somewhere? No. A quote is an offer. Until it is accepted and converted, there is no performance obligation and no enforceable claim to payment. Your books should be completely silent about it.
QuickBooks has a record for exactly this situation. An Estimate is a non-posting document: it holds the numbers, it can be converted into an invoice later, and it does not touch the general ledger while it sits there. If your team wants signed quotes visible inside QuickBooks, that is the record built for the job, and it stays out of your financials by design.
Accepting a quote produces one of three things
Here is where the branch happens. Stripe's rule is short and it turns entirely on whether the quote contains any recurring prices.
Quotes with recurring prices. Stripe creates a subscription. If the effective date on the quote is in the future, it creates a subscription schedule instead, which is the object that holds a subscription that has not started yet. Either way, Stripe documents that "The first invoice on the subscription is in draft status with auto_advance set to true."
Quotes without recurring prices. Stripe's wording: "A draft invoice is created with auto_advance set to false. You can modify the invoice before finalizing and sending it to your customer for payment."
Both paths produce a draft invoice. The two drafts behave in opposite ways, and the reason is that one word.
What auto_advance actually controls
Stripe's definition of the field on the invoice object: it "Controls whether Stripe performs automatic collection of the invoice. If false, the invoice's state doesn't automatically advance without an explicit action."
The dedicated documentation page is blunter still. "All invoices start as a draft and must be transitioned to open to accept a payment," and "When you set auto_advance to false, you're responsible for transitioning the invoice between states."
Stripe publishes a table of exactly what stops when the flag is off. With auto_advance set to false, these are all listed as not enabled:
- Emailing invoices
- Retries, both email and charge
- Invoice reminder emails
- 3D Secure reminder emails
- Attempting payments for auto-charge invoices
- Finalizing draft subscription invoices to open
Email receipts are the only row that stays available in both columns.
Read that list against the one-off quote path. Your customer accepted a quote. Stripe created a draft invoice with auto_advance false. Stripe will not email it, will not finalize it, will not attempt payment, and will not remind anybody. It is a correct, complete, unsent invoice, and it will remain one until somebody opens Stripe and finalizes it.
Nothing is broken. This is a deliberate design choice, and the reason for it is in the same sentence that creates the draft: "You can modify the invoice before finalizing and sending it to your customer for payment." Stripe assumes that a quote-derived one-off bill may need a PO number, a due date, a tweaked line, or an approval before it goes out. So it hands you the draft and waits.
The trouble is only that nothing announces the wait.
The recurring path does the opposite
On the subscription side, the first invoice is also a draft, but auto_advance is true. Stripe finalizes draft subscription invoices to open automatically, and its own documentation puts the delay at approximately one hour. The invoice object reference says the same thing from the other direction: invoices are "automatically paid or sent 1 hour after webhooks are delivered".
So a recurring quote genuinely is fire and forget. Accept it, wait about an hour, and there is a finalized invoice with a number, a payment attempt, and everything downstream that follows from those.
Two customers accept two quotes on the same morning. One signed up for an annual subscription, the other bought a one-time implementation. An hour later the subscription customer has a real invoice and probably a payment. The implementation customer has a draft nobody has looked at. Both quotes are accepted. Both deals are closed as far as the sales team is concerned.
Where the QuickBooks record actually begins
Acodei's Invoice Sync is documented as a one-way integration that mirrors Stripe invoices and their subsequent payments into QuickBooks Online. Two events matter, and both are downstream of everything above.
When a Stripe invoice is finalized, Acodei creates a QuickBooks Invoice that reproduces every line item, and tax lines, as allowed by your mapping settings. Each line uses the product returned by Multiple Product Mapping when that is enabled, and the default product otherwise. By default an invoice number suffix is appended, -AC1, -AC2 and so on, which exists to stop duplicate-number errors when somebody also hand-enters invoices in QuickBooks.
When a Stripe invoice is paid, whether by a successful charge, a manual payment according to your settings, or a credit balance offset, Acodei creates a QuickBooks Payment Receipt or Credit Memo and applies it to the invoice it already created. That automatic application depends on QuickBooks Automatic Application being switched on, which is worth checking before concluding something is broken. The payment lands in whichever holding account you configured.
Invoice Sync is available on paid plans and is toggled per company under Account Mapping, in the Premium Features block.
Notice what is not in that list. There is no quote step. A quote is upstream of the first document the sync is defined against, which means the answer to "where is my quote in QuickBooks" is that a quote is not a thing this pipeline carries, and it should not be. What the pipeline carries is the invoice the quote produced, once that invoice has been finalized.
For the recurring path, that happens on its own within the hour. For the one-off path, it happens when somebody finalizes the draft, and not before. The sale is real and the customer has agreed, and Stripe still has not issued a bill for it. That is the part with consequences: Stripe states that an invoice must be transitioned to open before it can accept a payment, so a draft cannot be paid. No payment means no payment record, no deposit, and no collected revenue anywhere downstream of it.
If a quote-derived sale is missing from your books, the question to ask is not what the sync did. It is what status the Stripe invoice is in.
Telling a quote-born invoice from any other
Once the invoice exists, Stripe records where it came from. The invoice object carries a billing_reason, described as indicating "the reason why the invoice was created", and one of its possible values is quote_accept.
Be careful with that value. Stripe lists it among the possible enum values but gives it no separate description, unlike manual, subscription_cycle, subscription_update and the others, which each carry a sentence. So the honest reading is the name and nothing more: this invoice exists because a quote was accepted. Our guide to Stripe billing_reason covers the rest of the enum and what each value tells you about an invoice's origin.
There is a second link in the other direction. The quote object has an invoice field, documented as "The invoice that was created from this quote", along with subscription and subscription_schedule fields for the other two outcomes. Exactly one of the three is populated on an accepted quote, and that tells you which path it took.
Between those two fields you can reconcile a quote to its invoice and back again, which is the audit trail you want when somebody asks in month three why a signed deal was billed six weeks after it closed.
Quotes expire, and expiry is silent too
One more state worth knowing. A quote carries an expires_at timestamp, and Stripe defines it as "The date on which the quote will be canceled if in open or draft status".
That is automatic cancellation, not a warning. A quote sent to a customer who takes too long to respond does not sit there patiently; it moves to canceled, and Stripe is explicit that you "can no longer accept it". The deal is not lost, but the document is, and the quote has to be rebuilt or cloned rather than revived.
Stripe emits quote.finalized, quote.accepted and quote.canceled events for these transitions. If quotes are a meaningful part of how you sell, quote.accepted is the event to watch, because it is the moment your pipeline forks into the two behaviours above.
One practical note on availability: sending and accepting quotes for one-time invoices requires Invoicing Plus, per Stripe's own instructions for turning the feature on.
What to actually do about it
The whole risk reduces to one question, asked at one moment, and it takes about thirty seconds a week.
Watch for accepted quotes with draft invoices. After a quote is accepted, look at what it produced. If the quote had no recurring prices, there is a draft invoice with auto_advance false that will never send itself. Finalize it, or decide deliberately not to. Either is fine. Forgetting is what costs money.
Do not treat quote acceptance as the billing event. It is a sales event. The billing event is finalization, and on the one-off path those can be weeks apart.
Reconcile on billing_reason, not on memory. At month end, invoices carrying quote_accept are the ones that came from the quote pipeline. If your quote log shows more accepted quotes than your invoice list shows quote_accept invoices, the difference is sitting in drafts.
Decide where signed quotes live. If the sales team needs them visible in QuickBooks, use Estimates, which are non-posting by design. What you should not do is post anything to the ledger for a quote, or leave a signed quote as the only record that a sale happened.
Set expiry dates you mean. An expired quote cancels itself. If your sales cycle runs sixty days, a thirty-day quote will quietly cancel mid-negotiation.
If your Stripe invoices are finalizing normally and the sales still are not showing up, that is a different problem with a different cause, and our post on Stripe invoices that fail to finalize covers the most common one.
Frequently asked questions
Does a Stripe quote sync to QuickBooks?
No, and it should not. Acodei's Invoice Sync is documented against Stripe invoices and their payments: a QuickBooks Invoice is created when the Stripe invoice is finalized, and a Payment Receipt or Credit Memo when it is paid. A quote sits upstream of that. It is an offer with no amount owed and no payment attached, so there is nothing for a QuickBooks record to mirror. What reaches QuickBooks is the invoice the quote produced, after that invoice is finalized.
Why is there no invoice after my customer accepted the quote?
There probably is one, in draft. Stripe documents that a quote without recurring prices creates "a draft invoice with auto_advance set to false", which means Stripe will not finalize it, email it, or attempt payment. It waits for you to finalize it. Check the quote's invoice field, open that invoice, and finalize it if it is ready to go out.
What is the difference between accepting a quote with a subscription and one without?
The invoice Stripe creates is configured differently. With recurring prices, Stripe creates a subscription, or a subscription schedule if the effective date is in the future, and documents that the first invoice is draft "with auto_advance set to true", so it finalizes on its own after roughly an hour. Without recurring prices, the draft invoice has auto_advance set to false and stays a draft until somebody acts.
What does billing_reason quote_accept mean?
It marks an invoice that was created because a quote was accepted. Stripe lists quote_accept among the possible values of billing_reason but does not give it its own description, so the name is the definition. It is useful as a filter: it tells you which invoices in a period came out of the quote pipeline.
Should a signed quote be recorded in my books?
No. A quote is an offer, so there is no receivable and no revenue until it is accepted and converted into an invoice. If you want signed quotes visible inside QuickBooks, an Estimate is the non-posting record intended for that, and it stays out of the general ledger.
What happens if a customer never responds to a quote?
It cancels itself. Stripe defines expires_at as "The date on which the quote will be canceled if in open or draft status", and once canceled a quote can no longer be accepted. The deal can still be re-quoted, but that specific document is finished.
How do I match a Stripe invoice back to the quote it came from?
In both directions. The quote object carries an invoice field, "The invoice that was created from this quote", plus subscription and subscription_schedule for the other two outcomes. The invoice carries billing_reason of quote_accept. Quote numbers also encode the relationship, using the format QT, the customer's invoice prefix, the quote sequence and the revision sequence.
The short version
Accepting a quote is not a billing event. It creates one of three objects, and only the subscription path bills itself. A one-off quote produces a draft invoice with automatic collection switched off, which will sit untouched until a person finalizes it. Acodei's documented trigger for creating the QuickBooks invoice is finalization, and Stripe will not collect on a draft, so until somebody finalizes it there is no payment and no collected revenue behind that sale.
Check for accepted quotes whose invoices are still drafts. That single check is the difference between a clean month end and a sale nobody billed.
Start a free trial and see your finalized Stripe invoices flow into QuickBooks Online automatically.
Stripe sources, fetched 2026-08-24: How quotes work, The Quote object, The Invoice object, Automatic invoice advancement. Acodei behaviour is grounded in Acodei's Invoice Sync product documentation.
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
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, currency-specific customer records, and invoice-level multicurrency.
Class Mapping
Map Stripe products to QuickBooks classes for scalable categorization and multi-entity reporting, enabling precise insights without manual effort.
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.
Get more operational finance guides like this one
We will only send high-value product and finance content.