
Key takeaways
• WebRTC build vs buy is a timing question, not a religion. A managed SDK wins the first 18 months. A custom self-hosted stack wins later, once your usage clears roughly 1M participant-minutes a month.
• Judge it on total cost of ownership, not sticker price. SDK TCO is build plus per-minute fees plus the vendor pivot you don’t control. Custom TCO is build plus infra plus the on-call rota. The curves cross near 1M minutes.
• Five signals say migrate. SDK fees past $30K a month, vendor roadmap whiplash, a compliance gap, quality complaints from your best accounts, and a team that can actually run an SFU.
• The hybrid path is the cheat code. Ship on LiveKit Cloud, keep the same code, and self-host on LiveKit OSS when volume earns it. You pull the cost lever without a rewrite.
• Migration is a 6–12-week project, not a year. We’ve done OpenTok→mediasoup and Twilio→LiveKit; our Agent Engineering process trims the calendar 25–40% versus a traditional outsourced shop.
Why Fora Soft wrote this playbook
Most WebRTC build vs buy articles answer the question in a vacuum, then pick a side. The honest answer moves over time: buy at the start, build later, and the money is in knowing exactly when to switch. This is the playbook we use with clients to decide it: three-year total cost of ownership, the five signals that make a migration pay, and the migration project itself.
We’ve shipped on every stack in this debate: Daily, Vonage, Twilio, Agora, plus self-hosted mediasoup, Janus, Kurento and LiveKit. Public examples sit at the “custom wins” end of the curve — BrainCert (100K+ paying customers, 500M+ classroom minutes) and ProvideoMeeting. Fora Soft has run 250+ projects since 2005, and the number that matters here is smaller: the count of teams we’ve talked *out* of migrating because the math wasn’t there yet.
Not sure whether it’s time to leave your WebRTC SDK?
Thirty minutes gets you a TCO model, a migration plan, and a calendar — including the steps to skip on sprint one.
WebRTC SDK vs custom build: the 2026 definitions
Buy means you rent a managed WebRTC platform — Agora, Daily, LiveKit Cloud, Vonage — and pay per participant-minute. Build means you run an open-source media server (an SFU) in your own cloud account and pay for servers, bandwidth, and the engineers who keep it up. Hybrid means you run managed today on code that can self-host tomorrow, so the switch is a config change, not a rewrite.
Here’s the rule of thumb that decides most cases before any spreadsheet: if video is a peripheral feature, buy; if video is the product, plan to build. A booking app that adds a consult call should never run its own SFU. A spatial-audio social platform whose whole value is the media experience will outgrow every SDK. Between those poles sits the interesting 80%, where the answer is “buy now, build later,” and the timing is what this guide nails down.
One more framing worth stealing from a Twilio architect guide: the decision is rarely about features. Both paths can ship recording, simulcast, and end-to-end encryption. It’s about who owns the SLA at 3 a.m. Buy, and the vendor owns the pager. Build, and you do, which is cheaper per minute and more expensive per weekend.
Reach for buy when: video is a supporting feature, you’re under ~1M participant-minutes/month, and you’d rather spend engineering on your product than on NAT traversal. Reach for build when video is the product or you’re past ~5M minutes/month.
The TCO model — what each path costs over three years
A truthful WebRTC TCO model has four columns: build, fees or infrastructure, ops headcount, and compliance. Below is what the two paths look like over three years for a product holding 500 concurrent users and 5M participant-minutes a month. The self-host fees column uses hosting we actually deploy on (Hetzner, AWS, Cloudflare); the SDK column uses 2026 list pricing.
| Cost line | SDK path (3y) | Custom path (3y) |
|---|---|---|
| Build | $30K–$70K | $140K–$300K |
| Per-minute fees / infra | $540K–$900K | $140K–$220K |
| Ops / DevOps headcount | $0–$50K (light SRE) | $240K–$420K |
| Compliance audits | $30K–$60K | $80K–$150K |
| Vendor pivots / migration risk | $25K–$60K (one swap) | $0 |
| Total 3-year TCO | ~$625K–$1.14M | ~$600K–$1.09M |
Read the totals carefully, because they’re the whole point. At 500 concurrent users the two paths land within ~5% of each other over three years. What changes is the shape: the SDK bill is mostly per-minute fees you can’t negotiate below the meter, while the custom bill is mostly people and servers you control. Below 500 users the SDK wins outright; past ~1,000 users custom pulls ahead, because per-minute fees scale linearly while self-hosted infra scales sub-linearly.

