Skip to main content

กำลังโหลด...

Southern Whale
Free SEO Audit
Tourism / Island Hopping / Activities Surat Thani Custom Booking Platform + SEO + Multilingual Content + Channel Manager Integration

Case Study: Surat Thani Island Hopping Platform — Cut Klook Commission, Self-Reliance to 65% Direct in 5 Months

Tour operator in Surat Thani province (client name withheld for confidentiality)

S
Southern Whale Team · Software + SEO Consultant
·
22% → 65%
Direct Booking Share
OTA dependency cut from 78% to 35% in 5 months
+2,840%
Organic Traffic
From 280 to 8,200 sessions/month (5 languages)
-72%
Admin Time
From 32 hours/day to 9 hours/day
0 incidents
Double-booking
After real-time inventory launch, zero overbookings

The challenge

The tour operator in Surat Thani was founded in 2015 by a Thai founder who spent 9 years as a dive instructor before launching his own business. Today they serve 80-150 customers/day across core services: island hopping (1-day), Ang Thong National Marine Park, snorkeling day trip, Full Moon Party transfer (speedboat + return), Diving course PADI Open Water + Advanced, sunset cruise. Team: founder, operations manager, admin, sales, guides + partner boat captains.

In discovery the founder shared the numbers: 2024 revenue THB 18.4M with very thin profit margin of just 11% — OTA commission topped THB 4.2M (23% of revenue). Klook commission 18-22%, GetYourGuide 20-25%, Viator 22-30%, Tiqets 18%, even the new Booking Experience at 20%. Worse, they had no own channel — Klook + GetYourGuide combined for 78% of revenue, the remaining 22% direct came from walk-ins + repeat customer word-of-mouth.

Operations were entirely manual. Admins took turns answering LINE OA from 9am to 11pm, handling 200+ messages/day. A shared Google Sheets held the schedule for boats + divers + tours — no locking mechanism, so double-bookings hit 4-6 times/week. One incident booked an Ang Thong tour for 8 people simultaneously when a boat holds 6 — they had to send 2 boats at extra cost while customers complained. The captain + guide schedule went through a daily WhatsApp group — guides had trouble finding their shifts in the morning.

Customers transferred PromptPay + an SCB account and sent slips that admin had to check one at a time in the bank app — 4-7 minutes per slip — across 80-100 slips/day, totalling 6-8 hours just on slip verification. Cancellations + reschedules went into a notepad + LINE chat without syncing to Excel; multiple complaints of being charged twice.

Most painful: no SEO at all. Searches for “island hopping Surat Thani” or “snorkeling tour Thailand” didn’t surface them even on page 5, despite 9 years in business — because no actual SEO-capable website existed (just the Klook-generated landing page + a Facebook page). 100% of traffic came from paid OTA platforms.

Why the previous solutions failed

The founder had tried 3 approaches, all unsuccessful. First: bought a SaaS tour booking system Bokun at USD 400/month + 2.9% commission per booking for 8 months in 2024 — the UI was admin-heavy Western design, the Thai team couldn’t use it fluently + it didn’t support PromptPay (only credit card + EU bank transfer) + the customer flow had 7 steps tanking conversion to 0.4%. After 8 months actual Bokun bookings totalled 24 vs Klook 1,200+.

Second: built a booking form on WordPress + Contact Form 7 + Stripe plugin for 4 months. Inquiry-based only — customer fills form → admin emails back → sends quote → customer wires → confirmation sent — 24-48 hours per booking. Customers stopped waiting and went to Klook for instant confirmation.

Third: hired a Bangkok agency to build new site + booking system for THB 280,000 over 4 months. Site shipped but the booking system had no real-time inventory + no Klook sync (no channel manager integration), producing constant duplicate sales — 10+ overbookings/week. After 2 months they rolled back to the old system, losing THB 280,000.

Common gap: agency + SaaS didn’t understand the specific complexity of a multi-island tour operator managing overlapping resources (the same boat used across multiple tours) + multi-channel inventory sync + multilingual customer (5 languages) + PromptPay verification. Every piece needed custom solution.

Southern Whale’s approach

After 4 hours of discovery + a shadow-day at the Surat Thani counter + sitting with ops for 2 days (6am boat dispatch + 11pm Full Moon pickup), we set four pillars.

Pillar 1 — Custom booking platform. Next.js 14 + tRPC + Supabase (PostgreSQL Singapore region) + Cloudflare Workers for edge functions + real-time inventory engine designed specifically for multi-resource scheduling. Database schema 24 tables (tours, resources [boats/guides/instructors], schedule_slots, bookings, customers, payments, slip_verifications, channel_inventory, channel_bookings, line_messages, whatsapp_messages, etc.). Real-time WebSocket broadcast + DB-level locking preventing race conditions. Multi-currency pricing (THB/USD/EUR/RUB/CNY/SGD). Read about our software development approach.

Pillar 2 — Multilingual SEO 5 languages. Astro frontend marketing site separated from the Next.js booking app (highest SEO performance on Astro). 5 languages TH/EN/CN/RU/DE for the core markets. RU is a growth market — Russian tourism into Surat Thani has surged since 2023. CN for the Chinese market returning post-reopening. DE for European tourists who own the diving market. Content hub of 25 starter articles (125 total versions). Every article implements Schema TouristTrip + Event + Product + FAQPage.

Pillar 3 — Channel Manager integration. Connected Klook + GetYourGuide + Viator + Booking Experience + Tiqets via a custom integration layer (not a generic channel manager that takes more commission). Real-time bi-directional availability sync (own platform ↔ OTA) — 100% protection against overbooking. Goal: reduce OTA dependency without cutting them off — use OTAs as marketing funnel + win repeat customers via direct.

