Get Your Data
Grain - How to Get Your Conversation Data
A practical guide to getting your conversation data out of Grain - covering API access, recording retrieval, webhook-triggered flows, transcript extraction, and how to route structured data into your downstream systems.
What you'll learn
- What conversation data you can extract from Grain - transcripts, recordings, intelligence notes, and highlight metadata
- How to access data via the Grain Public API - OAuth authentication, endpoints, and recording retrieval
- Three extraction patterns: historical backfill, incremental polling, and webhook-triggered
- How to connect Grain data pipelines to Zapier, n8n, and Make
- Advanced use cases - highlight validation, customer voice trends, meeting effectiveness, and deal room intelligence
Data
What Data You Can Extract From Grain
Grain captures more than just the recording. Every meeting produces a set of structured assets that can be extracted via API - the transcript itself, AI-generated intelligence notes, highlight clips, and contextual metadata about the meeting and its participants.
Common fields teams care about
API Access
How to Get Transcripts via the Grain API
Grain exposes recordings and transcripts through a REST API at api.grain.com/_/public-api/. The workflow is: authenticate with a Bearer token (OAuth), then fetch recordings by ID to retrieve transcripts and intelligence notes.
Authenticate
Grain uses Bearer Token (OAuth) authentication. Generate an API token from your Grain workspace settings and pass it in the Authorization header on every request.
Authorization: Bearer <your_grain_api_token> Content-Type: application/json
Fetch a recording by ID
Call the recording endpoint with a specific recording ID. The response includes the transcript, intelligence notes, and metadata about the meeting.
GET https://api.grain.com/_/public-api/recordings/<recording_id> // Response includes: // - transcript (full text) // - intelligence_notes (AI-generated) // - metadata (date, duration, participants)
The response returns the recording object with transcript, intelligence_notes, title, duration, and participant data. Use recording IDs from webhook events or your stored list of known recordings.
Set up webhooks for real-time events
Register webhook endpoints in your Grain workspace settings. Grain fires events for key actions so you can process data as soon as it becomes available.
// Supported webhook events: // - recording.added → New recording processed // - recording.removed → Recording deleted // - highlight.added → New highlight created // - highlight.updated → Highlight modified // - highlight.removed → Highlight deleted
Each webhook payload includes the resource ID and metadata. Use the recording.added event as your trigger for transcript extraction - this fires after Grain finishes processing the recording and the transcript is available.
Handle rate limits and processing timing
Rate limits
Grain enforces API rate limits. When you receive a 429 response, back off and retry after a delay. For bulk operations, pace requests and implement exponential backoff to avoid hitting ceilings during backfills.
Processing timing
Transcripts are not available the instant a meeting ends. Grain processes recordings asynchronously - use the recording.added webhook as your signal that the transcript is ready, rather than polling immediately after a call ends.
Patterns
Key Extraction Flows
There are three practical patterns for getting transcripts out of Grain. 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 recordings
Compile a list of recording IDs from your Grain workspace - either from your internal tracking system, CRM integration logs, or by exporting from the Grain UI
For each recording ID, call the Grain API to fetch the recording with transcript and intelligence notes. Pace requests to stay within rate limits
Store each transcript with its recording metadata (recording ID, date, participants, duration) in your data warehouse or object store
Once the backfill completes, run your analysis pipeline against the stored data in bulk
Set up webhooks for ongoing processing so new recordings are handled automatically going forward
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, check for new recording IDs that have been added since your last successful poll - sourced from webhook event logs, CRM sync records, or a tracking table
Fetch transcripts and intelligence notes for any new recording IDs. Use the recording 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 checkpoint to the current run time for the next poll cycle
Webhook-Triggered
Near real-time on recording completion
Register a webhook endpoint in your Grain workspace settings. Subscribe to the recording.added event - this fires when Grain finishes processing a recording and the transcript is available
When the webhook fires, parse the event payload to extract the recording ID and metadata
Immediately fetch the transcript and intelligence notes via the Grain API using the recording ID from the event
Route the transcript and metadata downstream - to your analysis pipeline, CRM updater, or automation tool
Automation
Send Grain Transcripts to Automation Tools
Once you can extract transcripts from Grain, 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 Grain trigger through Semarize evaluation to CRM, Slack, or database output.
Grain → Zapier → Semarize → CRM
Detect new Grain recordings 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. Choose "Webhooks by Zapier" as the trigger and select "Catch Hook". Copy the webhook URL and register it in your Grain workspace settings for the recording.added event.
Add a "Webhooks by Zapier" Action (Custom Request) to fetch the recording from Grain. Set method to GET, URL to https://api.grain.com/_/public-api/recordings/{{recording_id}}, and add your Bearer token header.
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.
Grain → n8n → Semarize → Database
Receive Grain webhook events in n8n, fetch the full transcript, send it to Semarize for analysis, then write the structured scores and signals to your database. n8n's native loop support handles batch processing gracefully.
Setup steps
Add a Webhook node as the workflow trigger. Copy the webhook URL and register it in your Grain workspace settings for the recording.added event.
Add an HTTP Request node to fetch the recording from Grain. Set method to GET, URL to https://api.grain.com/_/public-api/recordings/{{$json.recording_id}}, and configure your Bearer token auth.
Add a Code node (JavaScript) to extract the transcript from the Grain response. Clean up any formatting and prepare the text for analysis.
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 recording_id as the primary key for upserts.
Activate the workflow. Monitor the first few runs to verify Grain webhooks are arriving and Semarize responses are writing correctly.
Grain → Make → Semarize → CRM + Slack
Receive Grain webhook events in Make, fetch the transcript, send it 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 Webhooks module (Custom webhook) as the trigger. Copy the URL and register it in your Grain workspace settings for the recording.added event.
Add an HTTP module to fetch the recording from Grain. Set method to GET, URL to https://api.grain.com/_/public-api/recordings/{{recording_id}}, and configure your Bearer token auth.
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 recording 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.
Test the scenario end-to-end by triggering a test recording in Grain.
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 Grain Data in Semarize
Highlight quality scoring, longitudinal trend analysis, multi-dimensional meeting effectiveness, and building your own tools on structured conversation data.
Highlight Validation and Scoring
Quality Assurance for Highlights
What Semarize generates
Grain lets team members create highlights from meetings — but highlights are subjective and inconsistent. One person's "key moment" is another's filler. Run every meeting transcript through a highlight quality kit. Semarize scores each auto-detected highlight for business_relevance (does it relate to a deal signal?), actionability (does it contain a commitment or decision?), and accuracy (does the highlight summary match the transcript evidence?). After scoring 500 highlights across your team, the data shows that only 38% of manual highlights are actually business-relevant. Grain becomes the recording layer; Semarize becomes the quality layer.
Learn more about QA & ComplianceCustomer Voice Trend Analysis
Longitudinal Sentiment Tracking
What Semarize generates
Your CS team records every customer call in Grain. Individual call summaries are useful — but what about trends across accounts? Run 6 months of transcripts through a customer sentiment kit. Semarize tracks satisfaction_trajectory, feature_request_frequency, churn_language_density, and expansion_readiness per account over time. A monthly report shows that Account X’s satisfaction dropped from 82 to 41 over 4 months while feature requests tripled — a clear churn signal that surfaces only when you analyze longitudinally. The CS team intervenes before the renewal conversation.
Learn more about Customer SuccessSales Meeting Effectiveness Index
Multi-Dimension Scoring
What Semarize generates
Your sales team runs 300 meetings a month through Grain. But meeting count isn't a KPI — meeting quality is. Run every sales meeting through an effectiveness kit. Semarize scores each for discovery_depth (how well were pain points uncovered?), stakeholder_engagement (did decision-makers speak?), competitive_positioning (was differentiation articulated?), and momentum_maintained (was energy consistent throughout?). Reps get a personal effectiveness index that trends over time. The top AE scores 84 on average; the team average is 61. The gap analysis shows that discovery_depth explains 70% of the score variance. Training shifts to focus on discovery skills.
Learn more about Sales CoachingCustom Deal Room Intelligence
Structured Deal Context
What Semarize generates
A sales ops manager vibe-codes a Notion-integrated deal room that pulls Semarize scores from every Grain recording associated with an opportunity. Each deal room page auto-populates with: conversation health score (composite of 6 Bricks), key risk signals with evidence quotes, stakeholder map (who attended which calls), and meeting momentum trend. When a prospect's CFO attended the last two calls but went silent, the deal room flags it. Pipeline reviews happen in the deal room, not in Grain — because the data is structured, contextual, and connected to the deal narrative.
Learn more about RevOpsWatch out for
Common Challenges & Gotchas
These are the issues that come up most often when teams start extracting transcripts from Grain at scale.
Business plan required for API access
Grain's Public API is only available on the Business plan at $29/seat/month. Teams on Free or Pro plans cannot access the API, which limits automation options to manual exports or native integrations only.
OAuth token management
Grain uses Bearer Token (OAuth) authentication. Tokens can expire or be revoked. Implement token refresh logic and handle 401 responses gracefully to avoid silent failures in automated pipelines.
Recording processing delay
Grain processes recordings asynchronously after a meeting ends. Attempting to fetch a transcript too soon will return incomplete data. Use webhooks (recording added) as your trigger rather than polling immediately after a call.
Limited bulk listing endpoints
The Grain API is oriented around fetching individual recordings by ID rather than bulk listing by date range. You may need to combine webhook events with stored recording IDs to build a comprehensive extraction pipeline.
Webhook reliability and retries
Webhook deliveries can fail due to network issues or endpoint downtime. Implement idempotent handlers and use recording IDs as deduplication keys. Consider a periodic reconciliation poll to catch any missed events.
Intelligence notes vs. raw transcript
Grain provides both raw transcripts and AI-generated intelligence notes. Decide which data source to use for your analysis — raw transcripts for full-fidelity analysis, or intelligence notes for pre-summarized context. Mixing them without clarity can produce inconsistent results.
Integration ecosystem differences
Grain's native integrations (HubSpot, Salesforce, Slack, Zapier) push specific data formats. When building custom pipelines via the API, the data structure may differ from what native integrations provide. Test and validate the API response shape before building downstream logic.
FAQ
Frequently Asked Questions
Explore