October Updates v2.1: Redesigned Analysis, Security Hardening & Data Export
rtcStats v2.1 rebuilds the Analysis page for large accounts, hardens security across the platform, and adds bulk export and import of sessions.
Posted by
Related reading
rtcStats v2.0: Redesigned Tables, Negotiations & Sharper Analysis
rtcStats v2.0 redesigns the Connections, Streams and Devices tables, adds a Negotiations section and enriches every session summary for a sharper AI analysis.
September Updates v1.10: Long-Call Charts, New Observations and Trust Center
rtcStats v1.10 rebuilds the session charts for calls that run for hours, adds 11 new connectivity and audio observations, and expands the documentation area.
August Updates v1.9: Self-Hosted Enrichment, New Observations & Open-Source Guides
rtcStats v1.9 brings self-hosted enrichment via the rtcstats-enrichment server, four new observations, and a new Open Source section in the Knowledge Base.

rtcStats v2.1.0 is about finding the right session fast, even on accounts with thousands of files, and trust. The Analysis page was rebuilt from the ground up, the whole platform went through a security audit, and a new Data tab lets you export, import and clean up your sessions in bulk.
Fewer clicks getting to the thick of things and fewer worries about your data. Let's go! 🔐
🚀 Major Improvements
> A Rebuilt Analysis Page for Large Accounts 🔎
The Analysis page is where you start every investigation, and on large accounts it was getting slow. It now stays fast no matter how many sessions you store, and the list loads as you scroll.
Pick a period (24 hours, 7 days, 30 days, 90 days or All time), and a sessions chart shows how many calls you had and how they scored. Open the chart by day or by hour to zoom in on a bad afternoon. The filters fold behind a button and show live counts, so you see how many sessions match before you click. A new Path filter finds sessions by connection type, and the Group by menu groups the list by score, observations, client, path or tag, among others, instead of sorting it. The Score and Observations filters and groups are available on paid plans.
The rebuilt Analysis page with its period selector, sessions chart, filters and grouped list
> Security Hardening Across the Platform 🛡️
We ran a security audit of the platform, working out the issues found. Along the way, we've worked on better privileges and token tightening for the API: the account roles are now enforced on every settings change, so only owners and admins manage teammates, invitations and API tokens.
The part you are likely to notice is that now, new API tokens are signed with a dedicated secret and last 6 or 12 months. They also show their scope and creator, and are revoked when their user leaves the team.
Settings > Applications, where each token has a scope, a validity of 6 or 12 months and an expiry date
> Export, Import and Clean Up Your Sessions 📦
Moving to a new account, or keeping a copy of your work, used to mean downloading dumps one by one. The new Settings > Data tab shows where the account stores its data and how many sessions, tags and comments it holds. Click Export to save all the sessions, or a selection, to a single .zip file with their tags and comments. Click Import to load that file into another account, at one credit per imported session.
The Danger zone deletes every session of the account in one run. The Data tab is available to owners and admins on every plan. Read Export and import account data for the details, or build your own import file.
Settings > Data, with the data location, the Import/Export figures and the Danger zone
🛠️ Other Enhancements
> Your Feedback Makes Every Diagnosis Better 🙌
You trust rtcStats to tell you what went wrong on a call, so every explanation in the knowledge base must be accurate. Your votes tell us where an explanation falls short. After a negative "Was this page helpful?" vote, you can now add an optional reason, so we know what to fix. You can also change or clear your vote at any time, and the WebRTC metrics articles now have the vote too. Each answer helps us get every diagnosis right, for you and for everyone else.
> AI Summaries on Claude Haiku 5.5 🧠 (Paid Plans)
AI summaries are now generated with Claude Haiku 5.5, which reasons before it answers and sticks closer to the session data. The summary of a dashboard upload also starts as soon as the upload finishes, and it appears in the session on its own once it is ready. No more reloading the page to see it.
> A Sharper Session Viewer 🔬
Many small changes make a session easier to read:
- Sessions recorded from an app that embeds Chromium are marked as such.
- Connections show their certificates, and the logs expand each
replaceTrackevent. - Each device carries a badge with its connection type, and the Devices table links a sent track to its device by track id and shows how long each device was on.
- The Video (inbound) card shows the number of received video streams over the call, with a mark at each freeze.
- The Camera and Video cards show the resolution as a label such as 720p, and session tables follow your date and time format.
- Tooltips follow the theme and link to the knowledge base, and the timeline hover cards are more compact.
> Clearer Credits in Billing 💳
Settings > Billing now shows the date of each credit purchase, and how many purchased credits are used and left. You know where your credits went at a glance.
> BigBlueButton Integration Guide 🎓
Running BigBlueButton? The new BigBlueButton integration guide shows how to add rtcstats-js to BigBlueButton 3.0 and 4.0. A small fork of the HTML5 client traces every meeting, and bbb-web mints signed rtcstats tokens, the same way it already hands out TURN credentials.
> A Fresh Website and Knowledge Base 🌐
- Free Tools: the new Free Tools page links to the browser-only dump anonymizer and dump splitter, to make a dump safe to share.
- New articles: MOS, connection states, ICE candidate pairs, WebRTC monitoring, WebRTC debugging, and exporting and importing account data.
🐞 Bug Fixes
- Sessions without a reliable wall-clock time are no longer dated January 1st, 1970, or several decades long.
- Sessions with no peer connection no longer last up to a full day: their duration and scores now read N/A.
- Chunked uploads from the dashboard and the API no longer fail at assembly with "No chunks found for this file", and chunks can now be sent in parallel.
- Dashboard uploads are refused once the account has no credits left, and credits used beyond the monthly allowance are no longer taken from a credit pack bought later.
- The Credits Usage chart no longer labels each month one month early west of UTC.
- Packet loss charts no longer go negative after lost packets were recovered.
- A microphone opened before the recording started no longer shows as "No microphone".
- Sessions from clients that hide addresses, ports or stream identifiers now show
<masked>instead of raw values. - Fewer false audio, network and connectivity observations, and network observations are now dated at their first spike.
- The microphone level and the outgoing video quality are now correct when the app attaches its microphone or camera after the call starts.
- Sessions from some non-browser WebRTC clients now process, with their connection timing.
- Reopening a session while its AI summary is being written no longer restarts the generation.
- Sign-up, password reset and invitation now explain when a password is refused because it appears in a known data breach.
- The libraries behind the MCP server were updated to versions that fix published security advisories.
📦 Ecosystem Updates
> rtcstats-server (main) 🛠️
No new release in this window. Here is what landed on main:
rtcstats-featuresmarks screen-share video tracks withisScreenshare.rtcstats-featuresrecords the peak number of receiving audio and video streams of each connection.- An ICE connection that reaches
completednow counts as connected. - The dump importer reads the candidate type to tell local candidates from remote ones.
> rtcstats-js 📡
No public release in this window, we'll catch up next month.
> API & MCP ⚙️ (Paid Plans)
More and more, the first look at a bad call comes from an AI agent. This release gives agents better tools:
- MCP prompts:
what_changed_since,sessions_worth_openingandexplain_session_observationsshow up as slash commands in clients such as Claude Code. - MCP resource:
rtcstats://observations/{type}returns the explanation of one observation type as Markdown. - Agent skill: rtcStats publishes an agent skill and a per-operation access contract, so an agent can discover rtcStats and use it safely.
- Safe retries: repeating an
uploadoranalyze?save=trueassemble with the samefileIdwithin 24 hours returns the original response, with no second session and no second credit. - New fields: each peer connection gets
maxReceivingAudioStreamsandmaxReceivingVideoStreams, video streams getisScreenshare, andGET /v1.0/sessionsandlist_sessionsreturn the low and info observation types inabstract.observationMinorFlags, with theobservationsLowandobservationsInfocounts. - Clear limits: a call that misses the last credit returns
402no_credits, a gzipped dump that expands too much returns413file_too_large, and too many waiting chunks return429rate_limitedwithRetry-After.
v2.1.0 also changes the public API contract, effective with this release:
- No more
criticalseverity: thecriticalseverity value, thehasCriticalfilter ofGET /v1.0/sessionsandlist_sessions,abstract.observationsCritical, andobservationsCount.criticalonGET /v1.0/sessions/{id},POST /v1.0/analyzeandPOST /v1.0/enrichare removed. No observation ever carried this severity, so we expect no impact on your clients.
See the API documentation for the details.
We're excited to see how you use the rebuilt Analysis page and the new Data tab to find and keep your WebRTC sessions! As always, the latest version of rtcstats-js is available on npm. Make sure you're up to date to get the best out of these new features.
Happy debugging! 💎