Pillar 4 — LINE OA + WhatsApp + PromptPay slip OCR automation. LINE OA webhook + intent classification (rule-based + GPT fallback). Chatbot answers 18 top FAQs, escalating complex bookings to admin. PromptPay QR generator per booking + slip OCR via Google Cloud Vision API — confidence >90% auto-approves, <90% goes to manual queue. WhatsApp Business API for tour confirmation + reminder + post-tour review request. Booking confirmation push message with itinerary + map + emergency contact.

How we worked (week-by-week)

Week 1-3: Discovery + architecture + database design. 2 shadow-days (morning + night). Interviews with admin + sales + founder + operations manager + guides + captains. Mapped current ops flow end-to-end (28 process steps). Designed 24-table database schema. User journey maps for 6 personas (walk-in customer, repeat customer, group booking, agency, diving student, Full Moon party transfer).

Week 4-7: Backend core. Next.js + tRPC + Supabase scaffold. Authentication (admin tier, sales tier, guide tier, agency tier). Booking domain logic + multi-resource inventory lock. Payment integration: Stripe + Omise + PromptPay QR generator. Channel Manager integration layer (Klook API + GetYourGuide API + Viator API + Booking Experience API + Tiqets API). Critical unit testing: race condition booking, multi-resource conflict, channel sync conflict resolution.

Week 8-10: Frontend marketing site + booking app. Astro marketing site 32 pages (homepage, tour landing pages, island guide pages, blog, about, FAQ, contact, booking). Next.js booking app 12 pages (date picker, tour selection, guest info, add-on, payment, confirmation, booking lookup). Real-time inventory via WebSocket + Supabase Realtime. Multilingual setup 5 languages + hreflang + Cloudflare KV cache layer. Reshot 250 photos + 12 videos (drone, underwater, boat, sunset).

Week 11-12: LINE + WhatsApp + OCR + channel sync. LINE webhook + intent classification + chatbot FAQ. WhatsApp Business API setup + template message approval. PromptPay slip OCR pipeline + manual review queue. Booking confirmation flow LINE + WhatsApp + email. Channel Manager bi-directional sync testing.

Week 13: UAT + training + soft launch. Excel imported 12 months of legacy bookings (4,800 records). UAT with admin + sales found 14 critical bugs (6 high, 8 medium) fixed in 6 days. Trained the team across 6 sessions in Thai (1.5 hours each). Soft launch 50% traffic via feature flag for 4 days.

Week 14: Hard launch + monitoring. Full launch + 72-hour monitoring. Built SOP + runbook + 14 video tutorials. SEO content publish 12 starter articles. GBP optimisation + 50+ local citations.

Ongoing, months 2-6: Content production 4 articles/month × 5 languages. Weekly GBP posts. Backlink outreach + influencer partnerships across 8 languages. Channel Manager monitoring + commission optimisation. Bug fixes + small features + security patches.

Obstacles and pivots

Obstacle 1: Klook API rate limit on weekends. Weekend 1-3pm saw customer queries flood in at 5,000+ requests/minute; Klook rate-limit produced 90-120 second availability sync delays at times, risking overbooking. Pivot: implemented webhook-based sync instead of polling + queue mechanism + retry with exponential backoff + circuit breaker pattern. Sync latency cut to <3s p99.

Obstacle 2: OCR accuracy on old Kbank app slips at 78%. SCB + Krungthai slip formats were standardised and read at 93%+, but old Kbank app versions hit OCR confidence 60-70%. Pivot: added a manual review queue for slips below 90% confidence — admin clicks confirm with 1 button, 12 seconds per slip (down from 5-7 minutes) + trained an ML model on a custom dataset of 1,200 old Kbank slips, lifting accuracy to 89% after 8 weeks.

Obstacle 3: Founder wanted to keep Klook even as direct grew. Week 16 post-launch, direct booking +45%, the founder feared losing the OTA channel and considered cutting Klook listings on some tours. Pivot: we explained OTAs are a marketing funnel pulling first-time customers to the brand, then retargeting them to direct on the next trip. Strategy: maintain OTA presence + push direct booking via follow-up campaigns. The founder agreed + signed an extended retainer to build an “OTA-to-Direct conversion funnel”.

Post-launch and ongoing

5 months post-launch: direct booking share 22% → 65%; organic traffic 280 → 8,200 sessions/month (+2,840%); admin time down 72% (32 hours/day → 9 hours); double-bookings zero since launch; latest month revenue THB 2.8M from direct channel (vs baseline THB 380,000/month); commission saving THB 480,000/month; ROI break-even at month 9.

Lessons learned for Thai tour operators: 1) Custom platforms have higher ROI than SaaS once revenue exceeds THB 15M/year — break-even at 8-12 months. 2) The Russian market is severely underserved — no one in Surat Thani serves RU content; RU traffic + conversion exceeded forecast. 3) OTAs aren’t the enemy — they’re the funnel pulling first-time customers. 4) Real-time sync between direct + OTA is the single most important thing — one overbooking destroys customer trust that’s hard to recover. 5) PromptPay + slip OCR isn’t optional for the Thai market — 80% of Thai customers use PromptPay.

The client is in month 6 of retainer + has signed Year 2 + the founder is discussing Phase 2 to add a white-label platform for partner tour operators in Surat Thani using the same playbook. See other tourism case studies or our web development services.

S

About the Author

Southern Whale Team

Software + SEO Consultant

Have a similar project?

Free consultation · limited to 3–5 projects per month