Travel · Comparison platform The Back End Behind a Travel Comparison Platform
vivi.city compares tours, tickets and activities from GetYourGuide, Viator, Tiqets and Musement in eight languages. On its custom Laravel platform we keep the supplier data flowing with a scheduled product sync and an automated location sync, reworked the filters and location tools, and opened the data up through a product API and a Google Things To Do feed.
- Laravel
- adminNova
- suppliers4 APIs
- languages8
- feedGoogle Things To Do
2026 · ongoingPhase 1 of the Things To Do feed built, next phases in progress
What changed
Supplier APIs in one sync week. GetYourGuide, Musement, Tiqets and Viator, one a day, plus manual sync per location.
Languages per location. Titles and descriptions now edited per language in the back end.
Feed for Google Things To Do. Phase 1 built: feed generator, POI mapping and a validation report.
A comparison site is only as good as its product data
vivi.city helps travellers find, compare and book tours, tickets and activities in eight languages. It runs on a custom Laravel platform with a Laravel Nova back end, and every product it shows comes from a supplier API.
Each product gets its own vivi.city ID and takes its name, main picture, price, duration and rating from the supplier. Products are attached to locations along the URL structure language / country / city / point of interest. When the data is late, wrong or hard to sort, the comparison stops working.
The front-end redesign of vivi.city is its own case study: Global Travel Comparison Platform Redesign.
- GetYourGuidemain partner
- Viatorthe largest
- Tiqetssupplier API
- Musementsupplier API
namemain picturepricediscounted pricedurationratingThree jobs for one back end
Bring the data in
Product and location sync from four supplier APIs, automatic and on demand.
Shape every location
Filters, display logic and editor tools so each city and POI shows the right products.
Send the data out
A vivi.city product API for widgets, and a Google Things To Do feed.
R1Scheduled product syncOne supplier per day, plus a manual sync per location or POI.R2Automated location syncReplace the costly manual runs on Google Cloud Platform.R3Viator API updateA high-level update of the Viator sync for full API compatibility.R4Filters & display logicA reworked filter system and product ordering, desktop and mobile.R5Location tools in NovaAttach products, top attractions, titles and descriptions per language.R6Product API & feedWidgets fed by vivi.city, and a feed for Google Things To Do.
Suppliers in, locations in the middle, three ways out
- Mon–
- TueGetYourGuide
- WedMusement
- ThuTiqets
- FriViator largest
- Sat–
- Sun–
One supplier a day, automatically. Viator, the largest, closes the week on Friday.
On demand, per location or POI$ php artisan products:sync <location> \
--supplier=viator
Data that arrives on time, locations the team can steer
From expensive manual runs to an automated job
The largest catalogue, on an up-to-date API
A high-level update of the Viator integration for full compatibility with its API, running in Friday’s slot of the sync week.
Top attractions pick themselves
Each location now carries a Top attractions module. It fills itself from the rules below – unless an editor sets it by hand.
1Only approved POIs2Each with 100+ products3At most 10 per locationorSet manually in the back end
- Filter system reworkDesktop and mobile, an on-sale button, and the option to exclude a filter or a single product from a location.
- Product display logicA new algorithm for which products show first.
- Search inside a locationFind a product without leaving the city or POI.
- Attach products to a locationAn easy way for the team to connect products and places.
- Titles & descriptions per languageA back-end page to edit them for each of the eight languages.
- Tour language & extra infoShown with each product.
- “No product found” pageFor locations or filters with no matching products.

The same products, on partner pages and in Google
A vivi.city product API
An API that returns vivi.city products for embeddable widgets – a test of whether vivi.city widgets in place of GetYourGuide’s help SEO and traffic.
- Returns
titleimagepricelink- Filter by
city / locationproduct IDs- Tracking
campaign parameters
A feed generator with a validation report
Tours and activities export to a Things To Do JSON feed, with POI mapping and a report that shows which products are ready and which need fixing first.
// one entry per product
{
"id", "title", "description", "image",
"city", "country", "related_poi",
"booking_url", "price", "currency", "option"
}
- Map POIsproducts to Google’s points of interest
- Validateready · needs fixing
- Exportthe JSON feed
Phase 1 built · next phases in progress
The quieter work behind a live platform
- Cache issuefixed
- Cloudflare IP whitelistset up
- NinjaFirewall & Sendyupdated
- Site down (error 500)fixed
- EarlierRedesign & Laravel upgradeThe front end and the Laravel core – separate case study.
- 2026Sync, filters & location toolsLocation sync, Viator update, filter rework, display logic, top attractions.
- Jun 2026Things To Do · phase 1Feed generator, POI mapping and validation report.
- NowNext phasesThe Things To Do feed and the widget test continue.
- Laravel
- Laravel Nova
- PHP
- Supplier APIs
- Google Things To Do
- Cloudflare
- NinjaFirewall
- Sendy
Running a platform on supplier data?
Syncs, APIs, feeds and admin tools – tell us what your platform needs and we’ll plan the back end with you.