TURN Servers for Social, Dating & Community Apps

Make every match connect. Per-user shared-secret credentials. 1 TB free, 5 TB for $9/month — orders of magnitude cheaper than Twilio.

Two strangers, two NATs, one chance to connect

In a dating or community app, the magic moment is the first call. If it doesn't connect cleanly, the user blames your app and uninstalls. Most production teams discover the hard way that a meaningful share of mobile users sit behind carrier-grade NAT where pure peer-to-peer fails.

ExpressTURN already powers a long list of social and dating platforms — see the customer map on the homepage. The pattern is always the same: free tier covers development and early users; once revenue is coming in, $9/month for 5 TB pays for tens of thousands of call-hours.

Why social apps choose ExpressTURN over Twilio

  • Predictable cost. Twilio bills $0.40/GB. At social-app scale that becomes a four-figure monthly line item. ExpressTURN is $9 flat for 5 TB.
  • Per-user shared-secret credentials. Mint a fresh credential for each session — a stolen client bundle can't drain your account.
  • Global low-latency. 20+ regions; pick the closest to each pair of users.
  • Free tier survives launch traffic. 1 TB/month is roughly 4,400 fully-relayed video minutes-per-day before you need premium.

Per-user credential pattern

Static client-side credentials are fine to start. As you scale, generate per-session credentials server-side. The browser/app gets a short-lived username/credential pair valid for the duration of one call.

// Node.js example — your signaling server
import crypto from 'crypto';

function turnCreds(userId) {
  const ttl = 3600; // 1 hour
  const expiry = Math.floor(Date.now() / 1000) + ttl;
  const username = `${expiry}:${userId}`;
  const credential = crypto
    .createHmac('sha1', process.env.EXPRESSTURN_SECRET)
    .update(username)
    .digest('base64');
  return {
    urls: [
      'turn:relay1.expressturn.com:3478?transport=udp',
      'turn:relay1.expressturn.com:3478?transport=tcp',
      'turns:relay1.expressturn.com:443?transport=tcp'
    ],
    username, credential
  };
}

// In your "/api/start-call" route:
res.json({ iceServers: [
  { urls: 'stun:stun.expressturn.com:3478' },
  turnCreds(req.user.id)
]});

Bandwidth math

  • Standard 720p one-on-one call relayed: ~675 MB/hour (both directions combined).
  • 5-minute speed-dating session relayed: ~56 MB.
  • Premium 5 TB plan: ~89,000 5-minute relayed sessions per month.

FAQ

Why do social and dating apps need a TURN server?

Strangers connect from random networks; many sit behind carrier NAT where pure peer-to-peer fails. TURN is the rescue path.

How does ExpressTURN scale with growth?

5 TB premium covers tens of thousands of relayed call-hours. Beyond that, contact us for custom plans.

How do I issue per-user TURN credentials?

Premium accounts get a shared secret; HMAC-sign a username/expiry pair server-side. Each session gets a unique credential.

Will TURN add latency?

Only relayed calls go through TURN; they pick the closest of 20+ regions. Direct calls add zero.

Cheap enough to ship, reliable enough to scale.

Sign Up — Free 1 TB/month

Related: Multiplayer games · PeerJS recipe · vs Twilio