How to export your data from Stream

Stream (Stream Chat) lets you export channels and users as JSON via server-side API calls; each export runs as an async task that returns a download URL, and up to 25 channels or 25 users can be exported per request.

Formats: JSONPlan: Data Export is listed as a feature starting on the paid "Start" plan ($399/mo annual, $499/mo monthly) and above; it is not listed as included on the free "Build" plan.Role: Server-side API key/secret (Stream app Admin) - all export endpoints require server-side authentication, not a dashboard click-through export

✓ Verified against Stream's official documentation, September 2026

Step by step

  1. 1Confirm your app is on a plan that includes Data Export (Start plan or higher) in the Stream dashboard billing/plan settings.
  2. 2Using a server-side SDK (Node, Python, Ruby, PHP, Java, .NET, Go) or the REST API with your API key/secret, call the channel export method (e.g. exportChannels) with an array of {type, id} objects for the channels you want to export - up to 25 channels per request.
  3. 3Optionally pass messages_since / messages_until to limit the time range, include_truncated_messages / include_soft_deleted_channels to include extra data, and version: "v2" for line-separated JSON output where each entity is on its own line.
  4. 4Save the task_id returned by the call.
  5. 5Poll the export status endpoint (getExportChannelStatus / getTask) with the task_id until status is "completed".
  6. 6When completed, read response.result.url and download the JSON export file from that URL.
  7. 7Repeat the export in batches of 25 channels until all channels are covered.
  8. 8To also export user-level data (messages, reactions, calls, custom fields), call the export users method with up to 25 user IDs at a time (max 10,000 messages per user; contact Stream support for larger user exports), then poll and download the same way.

What the export includes

  • ✓Channel messages
  • ✓Channel metadata
  • ✓Associated channel data
  • ✓User messages, reactions, calls, and custom data (via the separate user export)

What it doesn't include

  • ✗Not documented on the fetched pages: whether uploaded file/image binaries are bundled in the export vs. only referenced by URL
  • ✗No mention of a one-click dashboard export button - export is API/code driven only
  • ✗No mention of exporting app-level configuration (channel types, permissions, webhooks) via this endpoint

Before you start

  • ⚠All export endpoints require server-side authentication - it cannot be triggered from a client SDK or without API credentials
  • ⚠A single channel-export request can include up to 25 channels; a single user-export request can include up to 25 users
  • ⚠User exports are capped at 10,000 messages per user by default; exporting users with more requires contacting Stream support
  • ⚠Exports are asynchronous - you get a task_id first and must poll for completion before a download link appears
  • ⚠The download URL expires after 24 hours but is regenerated each time you check the task status; the underlying export file itself remains available for 60 days
  • ⚠Data Export is a paid-plan feature (Start plan and up), not part of the free Build plan

Where to take your data

Free and cheaper tools that can take a Stream export. See all Stream alternatives →

Rocket.Chat

Self-hosted, open-source chat with a REST/import API; write a script that reads Stream's per-channel JSON export and recreates channels, users, and messages via Rocket.Chat's admin/import APIs.

Mattermost

Self-hosted team chat with a bulk-import (JSONL) tool; transform Stream's line-separated JSON (v2 format) export into Mattermost's bulk-import JSON Lines schema and run its import command.

Matrix (Element)

Self-hosted/federated chat protocol; use Synapse's admin API to create rooms/users and script message replay from Stream's exported channel JSON since there's no native Stream-to-Matrix importer.

Exporting from Stream: common questions

Can I export my Stream Chat data from the dashboard without writing code?+

No. Stream's documented export endpoints require server-side authentication with your API key/secret - there's no dashboard button for a self-serve download; you call the export API and download the resulting JSON file.

What format does Stream export data in?+

JSON. Standard exports return a JSON result, and adding version "v2" to the request returns line-separated JSON where each entity (message, event, etc.) is on its own line.

Is data export available on Stream's free plan?+

Stream's pricing page lists Data Export under the paid "Start" plan features (from $399/mo billed annually), not under the free "Build" plan.

How long do I have to download my export before it expires?+

The download link itself expires after 24 hours but is regenerated every time you check the task status, and the export file stays available on Stream's servers for 60 days total.

Is there a limit on how much I can export at once?+

Yes. Channel exports are capped at 25 channels per request, and user exports are capped at 25 users per request with a maximum of 10,000 messages per user (Stream support can help with larger user exports).

Can I export just a date range instead of full channel history?+

Yes, the channel export accepts messages_since and messages_until parameters to limit the export to a specific time window.

Sources

This guide was written from Stream's own documentation and checked against it in September 2026. If a step has changed, the official page wins.