Figure 1. Both paths land near $0.85–0.9M over three years at 500 concurrent users — the difference is the cost mix, not the total.
Four hidden costs on the WebRTC SDK bill
The SDK sticker price is honest about minutes and quiet about everything else. Four lines routinely double the invoice founders budgeted for.
1. Overage tiers and volume cliffs. List pricing looks flat until you cross a tier. Agora bills HD video at $3.99 per 1,000 minutes (2026), voice at $0.99; Daily and LiveKit Cloud sit around $4 per 1,000 participant-minutes at list. The published discounts only kick in at tens of millions of minutes, so the awkward middle — where most scaling products live — pays close to rack rate.
2. Egress you pay for twice. Recording exports, cloud rendering, and API webhooks move bytes, and managed platforms rebill that bandwidth on top of minutes. It rarely shows up in a proof-of-concept and always shows up at scale.
3. Recording storage and retrieval. A minute recorded is a minute stored, indexed, and served for years. That’s a monthly line that grows even if your live usage is flat.
4. The lock-in premium. The real cost of an SDK is the project it takes to leave one. When the vendor changes pricing or sunsets a feature, re-integrating is weeks of work you didn’t plan. That premium is invisible right up to the day you pay it.
Reach for a TCO model when: your monthly SDK invoice has grown three months running, or a single enterprise deal is about to multiply your minutes. Sticker price per minute stops being the right number the moment volume is real.
Four hidden costs of self-hosting WebRTC
Custom isn’t free the moment you stop paying per minute. Honesty cuts both ways, so here are the four lines that turn “we’ll just self-host” into a real budget.
1. On-call and SRE. A production SFU needs someone who owns uptime at 3 a.m. That’s a rota, not a hero, and it’s the single line most build-vs-buy spreadsheets forget.
2. TURN and egress bandwidth. Roughly 15–20% of sessions can’t connect peer-to-peer and must be relayed through a TURN server, and relayed media is billed by the gigabyte. On AWS that’s about $0.09/GB for the first tier; Cloudflare’s Realtime TURN lists $0.05/GB. We work the exact math in the next section.
3. Scaling headroom. You provision for the spike, not the average. Idle capacity waiting for your busy hour is real money that a managed platform hides inside its per-minute rate.
4. Security patching and audits. CVEs in your media stack, dependency churn, and annual audits are your job now. It’s manageable with the right team and a slow bleed without one.

