Blog
How a Surabaya Distributor Replaced 3 Tools with One Custom App
A 35-person FMCG distributor in Surabaya was juggling three SaaS tools that didn't talk to each other. Here's what one custom app changed.
- narrative
The operations director at a 35-person FMCG distributor in Surabaya laid out the problem in a single sentence: “My team is paid to sell things, but they spend half their day reconciling between three different systems.”
The systems in question: a SaaS CRM (HubSpot, configured), an off-the-shelf inventory tool, and a homegrown spreadsheet operation that tracked which sales rep was assigned to which retailer in which area. None of the three talked to the others. Sales reps had to log a customer visit in the CRM, update inventory commitments separately, then maintain the assignment spreadsheet so the manager knew who was covering where.
Eight weeks later, all three were replaced by one custom application. Here’s what we did and what it took.
The starting picture
A two-week diagnostic showed the cost more clearly:
- Each sales rep: 1.5–2 hours per day on system reconciliation. Across 14 reps, that’s 21–28 hours per day burned.
- Manager: 6–8 hours per week pulling reports across the three systems and merging in spreadsheets to answer basic questions like “which territories are under-covered?”
- Inventory commitments: 12–18% of orders had at least one mismatch between what the rep promised and what inventory actually allocated. Each mismatch cost 30–60 minutes of customer service rework.
The cost wasn’t just labour. The CRM was Rp 18 juta/year. The inventory tool was Rp 28 juta/year. The spreadsheet operation was free, but it was also where most of the errors lived.
Total annual cost of the three-tool stack: roughly Rp 46 juta in subscriptions, plus the staff time, plus the error rework.
What we built
A single application that combined the three workflows. The shape:
- Customer database: every retailer in their territory, with contact info, location, current credit terms, historical orders, and assigned sales rep.
- Visit logging: sales reps log visits on their phone in 30 seconds — what was discussed, what was committed, follow-up needed.
- Inventory commitment: when a rep commits to delivering 200 cartons of product X next Tuesday, the system reserves the inventory at the moment of commitment, not when the formal order arrives.
- Territory dashboard: the manager sees coverage, reassign reps, identify under-covered retailers, all in one view.
Built on a fairly standard modern stack: Next.js frontend, Supabase backend (Postgres + auth + real-time), Cloudflare for hosting and assets. The whole thing ships in 8 weeks at Rp 145 juta total.
We didn’t build a CRM. We built the specific workflow this distributor had, in the specific shape they needed.
What we kept off-the-shelf
Two things explicitly didn’t move into the custom app:
- Accounting stayed in their existing tool (Accurate). The custom app posts orders to it via a small integration, but accounting itself is never custom for this scale of business.
- Email and document storage stayed in Google Workspace. Reinventing email is a category error.
The principle: only custom what’s actually specific to this business. Everything generic stays SaaS.
What changed at week 12
Numbers four weeks after final go-live:
- Sales rep time on reconciliation: down from 1.5–2 hours per day to about 15 minutes. Reps spend the recovered time on actual customer visits.
- Manager reporting time: down from 6–8 hours per week to under 1 hour. The dashboard answers most questions automatically.
- Inventory mismatch rate: down from 12–18% to under 3%. The remaining mismatches are mostly genuine inventory shortages, not system gaps.
- Annual SaaS cost: dropped from Rp 46 juta to Rp 9 juta (just accounting + Google Workspace). Net savings Rp 37 juta/year.
The biggest unexpected win was data quality. With three systems, no one trusted the numbers. With one system, the manager started making territorial decisions based on data instead of intuition. Sales coverage in two specific districts shifted within three months and revenue from those districts grew about 18%.
What didn’t go to plan
Two things, worth being honest about.
The first was the territory boundaries. The original spreadsheet had implicit knowledge baked in — district assignments that didn’t match administrative boundaries because they reflected actual logistics realities. The first version of the custom app forced reps into administrative districts, which broke their actual routing. We had to add a “custom territory” feature that let the manager draw arbitrary geographic shapes. Two weeks of unplanned work.
The second was offline support. We assumed the reps would have internet on their phones during visits. They mostly did, but in a few rural areas they didn’t, and visit logs got lost. We added an offline-first mode that synced when connectivity returned. Another week.
Both were issues that better discovery would have caught. Now they’re standard questions in our scoping process.
What it cost in total
- Build: Rp 145 juta over 8 weeks
- Discovery: Rp 12 juta over 2 weeks (already counted in build above)
- Hosting and services: Rp 1.8 juta/month ongoing
- Maintenance retainer: Rp 8 juta/month for 12 hours of work per month plus on-call
Annual operating cost: Rp 117 juta. Compared to Rp 46 juta for the SaaS stack plus the staff time and error rework, the math worked within 4 months.
What we’d recommend to similar distributors
Three patterns that consistently work:
- Don’t try to replicate a CRM. Build the workflow you actually have, not a clone of HubSpot.
- Keep accounting separate. It’s the one system that should never be custom for distribution scale.
- Plan for the offline edge cases. Indonesian field sales often happens where connectivity isn’t reliable. Build for it from the start.
If you’re running a distribution operation with multiple disconnected systems and the math is starting to feel similar, an hour of conversation usually clarifies whether a custom build fits. We do those at no cost.