An AR aging report tells you what's overdue. It doesn't tell you much about who owes it. Whether a customer pays late as a habit or is late for the first time. Whether their payments are drifting. Whether they've ever paid at all. Those are the questions a credit manager asks before picking up the phone, and answering them from NetSuite usually means a saved search, an export, and a spreadsheet that gets rebuilt every month.
The Customer Payment Behavior Analyzer is one of the prompts in my NetSuite AI Prompt Library, and it exists to answer those questions in one pass. This post is about what it does and how it does it.
If you're new to the library, it's a set of 150 prompts for NetSuite finance work that I released in January. Each one is a structured system prompt that you paste into Claude or ChatGPT along with your NetSuite data, and it turns the model into a specific kind of analyst with a defined method, a required output, and rules about what it's not allowed to make up.
What It Asks the Model to Be
The prompt casts the model as a senior credit and collections analyst, and it's specific about the mindset: every conclusion tied to evidence, and unknowns flagged rather than filled in. That framing matters more than it sounds. A general assistant asked about payment behavior will happily estimate. An analyst operating under those rules will tell you that it can't compute days to pay for an invoice with no payment date, and move on.
From there it works through six blocks in order. Payment timing, which is days to pay against terms. DSO at the customer level, with the trend. Aging concentration. Payment patterns, including partial payments and seasonality. Risk signals, such as deterioration and high-balance slow payers. And a collections priority list, weighted by impact, with an action for each account.
The Queries It Ships With
The prompt includes five SuiteQL queries: payment timing by customer, customer DSO, an aging breakdown by bucket, a quarterly payment trend, and a high-risk summary that combines past-due balances with credit utilization. If you have an MCP connector to NetSuite, the model can run them directly. If you don't, you run them yourself in the SuiteQL Query Tool, export the results, and paste them in.
Two of the queries need the kind of adjustment that any SuiteQL query needs when it meets a real account. The invoice-to-payment link isn't a single header field in NetSuite, and the open balance column has a different name than you'd guess. The prompt tells the model to document exactly that kind of adaptation in a data lineage table, so the report says which query produced which number and what changed along the way. I'll come back to this at the end of the post.
The Output
The deliverable has a mandatory order: executive summary, a payment behavior scorecard, DSO analysis, aging analysis, a collections priority table, and then two appendices, data lineage and assumptions. The scorecard has a fixed shape, one row per customer with balance, DSO, on-time percentage, the amount over 60 days, a risk level, and a recommended action.
Every calculated number has to carry its method. DSO says how it was computed. Risk levels say what criteria produced them. The thresholds are stated up front: on-time payment above 90% is good, below 75% is a concern, and a balance more than 60 days past due is severe. You can change them, but the model can't quietly invent its own.
And the prompt has a short list of things that always go to a person. Credit limit changes, collection escalations, account holds, and write-off suggestions are flagged for human review rather than presented as decisions. The model ranks and recommends. It doesn't decide.
Who It's For
Controllers and credit managers first. Collections teams, because the priority list is the work list. And finance consultants who walk into a NetSuite account cold and need to understand the receivables in an afternoon. If your customers buy on terms, this is the prompt that tells you what those terms are worth.
It's in the NetSuite AI Prompt Library, under Revenue and Customer Analytics.
Update, September 2026
I ran this prompt against one of my NetSuite test accounts, with the queries executed through Chartstone and the analysis done by Claude, and formatted the report to one of my branding guidelines. Here's what it found.
The receivables in that account split into two populations that behave nothing alike. Customers who pay, pay early: 246 net-30 invoices settled in the last two years were paid an average of 28 days before their due date, 99.6% on time, with no partial payments. Customers who don't pay, don't pay at all. Fourteen customers hold $562,592 of open balances, none of them has a single settled invoice in two years, and the oldest item is 460 days past due.
That's the whole finding, and it's the kind of thing an aging report can't tell you. Portfolio DSO came out at 175 days against 30-day terms, which looks like a collections crisis. It isn't. The paying customers are fine. The number is driven entirely by accounts that never entered the paying population, and the collections list points at those fourteen, starting with the four above $80,000.
The verification tests earned their keep. The GL receivables balance came out $1.24M higher than the open invoices, which the report flags as a failed reconciliation test and attributes to journal entries posted straight to the receivables account. It was right. And the data lineage appendix records the three query adaptations I mentioned above, so anyone reading the report can see exactly what ran.
You can read the full report here: Customer Payment Behavior Analysis. The names and numbers are test data.