Glossary

Stripe Subscription Status

A Stripe subscription status is the field that says whether Stripe still intends to bill a customer, running from incomplete through active, past_due and unpaid to canceled, and it changes independently of whether any particular invoice has been paid.

Also called: subscription status, past_due subscription, incomplete_expired, subscription lifecycle

Definition

A subscription status answers one question, and it is not quite the question people bring to it. It says whether Stripe still intends to bill this customer.

That sounds obvious until you notice how often the answer disagrees with everything else on the screen. A subscription can be past_due while its latest invoice looks perfectly ordinary. It can be active while an invoice sits open and unpaid. It can be unpaid and still be producing invoices every month. The status is a property of the billing relationship. An invoice status is a property of one billing period. The two drift apart constantly, and reading one for the other is the most common way a subscription business misjudges its own revenue.

Stripe defines eight values: incomplete, incomplete_expired, trialing, active, past_due, canceled, unpaid, and paused. For a bookkeeper the useful grouping is not alphabetical. Two of them mean the subscription never really started. Three mean money is still expected. The rest mean billing has stopped, for reasons worth telling apart, because one of them is a decision you made in a settings page rather than anything the customer did.

Key points

  • +Eight values: incomplete, incomplete_expired, trialing, active, past_due, canceled, unpaid, and paused.
  • +It describes the subscription, not the invoice. An invoice can be open while the subscription is active.
  • +past_due still bills. The subscription keeps generating invoices while Stripe retries the old one.
  • +unpaid still creates invoices, but Stripe closes them immediately and attempts no payment.
  • +Whether exhausted retries land on canceled or unpaid is a setting you chose, not a fact about the customer.
  • +incomplete_expired is terminal and means the subscription never started, so no revenue ever belonged to it.
  • +paused happens only when a trial ends with no payment method, and is not the same as pausing collection.
  • +cancel_at_period_end does not change the status. A cancelling customer reads as active until the period ends.

The eight values, and what Stripe says each one means

incomplete and incomplete_expired both describe a subscription that failed at the door. Where collection is automatic, Stripe moves a subscription into incomplete if the initial payment attempt fails, and a subscription in this status can only have its metadata and default source updated. Once the first invoice is paid it moves to active. If the first invoice is not paid within 23 hours, it transitions to incomplete_expired, which Stripe calls a terminal status: the open invoice is voided and no further invoices are generated.

trialing is a subscription inside a trial period, and Stripe moves it to active when the trial is over. No money has moved, and for the length of the trial none is scheduled to.

active is the ordinary state. Invoices generate on the cycle, payments succeed, and nothing needs your attention.

past_due is where the name misleads accountants, and the next section is about why. Where collection is automatic, Stripe says a subscription becomes past_due when payment is required but cannot be paid, either through a failed payment or while awaiting additional user actions. Where you send invoices instead, it becomes past_due when its invoice is not paid by the due date.

canceled and unpaid are the two landing places after retries run out. Stripe puts it plainly: once it has exhausted all payment retry attempts, the subscription will become canceled or unpaid, depending on your subscriptions settings. Which one you get is configuration, not diagnosis.

paused is the narrowest of the eight. A subscription can only enter it when a trial ends without a payment method. A paused subscription does not generate invoices, and it can be resumed once the customer adds a payment method.

past_due and unpaid are not two shades of the same thing

Read them side by side and the asymmetry is stark.

A past_due subscription has not stopped. It reaches the end of its billing period, generates the next invoice, and tries to collect, all while the previous invoice is still outstanding. If your books raise a receivable each time an invoice finalizes, a customer who quietly stopped paying in March is still adding to Accounts Receivable in June. Nothing errored. The subscription is doing exactly what it was configured to do, and the only signal that anything is wrong is a status field nobody is reading.

unpaid is the value most people guess wrong, and Stripe is precise about it. When a subscription has a status of unpaid, no subsequent invoices will be attempted, and then comes the part that matters: invoices will be created, but then immediately automatically closed. So an unpaid subscription is still producing invoice objects every cycle. It has simply stopped trying to collect on them. Stripe adds that after receiving updated payment information from a customer, you may choose to reopen and pay their closed invoices, which is the recovery path the status is designed to leave open.

That is the practical difference, and it is a real one for your books. canceled ends the billing relationship and the documents stop. unpaid suspends collection while keeping the paperwork running, which is how an account can look dormant in a revenue report and still be generating a document every month.

The status of the subscription is not the status of the invoice

These are two objects with two lifecycles, and they are routinely read for each other.

An invoice status describes one billing period: whether that document is draft, open, paid, void or uncollectible. A subscription status describes the arrangement that produces those documents. An open invoice does not make the subscription past_due, because the invoice may simply not be due yet. A past_due subscription does not make its latest invoice unusual, because an open, unpaid invoice is an ordinary thing for an invoice to be.

Keeping them apart matters because they answer different accounting questions. The invoice tells you what to record for a period. The subscription tells you whether to expect another one.

