Vercel vs Railway vs Hetzner — India MVP Hosting Cost & Latency (2026)
By Rohit Raj — Founding Engineer · 10+ yrs MVP shipping · LinkedIn
## TL;DR
For a typical India MVP at 100K monthly requests, Hetzner + Cloudflare wins on price at roughly ₹420/month all-in, Railway wins on developer experience at around ₹1,800/month with zero DevOps overhead, and Vercel wins on time-to-ship and Mumbai edge latency at ~₹2,800/month with the Pro plan. Skip Vercel if your function execution looks anything like a long-running background job — you will burn through compute hours before traffic justifies it. Skip Hetzner if your team has never run a systemd service. Default for the 6-week MVP playbook in 2026: ship on Vercel, plan a Hetzner migration for the moment monthly hosting crosses ₹15,000.
The short answer: Vercel sells you minutes saved per deploy, Railway sells you minutes saved per debug, Hetzner sells you rupees saved per month. At MVP scale (under 100K MAU), the cheapest one is whichever your team can operate without learning a new ops skill mid-launch. At growth scale (500K MAU+), Hetzner is the only one whose bill stops scaling with traffic.
The structural reason this matters in 2026: Vercel raised the Pro plan to $25/user/month and tightened function execution caps in Q4 2025. Railway added a Singapore region in February 2026, cutting India latency from ~280ms to ~75ms p50. Hetzner did NOT open a Mumbai DC in 2025 despite the rumor — their nearest region is still Hillsboro Oregon for India users routed through Cloudflare's Mumbai edge. The 2026 decision is no longer "Vercel or DIY" — it is "pick your trade-off axis: Mumbai latency, team cognitive load, or monthly cost."
The real cost math at 100K, 1M, and 10M requests per month
I ran this comparison last month for a SaaS client deciding whether to migrate off Vercel before their Series A. Their Next.js app does roughly 1.1M API requests/month, 320GB egress, and 18,000 serverless function-seconds across image processing and PDF generation. Here is the actual monthly bill on each platform at three scale points.
| Monthly load | Vercel (Pro $25 + usage) | Railway (Pro $20 + usage) | Hetzner CX22/CX32 + Cloudflare free |
|---|---|---|---|
| 100K req, 30GB egress, low compute | $25 base + $0 usage = ~₹2,100/mo | $5 included credit + $15 usage = $20 → ~₹1,700/mo | ₹420 CX22 + ₹0 Cloudflare = ₹420/mo |
| 1M req, 320GB egress, 18K func-sec | $25 + 220GB extra × $0.40 = $113 → ~₹9,500/mo | $20 + $35 usage (RAM-heavy) → ~₹4,650/mo | ₹720 CX32 + ₹0 Cloudflare = ₹720/mo |
| 10M req, 2.4TB egress, 180K func-sec | $25 + 1.6TB × $0.40 + 80K func-sec × $0.18 = $1,089 → ~₹91,500/mo | $20 + $180 RAM/CPU + $30 egress → ~₹19,300/mo | ₹1,400 CX42 + ₹0 Cloudflare (free up to 25M reqs) = ₹1,400/mo |
| 12-month total at 1M req | ~₹1,14,000 | ~₹55,800 | ~₹8,640 |
The 1M req column is where founders usually start asking uncomfortable questions in their Vercel dashboard. ₹1.14 lakh/year for a stack that fits inside a Hetzner box your dad runs his email server on is hard to justify when the same money buys an extra month of runway.
The Vercel egress line is the killer for content-heavy Indian apps. Vercel includes 1TB egress on Pro, then charges $0.40/GB. A photo-listing app like the one I helped a real-estate client build (think PropCheck-style listing pages) blew through 1TB in 11 days because Next.js Image optimization caches the rendered variants per device width — 18 variants × 8,000 listings × ~80KB average = 11.5GB per crawl, and we had Googlebot + Bingbot + Yandex hitting them every 6 hours. The bill went from $25 to $312 in a month before we put Cloudflare in front and dropped Vercel Image entirely.
The Railway column assumes you let it auto-sleep dev environments. Default Railway projects run 24/7, which is fine for prod but expensive for staging. Set PORT_TIMEOUT=300 on non-prod services and you cut that bill roughly in half. The math above assumes prod-only.
The Hetzner column assumes Cloudflare free tier in front for SSL, DDoS, CDN, and the Mumbai edge. That is the combo that makes the price math survive — Hetzner alone with no CDN ships from Hillsboro and you eat 220ms+ TTFB for Indian users. Cloudflare's free plan, which I have used on every Hetzner deploy I have shipped since 2022, terminates TLS in Mumbai and caches everything cacheable for free up to 100K requests/day per zone.
Mumbai latency truth — what the marketing pages do not say
Every hosting platform claims "edge network" or "global" or "low latency." Here is what I measured last week from my home connection in Bengaluru (Jio fiber, urban Tier-1 metro, 100Mbps line) hitting the same minimal /healthz endpoint deployed three ways. Three runs each, p50 reported.
| Stack | Cold TTFB (p50) | Warm TTFB (p50) | Region serving |
|---|---|---|---|
| Vercel Hobby, default region | 1,180ms | 92ms | sin1 (Singapore) — function; bom1 (Mumbai) for static |
| Vercel Pro, region pinned to bom1 | 410ms | 38ms | bom1 (Mumbai) — function + static |
| Railway, Singapore region | 380ms | 75ms | asia-southeast1 (Singapore) |
| Hetzner CX22 (Hillsboro) + Cloudflare in front | 290ms | 28ms | Cloudflare bom edge cached; origin hit goes to PDX |
| Hetzner CX22 (Helsinki) + Cloudflare in front | 310ms | 29ms | Cloudflare bom edge cached; origin hit goes to HEL |
Three things jumped out: First, Vercel Pro's bom1 region is genuinely the fastest cold start because it terminates the function in Mumbai instead of round-tripping to Singapore. If your app is heavy on first-request rendering (signup flows, OG image generation, dashboard initial load), this is real money you save in conversion. I measured this on the MyFinancial PWA when I moved it from default Vercel region to bom1 in 2024 — first-paint dropped from ~1.4s to ~620ms on a Jio 4G simulation.
Second, Hetzner + Cloudflare wins on warm requests because Cloudflare's bom edge caches everything cacheable and only the origin-miss requests pay the trans-Pacific cost. For a content-heavy site (blog, listing pages, marketing pages), this is the cheapest fast option that exists. The catch is that dynamic API responses cannot be edge-cached by default — they hit your Hillsboro origin at 230ms+ no matter what.
Third, Railway Singapore is fine for India but not great. 75ms warm is acceptable for a SaaS dashboard but you can feel the lag on every keypress in a typeahead input. For an app where every interaction matters (real-time collab, multi-step forms with autosave), Vercel Pro bom1 still wins. For an internal tool or batch-processing API, Singapore is plenty.
The honest answer for Indian apps in 2026: if your users are mostly metro Tier-1 (Bengaluru, Mumbai, Pune, Delhi, Hyderabad, Chennai), Vercel Pro pinned to bom1 is the fastest. If your users include Tier-2/Tier-3 (Kolkata, Indore, Coimbatore, Jaipur, Lucknow) where the last-mile is 4G-throttled anyway, the difference between 38ms and 75ms server-side disappears in the 60-200ms last-mile noise — pick on price.
Lock-in: what migration actually costs you
Cost and latency are the obvious axes; lock-in is the one founders find out about at 2am when the bill is unfixable. Migration cost is not the export tool — it is the percentage of your codebase that is tied to platform-specific primitives.
Vercel lock-in is the highest because Vercel's pricing model rewards Next.js features that only run on Vercel — Image Optimization, Edge Functions, Edge Config, ISR with on-demand revalidation, and the new use cache directive. Move off Vercel and you rewrite each one. When I migrated a fintech's Next.js app off Vercel to Hetzner in early 2026, the Image component alone took 11 hours to replace with a sharp-based custom resizer (we picked sharp + Cloudflare Polish to recover Vercel-equivalent quality). The full migration was 3 days of engineering for a 47-route app. Multiply that by your hourly rate; for a senior India dev at ₹2,500-₹4,000/hr, that is ₹60,000-₹96,000 of one-time cost.
Railway lock-in is medium. Your code is plain containers — Dockerfile or auto-detected Node/Go/Python build — and the platform-specific surface is just environment variables, secret injection, and the Railway-managed Postgres/Redis add-ons. Moving to Hetzner is: docker-compose.yml instead of Railway's service-graph, plus migrating the database (pg_dump | pg_restore over a maintenance window). I moved a Stripe-integrated billing service off Railway to Hetzner last month in 4 hours including the DB dump.
Hetzner lock-in is essentially zero because there is nothing to lock into — it is a VPS. Your docker-compose.yml, Caddyfile, and systemd units move byte-for-byte to any other VPS provider (DigitalOcean, Vultr, Linode, AWS Lightsail). The trade-off is that you took on the operational burden to escape vendor lock-in. You now own SSH key rotation, OS patching, log rotation, and backup verification.
I built MicroItinerary on Vercel because the AI-heavy itinerary generation flow needed serverless burst capacity and Edge Functions for the OG image previews shared on WhatsApp. The lock-in was worth it for that app — moving it would cost more than 18 months of Vercel bills at current scale. But MyFinancial sits on a Hetzner CX22 specifically because privacy-first finance data should not transit through any platform's Edge Function logging by default. The lock-in posture matches the trust requirement of each app.
Side-by-side comparison — what each platform actually does well
Strip away the marketing and three different products emerge. Pick the row that matches your real constraint.
| Dimension | Vercel Pro | Railway Pro | Hetzner + Cloudflare |
|---|---|---|---|
| Best for | Next.js MVPs needing fast deploy + Mumbai edge | Mixed-stack apps (Node + Python + Go) with zero DevOps | Long-running services, content sites, anything at scale |
| Time-to-first-deploy | 4 minutes (git push) | 6 minutes (git push) | 35 minutes (Coolify or Dokploy) — 2 hours fresh setup |
| Hidden cost | Function execution + Image Optimization + 1TB egress cap | RAM-hours when builds idle | None — fixed monthly bill |
| Cold start (India) | 410ms (bom1) | 380ms (Singapore) | 290ms (Cloudflare bom cached) |
| Free tier ceiling | Hobby: 100GB egress, no commercial use allowed | $5/month credit auto-applied | None (Hetzner CX22 = ₹420 floor) |
| DB included? | No — bring Neon/Supabase/Planetscale | Yes — managed Postgres, Redis, MySQL | No — install Postgres yourself or use managed (Neon/Supabase) |
| When the bill stings | Egress > 1TB or function-sec > 100K/mo | RAM consistently > 1GB on a single service | Never (price is fixed) |
| Support quality | Excellent (Pro) — discord + email | Good (Pro) — discord | Self-serve only — community wiki |
| Best one-liner | "Push and forget" | "Push and forget, on a budget" | "Pay rent once a month, run anything" |
Notable 2026 changes: Vercel's $25/user/month Pro plan now has stricter monthly compute caps; you pay overage at $40/100GB-hours of function compute. Railway added per-region pricing in March 2026 — Singapore is 8% more expensive than US-East but it is still cheaper than Vercel for most workloads. Hetzner expanded Cloud egress to 20TB free per server in late 2025, which makes it the only platform where high-egress workloads (video, image-heavy, blogs that get hit by AI scrapers) don't get cost-killed.
One detail nobody mentions: Vercel's free Hobby tier is explicitly NOT for commercial use per their TOS section 2.3 — if you ship paid product on Hobby, you are technically in violation. Most founders ignore this and never get caught, but if Vercel grows a billing-enforcement team in 2026, the cease-letter will land on apps doing 5-10K MAU on Hobby right when your founder-led-growth is starting to work. Railway's $5 credit covers the same use case legally.
When the alternative wins — picking honestly against my own preference
My default for a 6-week MVP is Vercel because shaving 2 days off the deploy story matters more than ₹1,500/month at week 4. But that default fails in three specific situations, and admitting it is the difference between a senior recommendation and marketing fluff.
Hetzner wins when your workload is "long-running" or "scheduled." If your app runs nightly scrapers, video transcoding, large CSV imports, or any kind of cron-style batch work over 60 seconds, Vercel will either time out the function or charge you for the entire duration. Railway handles it but bills RAM-hours aggressively. Hetzner runs a 4-hour scraper at the same flat ₹420/month as a 10-second one. I moved a real-estate listings ingestion pipeline (the kind of nightly scraper PropCheck-like apps need) from Vercel cron to a Hetzner CX22 + systemd timer last quarter; bill went from $87/month to $4.50/month with identical output.
Railway wins when your team is mixed-stack and you do not want to learn Vercel-specific patterns. If your backend is Python FastAPI, your worker is Go, and your frontend is plain React (not Next.js), Vercel is the wrong tool — you will spend more time fighting the Next.js opinions than you will save. Railway speaks Docker natively; deploy whatever you want. I shipped SanatanApp's backend services on Railway specifically because the Sanskrit text-processing service is Python and the API gateway is Go — Vercel would have been four awkward serverless functions instead of one container.
Vercel wins when you are pre-PMF and every conversion percentage point matters. Founder-led growth at 0→100 customers is bottlenecked by every friction point — signup completion rates, mobile checkout abandonment, OG previews that look broken on WhatsApp. Vercel's Mumbai edge + Image Optimization + automatic OG image generation + preview deployments for every PR is a real moat for non-technical co-founders who need to ship marketing experiments without engineering bottleneck. I would not pick Hetzner for the first 90 days of a B2C MVP even though it is cheaper.
The honest position is: price-optimize too early and you ship slower; speed-optimize forever and you go broke. Switch tiers when your monthly hosting bill crosses your founder-day rate (~₹15,000-₹25,000) — that is the moment a 1-day migration project pays for itself in 3 months.
Decision tree — pick in 60 seconds
Five questions, in order. Stop at the first yes.
- Is your team < 3 engineers AND you ship in the next 6 weeks? → Vercel Pro pinned to bom1. The 2 days you save on infra setup are worth more than ₹2,000/month at week 4. Plan to migrate at $200+/month bill.
- Is your stack mostly Python or Go (not Next.js)? → Railway Pro, Singapore region. Vercel is the wrong shape for non-Next.js workloads, and Hetzner adds an ops surface you do not need yet.
- Do you run nightly scrapers, video transcoding, or any job > 60 seconds? → Hetzner CX22 + Cloudflare. Vercel will time out or charge you. Hetzner does not care if the job runs for 4 hours.
- Is your traffic mostly content / blog / programmatic SEO pages? → Hetzner + Cloudflare. Egress is the killer on Vercel; Cloudflare's free CDN absorbs 95%+ of those requests at the edge.
- Is your monthly hosting bill > ₹15,000? → Plan a Hetzner migration this quarter. Once you cross ~3 days of founder time per month in hosting cost, the migration ROI is under 90 days.
Five-step migration checklist (Vercel → Hetzner) if/when you cross the threshold:
- Provision Hetzner CX22 + Cloudflare zone + Cloudflare Origin Cert (15 min)
- Install Dokploy or Coolify (PaaS-on-VPS, free, gives you Vercel-equivalent git-push deploys) (30 min)
- Rewrite Vercel-specific imports:
next/image→sharp+<img>; Edge Functions → regular API routes; Edge Config → Cloudflare KV (2-6 hours depending on app size) - Move env vars + secrets + connect domain via Cloudflare (15 min)
- Run side-by-side for 48 hours; flip DNS, monitor Sentry for regressions, kill Vercel project after 7 days quiet (1 hour active work)
Total migration time for a Next.js app under 50 routes: half a day to one full day. If it takes longer, you have more Vercel-specific code than you realized — pause the migration, audit, and decide if the rewrite cost is still worth the monthly savings.
Where this fits in the 6-week MVP playbook
Hosting is a Week 1 decision in my 6-Week MVP service, and we revisit it at Week 5 right before launch. The default I ship on for new clients is Vercel Pro pinned to bom1, with the DB on Supabase (which gives us Postgres + Auth + Storage in one ₹2,100/month bill). That stack gets you from git init to a publicly-shippable MVP at India-acceptable latency for under ₹4,500/month all-in.
If you are pre-MVP and shopping hosting decisions in isolation, you are probably optimizing the wrong thing — the difference between Vercel and Hetzner is roughly ₹2,500/month for the first 6 months of an MVP's life. That is genuinely smaller than one missed marketing experiment caused by an infra slowdown. Pick the platform that minimizes your founding team's distraction, not the one that minimizes the bill. Re-evaluate every 6 months — and if you want a working migration plan from one to another without losing a week to it, I run that engagement as a focused 2-week sprint for founders who have outgrown their starter stack.
