Get Your Data
Otter.ai - How to Get Your Conversation Data
A practical guide to getting your conversation data out of Otter.ai - covering REST API access, OAuth authentication, transcript retrieval, meeting summaries, Zapier integration, and how to route structured meeting data into your downstream systems.
What you'll learn
- What conversation data you can extract from Otter.ai - transcripts, summaries, action items, speaker labels, and key topics
- How to access data via the Otter.ai REST API - OAuth 2.0 authentication, endpoints, and beta access requirements
- Three extraction patterns: manual export, Zapier-triggered, and API-driven polling
- How to connect Otter.ai data pipelines to Zapier, n8n, and Make
- Advanced use cases - meeting efficiency scoring, speaker analytics, action item tracking, and team insight dashboards
Data
What Data You Can Extract From Otter.ai
Otter.ai captures more than just a transcript. Every meeting produces a set of structured assets - the full transcript with speaker labels, AI-generated summaries, extracted action items, key topics, and timing metadata. These can be accessed via the API, Zapier, or manual export.
Common fields teams care about
API Access
How to Get Transcripts via the Otter.ai API
Otter.ai exposes meeting data through a REST API currently in beta. The workflow is: obtain OAuth 2.0 credentials from your account manager, authenticate to get an access token, list meetings, then fetch the transcript and metadata for each meeting ID.
Request API access
The Otter.ai API is not publicly self-serve. Contact your Otter.ai account manager to request beta API access. You will receive a client_id and client_secret for OAuth 2.0 authentication once approved.
Authenticate with OAuth 2.0
Exchange your client credentials for an access token using the OAuth 2.0 client credentials flow. Include the access token as a Bearer token in the Authorization header on every subsequent request.
POST https://api.otter.ai/oauth/token Content-Type: application/x-www-form-urlencoded grant_type=client_credentials &client_id=<your_client_id> &client_secret=<your_client_secret>
// Use the returned token on all API requests Authorization: Bearer <access_token> Content-Type: application/json
List meetings
Call the meetings endpoint to retrieve a list of meetings in your workspace. Filter by date range and paginate through results using the returned cursor.
GET https://api.otter.ai/v1/meetings?from=2025-01-01T00:00:00Z&to=2025-02-01T00:00:00Z&limit=50 Authorization: Bearer <access_token>
The response returns an array of meeting objects with id, title, created_at, duration, and participants. Keep paginating until no more results are returned.
Fetch the transcript and metadata
For each meeting ID, request the full transcript along with summary, action items, and speaker data. The response contains the transcript as an array of utterances with speaker IDs and timestamps.
GET https://api.otter.ai/v1/meetings/<meeting_id>/transcript Authorization: Bearer <access_token>
Each utterance includes speaker_id, start_time, end_time, and text. The meeting object also provides summary, action_items[], and key_topics[] for lightweight extraction without full transcript processing.
Handle rate limits and explore alternatives
Rate limits
The Otter.ai API enforces rate limits that vary based on your access agreement. When you receive a 429 response, back off and retry. For bulk operations, pace requests and persist your pagination cursor between runs. Contact your account manager for specific rate limit details.
Alternative: Zapier
If you don't have API access, Otter.ai's native Zapier integration is a practical alternative. It triggers when a new transcript is ready and provides the transcript text, meeting metadata, and participant information - enough to build an end-to-end pipeline without direct API calls.
Patterns
Key Extraction Flows
There are three practical patterns for getting transcripts out of Otter.ai. The right choice depends on whether you have API access, need a no-code solution, or are doing a one-off export.
Zapier-Triggered (No API Required)
Automatic extraction via native integration
Connect your Otter.ai account to Zapier using the native Otter.ai integration. No API credentials required - Zapier handles authentication through OAuth
Set up a trigger: "New Transcript in Otter.ai". This fires automatically when any meeting transcript becomes available in your workspace
The trigger provides the transcript text, meeting title, duration, date, and participant list. Map these fields to your downstream actions
Route the transcript to your analysis pipeline - Semarize for structured scoring, your CRM for meeting logging, or cloud storage for archival
For filtering, add a Zapier Filter step to only process meetings matching specific criteria (title contains "sales", duration over 15 minutes, etc.)
API Polling (Requires Beta Access)
Scheduled extraction via REST API
Obtain API credentials from your Otter.ai account manager. Authenticate via OAuth 2.0 to get an access token
Set a cron job or scheduled trigger that runs your extraction script on your desired interval (hourly or daily)
On each run, call the meetings endpoint filtered by date range since your last successful poll. Collect all new meeting IDs
For each meeting ID, fetch the transcript, summary, action items, and speaker data. Use the meeting ID as a deduplication key
Store each transcript with its metadata in your data warehouse or route it to your analysis pipeline for structured processing
Manual Export
One-off downloads from the Otter.ai UI
Open the meeting in the Otter.ai web app or desktop application
Click the export/download option from the meeting detail page. Choose your format: TXT for plain text, SRT for subtitles with timestamps, or PDF for formatted documents
Download the file and import it into your analysis pipeline manually. Note that manual exports lack structured metadata - no JSON, no speaker IDs as separate fields, no action items array
For small volumes (under 10 meetings), this is practical. Beyond that, use the Zapier integration or API for scalable extraction
Automation
Send Otter.ai Transcripts to Automation Tools
Once you can extract transcripts from Otter.ai, 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 Otter.ai trigger through Semarize evaluation to CRM, Slack, or database output.
Otter.ai → Zapier → Semarize → CRM
Detect new Otter.ai transcripts via the native integration, send the transcript to Semarize for structured analysis, then write the scored output - signals, action items, and meeting insights - directly to your CRM or project management tool.
Setup steps
Create a new Zap. Choose Otter.ai as the trigger app and select "New Transcript Ready" as the event. Connect your Otter.ai account via OAuth.
Add a "Webhooks by Zapier" Action (Custom Request). 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 - meeting_score, action_items, key_decisions, sentiment, etc.
Add a HubSpot (or Salesforce, Notion, Sheets, etc.) Action to write the extracted insights to your system of record.
Optionally add a Filter step before the Semarize webhook to only process meetings matching criteria (minimum duration, title keywords, specific participants).
Test each step end-to-end with a recent Otter.ai transcript, then turn on the Zap.
Otter.ai → n8n → Semarize → Database
Poll the Otter.ai API for new meetings 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.
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 a Code node (JavaScript) to handle OAuth token refresh. POST to the Otter.ai token endpoint with your client credentials. Store the access token for use in subsequent nodes.
Add an HTTP Request node to list new meetings from Otter.ai. Set method to GET, URL to https://api.otter.ai/v1/meetings, and filter by date range since the last poll.
Add a Split In Batches node to iterate over the returned meeting IDs. Inside the loop, add an HTTP Request node to fetch each transcript via GET /v1/meetings/:id/transcript.
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 - meeting_score, action_items, key_decisions, sentiment, evidence.
Add a Postgres (or MySQL / HTTP Request) node to write the structured output. Use meeting_id as the primary key for upserts.
Activate the workflow. Monitor the first few runs to verify Semarize responses are arriving and writing correctly.
Otter.ai → Make → Semarize → CRM + Slack
Poll Otter.ai for new transcripts on a schedule, send each to Semarize for structured analysis, then use a Router to branch the scored output - alert on low meeting scores via Slack and write all insights 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 refresh your OAuth access token. POST to https://api.otter.ai/oauth/token with your client credentials. Store the token for subsequent modules.
Add an HTTP module to list new meetings from Otter.ai. Set method to GET, URL to https://api.otter.ai/v1/meetings, pass the Bearer token, and filter by date range since the last run.
Add an Iterator module to loop through each meeting. For each, add an HTTP module to fetch the transcript via GET /v1/meetings/:id/transcript.
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.meeting_score.value less than 0.5. Leave Branch 2 as a fallthrough (no filter).
On Branch 1, add a Slack module to alert your team when meeting quality is low. Map the score, title, and action items into the message.
On Branch 2, add a HubSpot module to write all brick values (meeting_score, key_decisions, action_items) to the Contact Activity.
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 Otter.ai Data in Semarize
Custom scoring frameworks, cross-meeting analytics, follow-through tracking, and building your own tools on structured meeting intelligence signals.
Knowledge-Grounded Consulting Framework Scoring
Delivery Methodology Verification
What Semarize generates
Your consulting firm records client workshops and strategy sessions. Partners need to know whether consultants are delivering against the engagement methodology — not just talking. Run every session transcript through a knowledge-grounded kit against your delivery methodology framework and the client’s SOW. Semarize scores methodology_adherence (did the consultant follow the prescribed framework?), client_participation (are clients contributing or is it a monologue?), actionable_output_density (concrete recommendations per hour), and scope_creep_detection (did discussion drift beyond the SOW?). After scoring 50 engagements, the data shows that sessions with methodology adherence above 0.75 produce 2.3x more actionable outputs — and clients rate those engagements 40% higher in post-project surveys.
Learn more about QA & ComplianceInternal Meeting Decision Tracking
Structured Decision Records
What Semarize generates
Your team makes critical decisions in internal meetings — pricing approvals, go/no-go calls on deals, resource allocation. Run internal meeting transcripts through a decision extraction kit. Semarize returns decision_made (the specific decision), decision_maker (who made it), decision_rationale (why), and action_owners (who’s responsible). A Notion database automatically populates with every decision from every meeting. Six months later, when someone asks “why did we approve that discount?” — the answer is structured and searchable.
Learn more about RevOpsConsultant Engagement Quality
Workshop Quality Scoring
What Semarize generates
Your consulting firm records client workshops and strategy sessions in Otter.ai. Partners need to know whether consultants are delivering value - not just talking. Run workshop transcripts through an engagement quality kit. Semarize scores each session on methodology_adherence (did they follow the framework?), client_participation_ratio (are clients contributing?), actionable_output_density (how many concrete recommendations per hour?), and scope_creep_detection (did discussion drift beyond the SOW?). The monthly partner review includes a quality scorecard for every engagement - no one needs to sit through 40 hours of recordings.
Learn more about QA & ComplianceCustom Knowledge Base Builder
Structured Product Intelligence
What Semarize generates
A product team lead vibe-codes a React app that ingests Semarize output from every Otter.ai product meeting. The app extracts feature_requests, bug_reports, technical_decisions, and architecture_choices as structured JSON. Each item gets categorized, deduplicated, and tagged with the meeting source. Over 3 months, the team builds a searchable knowledge base of 400+ product decisions - each with the original evidence span from the transcript. New team members onboard by querying decisions, not re-watching recordings.
Learn more about Data ScienceWatch out for
Common Challenges & Gotchas
These are the issues that come up most often when teams start extracting transcripts from Otter.ai at scale.
API access requires account manager approval
The Otter.ai REST API is in beta and not publicly self-serve. You need to contact your account manager to request access. This adds lead time to any integration project - plan for a provisioning delay before you can start building.
OAuth 2.0 token management
Access tokens expire and must be refreshed. If your integration doesn't handle token refresh gracefully, pipelines will fail silently when tokens expire. Implement automatic refresh logic and monitor for authentication errors.
Beta API stability and changes
Since the API is in beta, endpoints, response formats, and rate limits may change without notice. Pin your integration to specific response fields and build in error handling for unexpected schema changes.
Speaker identification accuracy
Speaker labels depend on audio quality, participant count, and whether speakers are registered in your Otter.ai workspace. Unregistered or overlapping speakers may be misidentified. Validate labels before using them for per-speaker analysis.
Manual export limitations
Manual exports (SRT, TXT, PDF) are fine for one-off needs but don't include structured metadata like speaker timestamps, action items, or summary data. For structured downstream processing, the API or Zapier integration is required.
Transcript availability timing
Live transcription is near real-time, but uploaded recordings require processing time. Attempting to fetch a transcript before processing completes returns incomplete data. Build in a polling mechanism or delay before fetching recently completed meetings.
Duplicate processing protection
Without idempotency checks, re-running an extraction flow can process the same meeting twice. Use meeting IDs as deduplication keys to ensure each transcript is handled exactly once in your pipeline.
FAQ
Frequently Asked Questions
Explore