Case study: how a Langkawi ferry operator ended the month-end invoicing fire with a small automation
A 12-year-old Langkawi ferry operator had 3 admin staff buried in month-end invoicing for 22 daily sailings and 4 agent chains. We built a small ticket-to-invoice automation. 10 weeks in, the month-end close dropped from 9 days to 38 hours and the owner stopped chasing payments.

The business
A 12-year-old family-run Langkawi ferry operator based out of the Kuah jetty, running 22 sailings a day across two routes during peak season — Langkawi to Kuala Perlis and Langkawi to Kuala Kedah — plus a third route that supports the Penang-Langkawi connection. Family ownership, 11 office and counter staff, 38 boat crew across the rotation, and 4 established travel-agent chains in Kuala Lumpur, Penang, and Singapore that account for roughly 38% of ticket volume. The owner-operator runs the business with his sister, who handles finance and admin.
This is the case study for the business automation side of what we do — a small, opinionated build for a Langkawi ferry operator that did not need "an enterprise ERP." It needed to stop the month-end invoicing fire before the sister quit.
The problem they were actually trying to solve
The operator was doing roughly 6,200 passenger tickets a month at peak season, 4,400 in shoulder season, and another 380 to 520 group and charter bookings on top. Every one needed an invoice — to the agent chain, to the walk-up counter customer who paid by bank transfer, to the corporate client who ran a quarterly team offsite, and to the small group of hotel concierges in Pantai Cenang and Tanjung Rhu who resold tickets on commission. The invoice flow, the payment-matching flow, and the agent-reconciliation flow were all done by hand, on a 2019 Excel sheet, a paper ticket stub file, a bank-statement PDF, and a WhatsApp thread with each agent chain.
By mid-2026, the month-end invoicing cycle was running 9 working days from the last sailing to the agent statements being signed off. The sister was logging 70+ hour weeks in the last week of every month.
"I have a folder on my desktop called 'month end fire.' It's 9 days of my life, every month, copying numbers out of Excel, into Word invoices, into the bank PDF, into WhatsApp. I have not taken a public holiday in two years. I am one bad month away from quitting."
Three concrete things the operator was losing money on:
- The agent chain reconciliation was leaking 3-5% of revenue. Every agent chain paid against its own ticket reference numbers, which never matched the operator's ticket numbers cleanly. The sister was chasing RM 18,000 to RM 26,000 a month in reconciliations, and a non-trivial share was just lost in the wash.
- Walk-up bank transfer customers were paying on day 1 but getting invoiced on day 14. A corporate group of 42 pax paid RM 4,200 on 14 February, the invoice went out on 28 February, and the final cost of the error was RM 320 in admin time and a strained relationship.
- The sister was the only person who could do the month-end close. The owner had no visibility into the operation's monthly P&L until the close was done — a 9-day decision lag on everything from agent margin to fuel hedging.
What we built — and why this approach
We built a small ticket-to-invoice automation sitting on top of the operator's existing ticketing system, banking feed, and the agent chains' WhatsApp groups. Three parts, deliberately small:
- A ticket-to-invoice bridge. Every sold ticket — counter walk-up, agent allocation, group booking, corporate charter — flows from the ticketing system into an invoice line item automatically, with the right VAT treatment, the right agent-chain code, and the right payment terms. The sister used to type 480 to 600 line items into Word invoices a day during peak. The bridge now produces the draft invoice, ready for a one-click send, in the same minute the ticket is sold.
- A bank-statement matching layer. Every inbound payment is matched to the open invoice on the strength of three signals: the bank reference number, the amount, and the agent-chain or counter name. The 3-5% reconciliation leak dropped to 0.4% within the first month. Anything the matcher can't resolve — about 6-8% of payments — gets a one-screen queue for the sister to clear in 10 to 15 minutes a day, rather than 2 hours.
- An agent-statement generator. At the end of every month, each of the 4 agent chains gets a statement of tickets issued, payments received, balance due, and the disputed lines, sent to their WhatsApp and email.
Why not just upgrade the ticketing system? Because the ticketing system was doing its job — selling tickets. The pain was the gap between the ticketing system and the invoice. The fix was a 3-part automation that took 7 weeks to ship, not a 4-month ticketing platform migration. We chose this over the obvious Malaysian accounting SaaS because the SaaS would have done 70% of the work and the sister would still have been hand-keying the 30% it couldn't see.
The Kedah services page covers the same kind of build for other Langkawi, Alor Setar, and Sungai Petani operators with similar back-office pain, and the Kedah business automation track goes deeper on the gap-closing automation side.
Total build: RM 18,500. Ongoing retainer for the workflow maintenance and small additions: RM 1,400 a month.
How the operation changed
The sister's working week changed shape inside the first month. The 70-hour week in the last week of every month is gone. The new shape is roughly 45 minutes a day on the unmatched-payments queue, 30 minutes on the corporate-invoice escalations, and 2 hours on the last business day of the month to sign off the agent statements. The rest of the time, she is back doing what she was hired to do: managing the agent relationships, the corporate clients, and the day-to-day counter escalations. She took her first public holiday in 2 years in late July.
The owner got a different change. He now has a live P&L view on his phone — 5-day revenue, agent mix, outstanding receivables, and the day's ticket volume — that updates every 15 minutes. The 9-day decision lag on agent margin and fuel hedging is now 15 minutes. The owner has used the visibility to renegotiate two agent-chain terms that were losing the business money.
The counter team changed too, in a smaller way. They used to phone the sister 3-4 times a day to confirm whether a walk-up transfer had landed. The bank-matcher's "paid / not paid" status is now visible on the same counter screen the ticket sale is keyed into. Counter escalations on payment status dropped from 12 a day to under 2.
The numbers, ten weeks in
We don't do client testimonials. We do numbers. The operator's view, ten weeks after the automation went live:
- Month-end close: 9 working days → 38 hours. The sister reclaimed roughly 38 working days a year of her own time.
- Agent-chain reconciliation leak: 3-5% of revenue → 0.4%. The RM 18,000 to RM 26,000 a month in chase money dropped to RM 1,800 to RM 2,400 a month — roughly RM 192,000 to RM 278,000 a year recovered to the bottom line, on an operation that does RM 7.8 million a year in ticket revenue.
- Walk-up bank transfer invoice lag: 14 days → same-day. The corporate refund request class of problem dropped from 1-2 a month to 0 in the first quarter.
- Agent statement cycle: 9 days after month-end → 1.5 days after month-end. The 4 agent chains now receive them on day 2 of the new month, every month, without exception.
- Sister's month-end overtime hours: 56 → 6. The single biggest quality-of-life win in the build.
- Owner P&L visibility lag: 9 days → 15 minutes. Agent-margin and fuel-hedging decisions are now made on current data.
Total first-phase cost: RM 18,500. Payback: 11 weeks. The first 11 weeks of reconciliation-leak reduction alone covered the entire program cost.
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 for a Langkawi, Alor Setar, or Sungai Petani operator with similar back-office pain:
- RM 14,000 – RM 28,000 (one-off) + RM 800 – RM 1,800 / month. A ticket-to-invoice bridge + bank-statement matcher for a 1 to 2-route operator with 2 to 4 admin staff, 1 to 2 agent chains, and the existing ticketing + bank feed already in place.
- RM 28,000 – RM 55,000 (one-off) + RM 1,800 – RM 3,500 / month. A multi-route operator with 3 to 6 routes, 4 to 8 agent chains, a corporate-bookings side, multi-currency support (MYR / SGD / IDR), and a corporate-invoice escalation queue.
- RM 55,000 – RM 110,000 (one-off) + RM 3,500 – RM 6,500 / month. A multi-modal operator (ferry + speedboat + charter) with 8+ agent chains, 2 currencies, a partner-allocator side, an on-the-water operations layer, and a finance-team handoff.
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 Langkawi, Penang, or Kota Kinabalu ferry or speedboat operator and the month-end invoicing fire is eating your finance team's life, this kind of build is the right first move. We don't sell an enterprise ERP. We build the smallest gap-closing automation that takes the ticketing output and turns it into invoices, matches the bank feed, and signs off the agent statements — without the sister working 70 hours in the last week of the month.
The next step is a one-hour call, no slide deck. You tell us your ticket volume, your agent-chain mix, your current month-end close time. We tell you whether a small ticket-to-invoice bridge is the right answer, or whether the bigger ERP migration is the right move. We won't pitch you either way. Get in touch and we'll set up the call.
If the bottleneck is the agent-reconciliation side, our KL services firm 4-workflows case study shows the same pattern for a 40-person firm. If the bottleneck is the end-of-month accounting close, our Ipoh accounting firm case study shows the document-AI build that cut end-of-month work from 12 days to 4. And if your operation is about the order-fulfilment clock, our Taiping auto-parts case study shows the same automation pattern.
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 automation in Kedah
Frequently asked questions
No. The ticket-to-invoice bridge sits on top of your existing ticketing, not in place of it. The build reads your ticket output, doesn't touch the system that produces it. A typical ticketing migration takes 4-6 months and touches every counter; this build takes 7 weeks and touches none of the counter workflow. The most we ever do is add a small webhook or a daily export.
The first 1-2 month-ends after go-live are still slow — the matcher is learning the agent-chain reference patterns and the sister is still approving most things manually. By month 3 the close is materially shorter. By month 6 the close is at its steady state. The 9-day-to-38-hour number is the steady state at 10 weeks.
The matcher works on the agent-chain code, the bank reference, the amount, and the counter walk-up name. It does not read, store, or surface the customer's IC number, full address, or any other PDPA-sensitive field. The build is reviewed against the PDPA 2010 personal-data processing principles before go-live, and data retention is set to 7 years to match the operator's invoice retention.
Yes. The same three-part build works for any operator that issues tickets and reconciles against agents or corporate clients. A Langkawi speedboat on the Kuah to Pulau Payar route is structurally the same problem. A Penang water-taxi to the mainland is the same problem. The price band scales with ticket volume and agent-chain count, not with the vessel type.
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 Sungai Petani electrical goods retailer cut stocktake from 2 days to 4 hours with a simple automation
A 3-branch Sungai Petani electrical goods retailer was spending 6 days a month on stocktake. We didn't sell them an ERP — we wired their barcode scanner to their POS and built a reconciliation script. Here's what it did.

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.