Figure 2. The lines that turn a clean sticker price into a real bill — and they exist on both paths.
Five signals it’s time to migrate from SDK to custom
The trigger to migrate isn’t a gut feeling, it’s a threshold. When three or more of these five are true, the build usually pays for itself.
1. SDK fees crossed $30K a month. At that run-rate you’re paying for two senior engineers every month with nothing to show for it but a meter. That’s enough to amortise a self-hosted SFU and recover the build in 12–16 months.
2. Vendor roadmap whiplash. Twilio announced Programmable Video’s end-of-life in 2024, pushed it to December 2026, then reversed course and kept it. The product survived, but two years of not knowing is exactly the signal that says keep an exit option. Vonage’s OpenTok line is in maintenance mode today. When your vendor wobbles, you migrate. The only question is whose schedule you do it on.
3. A compliance or data-residency gap. Vendor SDKs ship a fixed SOC 2 plus HIPAA bundle. The day an enterprise buyer demands FedRAMP, CJIS, or EU-only residency, a stack in your own cloud account is the answer, not a support ticket.
4. Quality complaints from premium accounts. Vendor SFUs are tuned for the median customer. If your top accounts push into ultra-low-latency or a specialised codec, a custom SFU lets you tune for them specifically instead of filing a feature request.
5. You have the team. A migration without one full-time WebRTC ops engineer fails. Hire the person, or bring in a dedicated team that already has them, before you commit. Without the people, custom is a liability dressed up as a saving.
Reach for migration when: three or more of the five signals are true. Two usually means renegotiate the vendor contract first; one means stay put and revisit in a quarter.
Where the TCO curves cross — the volume math
The crossover is the number every founder actually wants. Below is a simplified per-month run-rate (build excluded), with the SDK metered at ~$4 per 1,000 participant-minutes and custom at amortised infra plus a slice of on-call.
| Volume / month | SDK fees | Custom infra + ops | Winner |
|---|---|---|---|
| 100K min | $400 | $3K | SDK by ~7× |
| 500K min | $2K | $3.5K | SDK |
| 1M min | $4K | $4.5K | Tie (crossover) |
| 5M min | $20K | $10K | Custom by 2× |
| 20M min | $80K | $25K | Custom by 3× |
The crossover lands near 1M participant-minutes a month, which matches the field consensus that the flip sits around $4–5K in managed fees versus a low-hundreds Hetzner SFU plus engineering. Past it, the gap compounds: at 5M minutes, self-hosting saves about $120K a year, so a $140K–$300K migration recovers in 14–30 months and keeps paying every year after.
One caveat, because it’s where people get confused: this table is run-rate with build excluded. Fold the custom build, ops, and compliance back in over three years and the totals return to the ~5% tie in Figure 1. That’s the real point — the decision is about trajectory, not a single month’s invoice.

