net termsinvoice billinginvoluntary churnb2b saasdso

Net Terms Churn: Why Invoice-Based B2B Billing Fails a Completely Different Way Than Cards or ACH

A net-30 invoice never declines — it just sits unpaid. Here's why invoice billing needs a completely different playbook than card or ACH dunning.

XY
4 September 2026 · 8 min read

Every dunning playbook we've written, and most of the ones you'll find anywhere else, assumes a charge attempt happens. A card gets billed and declines, or a bank debit gets initiated and returns. Something fires, your webhook catches it, and a retry sequence kicks off. None of that machinery does anything for the growing share of B2B SaaS revenue that runs on net terms — where the "payment" is an invoice sitting in someone else's accounts payable queue, and there's no charge event to retry because no charge was ever attempted.

Key stat
35–50%
Annual non-renewal rate among B2B accounts carrying an invoice more than 60 days overdue
Source: The Kaplan Group, "Subscription Facts: 55 SaaS and B2B Payment Statistics"

Net terms billing isn't a slower version of card billing

It's a different system with a different failure mode. Card and ACH billing are pull transactions — you initiate the charge, the rail tells you within seconds or days whether it worked, and every outcome is a discrete, machine-readable event: succeeded, failed, a specific decline code, a specific Nacha return code. Net terms invoicing is a push transaction. You issue the invoice, and then you wait for someone else's finance department to decide when — or whether — to pay it. There's no decline. There's no return code. There's just a due date that passes and an invoice that stays open.

That distinction matters more than it sounds like it should, because it changes who's actually responsible for the money moving. With a card on file, your subscription logic controls the timing entirely. With an invoice, timing is controlled by your customer's procurement and accounts payable process — a process you have no visibility into and no ability to retry your way through.

Billing railWhat "failure" looks likeWho controls timingRetry mechanism
Card (auto-charge)Decline code, instantYouSmart Retries, 21–28 day window
ACH direct debitReturn code, up to 4 business days laterYou (mostly)Nacha-restricted, 2 attempts, 2 of ~12 codes
Net terms invoiceNo event — invoice just ages past dueCustomer's AP teamNone — reminders and manual collections only

We've covered how card dunning and ACH dunning each need their own playbook because the underlying rail behaves differently. Net terms deserves the same treatment, except the gap is bigger: there's no processor-level signal to build automation around at all.

Why the invoice stalls before it's even "late"

A meaningful share of overdue net-terms invoices aren't overdue because the customer can't or won't pay. They're overdue because the invoice never made it through the customer's internal approval chain in the first place. Three failure points show up constantly in enterprise procurement research:

  • PO mismatch. The invoice amount, line-item description, or billing period doesn't exactly match the purchase order the customer's system expects. Many AP departments won't process an invoice at all until it three-way-matches against a PO and a receipt of goods or services — and SaaS renewals routinely trip this because the PO was cut for the prior contract term, not the new one.
  • Wrong recipient. The invoice went to the champion who signed the deal, not to the AP inbox or the specific portal the customer's finance team actually monitors. It sits in someone's email, unforwarded, until a reminder or a renewal call surfaces the problem.
  • Missing reference data. No PO number, no cost center, no matching vendor ID in the customer's ERP. Enterprise AP systems increasingly reject or quarantine invoices that don't carry the exact metadata their procurement system expects, regardless of whether the underlying charge is correct.

None of this shows up as a decline. It shows up, if you're watching for it at all, as an invoice that's still marked "open" 45 days after you sent it — indistinguishable in most billing dashboards from a customer who's simply choosing not to pay.

How widespread this actually is

Share of suppliers reporting late B2B payments, by region
Central & Eastern Europe83%
Asia80%
Western Europe79%
United States (invoices paid late)55%
UK (B2B customers report delays)66%

Source: Atradius Payment Practices Barometer, regional B2B payment trends reports (2025–2026)

Late B2B payment isn't a niche problem confined to a few slow-paying customers — it's the norm, not the exception, across every region Atradius surveys. That reframes what "net terms" actually means operationally: offering Net 30 isn't a promise that you'll be paid in 30 days, it's a starting point for a collections process that, for a large minority of invoices, is going to run well past it.

The timeline nobody's watching

Card and ACH dunning gets attention because the failure is loud — a webhook fires the moment something goes wrong. Invoice aging is quiet by comparison, which is exactly why it does more damage per incident than most teams expect. A typical unmanaged trajectory:

Days past dueWhat's actually happeningRecoverability
0–15Invoice sitting in AP approval queue, possibly PO-mismatchedHigh — usually just needs the right contact
16–30Reminder emails ignored or misrouted; renewal date already passed for the accountHigh — still a process problem, not a decision
31–60AP escalates internally or deprioritizes; your access may or may not still be liveModerate — needs a human collections call, not another email
61–90Customer has effectively decided not to renew, or is negotiating a workoutLow — this is the point our churn data shows a 35–50% annual non-renewal rate
90+Write-off or collections agency territoryVery low

