How a Dhaka travel agency launched an OTA — and why it went B2B first
The agency has been running since the mid-2010s out of two rooms in Banani — call it "Meridian Travels". Six people. Air tickets, umrah packages in season, Cox's Bazar and Sylhet hotel bookings year-round, and a growing side business in Indian medical visas. Everything ran on WhatsApp, a shared Google Sheet, and one senior counsellor's memory of which hotel manager answers his phone after 9pm.
By any measure that matters to a bank, it worked. It just didn't scale past the six people, and it couldn't be sold, valued, or handed to anyone else.
The four things that actually forced the decision
- The inventory lived in one person's head. The senior counsellor knew which Cox's Bazar property would honour a rate in July and which would quietly re-price on arrival. When he took two weeks off for his brother's wedding, the agency's margin on hotel bookings visibly dropped. Nobody could explain why in numbers, only in anecdotes.
- Customers were arriving pre-shopped. Travellers turned up having already compared prices on international OTAs. The agency's only remaining lever was to beat a number it could see on the customer's phone. That's a losing position to negotiate from, and it compressed margins on exactly the bookings that used to be most profitable.
- The good local inventory was invisible. Houseboat operators on Tanguar Haor, small hill resorts in Bandarban, ship routes to Saint Martin — none of it is listed anywhere searchable. The agency could sell it, but only to people who already knew to ask. That inventory is the moat, and it was sitting in a WhatsApp thread.
- Visa work was drowning the counsellors. Roughly a third of staff time went to visa files, almost all of it status-chasing: "where is my file", "did the appointment get confirmed", "is the police clearance in". No customer could self-serve an answer, so every answer cost a phone call.
What they ruled out first
The owner spent about three months looking at options before committing to a platform build.
- White-label OTA (licence + revenue share). Fastest to launch — a working booking site in weeks. Ruled out on the thing that mattered most: the white-label products all model global chain-hotel inventory. There is no data model for "houseboat, two-day package, boat named Kadambori, operator confirms by phone." The agency's actual differentiator couldn't be listed on it.
- Affiliate / metasearch storefront. Cheapest by far. Ruled out because it makes you a referral link. The customer relationship, the repeat booking and the visa upsell all leave with the click.
- WordPress plus a booking plugin. Genuinely considered, and it would have got a site up. Killed on multi-currency and on the admin side: the plugin ecosystem assumes one property or one tour operator, not six verticals sharing a cart, an account and a wishlist.
- A full custom build, consumer-launch first. The default plan, and the one we talked them out of. Explained below.
Why B2B first — the part most OTA plans get wrong
Every OTA has a cold-start problem in both directions at once. Travellers won't come to a site with thin inventory. Properties won't give you inventory or rates when you can't show them bookings. The usual answer is to spend money on ads until one side tips, which is how most regional OTA attempts die.
The agency had something better than an ad budget: it already had a phone book of other travel agents. Small agencies all over Dhaka and the district towns were solving the same problem by calling the same hotels. They were, in effect, a demand channel that needed no marketing spend and no brand trust — they already knew the agency's name.
So the plan inverted. The platform launched to the trade first: agents log in, see negotiated rates, book on behalf of their own customers. Consumer traffic became a later phase rather than the launch.
Three things fall out of that decision, and they're the reason we'd recommend it again:
- Real bookings before any ad spend. Agent volume is lumpy but it's real, and it starts in week one instead of month six.
- Properties negotiate differently. "We send X room-nights a month through our agent network" is a conversation. "We're launching a website" is not.
- Agents are a brutal, free QA team. A consumer who hits a confusing checkout leaves silently. An agent who hits a confusing checkout calls you within four minutes and tells you exactly what's wrong, because they're mid-sale with a customer in front of them.
The cost of the inversion is that you build for a professional user first, and professional users want density, keyboard flow and rate detail — not the airy hero image a consumer site wants. Both surfaces have to exist eventually. Deciding which one gets built first is the actual strategic choice, and most plans make it by accident.
The build, in the order it happened
Phase 1 — inventory model before anything else
Not the homepage. Not the search bar. The data model.
The trap in a multi-vertical OTA is to model a hotel first and then bolt on the others, at which point houseboats become "hotels with a boat flag" and everything downstream — search, filters, cart, cancellation rules — inherits an assumption that's wrong for four of your six verticals. We spent the first stretch on a bookable-unit abstraction that a hotel room, a tour seat, a houseboat cabin, a ship ticket and a visa application could all satisfy, with vertical-specific fields hanging off it.
This is unglamorous and it's the single highest-leverage thing in the whole build. Everything after it is cheap; anything before it is rework.
Phase 2 — the admin back office
Also before the storefront. Rates, inventory, discounts, featured placements and site settings all had to be editable by agency staff without a deploy, because the alternative is a developer in the loop on every seasonal rate change. In a travel business, rates move weekly. A platform that needs an engineer to change a price is a platform that will be abandoned within a season.
Phase 3 — one vertical, end to end, for the agent channel
Hotels only. Search, detail, availability, book, confirm, cancel. No tours, no visas, no houseboats. Roughly a dozen friendly agents got access.
The first two weeks generated a long list of unglamorous corrections — rate display that didn't show the service charge the way agents quote it, a cancellation window that didn't match what the properties actually agreed to, a search that ranked by price when agents wanted to rank by which property answers the phone. All of it cheap to fix at one vertical. All of it would have been six times more expensive to fix after all six verticals shipped.
Phase 4 — the remaining verticals onto the same rails
Tours, houseboats, ship tickets, air tickets, visas. Because the abstraction from phase 1 held, each vertical was mostly content modelling and a vertical-specific detail page rather than a new booking flow.
Visas were the interesting one. The temptation is to build a full document-management system. What actually removes the load is much smaller: a status a customer can look at without phoning. Type, destination, stage, what's needed from you next. That alone takes most of the status-chasing calls off the counsellors.
Phase 5 — the consumer surface, and the SEO groundwork under it
Only once there was inventory worth landing on. Per-route titles and descriptions, canonical URLs, and structured data — TravelAgency, WebSite with a SearchAction, and a SiteNavigationElement list — so that brand searches have a chance of returning sitelinks rather than a bare blue link. Multi-currency, bilingual English and Bengali content, and a media CDN for the property galleries, because the consumer side lives or dies on mobile data.
What changed
- Inventory left the counsellor's head. Rates, terms and property contacts are records now. The two-week-holiday problem stopped being an existential one.
- The agent channel became measurable. Which agents book, what they book, at what margin. That's the first time the business could see its own demand rather than infer it.
- Local inventory became sellable to strangers. A houseboat package that previously required knowing whom to call is now a card with a price on it.
- Visa status calls dropped sharply. Not because the process got faster, but because "where is my file" became a page instead of a phone call.
- Rate changes stopped being engineering tickets. Seasonal re-pricing moved to the back office, where it belongs.
"We didn't need a website. We needed the business to exist somewhere other than in Rashed's phone."
— composite reflection from the owner
What we'd do differently
1. Sign the property agreements before building the property pages
We built listing pages capable of expressing rate rules the agency hadn't actually negotiated yet. Some of that flexibility turned out to be unnecessary, and some of it was subtly wrong because it encoded an assumption about how a rate would be structured. Contract first, schema second.
2. Ship the agent-facing rate sheet even earlier
For the first stretch, agents still called to confirm a rate they could already see on screen, because the screen didn't show it the way their quote sheet does. A boring, dense, printable rate view — built in the agents' own vocabulary — would have converted them off the phone faster than any feature we shipped that quarter.
3. Decide the promotional-numbers policy on day one
Placeholder stats — review counts, trips planned, destinations covered — get put on a homepage during design and then quietly stay there. They're a liability: they mislead partners, they can't be defended in a due-diligence conversation, and once real numbers arrive nobody can tell which is which. Either mark them clearly as illustrative or leave the space empty until the data is real.
4. Don't let the visa vertical ship with an empty state
A category tab that resolves to "nothing to show" reads as a broken site, not a coming-soon. Either hold the tab back until there's inventory behind it, or make the empty state an explicit invitation to the travel desk. An empty shelf in a shop you've just opened costs more trust than a shelf you haven't built yet.
The transferable lessons
- Model the bookable unit before you design a single screen. If houseboats and visas can't satisfy the same abstraction as a hotel room, you don't have a platform — you have four websites sharing a header.
- Build the back office before the storefront. Travel rates move weekly. Any pricing change that needs a deploy is a platform that gets abandoned.
- Solve the cold start with a channel you already own. If you have a trade network, B2B-first turns the chicken-and-egg problem into a sequencing problem. If you don't, that's worth knowing before you commit to an OTA at all.
- One vertical, end to end, before six. The corrections you get from real users on vertical one are the same corrections you'd otherwise pay for six times.
- Curation is the only defensible position against a global OTA. You will not out-inventory Booking.com. You can absolutely out-know it on Tanguar Haor.
One practical note for anyone in Bangladesh considering this: travel agency operation is a licensed activity, and the trade body — the Association of Travel Agents of Bangladesh (ATAB) — is the right first stop for the registration and compliance requirements. Sort out which licences the business needs before you write the checkout, because the answer shapes what you're allowed to sell online and who has to be named on the booking.
GoNStay — curated travel booking platform
Hotels, tour packages, houseboats, ship tickets, air tickets and visa processing in one booking flow. Live at gonstay.com, currently running B2B with travel trade partners.
See the GoNStay platform →Related reading: booking travel in Bangladesh online — what the big OTAs miss — the traveller-facing side of the same story.