13-Week Cash Flow Forecasting — Case Study

Processing Incoming Money From Customers

In Part 1, I sorted 44 customers by country and industry. No money was attached yet. In Part 2, real revenue gets added to each one. Once I did that, five things stood out. The biggest one: just 5 customers make up 77.5% of all the money coming in. That means a quiet month might not be random — it could mean one of those five customers paused.

By Andris Škutāns Incoming Cash Flow Forecasting Part 2 of 5

Part 1 covered how I sorted these 44 customers — country, industry, payment terms, how often they order. None of it had a euro sign on it yet. This part is different. Here, real revenue gets attached to each customer, pulled from 12 months of the general ledger. Some of it took real digging. Several customers had no country listed anywhere obvious. To confirm it, I traced a VAT number or opened old invoices by hand.

Finding 1: the business is far more concentrated than it looked

I added a "% of total revenue" number to each customer. One thing was obvious right away: the money was very concentrated.

RankCustomerRegion% of revenueRunning total
1Customer 39C01 - Central Europe21.9%21.9%
2Customer 09C02 - Northern Europe16.6%38.6%
3Customer 22C01 - Central Europe14.0%52.5%
4Customer 14C04 - Western Europe13.6%66.2%
5Customer 10C03 - East Asia11.3%77.5%
6Customer 38C05 - Central Europe5.0%82.5%
7Customer 34C01 - Central Europe3.7%86.1%
8Customer 13C06 - Eastern Europe3.5%89.7%
9Customer 18C03 - East Asia3.3%92.9%
10Customer 28Oceania0.6%93.5%

The top 5 customers made up 77.5% of all money received in 12 months. The top 10 made up 93.5%. That leaves 34 customers. Together, those 34 made up less than 7% of total cash in.

"If one or two of the top five customers pause ordering, this business doesn't have a quieter quarter. It has a cash event."
Why this number matters more than it looks

A general ledger export doesn't show this on its own. It only becomes visible once the data gets organized this way. A 13-week forecast should warn a business weeks before a shortfall — not confirm one after it already happened. A number like this shows exactly which five customer relationships that early warning depends on.

Finding 2: country concentration compounds the risk

Revenue was concentrated by country too, not just by customer.

Country - Region% of revenue
C01 - Central Europe39.6%
C02 - Northern Europe16.6%
C03 - East Asia14.6%
C04 - Western Europe13.6%
C05 - Central Europe5.0%
C06 - Eastern Europe3.5%

One country alone made up close to 40% of total incoming cash. The top three countries together covered almost three-quarters of it. Add this to the customer concentration above, and the picture is clear: this business's cash depends on a few relationships, in a few places. Better to know this before a regional slowdown or a currency shock hits — not after.

I also noticed that the company has almost no presence in several regions. Expanding into these markets could diversify revenue sources and reduce dependence on a small number of countries.

Finding 3: payment reliability was better than assumed, with clear exceptions

Every customer got a payment reliability score. 1 means very poor. 5 means excellent. The score came from real payment history, not from what the contract said.

ScoreCustomers
5 — excellent37
4 — good3
3 — fair1
2 — poor1
1 — very poor2

37 of 44 customers scored a 5. Most of this customer base pays reliably. This matches the prepayment pattern from Part 1. A small group scored 1 to 3. Those customers needed closer, individual attention — I didn't blend them into the "usually fine" average. This mattered for the forecast. For most customers, trusting the invoice due date was fine. For a few specific customers, I built in a real buffer instead.

Finding 4: exceptions were hiding in the accounts receivable balances

Most customers carried a zero AR balance. That fits a business built on advance payments. But two kinds of exception stood out. Both were worth showing on their own, not averaged away.

TypeCustomersShare of annual revenue
Owed to the business (AR debt)8about 4%
Paid in advance (overpayment)5about 8%
Not just a forecasting input

The 8 AR balances were tracked individually in a supporting list with the customer, amount, and expected payment date. The forecast itself still showed only one total per week. This lets each payment fall into the correct week and makes it easy to update the forecast when a customer pays.

The 5 overpayments represent cash already received but committed to future deliveries. If an order is cancelled, some of that cash may need to be refunded. That's a liquidity risk that should be tracked separately, not hidden inside the forecast.

Finding 5: not all future cash can be forecast the same way

Part 1 already showed how often these same 44 customers order. Most fell into a "every 2 to 6 months" pattern. The plan was to use this directly: know how often a customer orders, then pencil in the next order. That plan mostly didn't work.