The median B2B SaaS company runs a days-sales-outstanding (DSO) figure in the high 50s, and enterprise-heavy, invoice-first companies routinely see 30–60 day DSO purely as a function of negotiated terms and procurement approval steps — before anything has gone wrong. That baseline matters, because it means your collections team has almost no margin to notice a genuinely stuck invoice before it's already deep into the low-recoverability zone above.

Fixing it: five things that actually move DSO and save renewals

1. Capture PO and billing metadata before you send the first invoice, not after it bounces

Ask for the PO number, cost center, and exact billing entity name during contract signature, not when an invoice comes back rejected. Every field an enterprise AP system might match against and reject on is a field worth collecting up front — it's far cheaper to ask once at signature than to chase it down 45 days into an aging invoice.

2. Confirm the AP contact separately from the champion

The person who signs the contract is rarely the person who pays the invoice. Get a named AP or finance contact, or the specific vendor portal the invoice needs to be submitted through, as a standard step in your onboarding — not something you scramble to find out once collections has already stalled.

3. Offer autopay as the default, invoice-on-request as the exception

Every account that can be moved from "we'll invoice you" to a card or ACH auto-charge on file removes an entire category of this problem. This doesn't mean forcing enterprise accounts onto a card — see our guide on involuntary churn by segment for why that trade cuts the other way for genuinely large accounts — but plenty of mid-market customers default to net terms simply because nobody asked if they'd prefer autopay, and autopay collects faster with less internal friction on both sides.

4. Build an escalation cadence that isn't just reminder emails

An automated reminder at day 25, 35, and 50 catches the invoices that were simply forgotten. It does nothing for the ones stuck in a PO mismatch or misrouted to the wrong inbox — those need a human to call the AP contact directly. Treat day 30 as the point where a person, not a template, takes over.

5. Tie renewal risk scoring to AR status, not just usage data

Most churn health scores weight product usage heavily and ignore accounts receivable entirely. An account with declining logins is a real risk signal. So is an account sitting on an unpaid invoice 45 days after a renewal date — arguably a stronger one, because it's a direct signal from the part of the customer's organization that actually controls whether the relationship continues. If your health score doesn't pull AR aging as an input, it's blind to a churn signal that's often more reliable than usage data.

Where this intersects with your cancellation flow

An account that quietly stops renewing over an unpaid invoice never touches your cancellation flow at all — nobody clicked cancel, so there's no cancel-reason survey, no retention offer, no save opportunity in the conventional sense. That's exactly why it gets missed: it doesn't look like churn in a cancellation-flow dashboard, it looks like an accounting problem sitting in a completely different team's queue. The fix isn't a better discount offer at the moment someone tries to leave — by the time an invoice is 60 days overdue, "leaving" already happened, quietly, weeks earlier. It's catching the AR signal early enough that a real person can call the right contact before the account crosses into the range where the data says renewal is unlikely.

CancelFlow is built for the moment a subscriber actively decides to cancel — but the same instinct that makes a good cancellation flow work, catching risk early and routing it to the right response, applies just as much to an invoice quietly aging in someone's AP queue. Run your own numbers through our churn calculator with invoice-billed accounts modeled separately from card and ACH: blending all three into one churn number will consistently hide how much of your revenue risk is sitting in accounts receivable rather than in a payment decline.

Frequently asked questions

What are net terms in B2B SaaS billing?+

Net terms (Net 15, Net 30, Net 60) let a customer pay an invoice within a set number of days after it's issued, instead of being charged automatically at the moment of renewal. They're standard for enterprise and mid-market contracts sold through procurement, where a buyer's accounts payable process — not a card on file — controls when money actually moves.

Is an unpaid net-30 invoice the same as involuntary churn?+

No, and treating it that way is the mistake. Involuntary churn from a card or ACH failure is a system event — a decline or return code fires within seconds or days, and your dunning stack can react to it immediately. An unpaid invoice produces no event at all. It just ages, silently, inside your customer's accounts payable queue, with nothing in your billing system telling you whether it's stuck in approval, disputed, or simply forgotten.

What is a good DSO for a B2B SaaS company?+

Under 45 days is generally considered healthy for invoice-billed B2B SaaS, with the strongest AR teams collecting in under 40 days. Enterprise-heavy companies on Net 30–60 terms commonly run higher — the median across B2B SaaS sits closer to the high 50s — because longer negotiated terms and multi-step procurement approval add real delay before an invoice is even eligible to be paid.

Can Stripe automatically retry a failed invoice payment the way it retries a card?+

Only if the invoice is set to auto-charge a saved payment method — which defeats the purpose of offering net terms in the first place. A "send invoice" (as opposed to "charge automatically") invoice in Stripe has no retry logic at all, because there's no failed charge to retry. Stripe can send automatic reminder emails as the due date approaches and passes, but collecting an overdue net-terms invoice is a human accounts-receivable workflow, not a payments-API problem.

Try CancelFlow

Stop losing subscribers today

One script tag. One function call. A live cancellation flow in under 10 minutes.

Start free trial →
← All postsHome