One more field joins the confusion, and it catches people who are otherwise careful. cancel_at_period_end does not change the status at all. Stripe defines it as whether this subscription will, if the status is active, or did, if the status is canceled, cancel at the end of the current billing period. So a customer who cancelled this morning and keeps access until the 30th still reads as active. The status is telling you the truth about today and nothing about the decision that has already been made.

The pause that is not the paused status

Stripe has two things called pausing, and they behave in opposite directions.

The paused status arrives on its own, in exactly one circumstance: a trial ended and no payment method was on file. Stripe does not bill a paused subscription at all.

Pausing collection is something you do deliberately, and Stripe is direct about the consequence. The subscription status will be unchanged and will not be updated to paused. The subscription carries on generating invoices while collection is suspended.

For anyone reconciling, the deliberate one is the more dangerous of the two, precisely because it is invisible in the field you would think to check. A subscription with collection paused reads active in every report you run.

What a status change sends to QuickBooks, and what it does not

Nothing in Acodei’s product documentation describes Acodei reading a subscription’s status, and that is worth stating plainly rather than leaving to inference. A subscription changing status is not by itself an accounting event.

What the documentation does describe is a set of triggers, and every one of them is an invoice event. Invoice Sync creates a QuickBooks Invoice when a Stripe invoice is finalized, reproducing every line item and the tax lines as the mapping settings allow. It creates a Payment when the invoice is paid, whether by a successful charge, a manual payment where that setting is enabled, or a credit balance offset, and applies it to the invoice already created. It voids the invoice or writes a Credit Memo when the Stripe invoice is voided, and treats an invoice marked uncollectible the same way, reopening it and processing the payment if it is later paid.

So a status change reaches your books only indirectly, through the invoices it does or does not produce. A subscription going past_due sends nothing on its own, and the invoices it keeps generating sync exactly as they always did. A subscription going unpaid sends nothing on its own either, and because Stripe attempts no payment on the invoices it creates and immediately closes, the paid trigger never fires for them. A subscription going canceled simply stops producing invoices, and the sync goes quiet because nothing is arriving.

The consequence is worth planning around: you cannot tell these apart from the QuickBooks side. An invoice that never received a payment looks identical whether the customer is mid-retry, suspended, or gone. The status lives in Stripe, and it is the thing to go and check when a familiar monthly invoice stops appearing.

Want to see this on your own Stripe data?

Start a free trial

Frequently asked questions

What are the Stripe subscription statuses?

There are eight: incomplete, incomplete_expired, trialing, active, past_due, canceled, unpaid, and paused. incomplete and incomplete_expired cover a subscription whose first payment failed. trialing and active are the healthy states. past_due means a payment is required but has not succeeded. canceled and unpaid are the two possible endings after retries are exhausted. paused applies only when a trial ends with no payment method on file.

What is the difference between past_due and unpaid on a Stripe subscription?

past_due means Stripe is still trying. The subscription keeps cycling and keeps generating invoices while the outstanding one is retried. unpaid means Stripe has stopped trying but has not closed the account: Stripe states that no subsequent invoices will be attempted, and that invoices will be created, but then immediately automatically closed. So both statuses keep producing documents, and only one of them is still attempting to collect money.

Does a canceled Stripe subscription still create invoices?

No. Cancellation ends the billing relationship, so the subscription stops generating invoices entirely. That is the difference between canceled and unpaid, which keeps creating invoices and closing them immediately. If you are seeing new invoice objects for a customer you believe cancelled, the subscription is most likely unpaid rather than canceled.

Why does a customer who cancelled still show as active?

Because cancelling at the end of the period does not change the status. Stripe defines cancel_at_period_end as whether the subscription will, if the status is active, or did, if the status is canceled, cancel at the end of the current billing period. Until that date arrives the subscription is genuinely still active and will still bill if a period boundary falls first. The status is accurate about today, and silent about the decision already made.

What does incomplete_expired mean?

It means the subscription never started. Where collection is automatic, a subscription goes to incomplete if the first payment attempt fails, and if that first invoice is not paid within 23 hours it transitions to incomplete_expired. Stripe calls this a terminal status, voids the open invoice, and generates nothing further. For your books it is the cleanest of all the failure states, because no revenue ever legitimately belonged to it.

Is a paused subscription the same as pausing collection in Stripe?

No, and they behave in opposite ways. The paused status is only reachable when a trial ends without a payment method, and a paused subscription generates no invoices. Pausing collection is a deliberate action, and Stripe states that the subscription status will be unchanged and will not be updated to paused. A subscription with collection paused therefore still reads as active while collection is suspended.

Does Acodei sync Stripe subscription statuses to QuickBooks?

No. Acodei’s documented sync triggers are invoice events: an invoice finalizing, being paid, being voided, or being marked uncollectible. A subscription changing status is not itself one of them, so a status change reaches QuickBooks only through the invoices it does or does not produce. A past_due subscription keeps sending invoices to QuickBooks. A canceled one stops sending anything.

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.