ExpressTURN vs Twilio Network Traversal

$0.40/GB metered vs $9 flat for 5 TB. The same TURN protocol, very different bills.

TL;DR

Twilio Network Traversal is excellent infrastructure attached to Twilio's enterprise pricing. If you're already running on Twilio Programmable Video and need an SLA, stay. If you're building your own WebRTC stack and just need a reliable TURN relay, ExpressTURN delivers the same protocol for ~98% less.

Side-by-side

DimensionTwilio Network TraversalExpressTURN
Pricing modelMetered, ~$0.40/GB relayedFlat $9/month for 5 TB; free 1 TB tier
1 TB relayed cost~$400$0 (free tier) or part of $9 premium
5 TB relayed cost~$2,000$9
ProtocolStandard RFC 5766/8656Standard RFC 5766/8656
Global coverageMulti-region20+ regions
Auth methodsTime-limited tokens via Twilio APILong-term creds; shared-secret auth on premium
SLAEnterprise SLA availableNo formal SLA at $9
Setup time5 minutes (token API)5 minutes (credentials in dashboard)
Vendor lock-inTwilio account requiredStandalone, switch any time

Always check Twilio's current pricing page; rates and tiers change.

When Twilio is the right choice

  • You're already on Twilio Programmable Video / Voice and want one bill, one support contract.
  • You need an enterprise SLA with credits / penalty clauses.
  • Your finance team prefers fully metered usage-based billing for chargeback to internal teams.

When ExpressTURN is the right choice

  • You're building your own WebRTC stack (mediasoup / Janus / LiveKit / Pion / coturn) and just need a relay.
  • Your traffic is 100 GB to 5 TB/month — the sweet spot where Twilio's metered pricing stings most.
  • You want predictable monthly costs.
  • You can live without a signed enterprise SLA.

Migration: literally one config change

Both speak the same protocol. The browser does not care which TURN it talks to. Replace the credentials Twilio's API hands your client with the credentials from your ExpressTURN dashboard:

// Before (Twilio)
const token = await fetch('/api/twilio-ice').then(r => r.json());
const pc = new RTCPeerConnection({ iceServers: token.ice_servers });

// After (ExpressTURN)
const pc = new RTCPeerConnection({
  iceServers: [
    { urls: 'stun:stun.expressturn.com:3478' },
    {
      urls: [
        'turn:relay1.expressturn.com:3478?transport=udp',
        'turn:relay1.expressturn.com:3478?transport=tcp',
        'turns:relay1.expressturn.com:443?transport=tcp'
      ],
      username: 'YOUR_EXPRESSTURN_USERNAME',
      credential: 'YOUR_EXPRESSTURN_PASSWORD'
    }
  ]
});

For premium customers, swap the static credential for a fresh shared-secret credential on each session — see the secret-key examples.

Run them in parallel during your migration

Cautious teams often list both in iceServers for a week, then drop Twilio. ICE picks the best path; both work or one works, the call connects either way.

FAQ

What does Twilio charge for TURN?

Twilio Network Traversal is metered around $0.40/GB. Always confirm on Twilio's current pricing page.

How much could I save switching?

1 TB relayed = ~$400 on Twilio vs $9 on ExpressTURN's premium tier (which covers up to 5 TB). About 98% lower.

Is ExpressTURN as reliable as Twilio?

Production traffic since 2018, 20+ regions, no formal SLA at $9. Acceptable for most product teams given the cost gap.

Is the migration painful?

No. Both are standard TURN. One config change.

See your Twilio bill drop next month.

Sign Up — Free 1 TB/month

Related: vs self-hosted coturn · TURN for VoIP · TURN for streaming