If you’re reading this, you’ve probably already realized that Chorus.ai doesn’t make it easy to leave. That’s by design. ZoomInfo — which acquired Chorus in 2021 — generates recurring revenue by keeping your historical recordings locked inside their platform. Cancel your subscription and that data becomes inaccessible. This guide explains exactly what data you have, what your export options are, and the fastest way to get your recordings into storage you control.

What Data Does Chorus.ai Actually Hold?

Before you start the export process, it’s worth inventorying exactly what you’re dealing with. Most Chorus customers are surprised by the volume.

Call recordings (MP4 video / MP3 audio): The primary asset. Every recorded call stored as a video file with the participant feeds. For a 100-seat team that’s been on Chorus for 2 years, this can easily be 50,000+ files totaling several terabytes.

Transcripts: Chorus generates AI transcripts for every call. These are structured text files with speaker attribution, timestamps, and topic tagging. They’re often more valuable than the recordings themselves for search, compliance, and AI fine-tuning.

Call metadata: Structured data including participant names and emails, call duration, deal associations (linked to your CRM), call scores, topic tags, and engagement signals. This is the data your RevOps team uses for coaching analysis.

AI analysis outputs: Depending on your Chorus configuration, you may also have smart highlights, filler word counts, talk-to-listen ratios, and deal risk signals. Availability of these as exportable files varies by contract.

Why Native Chorus Export Falls Short

Chorus does offer some native export capabilities, but they’re deliberately limited for enterprise accounts:

Manual download: Admins can download individual calls from the Chorus UI. This works fine for retrieving a single recording, but becomes impractical at any meaningful scale. There’s no bulk-select-and-download feature.

API access: Chorus has a REST API that lets you enumerate calls and retrieve signed media URLs. The API is reasonably well-documented, but using it requires engineering resources and the URLs are time-limited — meaning you need to stream the actual media immediately after retrieving the URL. Rate limits also apply.

Professional services: ZoomInfo offers managed data exports, but the quotes typically start at $10,000+ for mid-market accounts and can reach $50,000+ for large enterprises. They also involve multi-week timelines and require you to schedule calls with their professional services team.

What Chorus doesn’t offer: A self-serve bulk export to cloud storage. There’s no built-in “export everything to my S3 bucket” or “dump all recordings to Azure Blob” feature. This is the gap that portshift fills.

Option 1: Build Your Own Export Script

If you have engineering resources available, you can write a custom export script using the Chorus v3 API. Here’s the rough process:

  1. Authenticate: Get your Chorus API token from the Settings → API Keys section
  2. Enumerate engagements: Use the /engagements endpoint with pagination to get all call IDs
  3. Retrieve media URLs: For each call, hit the media endpoint to get a time-limited signed URL pointing to Wasabi S3 (Chorus’s media storage)
  4. Stream to your destination: Download from the Wasabi URL and simultaneously upload to your target storage

The main challenges: rate limiting (you need to respect ~300ms between requests), handling partial failures gracefully (a 10TB export will encounter transient errors), and managing the stream of signed URLs before they expire. You’ll also want to build a manifest so you can resume if the script fails halfway through.

This approach takes 1-2 weeks of engineering time for a reliable, production-grade implementation. It’s entirely feasible, but most teams going through a migration don’t have that time available.

Option 2: Use portshift

portshift is a data portability tool purpose-built for exactly this use case. It handles the Chorus API enumeration, media streaming, manifest tracking, and upload to your cloud storage destination — without requiring engineering resources.

How it works:

  1. Provide your Chorus API token and your cloud storage credentials (Azure Blob SAS token, or S3/GCS credentials)
  2. portshift enumerates all your Chorus engagements via the v3 API
  3. It streams each recording, transcript, and metadata file directly to your storage destination
  4. Every file is SHA-256 hashed and written to a compliance-grade manifest
  5. If the run fails partway through, you restart and it picks up exactly where it left off

What you get at the end:

  • All recordings in your storage, organized by call ID
  • Full transcripts alongside each recording
  • A JSON + CSV manifest listing every artifact with its SHA-256 hash, source call ID, destination URI, and timestamp
  • Zero data retained by portshift after delivery

The pricing starts at $499 for a single run — compared to $10,000+ for professional services, this is a fraction of the cost for a much faster turnaround.

Option 3: Stay on Chorus and Pay for Access

This is the option many teams accidentally default to. If you’re not actively migrating away, Chorus will continue to charge you a “data access fee” or require you to maintain a reduced-seat subscription just to retain access to historical recordings.

This costs $2,000-$10,000+ per year depending on your original contract, for data you’ve already paid to generate. It’s worth doing the math: if you’re paying $500/month to maintain access to historical data, portshift’s one-time $499 export fee pays for itself in month one.

What to Expect During the Export

Timeline: A typical 100-seat Chorus account with 2 years of recordings will have 30,000-60,000 calls. At portshift’s streaming concurrency, this takes 12-24 hours. Very large accounts (500+ seats) can take 2-3 days for a full initial export.

Storage requirements: Expect roughly 500MB-2GB per hour of recorded calls. A 50,000 call library at average 45-minute calls works out to approximately 5-10TB. Make sure your destination storage has sufficient capacity before starting.

Rate limits: The Chorus API has rate limits that any export tool must respect. portshift manages these automatically with appropriate backoff, but it does mean the export isn’t instantaneous.

Transcript availability: Transcripts are generated asynchronously by Chorus, so very recent calls (< 24 hours old) may not have transcripts yet. These will be noted in the manifest as pending.

Compliance Considerations Before You Export

If your organization operates in a regulated industry — financial services (FINRA), healthcare-adjacent (HIPAA), or any state with two-party consent recording laws — there are a few things to verify before exporting:

Data residency: Confirm your Chorus contract specifies where recordings are stored. Most US accounts are stored in US regions. If you’re exporting to cloud storage, ensure your destination is in a compliant region.

Retention policies: Check whether your organization has policies requiring call recording retention for a specific period (FINRA requires 3-7 years for many communication types). Exporting to your own storage can actually help you comply with these requirements if you set appropriate retention policies on your storage account.

Deletion after export: Once you’ve verified the export is complete and the manifest is correct, you can cancel your Chorus subscription with confidence that you have a verifiable copy of all your data.

Audit trail: The SHA-256 manifest portshift generates is designed for exactly this purpose — it gives you a cryptographic proof that every file was exported intact and can be used in legal proceedings or compliance audits.

Getting Started

If you’re ready to start your Chorus export, here’s the fastest path forward:

  1. Request early access to portshift — we’ll reach out within 24 hours to discuss your data volume and storage destination
  2. Prepare your credentials — locate your Chorus API token (Settings → API Keys in the Chorus admin panel) and have your cloud storage credentials ready
  3. Provision storage — if you don’t already have an Azure Blob container, S3 bucket, or GCS bucket set up, this takes about 10 minutes
  4. Run the export — portshift handles the rest, with a real-time status page so you can monitor progress

The clock is ticking on your Chorus contract. The sooner you start the export, the more options you have.