Get Your Data
Zoom Revenue Accelerator - How to Get Your Conversation Data
A practical guide to getting your conversation data out of Zoom Revenue Accelerator - covering OAuth authentication, REST API endpoints, historical backfill, incremental polling, webhook-triggered flows, and how to route structured data into your downstream systems.
What you'll learn
- What conversation data you can extract from ZRA - transcripts, interactions, CRM context, and deal metadata
- How to access data via the Zoom Developer Platform - OAuth 2.0, key endpoints, and rate limit tiers
- Three extraction patterns: historical backfill, incremental polling, and webhook-triggered
- How to connect ZRA data pipelines to Zapier, n8n, and Make
- Advanced use cases - stage validation, cross-platform scoring, forecast grounding, and enablement analytics
Data
What Data You Can Extract From ZRA
Zoom Revenue Accelerator captures conversation intelligence from every Zoom meeting where ZRA is enabled. Every conversation produces structured data that can be extracted via the Zoom Developer Platform API - transcripts, interaction details, CRM context, and deal-level metadata.
Common fields teams care about
API Access
How to Get Transcripts via the ZRA API
ZRA exposes conversation data through the Zoom Developer Platform REST API. The workflow is: authenticate with OAuth 2.0, list conversations, then fetch the transcript for each conversation ID via the interactions endpoint.
Authenticate with OAuth 2.0
ZRA uses OAuth 2.0 via the Zoom Developer Platform. For automated pipelines, use Server-to-Server OAuth - create an app in the Zoom Marketplace, obtain your account_id, client_id, and client_secret, then exchange them for an access token.
POST https://zoom.us/oauth/token ?grant_type=account_credentials &account_id=<account_id> Authorization: Basic Base64(<client_id>:<client_secret>) Content-Type: application/x-www-form-urlencoded
List conversations by date range
Call the GET /iq/conversations endpoint with from and to query parameters. Results are paginated - use the next_page_token to fetch subsequent pages.
GET https://api.zoom.us/v2/iq/conversations ?from=2025-01-01 &to=2025-02-01 &page_size=50 &next_page_token= Authorization: Bearer <access_token>
The response returns an array of conversation objects with conversation_id, start_time, duration, participants, and associated deal context. Keep paginating until next_page_token is empty.
Fetch the transcript
For each conversation ID, request the transcript via GET /zra/conversations/{id}/interactions. The response contains interaction data with speaker attribution and timestamped utterances.
GET https://api.zoom.us/v2/zra/conversations/abc123/interactions Authorization: Bearer <access_token>
Each interaction in the response includes speaker, timestamp, and text fields. Reassemble into plain text by concatenating utterances, or preserve the structured format for per-speaker analysis. You can also fetch conversation comments via GET /iq/conversations/{id}/comments.
Handle rate limits and transcript availability
Rate limits
ZRA uses Zoom's tiered rate limiting: LIGHT, MEDIUM, and HEAVY categories. Each endpoint is classified into a tier. When you receive a 429 response, back off using the Retry-After header. Check x-ratelimit-limit and x-ratelimit-remaining headers to pace requests.
Transcript timing
Transcripts are not available the instant a Zoom meeting ends. ZRA processes recordings asynchronously - typical lag is minutes to hours depending on call length and system load. Build a buffer into your extraction timing or use webhooks to trigger fetches when processing completes.
Patterns
Key Extraction Flows
There are three practical patterns for getting transcripts out of Zoom Revenue Accelerator. The right choice depends on whether you're doing a one-off migration, running ongoing extraction, or need near real-time processing.
Backfill (Historical Export)
One-off migration of past conversations
Define your date range - typically 6–12 months of historical conversations, or all available data if migrating
Call GET /iq/conversations with from and to date parameters. Paginate through the full result set using next_page_token, collecting all conversation IDs
For each conversation ID, fetch the transcript via GET /zra/conversations/{id}/interactions. Pace requests to stay within your rate limit tier
Store each transcript with its conversation metadata (conversation ID, date, participants, deal context) in your data warehouse or object store
Once the backfill completes, run your analysis pipeline against the stored data in bulk
Incremental Polling
Ongoing extraction on a schedule
Set a cron job or scheduled trigger (hourly, daily, etc.) that runs your extraction script
On each run, call GET /iq/conversations with the from parameter set to your last successful poll timestamp
Fetch transcripts for any new conversation IDs returned via the interactions endpoint. Use the conversation ID as a deduplication key to avoid reprocessing
Route each transcript and its metadata to your downstream pipeline - analysis tool, warehouse, or automation platform
Update your stored cursor / timestamp to the current run time for the next poll cycle
Webhook-Triggered
Near real-time on conversation completion
Register a webhook endpoint in your Zoom Marketplace app. ZRA fires events when a conversation is processed and the transcript becomes available
When the webhook fires, parse the event payload to extract the conversation ID and metadata
Immediately fetch the transcript via GET /zra/conversations/{id}/interactions using the conversation ID from the event
Route the transcript and metadata downstream - to your analysis pipeline, CRM updater, or automation tool
Automation
Send ZRA Transcripts to Automation Tools
Once you can extract transcripts from Zoom Revenue Accelerator, the next step is routing them through Semarize for structured analysis and into your downstream systems. Below are end-to-end example flows - each showing the full pipeline from ZRA trigger through Semarize evaluation to CRM, Slack, or database output.
ZRA → Zapier → Semarize → CRM
Detect new ZRA conversations via webhook, fetch the transcript, send it to Semarize for structured analysis, then write the scored output - signals, flags, and evidence - directly to your CRM.
Setup steps
Create a new Zap. Use "Webhooks by Zapier" as the trigger (Catch Hook). Register the webhook URL in your Zoom Marketplace app to fire on conversation completion events.
Add a "Webhooks by Zapier" Action (Custom Request) to fetch the transcript from ZRA. Set method to GET, URL to https://api.zoom.us/v2/zra/conversations/{{id}}/interactions, and add your OAuth Bearer token.
Add a second "Webhooks by Zapier" Action. Set method to POST, URL to https://api.semarize.com/v1/runs. Add your Semarize API key as a Bearer token. In the body, set kit_code to your Kit, mode to "sync", and map the transcript text into input.transcript.
Add a Formatter step to extract individual brick values from the Semarize JSON response - overall_score, risk_flag, pain_point, etc.
Add a Salesforce (or HubSpot, Sheets, etc.) Action to write the extracted scores and signals to your CRM record.
Test each step end-to-end, then turn on the Zap.
ZRA → n8n → Semarize → Database
Poll ZRA for new conversations on a schedule, fetch transcripts, send each one to Semarize for analysis, then write the structured scores and signals to your database. n8n's native loop support handles pagination and batch processing, and its credential store manages OAuth token refresh automatically.
Setup steps
Add a Cron node as the workflow trigger. Set the interval to your desired polling frequency (hourly works well for most teams).
Add an HTTP Request node to list new conversations from ZRA. Set method to GET, URL to https://api.zoom.us/v2/iq/conversations, configure OAuth 2.0 credentials, and set the from parameter to one interval ago.
Add a Split In Batches node to iterate over the returned conversation IDs. Inside the loop, add an HTTP Request node to fetch each transcript via GET /zra/conversations/{id}/interactions.
Add a Code node (JavaScript) to reassemble the interactions array into a single transcript string. Join each utterance's text, prefixed by speaker name.
Add another HTTP Request node to send the transcript to Semarize. Set method to POST, URL to https://api.semarize.com/v1/runs. Add your API key as a Bearer token. Set kit_code, mode to "sync", and map the transcript into input.transcript.
Add a Code node to extract the brick values from the Semarize response - overall_score, risk_flag, pain_point, evidence, confidence.
Add a Postgres (or MySQL / HTTP Request) node to write the structured output. Use conversation_id as the primary key for upserts.
Activate the workflow. Monitor the first few runs to verify Semarize responses are arriving and writing correctly.
ZRA → Make → Semarize → CRM + Slack
Fetch new ZRA transcripts on a schedule, send each to Semarize for structured analysis, then use a Router to branch the scored output - alert on risk flags via Slack and write all signals to your CRM.
Setup steps
Create a new Scenario. Add a Schedule module as the trigger, set to your desired interval (15–60 minutes is typical).
Add an HTTP module to list new conversations from ZRA. Set method to GET, URL to https://api.zoom.us/v2/iq/conversations, configure OAuth 2.0 auth, and filter by from date since the last run.
Add an Iterator module to loop through each conversation. For each, add an HTTP module to fetch the transcript via GET /zra/conversations/{id}/interactions.
Add another HTTP module to send the transcript to Semarize. Set URL to https://api.semarize.com/v1/runs, add your Bearer token, and set kit_code, mode to "sync", and input.transcript from the previous step. Parse the response as JSON.
Add a Router module. Define Branch 1 with a filter: bricks.risk_flag.value equals true. Leave Branch 2 as a fallthrough (no filter).
On Branch 1, add a Slack module to alert your team when risk is detected. Map the score, risk flag, and conversation ID into the message.
On Branch 2, add a Salesforce module to write all brick values (score, risk_flag, pain_point) to the Opportunity record.
Set the scenario schedule and activate. Monitor the first few runs in Make’s execution log.
What you can build
What You Can Do With ZRA Data in Semarize
Custom stage validation, cross-platform scoring, conversation-grounded forecasting, and building your own analytics on structured conversation signals. Here's what you can build.
Deal Stage Gate Validation
Conversation-Verified Pipeline Progression
What Semarize generates
Reps advance deals through pipeline stages based on self-reporting, but ZRA cannot natively validate whether required qualification criteria were actually discussed in conversations. Semarize scores every call against your stage progression gates - verifying that pain was identified, budget was discussed, decision process was mapped, and procurement timeline was confirmed. After analyzing 200 deals, you discover that Acme Corp's $120k deal is blocked at Stage 4 because procurement_timeline_confirmed never appeared in any conversation. Stage pass rates drop from the 90%+ reps self-report to the 65-78% range that conversation evidence actually supports - giving RevOps an honest pipeline for the first time.
Learn more about RevOpsZoom-Native vs External Call Comparison
Cross-Platform Scoring
What Semarize generates
Your team runs some calls through Zoom, others through Teams, and others over the phone. Cross-platform comparison reveals insights you can't get from a single source. Pull transcripts from every platform and run everything through the same Semarize qualification kit. The analysis reveals that Zoom calls have 15% higher discovery_depth than phone calls but 8% lower competitive_positioning. Video creates better rapport (higher discovery) but reps forget to differentiate (lower competitive positioning) - possibly because they rely on screen sharing instead of verbal positioning. The insight emerges when every call is scored on the same framework.
Learn more about Data ScienceConversation-Powered Forecast Adjustment
Signal-Based Revenue Prediction
What Semarize generates
Reps self-report forecast numbers, but ZRA cannot natively produce data-backed forecast recommendations from conversation signal analysis. Semarize scores every call for buying_temperature and champion_activity, then generates forecast recommendations that often diverge from rep self-reporting. Acme Corp's $180k deal shows high buying temperature but the rep forecasted conservatively - Semarize recommends upside. Globex Inc's $140k deal has declining champion activity despite the rep's confident commit. Initech Ltd's $100k deal signals suggest the rep's number is right. Revenue leadership gets a second opinion on every deal grounded in what actually happened on the calls, not what the rep remembered to log.
Learn more about Customer SuccessCustom Sales Enablement Analytics
Training Impact Measurement
What Semarize generates
An enablement manager vibe-codes a Retool dashboard that ingests Semarize scores from every ZRA conversation. This dashboard correlates conversation quality signals with enablement program participation. Reps who completed the "Enterprise Discovery" training have 34% higher discovery_depth scores than those who haven't. Reps who attended objection handling workshops but still score below 50 get auto-enrolled in the advanced session. Enablement investment decisions become data-driven: which programs actually change conversation behaviour, and which are just checkbox activities?
Learn more about Sales CoachingWatch out for
Common Challenges & Gotchas
These are the issues that come up most often when teams start extracting transcripts from Zoom Revenue Accelerator at scale.
OAuth token lifecycle management
ZRA uses OAuth 2.0 with expiring access tokens. Your integration must handle token refresh automatically - a stale token silently fails requests. For Server-to-Server OAuth, tokens expire after one hour.
ZRA add-on license required
The ZRA API endpoints are only accessible with an active Zoom Revenue Accelerator subscription. Standard Zoom API credentials won't work against /iq/ or /zra/ endpoints. Verify your account's ZRA provisioning before building integrations.
Tiered rate limits
ZRA uses Zoom's LIGHT/MEDIUM/HEAVY tiered rate limiting. Different endpoints have different limits, and exceeding them returns 429 errors. Check x-ratelimit-limit and x-ratelimit-remaining headers and implement per-tier backoff.
Transcript processing delay
Transcripts are not available immediately after a Zoom meeting ends. ZRA processes recordings asynchronously - attempting to fetch a transcript too soon returns empty data. Use webhooks or build in a retry buffer.
Pagination across large datasets
Conversation listing endpoints return paginated results. Track your pagination token carefully - losing position mid-backfill means re-scanning from the start or risking missed records.
Zoom-only conversation coverage
ZRA only captures conversations that happen on Zoom. Calls on other platforms (Teams, phone, Google Meet) are invisible to ZRA. Plan for multi-source ingestion if your team uses multiple communication tools.
Duplicate processing protection
Without idempotency checks, re-running an extraction flow can process the same conversation twice. Use conversation IDs as deduplication keys to ensure each transcript is handled exactly once.
FAQ
Frequently Asked Questions
Explore