Figure 3. SDK fees rise linearly; self-hosted run-rate stays flatter. They cross near 1M participant-minutes/month, then the gap widens.
TURN, egress, and the bandwidth bill nobody models
Bandwidth is where self-hosting budgets go wrong, so let’s do the arithmetic out loud for the 5M-minute product above. A single 720p WebRTC stream runs about 1.5 Mbps. That’s 1.5 megabits × 60 seconds ÷ 8 = 11.25 MB per participant-minute of media.
Not all of it is relayed. Say 15–20% of session-legs fall back to TURN (a fair NAT-traversal estimate) and the rest go peer-to-forwarding through your SFU, which also carries egress. As a floor, model the relayed slice at 20%: 5,000,000 minutes × 20% × 11.25 MB ≈ 11.25 million MB, or ~11 TB of relayed egress a month.
Now price it. At AWS first-tier egress of $0.09/GB, 11,000 GB is about $990 a month just for TURN relay. Move that relay to Cloudflare’s $0.05/GB and it’s ~$550. Put coturn on a fixed-price Hetzner box and the relay bandwidth is bundled into a ~$50–$200 monthly server instead of metered per gigabyte. Same media, three very different bills, and none of them appear on an SDK quote because the vendor already absorbed them into your per-minute rate.
The lesson isn’t “self-hosting is expensive.” It’s that egress is the line that decides your real run-rate, so model it before you commit. We keep a fuller worked model in our server-cost guide.
Reach for fixed-price bandwidth when: your relayed volume is predictable and large. Metered cloud egress ($0.05–$0.09/GB) rewards spiky, small traffic; a flat-rate Hetzner or bare-metal box rewards steady, heavy traffic.
The self-host engines compared — what you migrate to
If you build, you’re choosing an open-source SFU, not writing WebRTC from scratch. Five projects own the field in 2026. The right pick depends on how much of the stack you want to own versus get for free.
| Engine | Stack | Where it wins | Pick it for |
|---|---|---|---|
| LiveKit (OSS) | Go, built on Pion | Full platform + AI-agent tooling | Fastest to production; product-first teams |
| mediasoup | C++ engine, Node.js control | Best CPU-per-participant; you own signalling | Teams with a real-time backend team |
| Janus | Modular C gateway | SIP + RTSP + SFU in one server | Cross-protocol / telephony bridging |
| Jitsi Videobridge | Kotlin/Java | Fastest drop-in, batteries included | Standard meetings, quick launch |
| Pion | Go library | Assemble your own SFU | Bespoke topologies, full control |
On a 4-vCPU, 16 GB box, Jitsi handles roughly 75–100 concurrent participants and LiveKit 200+, and all of them scale horizontally into the thousands with the right orchestration. One capable SRE, one senior backend engineer, and one client engineer is enough to run LiveKit or Jitsi at scale; mediasoup asks a little more of your backend. We go deeper in our SFU comparison on Learn and in the WebRTC architecture guide.
Reach for LiveKit when: you want the shortest path off an SDK with the least glue code, especially if voice-AI agents are on your roadmap. Reach for mediasoup when you already have signalling expertise and want the lowest CPU cost per stream.
The hybrid path — LiveKit Cloud now, LiveKit OSS later
The least appreciated cost lever in 2026 is the hybrid path. LiveKit Cloud and LiveKit OSS share the same SFU code, the same SDKs, the same APIs. You ship on Cloud now, and when revenue earns the lever you self-host on OSS without rewriting the application. It turns the build-vs-buy fork into a dial you can turn later.
// Same LiveKit client on Cloud and self-hosted OSS. // Only the server URL (and token issuer) change. const room = new Room(); await room.connect(LIVEKIT_URL, token); // Cloud: LIVEKIT_URL = "wss://your-app.livekit.cloud" // OSS: LIVEKIT_URL = "wss://sfu.yourdomain.com"
That’s the whole switch on the client side. The real migration work is server-side and operational — standing up the SFU, TURN, and recording — which is exactly why the hybrid path lets you defer the cost decision without betting the application on it.
| Stage | What you run | Why |
|---|---|---|
| Pre-seed / seed | LiveKit Cloud Build / Daily | Speed beats per-minute cost; compliance bundled |
| Series A | LiveKit Cloud Ship / Scale | Plan pricing flatters growth; same code as OSS |
| Crossing 500 concurrent | Hybrid — primary on Cloud, OSS lab | Validate self-hosted before you switch |
| > 1M minutes/month | LiveKit OSS self-hosted | Per-minute economics flip; ops team is ready |

