5 sales files
Daily, city-level from three quick-commerce apps; monthly from one marketplace; a 12-line summary from the fifth.
Case study
Online sales and purchase-order fill-rate reporting for an FMCG confectionery brand selling on five quick-commerce and marketplace platforms.
Built on a real client's data. Client, brand, staff and distributor names are removed, products are named by type, and money and unit figures are rounded.
The engagement
A confectionery brand with four sub-brands — crackers, chocolate sticks, coffee candy and biscuits — sold on Blinkit, Zepto, Swiggy Instamart, Flipkart and BigBasket.
Distributors supply the platforms’ warehouses: 27 of them, under 7 sales territories. Each platform raises purchase orders (POs) and reports sales its own way.
Nobody had one view of the month: what sold, where, and how much of what the platforms ordered was actually supplied.
01 · What we received
5 sales files
Daily, city-level from three quick-commerce apps; monthly from one marketplace; a 12-line summary from the fifth.
4 PO files
Every purchase order the platforms raised in the month, and how much of it was received.
45 tabs
Too many rows for anyone to check by eye, and no two files built the same way.
| Platform | Rows | Units column | Value column | Date column | City column |
|---|---|---|---|---|---|
| Blinkit | 55,772 | qty_sold | mrp (MRP value) | date | city_name |
| Zepto | 26,658 | Quantity | GMV | Sales Date | City |
| Swiggy Instamart | 58,654 | UNITS_SOLD | GMV | ORDERED_DATE | CITY, lower case |
| Flipkart | 3,447 | Units | Values | Month, as text | City or state |
| BigBasket | 12 | Sum of Total_quantity | Sum of Total_sales | none | none |
The four PO files added 6,240 more lines, with 21 different status words between them: COMPLETED, Expired, PENDING_GRN, approved…
02 · What they needed
Sales head
One number across five platforms, split by sub-brand, platform and city.
Territory managers and distributors
Fill rate by platform, territory, distributor and SKU.
Supply chain
Unfilled PO value, expired POs, and the SKUs and distributors behind them.
Everyone
Same rules every month, one refresh, and totals that match the platforms’ own files.
03 · Problems in the data
Problem 1
Problem 2
Problem 3
Always tie a report’s totals back to the raw sheet.
The best-selling product, a pack of cheese crackers, appeared under 10 different names across the sales and PO files. Six of them, brand removed:
| Where | Name as sent |
|---|---|
| Platform 1 · sales | Cheese Flavoured Cracker Biscuit - Family Pack 150 g |
| Platform 1 · PO | Cheese Flavoured Cracker Biscuit - Family Pack(Pouch) |
| Platform 2 · sales | Cheese Crunchy Layered Crackers 144.0 GRAM |
| Platform 2 · PO | Cheese Crunchy Layered Crackers - 1 pack (144 g or 150 g) |
| Platform 3 · sales | Cheese Cream Cracker Biscuit 144 g |
| Platform 4 · sales | Cheese Crunchy Layered Crackers |
04 · What we fixed
| Problem | What we did | Check |
|---|---|---|
| 12,866 blank rows | Removed, after confirming they carry no quantity or value | Totals tie to the platforms’ own summary sheets |
| Text dates and month labels | One calendar table: date, month and trade week | Every file filters and sorts by real dates |
| 96 product names | SKU master: each platform name mapped to 12 sub-brands | One brand view across all five platforms |
| 46 distributor spellings | Distributor master: 27 distributors under 7 territories | POs with no territory column now have an owner |
| 21 PO status words | A rule for Open vs Closed; fill rate on closed POs only | One platform reads 64.5% filled, not 47.5% with open POs mixed in |
| 500 city spellings | City master: bangalore to Bengaluru, Gurgaon to Gurugram | 399 clean cities for the city ranking |
| Stale pivots | One data model feeds every report | The missing ~₹52 L month is back in the total |
The masters are the real work. A name mapped once stays mapped, so next month's refresh only deals with what is new.
05 · The report
Platform, sub-brand and sales territory, so each manager sees their own slice of the same numbers.
Territory by platform. The red cells are where to follow up first.
The top 10 cities bring 58.5% of sales.
A monthly shortfall report — ordered vs supplied, and what it cost — and a weekly PO pack by territory, distributor and SKU.
06 · What to do next
Decision 1
Platforms ordered about 4.7 lakh units; only 6.8% were supplied. Around ₹2 Cr of orders missed, on all four platforms that raise POs.
Next. Supply chain: check production and allocation before more POs expire.
Decision 2
The cheese crackers are 51% of sales, yet 39% of their ordered quantity was not supplied — about ₹1.6 Cr, most of it on one platform.
Next. Sales head: priority stock for the two biggest quick-commerce warehouses.
Decision 3
One territory filled 45% and carried the biggest unfilled value. Another had no territory manager at all, and one platform there filled 8%.
Next. Regional sales: name an owner for the uncovered territory; a weekly review with the weakest territory’s top 3 distributors.
Decision 4
486 POs expired in the month with about 7 lakh units never supplied — roughly ₹3 Cr.
Next. Territory managers: a daily open-PO list, sorted by expiry date.
How it runs from next month
This case study uses a real client's data with their identity removed: no client, brand, staff or distributor names, products named by type, the month left out and money and unit figures rounded.
We will show you your own before and after — what is wrong with the files, what we would fix, and the report your team would open every month.