LedgerUp Resources - Learning Materials
NetSuite Dunning Automation: Setup, Suppression & Why It Breaks
Configure NetSuite dunning automation: build escalating sequences by aging bucket, suppress reminders on paid invoices, and fix the cash application gap.
Key Takeaways
- NetSuite dunning automation requires the Dunning Letters SuiteApp (bundle 392827), which isn't enabled by default.
- Escalating sequences typically use four aging tiers: 0 to 30, 31 to 60, 61 to 90, and 90+ days past due.
- Dunning procedures are assigned at the customer level, not the invoice level, which creates issues with partial payments.
- The most common failure mode is timing lag between payment receipt and cash application, causing dunning to fire against already-paid invoices.
- Event-driven suppression (triggered by payment match) is more reliable than schedule-driven aging re-checks.
Introduction
NetSuite dunning automation, configured through the Dunning Letters SuiteApp (bundle 392827), lets finance teams send escalating payment reminders based on invoice aging. The setup is straightforward. Getting reminders to stop firing after a customer pays is where most B2B SaaS implementations fall apart.
This guide covers both halves: how to build escalating dunning sequences tied to aging buckets, and how to architect suppression so those sequences go quiet the moment cash application confirms a payment match. If you're running B2B SaaS on NetSuite and customers occasionally get collection emails for invoices they've already paid, the gap is almost certainly between those two systems.
Book a LedgerUp Demo
Stop chasing invoices manually. LedgerUp’s AI agent Ari automates collections, reduces DSO, and recovers revenue on autopilot.
Book a LedgerUp DemoWhat Dunning Automation Means in NetSuite
NetSuite doesn't ship with dunning enabled. Automated payment reminders require installing the Dunning Letters SuiteApp (bundle 392827) through SuiteBundler. Until that bundle is installed, there's no native mechanism for scheduled collection emails.
LedgerUp Insight: The workflow described above is one that LedgerUp automates end-to-end. Teams using LedgerUp typically cut manual effort by 80% and reduce errors across their billing pipeline.
Once installed, the SuiteApp adds a Dunning Procedures record type, email template hooks, and a scheduling engine that evaluates invoice aging and sends letters according to rules you define. A second approach uses SuiteFlow workflows triggered by saved searches against aging data, which gives more granular control but takes more configuration effort. Growfin's guide walks through the saved-search workflow path in detail.
Most B2B SaaS teams on NetSuite start with the SuiteApp because it requires less custom development. The SuiteFlow approach becomes relevant when you need invoice-level logic that the SuiteApp's customer-level procedures can't handle.
How to Design Escalating Sequences Tied to Aging Buckets
Step 1: Define Your Aging Buckets
Standard B2B SaaS aging tiers map cleanly to dunning levels:
- 0 to 30 days past due (current/pre-due): Courtesy reminder territory. Some teams skip dunning here entirely and rely on invoice delivery confirmation instead. If you do dun in this window, keep the tone soft and assume the invoice was missed, not ignored.
- 31 to 60 days (Level 1): First formal reminder. The customer's AP team may have missed the invoice or is waiting on internal approval.
- 61 to 90 days (Level 2): Firm follow-up. CC the account manager or CSM. The tone shifts from "just checking in" to "your account is overdue."
- 90+ days (Level 3/escalation): Final warning before suspension, write-off evaluation, or handoff to collections. Legal or finance leadership gets copied.
These tiers aren't arbitrary. They reflect the payment behavior patterns typical of B2B SaaS buyers, where net-30 terms are standard and enterprise AP departments often batch payments on internal schedules. Your AR collections automation strategy should mirror these same tiers.
Step 2: Configure Dunning Procedures
Navigate to Dunning > Setup > Dunning Procedures after installing the SuiteApp. Each procedure defines a multi-level escalation path with specific fields per level, as detailed in BrokenRubik's setup guide:
- Days past due: The aging threshold that triggers the level (e.g., 7, 30, 60, 90).
- Minimum send interval: Prevents multiple letters within a short window. Setting this to 14 days keeps you from sending three emails in one week to the same customer.
- Email template: The message template associated with the level. Each level should use a different template with appropriate tone.
- CC recipients: Sales rep at Level 1, account manager at Level 2, VP Finance or legal at Level 3.
- Maximum letters per level: Caps how many times a given level fires before escalating. Two letters per level is a common default.
One procedure can contain four or five levels, each with its own configuration. You can also create separate procedures for different customer segments: one for self-serve accounts with shorter intervals, another for enterprise accounts with longer grace periods.
Step 3: Build Email Templates for Each Level
Tone escalation across levels should be deliberate. A useful framework for B2B SaaS:
Level 1 (friendly reminder): "Hi [Contact], invoice #[number] for [amount] was due on [date]. If payment is already on the way, please disregard." Keep it short. No urgency language.
Level 2 (firm notice): "Your account is now [X] days past due. Please remit payment or contact us if there's an issue with the invoice." CC the internal account owner so they're aware.
Level 3 (formal demand): "This is a formal notice that your account balance of [amount] is significantly overdue. Payment is required within 10 business days." Reference your terms of service.
Level 4 (final warning): "Failure to remit payment within 5 business days may result in service suspension and referral to collections." Last automated touchpoint before human escalation.
Attach the invoice at every level. AP teams frequently can't locate the original when responding to dunning notices, and a missing attachment is one of the most common reasons a payment reminder gets ignored.
Step 4: Assign Procedures to Customers
Dunning procedures in NetSuite are assigned at the customer record level, not the invoice level. Navigate to the customer record, find the dunning procedure field, and select the appropriate procedure.
Customer-level assignment is a key architectural constraint. If a customer has five open invoices and pays three of them, the dunning procedure evaluates the customer's overall aging status rather than suppressing on a per-invoice basis. Partial payments create noise here: a customer who has paid 80% of their outstanding balance can still receive a dunning letter referencing the full overdue amount, a known limitation documented by Oracle.
For SaaS companies with usage-based billing or multiple subscription lines per customer, the customer-level model means you'll need supplementary logic to handle partial payment scenarios cleanly.
Step 5: Schedule and Test the Sequence
Set the dunning evaluation schedule under Dunning > Scheduling. Most teams run it daily, typically in the early morning before business hours. Before going live, test with a small cohort: create a test customer with a deliberately overdue invoice and verify each level triggers at the correct interval.
Check that CC recipients receive their copies. Confirm email templates render correctly with merged fields. Run the sequence through all four levels on the test customer to validate the full escalation path before enabling it across your customer base.
How Payment Status Should Suppress Active Dunning
The correct suppression model is event-driven, not schedule-driven. When cash application confirms a payment match, that confirmation should immediately trigger dunning suppression for the associated invoice and customer. Waiting for the next scheduled aging re-check introduces a window where paid customers get chased.
The sequence should work like this: payment received and matched to an invoice, NetSuite record updated (ERP write-back), dunning sequence for that customer or invoice suppressed automatically. If step three depends on step one completing first, the loop is closed. If step three runs independently on a timer, the loop is broken.
Most cash application processes in NetSuite are batch-oriented by default, which is where the trouble starts.
Where Native NetSuite Dunning Falls Short
The Dunning Letters SuiteApp handles the sending side well. Where it breaks is the stopping side, specifically when the signals that should suppress dunning arrive late, arrive messy, or arrive in the wrong place.
The Cash Application Timing Gap
Stripe batches payouts on a T+2 cycle for domestic transactions and T+7 for international ones. ACH payments take one to three business days to clear. During those windows, the payment exists from the customer's perspective but not in NetSuite's aging report. The invoice stays open, the aging bucket increments, and dunning fires.
A SaaS company processing $2M per month through Stripe could have hundreds of invoices in this limbo state at any given time, based on settlement timing alone. oAppsNet's analysis of cash application bottlenecks identifies settlement lag as one of the most common sources of false-positive dunning in B2B environments.
Partial Payments and Unmatched Remittance
Enterprise buyers sometimes short-pay invoices due to disputes, credits, or tax adjustments. When a $50,000 invoice receives a $42,000 payment with no remittance detail explaining the discrepancy, NetSuite's automated matching can't resolve it. The payment sits unapplied. Dunning fires against the full $50,000.
Wire transfers from large AP departments frequently arrive with minimal identifying information. Finance has to research the payment manually, match it, and apply it before dunning suppression kicks in. That research takes hours or days. Dunning doesn't wait.
The Scheduling Conflict
If your dunning batch runs at 6am and your cash application batch runs at 8am, every payment that cleared overnight gets dunned before it gets applied. The data is correct in both systems. The sequencing is wrong.
Reordering the batches sounds simple, but many teams discover their cash application batch depends on upstream bank file imports that aren't available until mid-morning. The dunning window exists because of infrastructure constraints, not configuration mistakes.
Multi-Entity Matching Failures
SaaS companies with multiple subsidiaries in NetSuite face a specific problem: a payment arrives and gets posted to Subsidiary A, but the invoice lives in Subsidiary B. The customer's aging report in Subsidiary B still shows an open balance. Dunning fires from Subsidiary B while the cash sits unmatched in Subsidiary A.
This is a well-documented pain point in the NetSuite community. Intercompany journal entries can resolve it after the fact, but resolution typically happens after dunning has already sent. Companies running on other ERPs face similar challenges, though the subsidiary structure in NetSuite makes it particularly acute.
Native NetSuite Dunning vs. Orchestrated Workflow
| Capability | Native Dunning Letters SuiteApp | Orchestrated Workflow Layer |
|---|---|---|
| Escalating sequences by aging bucket | Yes | Yes |
| Customer-level procedure assignment | Yes | Yes |
| Event-driven suppression on payment match | No | Yes |
| Stripe T+2 settlement gap handling | No | Yes |
| Partial payment exception routing | Manual | Automated |
| Multi-subsidiary payment matching | Limited | Yes |
| Slack-native exception surfacing | No | Yes |
How an Orchestration Layer Closes the Loop
The four failure modes above share a common root cause: dunning and cash application operate as independent processes with no event-driven connection between them. Fixing the scheduling conflict helps with one failure mode but doesn't address settlement lag, partial payments, or multi-entity mismatches.
The correct architecture treats dunning suppression as a downstream event triggered by cash application confirmation. Payment is received and matched to an invoice. The ERP record updates. Suppression fires automatically based on that update, not on a scheduled aging re-check that might run hours later.
Building this in native NetSuite is possible through custom SuiteScript and workflow state changes, but the logic gets complex fast when you account for partial payments, multi-entity structures, and payment sources with different settlement timelines.
Where LedgerUp Fits
LedgerUp's NetSuite integration operates as the workflow layer between payment matching and collections suppression, connecting Stripe, ACH, and other payment sources to NetSuite's cash application process and triggering dunning suppression automatically when a match confirms. Exception routing for partial payments and unmatched remittance happens through Slack-native workflows, surfacing only the items that need human review.
The broader principle applies regardless of which orchestration tool you use: the suppression signal must flow from cash application to collections in a single connected workflow, not across two independently scheduled batch processes.
FAQ
What is dunning in NetSuite?
Dunning in NetSuite is the automated process of sending escalating payment reminders to customers with overdue invoices, configured through the Dunning Letters SuiteApp (bundle 392827). The SuiteApp defines escalation levels, email templates, and sending intervals, then evaluates invoice aging on a schedule to send letters according to your rules.
How do I stop dunning emails when a customer pays in NetSuite?
Cash application has to confirm the payment match and update the invoice status before the next dunning run executes. If cash application runs after the dunning batch, or if payment matching is delayed by settlement timing or missing remittance, dunning keeps firing against the open invoice. The reliable fix is event-driven suppression triggered by the payment match, not a scheduled aging re-check.
What's the difference between dunning and collections in NetSuite?
Dunning is the automated reminder sequence triggered by invoice aging. Collections is the broader AR workflow that includes dunning, dispute resolution, escalation to account managers, payment plan negotiation, and write-off decisions. A full breakdown of the collections automation landscape covers where dunning fits inside that larger process.
Why is NetSuite still sending dunning emails to customers who have paid?
The most common cause is a timing gap between payment receipt and cash application posting. Stripe batch settlement (T+2 domestic, T+7 international), ACH clearing delays, unmatched remittance, and multi-entity posting errors all leave invoices appearing open in NetSuite's aging report after the customer has already paid. Dunning evaluates aging data, and if that data hasn't been updated by cash application, the sequence continues.
Do I need a third-party tool for NetSuite dunning automation?
Native NetSuite dunning handles the reminder sequence and escalation logic well for straightforward scenarios. A third-party orchestration layer becomes necessary when you need to connect cash application status to dunning suppression in near-real-time, especially if you process payments through Stripe, handle partial payments regularly, or operate across multiple NetSuite subsidiaries. The native SuiteApp lacks the event-driven connection between payment matching and collections suppression that prevents false-positive dunning.
How long does it take to set up NetSuite dunning?
A basic Dunning Letters SuiteApp configuration typically takes one to two weeks: a few days to install the bundle and define procedures, another week to build email templates, assign procedures to customer segments, and run end-to-end testing. Custom SuiteFlow-based dunning takes longer, usually four to six weeks depending on the complexity of the saved searches and workflow states.
Can NetSuite send dunning emails automatically based on Stripe payments?
Not directly. NetSuite's Dunning Letters SuiteApp evaluates aging data inside NetSuite, and Stripe payment status only reaches the aging report after cash application has matched and posted the payment. To suppress dunning based on Stripe activity in real-time, you need a connector or orchestration layer that updates NetSuite invoice status as soon as Stripe confirms the payment.
What's the difference between the Dunning Letters SuiteApp and SuiteFlow workflows?
The Dunning Letters SuiteApp is a packaged bundle (392827) that handles customer-level dunning procedures with a configurable scheduling engine. SuiteFlow workflows are custom-built using saved searches against aging data, giving you invoice-level control and custom field logic but requiring substantially more development effort. Most teams start with the SuiteApp and only migrate to SuiteFlow when they hit a limitation the SuiteApp can't accommodate.
How do I customize dunning email templates in NetSuite?
Dunning email templates are configured under Dunning > Setup > Email Templates. Each template supports merged fields for invoice number, amount, due date, customer contact, and outstanding balance. You can attach the invoice PDF, CC internal account owners, and customize the subject line per level. Build a separate template for each escalation level so the tone can shift appropriately as the account ages.
Next Step
If you're running NetSuite and seeing dunning fire against paid invoices, the gap is almost always between cash application and collections. See how LedgerUp connects NetSuite payment matching to dunning suppression.
Book a LedgerUp Demo
Book a LedgerUp Demo
See how LedgerUp connects your CRM, billing, and ERP systems to eliminate manual work and accelerate revenue.
Get Started with LedgerUp