Figure 4. Same code, four stages: ship managed now, self-host when volume earns it — no rewrite at the switch.
Want a 3-year TCO model in writing?
Send your concurrent-user target, session profile, and compliance regime. We’ll return a side-by-side TCO and a migration plan in ten days.
The migration playbook — from kickoff to cutover
A well-scoped SDK-to-custom migration runs 6–12 weeks, not the year founders fear. A from-scratch build on mediasoup or Janus is longer, 14–22 weeks, because you’re writing signalling and NAT handling too. Here’s the shape we run.
Week 1 — inventory and gates. Map every SDK feature in use, then define cutover gates: feature parity, latency, recording, compliance. Pull the last three months of vendor invoices so the cost baseline is real, not remembered.
Week 2 — engine pick. LiveKit OSS for the fastest production-ready SFU, mediasoup for performance specialists, Janus when you need telephony or RTSP bridging.
Weeks 3–4 — PoC and load test. Stand up a sandbox, push 10–20% of real traffic through it, and confirm latency, recording, and HD parity before touching production.
Weeks 4–8 — application migration. Replace SDK calls with the new engine’s SDKs; port signalling, webhooks, recording, and billing hooks. Wrap the SFU behind a thin internal API so the next migration is weeks, not months.
Weeks 4–8, in parallel — compliance and security. Penetration test, audit logging, a fresh BAA with your cloud provider, and an encryption review. Compliance is not a week-10 surprise.
Weeks 8–10 — staged cutover. Roll 10% → 50% → 100%, watch the KPIs, then decommission the SDK and close out the audit trail.
Mini-case: taking a high-volume EdTech platform off its SDK
The pattern is easiest to see on a live product. BrainCert is a virtual-classroom platform Fora Soft has built and scaled — 100K+ paying customers and 500M+ classroom minutes delivered. At that volume, a pure per-minute SDK bill is the kind of number that shows up in board decks.
The situation is the one this whole guide is about: minutes climbing, per-minute fees climbing with them, and quality expectations from paying institutions that don’t flex. The plan was the playbook above — inventory the features in use, pick a self-hostable engine, prove parity on a slice of real traffic, then cut over in stages while a parallel workstream kept compliance intact.
The result is the shape you’d predict from Figure 3: once live volume clears the crossover, the run-rate stops tracking a meter and starts tracking servers you control, and the margin the platform used to hand its SDK vendor stays in the business. We’ve run the same move for interpreter and enterprise platforms through our video conferencing development team. Want the same assessment for your platform? That’s a 30-minute call.
Compliance during migration — what auditors look for
Moving the SFU into your own cloud account changes your compliance surface, and auditors will notice. Plan for four things.
1. SOC 2 Type II. If you migrate mid-audit-window, plan a re-attestation. The control set changes when the media server moves into your account; auditors want updated risk-assessment and vendor-list documents.
2. HIPAA. The BAA you signed with the SDK vendor does not carry to your infrastructure. You need a fresh BAA with the cloud provider, plus your own audit logging, encryption review, and staff-training records.
3. GDPR. Data residency moves with the SFU. EU-only customers will ask which region their media lives in, so update the DPIA and DPA templates before they do.
4. Sector-specific. FedRAMP, CJIS, PCI-DSS, and ISO 27001 each carry their own re-certification windows. Schedule the migration outside your critical audit dates.
A decision framework — migrate, renegotiate, or stay in five questions
Five questions settle the WebRTC build vs buy call for most teams. Answer them honestly and the move names itself.
1. What’s your monthly SDK invoice? Under $5K, stay. $5–$30K, renegotiate. Over $30K, migrate.
2. What’s your concurrent-user count? Under 200, stay. 200–500, consider hybrid. Over 500 the two paths run roughly even on TCO, and custom pulls clearly ahead past ~1,000.
3. Has the vendor signalled instability? Pricing changes, EOL notices, dashboard rebrands, SDK maintenance-mode flags — each is a reason to plan a migration on your timetable, not theirs.
4. Is your compliance regime expanding? If FedRAMP, CJIS, or EU-only residency is on the roadmap, custom infrastructure is effectively required.
5. Do you have or can you hire a WebRTC ops lead? Yes, migrate. No, renegotiate the vendor deal or partner with a firm that has the people.

