Case study: how a Bukit Kayu Hitam cross-border trading business replaced a 7-tab Excel with a custom inventory system
A 14-year Bukit Kayu Hitam cross-border trading business was running 2,300 SKUs and 3 currencies across 7 Excel tabs. We spec'd a custom inventory system with HS codes, dual-pricing, and a Kastam 2 export. The spreadsheet mess ended in week 2.

A 14-year-old cross-border trading business in Bukit Kayu Hitam — the main Malaysia-Thailand land crossing in Kubang Pasu, Kedah — was running 2,300 SKUs and 3 currencies across 7 linked Excel tabs to move consumer goods and hardware through the ICQS complex. We spec'd a custom inventory system with HS codes, dual-currency pricing, bonded-vs-released stock tracking, and a Kastam 2 export, deployed in 7 weeks. The spreadsheet mess ended in week 2. This is what it cost, what it did, and what your operation would pay.
The business
A 14-year-old cross-border trading business in Bukit Kayu Hitam, the main Malaysia-Thailand land crossing in Kubang Pasu, Kedah. Family-run — a husband and wife, two sons, a brother-in-law, and 7 warehouse and admin staff. They buy consumer goods, hardware, and small electronics from suppliers in Hat Yai and Bangkok, bring them through the ICQS complex, hold them in a small bonded warehouse 800m from the border, and sell on to Malaysian wholesalers across Kedah, Penang, and the Klang Valley. They also export a smaller flow of Malaysian-made goods — palm-oil-based cleaning products, processed food, small rubber components — back to Thai buyers in Songkhla and Phuket. Trade volume is roughly RM 3.2 million a year, in 3 currencies (THB, MYR, USD), across about 2,300 active SKUs. The operation was held together by 7 linked Excel tabs, a paper customs file, and one senior admin who had memorised most of the HS code list.
The problem they were actually trying to solve
The ICQS complex runs 24 hours. The trade doesn't pause for weekends, public holidays, or Songkran. The owners were profitable — but the operation behind the profit was a tangle of duplicate entries, missing customs codes, and one staff member who knew where every "in transit" pallet was by memory.
- Dual-pricing was everywhere, and nowhere was it consistent. A SKU of a Thai-made air-conditioner compressor had a THB purchase price, a USD reference price, a MYR wholesale price, and a MYR retail price — 4 prices in 4 tabs. The Excel formulas broke every time the bank rate moved more than 2%. The two sons spent 30 to 45 minutes a day reconciling.
- The HS code list was held in one man's head. Every SKU had a 10-digit Harmonised System code, used in the Malaysian Customs declaration (Customs Form 2 / Kastam 2). Out of 2,300 SKUs, the senior admin had memorised perhaps 800. The rest were looked up in a 2019 PDF. A wrong HS code on a 40-foot container could mean a RM 8,000 to RM 14,000 miscalculation — overpaid (losing margin) or underpaid (and a 6-month Kastam audit risk).
- Bonded vs. released inventory was invisible. Goods in the bonded warehouse hadn't paid duty yet. Goods that cleared customs were in the "MY-side" warehouse, ready to sell. The two pools were held in different Excel tabs, updated manually. The stock discrepancy rate was 6% to 8% per month — roughly RM 90,000 to RM 130,000 of inventory unaccounted-for at any given point.
The owner said on the first call: "We don't need a new website. We need the spreadsheet to stop lying. My sons spend half their day fixing what the spreadsheet broke the night before." That sentence is the brief.
What we built — and why this approach
A small custom inventory system, built around the way a Bukit Kayu Hitam cross-border trader actually moves goods, with four parts:
- A SKU master — one row per product holding the HS code (10-digit), the THB purchase price, the USD reference price, the MYR wholesale price, the MYR retail price, the per-unit weight and volume, the bonded duty rate (auto-looked-up from the HS code), and the standard container qty. The single source of truth.
- A dual-currency engine that pulls the daily MYR/THB and MYR/USD bank rate from a public feed, snapshots it at each transaction, and stores the rate alongside the transaction. The historical rate is never lost, so the P&L is reproducible.
- A bonded vs. released inventory tracker that splits each SKU's stock into two pools: bonded (duty unpaid) and released (duty paid, MY-side). When a customs release comes through, the operator scans the release note and the system moves the qty from bonded to released automatically.
- A Kastam 2 declaration export that builds the Malaysian Customs Form 2 from the SKU master + the inbound shipment data — the exact format the customs broker uploads. No re-keying, no HS code typos.
Why not a standard Malaysian accounting/inventory platform like SQL Account or MYOB? Because those systems are built for a single-currency domestic operation. They have a SKU, a cost, a sell price, and a stock count. They don't have bonded inventory, they don't have a daily-rate currency snapshot, and they don't speak Kastam 2. The off-the-shelf option was 6 months of "configuration" that would still leave the bonded/released split as a manual spreadsheet. That's the architect, not coder line we keep in the call — we spec the system around how the operation runs, not the other way around. The Kedah services page covers the same kind of build for other cross-border operations.
How the operation changed
Three concrete changes inside the first 3 months:
- The two sons stopped being Excel mechanics. The 30 to 45 minutes a day they spent reconciling price fields went to 5 to 8 minutes a week — checking the daily rate snapshot had pulled, and confirming the day's transactions posted. Roughly 6 hours a week recovered, redirected to supplier negotiations in Hat Yai and a new Penang wholesale account.
- The senior admin's HS-code-by-memory era ended. The 800 codes he'd memorised, plus the 1,500 he hadn't, are all in the SKU master with the duty rate auto-looked-up. The 2019 PDF is in a drawer. His role shifted from "the man who knew the codes" to "the man who runs the customs broker relationship."
- The monthly stock-take dropped from a 2-day exercise to a half-day. The bonded vs. released split, previously a manual cross-check, is now a single filter. The team counts, scans the SKU barcodes, and the system tells them where the discrepancy is in under 30 seconds.
The system also gave the business a real cross-border P&L — the THB-side purchase converted at the rate actually paid, the MYR-side sell at the price actually invoiced, the duty actually paid. Before, the P&L was an estimate. Now it's a number.
The numbers, four months in
We don't do client testimonials. We do numbers. The trading business's view, four months after the inventory system went live:
- Time on price/reconciliation work: 6 hours/week across 2 staff → under 1 hour/week. Roughly 5 hours a week recovered.
- Stock discrepancy rate: 6% to 8% per month → 0.4% to 0.8%. The unreconciled inventory of RM 90,000 to RM 130,000 dropped to under RM 15,000.
- Kastam 2 declaration prep time: 2 to 3 hours per shipment → 15 to 25 minutes. The customs broker uploads the file directly.
- Wrong-HS-code customs queries: 4 to 6 per quarter → 0 in the first 4 months. The auto-lookup means the duty rate is right at line-item level.
- Customs broker cost (re-keying time billed back): RM 1,200/month → RM 350/month. The broker bills less because they re-key less.
Total program cost: RM 38,000 to RM 52,000, spread across 7 weeks of build + 4 weeks of shadow mode + 4 weeks of post-handover tuning.
Payback: 4 months. Recovered staff time (RM 3,200/month), customs-broker saving (RM 850/month), and the new Penang account (RM 18,000/month) covered the program cost in 16 weeks. The owner is now in conversation with us about a small business automation layer on top — a daily P&L snapshot and an SMS alert to the customs broker when a new shipment is logged at the ICQS gate.
What it would cost for your business
We don't publish a price sheet, because the price depends on what you're running. Three honest bands:
- RM 25,000 – RM 48,000 (one-off) + RM 600 – RM 1,200 / month. A custom inventory + customs-export system for a 1 to 3-person cross-border trader with 500 to 2,000 SKUs, 2 currencies, and the Kastam 2 export. Includes the SKU master, the dual-currency engine, the bonded/released split, and 90 days of tuning.
- RM 48,000 – RM 95,000 (one-off) + RM 1,200 – RM 2,500 / month. A larger cross-border operation with 2,000 to 8,000 SKUs, 3 currencies, a multi-branch setup (Bukit Kayu Hitam + Alor Setar warehouse, for example), and the customs broker portal layer.
- RM 95,000 – RM 180,000 (one-off) + RM 2,500 – RM 5,000 / month. A multi-direction cross-border operation (Malaysia-Thailand plus Malaysia-Indonesia via Entikong or Malaysia-Singapore) with 8,000+ SKUs, full P&L across all directions, and a partner-portal layer for Thai or Indonesian suppliers.
These are the same bands we use for the Kedah services page and the Perak services page.
What this looks like for your business
If you run a cross-border trading business at Bukit Kayu Hitam, Padang Besar, Rantau Panjang, or Wang Kelian and the spreadsheet is now the bottleneck, this is the kind of build that's right for the operation. We don't sell a SaaS that "supports cross-border" as a checkbox. We spec a system around the actual flow of goods through the ICQS, the Kastam 2, and the bonded warehouse.
The next step is a one-hour call, no slide deck. You tell us what you're trading, what the current Excel setup looks like, and which customs forms you're submitting. We tell you whether the build is worth it at your current volume, or whether a smaller version will close the worst leaks. We won't pitch you either way. Get in touch and we'll set up the call.
If your bottleneck is the workshop floor or the service-counter side rather than the cross-border desk, our Sungai Petani workshop case study shows the build for a 3-branch automotive chain that lost 8 to 12 job cards a week. And for a smaller Kedah operation looking at automation, our Sungai Petani business automation case study shows the lighter-weight path. For the broader picture on what's worth building first in a Kedah SME, see AI for small business in Kedah: a no-BS overview.
About the author
The pitchdeck.my team
I run pitchdeck.my — fifteen years building custom software, automation, and AI tooling for Malaysian SMEs, from Alor Setar family businesses to KL fintech desks. Most weeks I’m scoping a new build, writing the spec, and shipping the first version with the founder.
- AI for SMEs
- Custom software
- Malaysian markets
- Business automation
Related builds
Get custom software in Kedah
Frequently asked questions
The first phase for the Bukit Kayu Hitam trading business was 7 weeks from kickoff to live, including a 4-week shadow mode where the system ran alongside the Excel sheets. A smaller 500 to 1,000-SKU operation can land in 5 to 6 weeks. Builds with the multi-branch warehouse and customs broker portal take 3 to 5 months for the first two phases.
The system includes a one-time HS code audit at the start of the build — we walk the SKU master with your senior admin (or customs broker) and confirm every code against the current Malaysian Customs HS code list. The build is not "trust the spreadsheet" — it's "audit the spreadsheet, then build the system around what's actually right."
Yes, on a delay. The system posts a daily journal entry (sales, purchases, duty paid, currency adjustment) into your accounting package via CSV export or a direct API where supported. The accounting package stays your source of truth for the P&L; the inventory system stays the source of truth for the SKU master, the bonded/released split, and the Kastam 2.
The build covers the Malaysian-side Kastam 2 import declaration. It does not generate the Thai-side declaration — that's a different format and a different broker relationship. The system records the export side for your own records; the Thai-side declaration is still produced by your Thai broker.
Tell us what you run.
We’ll spec the fix in a week.
Priced like a hire, not a project — around the cost of one admin a month. Most builds pay back in 30 days or less.
Get a build specMore for Kedah

Case study: how a 3-branch Sungai Petani workshop chain ended the lost-job-card problem with a custom system
A 3-branch Sungai Petani workshop chain was losing 8-12 job cards a week out of ~80. We didn't sell them a SaaS — we spec'd a custom job-card system. The lost-paperwork problem ended in the first fortnight.

E-invoice readiness for Malaysian SMEs: the 2026 LHDN mandate in plain language
What the LHDN e-invoicing mandate actually requires, when it applies to your business, the cheapest way to comply if you're a 5-person Kedah shop, and the 3-month countdown playbook.