Switching Costs Are Dead: A 1-Day Yotpo → Idukki Migration, Hour by Hour
A real customer migrated from Yotpo to Idukki in eight working hours. Here is the hour-by-hour log, the unexpected snags, and what it means for SaaS lock-in in the review category.
SaaS lock-in in the review category used to be near-absolute. Yotpo, Okendo, Trustpilot, Bazaarvoice — all had historic migrations that took weeks of engineering time, brittle data exports, and inevitable review-content loss. By 2026 the picture has changed. Last month one of our customers migrated from Yotpo to Idukki in eight working hours, end to end. This is the hour-by-hour log.
The point of this piece is not vendor-vs-vendor. It is to argue that switching costs in the review category are now operationally trivial, which means platform choice should be evaluated on fit, not on lock-in fear.
The customer
Mid-market UK apparel brand, 18,000 historic reviews across 240 SKUs, Yotpo customer since 2020. Switching for AEO reasons: Yotpo's verified-buyer schema is shallow, the JS-rendered widget is invisible to agent crawlers, and the per-impression pricing was scaling badly. Engineering team of three; PM team of two.
The migration, hour by hour
Hour 0 — Pre-flight
Day before the migration: kick-off call, review the runbook, confirm DNS access, confirm Shopify admin access. 90 minutes total.
Hour 1 — Data export from Yotpo
Yotpo exports reviews via API. We pulled 18,000 reviews including ratings, photos, videos, replies, verification status. Total payload: 240MB. Export ran in 35 minutes; remaining 25 minutes spent validating the export against Yotpo's admin counts.
Hour 2 — Schema normalisation
Yotpo's export schema does not map cleanly to Idukki's. Our import tool handles the standard fields automatically (rating, body, author, date, SKU). Custom fields — Yotpo's "is_top_review", "is_helpful" counts, custom flags — we mapped manually via a config file. 50 minutes; 10 minutes left over for spot checks.
Hour 3 — Verified-buyer attestation
Yotpo's verified-buyer flag is email-based. Idukki re-runs the attestation against the merchant's OMS to upgrade to order-ID-linked verification where possible. 14,200 of 18,000 reviews (78.9%) upgraded to higher verification level. 45 minutes; the remainder is a wait-for-OMS task.
Hour 4 — Photo and video transcode
Yotpo stores photos and videos on its own CDN. We pulled all 4,200 photos and 380 videos, transcoded to Idukki's formats (WebP for photos, HLS for videos), and stored in our R2 bucket. Ran in parallel with hour 3; took 80 minutes total but mostly background.
Hour 5 — Shopify storefront integration
Remove Yotpo theme app embeds; install Idukki Shopify app; configure widget placement. The customer had 11 widget placements (PDP, category, homepage, checkout). 40 minutes to map and place; 20 minutes for QA on a preview theme.
Hour 6 — Schema and AEO wiring
Add Idukki's Review + AggregateRating JSON-LD to PDPs (server-side via Liquid). Wire up FAQPage component. Generate llms.txt. Submit updated sitemap. 50 minutes; 10 minutes for validator runs.
Hour 7 — Smoke test and DNS cutover
Run the test suite on a 5% traffic split. Check schema validates, widget renders, review counts match Yotpo's, photos and videos load. All green. Cut over the full traffic. 40 minutes; 20 minutes of monitoring.
Hour 8 — Final QA and Yotpo decommission
Final pass on edge-case pages (sale items, low-review SKUs, B2B SKUs with internal-only reviews). Disable Yotpo widget injection. Schedule Yotpo account cancellation for 30 days out (keeping read access to verify nothing regressed). 60 minutes.
The unexpected snags
Three things did not go smoothly.
- Yotpo's API rate-limited us during photo download. We had to throttle to 5 requests/second instead of 20, which added 30 minutes to the photo transcode step.
- 12 reviews had broken photo URLs in Yotpo's export (404s). We surfaced these in a "needs attention" report; the merchant decided to mark them photo-less rather than re-collect.
- Three of the 11 widget placements were in a custom theme section that needed minor Liquid edits. About 25 minutes of theme engineering not in the original estimate.
None of these blocked the migration. All three were anticipated by the runbook.
What changed after migration
Two weeks post-migration, the merchant reported:
- GPTBot fetches on PDPs up 8.2x.
- ChatGPT citations of brand SKUs up 4.4x (measured via 90 query test suite).
- AI-engine referral sessions up 3.1x.
- PDP conversion rate up 6.7% (likely from improved verified-buyer signal and surfaced photos).
- Total monthly review-platform spend down 38% (per-transaction pricing vs Yotpo's impression tiers).
Implications for SaaS buyers
Three takeaways for any DTC operator evaluating a switch.
- Demand a clean export API. If a vendor cannot provide one, treat it as a soft red flag during evaluation.
- Demand a migration runbook. The "we will help you migrate" line is meaningless without an hour-by-hour plan.
- Estimate the migration in hours, not weeks. Most review-platform migrations are now 1-3 working days end to end if the new vendor has competent tooling.
Closing
Switching costs are no longer a defensible reason to stay on a worse platform. The lock-in was always a function of bad tooling on both sides; both sides have improved. Evaluate fit, run the export-test in evaluation, and pull the trigger when the case is clear.
Related reading
The Death of Impression-Based Pricing: A Finance Director's Case
Impression-based pricing made sense when impressions correlated with funnel impact. They no longer do. A finance-director's argument for outcome-based commercial models in the agentic era.
Rights Clearance Is the Unsexy Moat: 3 Disputes We Won This Quarter
UGC rights management sits at the bottom of every operator's priority list — until it costs you a campaign or a brand. Three real disputes, how we resolved each, and the playbook that protects you.
What 8,400 UGC Pieces Told Us About Brand-Safe Content (Data Dump)
A full data dump from 8,400 user-generated photos, videos and reviews analysed for brand-safety signals. The patterns, the false positives, and the moderation thresholds that actually work.