Figure 5. Three questions down the middle; the branch you take names the move — stay, renegotiate, or migrate.
Pitfalls we’ve watched migration teams fall into
1. Migrating too early. Below ~500 concurrent users the math doesn’t justify the build. Renegotiate the vendor price first and revisit in a quarter.
2. Migrating too late. When a vendor announces EOL with 90 days’ notice, you pay double for an emergency migration. Plan off the signals, not the shutdown date.
3. Forgetting the archive. Vendor recordings have to be exported, re-stored, and re-indexed. Budget one engineer-week per million minutes of historical archive.
4. Underestimating egress. AWS internet egress starts around $0.09/GB (2026), not the fraction-of-a-cent people assume, and it adds up fast for a busy SFU. Plan multi-region with cheaper edges — Cloudflare at $0.05/GB, or flat-rate boxes for steady relay.
5. No exit plan from the new stack. Wrap the SFU calls behind a thin internal API on day one, so your next migration is a three-week job instead of a three-month one.
KPIs — what to measure after the migration
Quality KPIs. p95 join time under 4s, p95 video freeze under 1%, audio MOS above 4.0, recording success above 99.5%, and archive parity with the SDK era at 100%.
Business KPIs. Per-minute cost versus the SDK baseline, gross-margin uplift, customer-reported quality (NPS) movement, and support-ticket volume through the cutover window.
Reliability KPIs. SFU uptime at 99.95%, incident MTTR under 30 minutes, audit-log completeness at 100%, and compliance pass-rate on the first attempt.
When NOT to migrate from SDK to custom
The honest counter-position, because it sells better than a pitch. Skip the migration when monthly SDK fees stay under $5K, when the vendor offers a real discount at renewal, when your team has no plan to hire WebRTC ops, or when an audit is in flight that a migration would disrupt. In each case the right move is a longer-term contract and a calendar reminder to revisit in 12 months.
Building your own SFU to save money you aren’t yet spending is the most expensive kind of premature optimization in this space. If video is a side feature of your product, it should probably stay bought forever — your engineers are worth more on the thing customers actually pay you for.
Want a TCO and migration plan in writing?
A 30-minute call gets you a side-by-side cost model and a migration playbook calibrated to your concurrent-user count and compliance needs.
FAQ
Is WebRTC build vs buy really just about cost?
No. Cost decides the timing, but compliance, quality control, and vendor risk decide the direction. If an enterprise buyer needs FedRAMP or EU-only residency, you build regardless of the per-minute math.
When does custom WebRTC become cheaper than an SDK over TCO?
Near 1M participant-minutes a month, driven by volume rather than headcount. Below that the SDK wins on three-year total cost of ownership. At ~500 concurrent users the two paths run within ~5% over three years; only well above the crossover, at 5M+ minutes a month, does the monthly run-rate gap widen to 2–3× in custom’s favour.
How long does a migration from SDK to custom take?
6–12 weeks for a clean migration to LiveKit OSS, 14–22 weeks for a from-scratch mediasoup or Janus build. Our Agent Engineering process trims both calendars versus a traditional outsourced shop.
Should we wait for the vendor to announce EOL before migrating?
No. EOL notices usually come with 90–180 days, which is roughly half the time a clean migration needs. Twilio’s 2024 EOL announcement, later reversed, is the cautionary tale: plan off the signals, not the shutdown date.
What is the lowest-risk migration path?
LiveKit Cloud now, LiveKit OSS later. The same code runs in both modes, so the cloud-to-self-host switch is mostly configuration. You get the cost lever without a rewrite.
Which self-hosted engine should we pick?
LiveKit for the fastest path off an SDK and the best AI-agent story, mediasoup for the lowest CPU cost per stream when you have signalling expertise, Janus when you need SIP or RTSP bridging in the same server.
How much does TURN and egress bandwidth really cost?
Model it explicitly. A 720p stream is ~11 MB per participant-minute; relay ~20% of that through TURN and price it at $0.05–$0.09/GB on cloud, or bundle it into a flat-rate box. Egress, not minutes, decides a self-hosted run-rate.
Has Fora Soft done these migrations?
Yes — OpenTok/Vonage to mediasoup, Twilio Video to LiveKit, and legacy stacks to Kurento and Janus. BrainCert and ProvideoMeeting are public examples at the high-volume end.
What to Read Next
Architecture cost
WebRTC architecture cost: custom vs SDK
The architectural cost breakdown behind these TCO numbers.
Stage pricing
WebRTC development cost: startup vs enterprise
The same money reframed by company stage.
Migration
Vonage Video API alternatives in 2026
A worked SDK-to-custom migration off OpenTok.
Vendor cost
LiveKit vs Agora pricing, 2026
The per-minute numbers, vendor by vendor.
Ready to settle build vs buy?
SDK and custom WebRTC aren’t opposites, they’re stages of the same product. The question was never which one is better — it’s when to switch. Five signals tell you, the TCO model proves it, the hybrid path lets you defer the commitment, and a 6–12-week project ships it.
If you want a side-by-side TCO and a migration plan calibrated to your own numbers, the fastest next step is a 30-minute call. We’ll walk both paths, tell you which one fits and when, and quote the work — including the parts to skip on sprint one.
Talk to our video engineering leads
Book a 30-minute call. We’ll scope the decision — engine, calendar, budget, run-rate, compliance — in one session.