A customer with no order in 9 months is a very different case from one who ordered last month. But neither one gets scheduled into the actual forecast on frequency alone. Both need something more solid first — a confirmed open order, or an issued invoice. Order frequency was useful for spotting customers worth reviewing, but not for forecasting cash in a specific week.

I found that incoming cash naturally fell into three groups. Each group needed a different forecasting method.

Three levels of forecasting confidence
Level What is known? How it is forecast
1. Known cash Confirmed customer orders, issued invoices, contract milestones or other evidence that payment is expected. Each receipt is entered individually with its expected payment date.
2. Likely future orders The sales team expects a deal to close, but it is not yet confirmed. Estimate the expected value using probabilities. For example, a €100,000 opportunity with a 70% chance contributes €70,000 to the forecast.
3. Unknown future orders No order exists yet. These are customers who place and pay for orders on the same day, so there is nothing to forecast individually. Use historical averages instead of guessing individual customers or dates.

For the third group, I separated historical receipts into two categories: cash linked to known orders or invoices, and cash that arrived without any prior evidence. Only the second category was used to calculate the average.

I calculated the average weekly receipts from these "unknown" orders over the previous 13 weeks. That average became the expected weekly cash inflow for this category throughout the 13-week forecast.

Every week, I remove the oldest historical week, add the newest actual week, and recalculate the average. As soon as an order becomes known, it leaves this statistical category and is forecast individually under Level 1. This keeps the forecast based on the best available information while avoiding guesses about customers or orders that do not yet exist.

Why this phase matters to a client

This step gives value on its own, even before the forecast exists. Some business owners may have never seen their customer base laid out this way. They usually learn something new — where the real dependency sits, which relationships actually carry the business, and which "regular" customers aren't as regular as they assumed. The forecast gets built on top of all this. But this table alone is often worth having.

This is Part 2 of a 5-part case study. Part 3 — building an engine that updates itself — will be published soon.


Frequently asked questions
A finding like "top 5 customers = 77.5% of revenue" is alarming — but what does a business actually do with it?+
This number helps management make better decisions. First, it shows where to focus. Losing a small customer has little impact. Losing one of the top five could seriously reduce revenue, so these relationships deserve more attention. Second, it helps identify which customers need extra protection. For example, the business might ask for larger upfront deposits or buy trade credit insurance, which pays if a customer fails to pay an invoice. Insuring every small customer is usually too expensive, but insuring the few customers that generate most of the revenue often makes sense. Third, it turns "we should diversify our customers" into something measurable. Check the percentage again after some time. If the top five customers still account for about 77.5% of revenue, the business is still highly dependent on them. If their share falls to, for example, 60%, customer diversification has improved.
If 37 of 44 customers scored a perfect reliability rating, why does reliability scoring matter at all?+
Because a few customers may make up most of the money. A customer who scores a 1 or 2 is not just "one bad customer out of 44." What matters is how much that customer buys. If a customer who buys very little has a payment problem, the forecast barely changes. If a customer who buys a lot has a payment problem, the forecast changes by a large amount. The real reason for the score is not to get one average number for all 44 customers. The real reason is to find out exactly which customers need a safety buffer built into the forecast.
Doesn't a big bank balance mean the business is doing well?+
Not by itself. A large balance can include money that isn't really free to spend — like the overpayments or advance payments. That money is already owed back, either as a delivery or as a refund. It may be reasonable to pay attention to large amounts of cash received as overpayments or advance payments.
How would a business know if it could actually cover a refund, if one of these prepaid orders fell through?+
Check whether that overpayment is still sitting as cash, or whether it's already been spent — on payroll, inventory, or other orders. If it's already spent, covering a refund means finding that cash somewhere else on short notice, maybe a credit line. That's worth checking before it becomes urgent, not in the middle of a dispute with a customer.
Since frequency alone isn't a strong forecasting signal, why bother tracking it?+
Because it's a good filter, even when it may be a poor predictor. A customer who ordered every month for a year, then went quiet for 9 months, is worth checking on — not to sell them something, just to find out what changed. A short email works fine: "we noticed it's been a while since your last order — is everything okay on your end?" That often gets a real answer: they switched suppliers, their budget got cut, or nothing is wrong and the next order is simply later than usual. Frequency is useful for deciding who to check on. The actual forecast number still needs something firmer and more current before it gets written into a specific week.