Supabase Custom Domains vs Proxy: Which Fixes the India Block?

March 31, 2026 · 8 min read

⚠️ Context: Supabase is blocked in India since February 2026 (Section 69A). If you're here, your app's Supabase calls are failing for Indian users. This post compares two production-ready fixes: Supabase Custom Domains and a proxy.

Two real fixes keep coming up in every "Supabase blocked in India" discussion: Custom Domains (a Supabase feature) and a reverse proxy (Cloudflare Worker or similar). Both work. But they're very different in cost, setup time, and what they require from you.

Here's the honest comparison.

Quick Comparison

Custom DomainsProxy
Setup time30-60 min5-10 min
Code changesOne URL changeOne URL change
Cost$25/mo+ (Pro plan required)$0-5/mo
DNS setup needed?Yes (CNAME + verification)No (or your own domain)
Supabase planPro or higher ($25/mo min)Any plan (including free)
Latency added~0ms (direct to Supabase)~20-50ms (proxy hop)
MaintenanceSupabase manages itYou or a managed service
Works with free tier?NoYes

Option 1: Supabase Custom Domains

Supabase lets you map your own domain (e.g., api.yourapp.com) to your Supabase project. Instead of your app calling abc123.supabase.co, it calls api.yourapp.com — which resolves to Supabase's infrastructure but isn't on the blocked domain.

How to Set It Up

  1. Go to your Supabase dashboard → Settings → Custom Domains
  2. Enter your desired domain (e.g., api.yourapp.com)
  3. Add the CNAME record Supabase gives you to your DNS provider
  4. Add the TXT verification record
  5. Wait for DNS propagation (minutes to hours)
  6. Update your app's Supabase URL to use the custom domain
// Before
const supabase = createClient(
  'https://abc123.supabase.co',
  'your-anon-key'
);

// After (Custom Domain)
const supabase = createClient(
  'https://api.yourapp.com',
  'your-anon-key'
);

Pros

Cons

Best for: Teams already on a paid Supabase plan who own a domain and want a zero-latency, low-maintenance solution. If you're paying $25+/mo for Supabase anyway, this is the cleanest fix.

Option 2: Reverse Proxy (Cloudflare Worker / Vercel Edge)

A lightweight serverless function sits between your app and Supabase. Your app calls the proxy, the proxy forwards to Supabase, Supabase responds through the proxy. The ISP sees your proxy domain, not *.supabase.co.

How to Set It Up

Self-hosted (Cloudflare Worker — free):

export default {
  async fetch(request) {
    const url = new URL(request.url);
    const match = url.pathname.match(/^\/v1\/([^/]+)(\/.*)/);
    if (!match) return new Response('Invalid path', { status: 400 });
    
    const [, projectRef, apiPath] = match;
    const target = `https://${projectRef}.supabase.co${apiPath}${url.search}`;
    
    return fetch(target, {
      method: request.method,
      headers: request.headers,
      body: request.body
    });
  }
}

Then in your app:

const supabase = createClient(
  'https://your-proxy.workers.dev/v1/abc123',
  'your-anon-key'
);

Pros

Cons

Best for: Free-tier Supabase users, developers who need a fix in minutes not hours, and anyone who doesn't want to pay $25/mo for Custom Domains. Also the only option if you don't own a domain.

What About Other Workarounds?

VPN / DNS Change (1.1.1.1, 8.8.8.8)

Works for you during development. Doesn't work for your users. You can't ask every Indian user to install a VPN or change their DNS. This is a developer workaround, not a production fix.

SupaDNS

An open-source project that uses DNS-over-HTTPS to resolve Supabase domains. Clever approach, but it requires the JS library to be included in your client-side code, adding complexity. It also only works for DNS-level blocking — if ISPs are doing deep packet inspection, it may not help.

Move Server Outside India

If your backend is on an Indian VPS, moving it to Singapore or Frankfurt fixes server-to-Supabase connectivity. But it doesn't fix client-side calls from Indian browsers directly to Supabase. Only helps if all Supabase calls go through your backend.

Decision Matrix

Your situationBest option
On Supabase Pro+ and own a domainCustom Domains — cleanest, zero latency
On Supabase free tierProxy — only option that works without upgrading
Need a fix in under 10 minutesProxy — deploy a Worker, change one URL
Building a high-performance appCustom Domains — no latency penalty
Multiple Supabase projectsProxy — one proxy handles all projects
Don't want to maintain infrastructureCustom Domains or managed proxy
Budget-constrainedSelf-hosted proxy — $0 on Cloudflare free tier
💡 Pro tip: You can use both. Deploy a proxy immediately to stop bleeding users, then set up Custom Domains over the next few days as your permanent solution. Remove the proxy once Custom Domains is verified.

Don't Want to Self-Host a Proxy?

SupaRoute is a managed Supabase proxy. One URL change, $5/month, handles CORS/SSL/rate limiting. Works with any Supabase plan including free.

Get SupaRoute →

Related