KPI spotlight
Days Sales Outstanding (DSO)
How long invoices wait for payment, so you know where to tune your rules and reminders.
Adjust the inputs to see how RuleKit operators would tweak rule definitions or bulk actions to move this KPI, then explain the change with clear values.
Use this sandbox to see how rule changes move Days Sales Outstanding (DSO)
These defaults sit in the concerning range so you can experiment: tweak invoice amounts, credit sales, or deposit timing as if you were defining a RuleKit workflow, then track how the result shifts toward the good zone. Credit sales should still match the total recognized revenue for this 30-day window, including any net-term invoices.
Formula result
DSO = 14.3 days
DSO = Total receivables ÷ (Credit sales ÷ 30 days)
Receivables are invoices that haven’t yet been paid. Divide them by daily sales velocity to see how many days the cash is still outstanding.
Minimum practical range: Anything below ~15 days usually means you are collecting cash immediately or running a cash-prepaid model.
Formula segments
Receivables
Open invoices from the sample rows
$10,900
Derived credit sales
Sum of credit sales entries ÷ 30 days – assumes the revenue you entered represents the NET 30 window.
$763/day
DSO
Expected days to collect
14.3 days
| Count | Issued | Paid (opt) | Days past due | Open $ | Credit $ |
|---|---|---|---|---|---|
Definition
What it measures
DSO tracks the gap between when revenue is recognized and when the cash actually arrives. Lower DSO means your rule sets, reminders, and exception workflows are keeping collections steady while the backlog stays manageable.
Receivables are unpaid invoices and credit sales represent the revenue attached to those invoices, even on net terms. RuleKit links these inputs so operators can explain how rule changes move cash versus recognition.
DSO under ~2 days would mean immediate collection, so this default starts in the concerning range so you can play to lower it.
How this maps to Stripe data
Use Stripe invoice `created` and `paid` timestamps to populate each row. RuleKit derives the NET 30 due date from the invoice date so long-term accounts still count toward DSO until they clear, keeping the aging buckets honest even before the payment lands.
Credit $ is the revenue recognized over the same NET 30 window you are modeling, not simply what is still open on the invoice. Think of it as the total billed amount you book during those 30 days—even if you collect later—and enter that sum (after discounts/credits) here.
- Identify the 30-day NET 30 window represented by the invoice issue dates you entered above.
- Pull Stripe invoices whose `created` timestamp falls inside that window, use each invoice’s full recognized amount (`amount_total` minus any discounts or credits), and sum them.
- If a row represents multiple invoices, multiply the per-invoice revenue by the invoice count before entering it as the Credit $ value so the derived average daily sales line up with the revenue you expect to book.
Outstanding amount pulls from `amount_remaining` and credit sales should match the revenue for your 30-day window. RuleKit uses those values to highlight which invoices drive aging bucket spikes so you can reduce them with new rules.
Glossary
- Receivables
- Unpaid invoices that are still on the books waiting for payment.
- Credit sales
- Total revenue tied to the invoices you are measuring (net terms are included because the customer hasn’t paid yet).
- Invoice amount
- The open balance (`amount_remaining`) per invoice; multiply by invoice count to scale.
Real World Strategies to Improve Days Sales Outstanding (DSO)
These practical moves reflect what competitive AR teams do to move Days Sales Outstanding (DSO).
- Use RuleKit to auto-send payment reminders before invoices reach 30 days outstanding.
- Segment customers by payment history and apply rule groups tailored to those cohorts.
- Offer installment rules for large invoices to accelerate short-term cash and avoid manual follow-ups.
- Review net term policies per segment so you know which cohorts drive long-tail DSO and keep the backlog visible.