Which customers stopped ordering this month?
By the Analistable team · Updated · 3 min read
List the customers in last month's export whose name or ID has no match in this month's export. In Excel or Google Sheets: =UNIQUE(FILTER(Aug[Customer], COUNTIF(Sep[Customer], Aug[Customer]) = 0)). In SQL it's a left join where the right side is NULL. In the example, Hart & Co and Kiln Studio ordered in August but not in September.
Part of our guide: How to answer questions across multiple spreadsheets
The data
| August: customer | Order | Amount | September: customer | Order | Amount |
|---|---|---|---|---|---|
| Bakery Lune | A1 | 120 | Bakery Lune | S1 | 130 |
| Hart & Co | A2 | 80 | Nordic Supply | S2 | 90 |
| Nordic Supply | A3 | 75 | Oak & Ash | S3 | 55 |
| Kiln Studio | A4 | 60 | Pine Co | S4 | 70 |
| Bakery Lune | A5 | 40 |
In a spreadsheet
=UNIQUE(FILTER(Aug[Customer], COUNTIF(Sep[Customer], Aug[Customer]) = 0, "Nobody"))COUNTIF counts each August customer in September's list; FILTER keeps the zeros; UNIQUE removes repeats (Bakery Lune ordered twice in August).
In SQL
SELECT DISTINCT a.customer
FROM aug a
LEFT JOIN sep s ON s.customer = a.customer
WHERE s.customer IS NULL;| Customer |
|---|
| Hart & Co |
| Kiln Studio |
Make it meaningful
- Use a customer ID or email, not a name — “Hart & Co” and “Hart and Co” would look like a lost and a new customer.
- Choose the window to fit your buying cycle. For customers who order quarterly, compare quarters, not months, or every quiet month looks like churn.
- Add what they spent before they stopped (
SUMIFSon the August amounts) and sort by it, so you call the biggest losses first. - For subscriptions, use the billing export's status instead: cancelled or past-due subscriptions are churn by definition.
Ask it in Analistable: “Which customers ordered in August but not in September, and how much did they spend in August?” The reverse question is finding new customers.
In Google Sheets
=UNIQUE(FILTER(Aug!A2:A, Aug!A2:A <> "", COUNTIF(Sep!A2:A, Aug!A2:A) = 0))The extra <> "" condition stops empty rows from appearing in the result when the ranges are open-ended.
Put a value on the lost customers
Aug spend =SUMIFS(Aug[Amount], Aug[Customer], A2)
Share =B2 / SUM(Aug[Amount])| Customer | August orders | August spend | Share of August revenue |
|---|---|---|---|
| Hart & Co | 1 | 80 | 21.3% |
| Kiln Studio | 1 | 60 | 16.0% |
| Total | 2 | 140 | 37.3% |
August revenue was 375 (120 + 80 + 75 + 60 + 40). Half the customers stopped, but they accounted for 37.3% of revenue — the revenue-weighted figure is usually the one finance cares about, while the customer count is what account managers chase.
Excel 2019 and older, without FILTER
In versions without dynamic arrays, add a helper column to the August table: =COUNTIF(Sep!A:A, A2). Apply an AutoFilter, keep rows where the helper is 0, and copy the visible customers to a new sheet. Use Data › Remove Duplicates on that list so Bakery Lune-style repeat orders don't appear twice. On a Mac the steps and menu names are the same.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| Every customer appears as stopped | September range points at the wrong column or sheet | Check the COUNTIF range really holds customer IDs |
| A loyal customer is listed | Trailing space or different spelling in one export | Compare on TRIM(LOWER(...)) or switch to an ID |
| Blank row in the result | Open-ended range includes empty cells | Add a condition that the customer is not empty |
| Too many stopped customers | Window shorter than the normal reorder gap | Compare quarters, or use days since last order |
Repeat it every month
- Keep each month's export in the same layout and add a Month column when you stack them, so the same query works for any pair of months.
- Record the count and value of stopped customers each month; one bad month is noise, three in a row is a trend.
- Check the result against the customer count: stopped + retained must equal last month's distinct customers (2 + 2 = 4 here).
- For a recency view that does not depend on month boundaries, see first and last order per customer.
Frequently asked questions
- How do I find customers who didn't reorder?
- Filter last period's customers to those with a COUNTIF of zero in this period's list, or use a SQL left join with WHERE right.key IS NULL.
- Is this the same as churn rate?
- Close: churn rate = customers who stopped ÷ customers at the start of the period. Here, 2 of 4 August customers = 50%.
- What if customer names are spelled differently?
- Match on an ID or email. If you only have names, clean them first or use fuzzy matching.