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.
Technical Requirements Extraction from Calls
Structured Pre-Sales Intelligence
What Semarize generates
Technical requirements buried in sales conversations get lost between discovery and handoff to solutions engineering. Run every call through a requirements extraction kit. Semarize returns integration_requirement, security_concern, deployment_preference, and data_residency_constraint as typed fields from each conversation. Solutions engineers get a structured brief before the first technical call instead of watching 45 minutes of recording. Scoping accuracy improves because requirements come from what the prospect actually said, not the AE’s summary.
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 ScienceCustomer Onboarding Playbook Adherence
Knowledge-Grounded CS Verification
What Semarize generates
Your customer onboarding calls are recorded, but nobody checks whether CSMs actually followed the onboarding playbook. Run a knowledge-grounded kit against your 15-page onboarding guide on every CS call. Semarize checks whether each setup step was covered, flags incorrect configuration guidance against the current documentation, and detects customer confusion signals. After scoring 100 onboarding calls, CS leadership discovers that the data migration section gets skipped in 67% of calls — and those accounts have 3x higher support tickets in month 2. The playbook gets restructured around the steps CSMs actually skip.
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