API Comparison Table

Heading 1

Heading 2

Heading 3

Heading 4

Heading 5
Heading 6

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.

Block quote

Ordered list

  1. Item 1
  2. Item 2
  3. Item 3

Unordered list

Text link

Bold text

Emphasis

Superscript

Subscript

Pricing
Get started
Get started

Read more

Speech-To-Text

Transcribe phone calls and push them to HubSpot with Gladia and Zapier

TL;DR: Every wrong name or missed entity in a call transcript silently corrupts your CRM data downstream, and self-hosted pipelines compound this with GPU maintenance overhead and poor accuracy on accented speech. This guide shows you how to route call recordings from Twilio or Aircall through Zapier to our async API, run LLM extraction on the diarized transcript, and push structured deal properties and engagement logs to HubSpot without maintaining custom infrastructure. Multiple customers have the Gladia API layer running in under 24 hours. The remaining pipeline configuration time depends on your Zapier, LLM, and HubSpot setup complexity.

Speech-To-Text

Cutting transcription cost per audio hour for meeting assistants

TL;DR: Transcription cost and accuracy are critical drivers of unit economics for meeting assistant builders. Headline API rates are deceptive because hidden fees for diarization, translation, and billing increments routinely double the effective cost per hour. Self-hosting open-source models introduces GPU underutilization and DevOps overhead that can exceed managed API costs by approximately 3x at early-stage volume. Teams that switch to all-inclusive pricing (diarization, translation, and sentiment bundled at as low as $0.20/hr on our Growth plan) recover meaningful margin without waiting for enterprise-tier volume to justify the conversation.

Speech-To-Text

Scaling real-time STT for high-concurrency voice agents

TL;DR: Scaling real-time voice agents to hundreds of concurrent calls requires moving from stateless CPU-based autoscaling to stateful WebSocket connection management. The failure mode is predictable: architectures that handle test calls at low concurrency struggle when traffic spikes, producing latency spikes and dropped audio. The fix involves scaling on active connection counts, implementing ping/pong heartbeat monitoring to reclaim hanging sessions, and enforcing hard connection limits to protect downstream LLM and TTS layers. Additional capacity comes online without pre-provisioning, so the STT layer is not a fixed ceiling as session counts grow.

Transcribe phone calls and push them to HubSpot with Gladia and Zapier

Published on August 7, 2026
by Ani Ghazaryan
Transcribe phone calls and push them to HubSpot with Gladia and Zapier

TL;DR: Every wrong name or missed entity in a call transcript silently corrupts your CRM data downstream, and self-hosted pipelines compound this with GPU maintenance overhead and poor accuracy on accented speech. This guide shows you how to route call recordings from Twilio or Aircall through Zapier to our async API, run LLM extraction on the diarized transcript, and push structured deal properties and engagement logs to HubSpot without maintaining custom infrastructure. Multiple customers have the Gladia API layer running in under 24 hours. The remaining pipeline configuration time depends on your Zapier, LLM, and HubSpot setup complexity.

Building a production-ready call-to-CRM pipeline is a problem most engineering teams over-engineer. They start with a self-hosted model, navigate infrastructure overhead and eventually discover the accuracy on accented conversational speech is unacceptable for structured CRM data. By the time a wrong company name silently propagates into a deal stage or coaching scorecard, the damage is already downstream.

This guide takes a different path: combine our async transcription API with Zapier, a structured LLM prompt, and HubSpot's engagement API to go from raw call audio to enriched CRM records. The full stack runs on managed infrastructure, costs a predictable per-hour rate with diarization included, and handles multilingual sales calls without manual language tagging.

What you'll build and why it matters

Mapping the transcription workflow

The data flow runs through the following stages. Understanding the sequence before writing a single line of configuration prevents the most common integration errors.

  1. Telephony capture: Twilio or Aircall records the call. For best diarization results, configure dual-channel recording. In Twilio Flex, dual-channel recording places the customer on the left channel and the agent on the right. If you are using standard Twilio Voice recording outside of Flex, channel assignment depends on your recordingTrack configuration and call leg, so confirm the channel order for your specific setup before relying on it for diarization. For Aircall, check your recording channel configuration before building the pipeline.
  2. Webhook trigger: When the recording completes, the telephony provider fires a POST request to a Zapier webhook URL containing the recording URL, call duration, and caller metadata.
  3. Gladia async transcription: Zapier sends the audio_url to our /v2/transcription endpoint. The API returns a transcription id and result_url instantly, and processing typically completes in under 60 seconds for a one-hour recording.
  4. LLM enrichment: The diarized transcript (with speaker labels) feeds a structured prompt that extracts the call insights your pipeline needs. The fields are defined by your prompt template in Step 4.
  5. HubSpot sync: A Zapier action writes the extracted fields to the matching Deal or Contact record and creates a timestamped engagement log with the full transcript, both configured in Step 5 of this guide.

Async processing is the right choice for this pipeline. It enables full-context speaker diarization (powered by pyannoteAI's Precision-2 model), produces higher accuracy on noisy telephony audio by analyzing the complete recording before committing to a transcript, and introduces no latency risk to the live call. For CRM sync workflows, async transcription delivers the accuracy needed for reliable downstream data without requiring real-time processing overhead.

Hidden costs of DIY integrations

Self-hosting an open-source model introduces infrastructure overhead, scaling challenges, and DevOps capacity demands that compound over time. The accuracy gap is the harder argument to ignore: open-source models on self-hosted setups report over 10% word error rate, which means every downstream LLM analysis starts from corrupted input.

If HubSpot's native calling and conversation intelligence cover your team's needs, available on Professional and Enterprise tiers of Sales Hub or Service Hub, you may not need this pipeline at all. The guide below is for teams that need custom LLM extraction, multilingual accuracy, or control over where audio is processed and stored.

Table 1: Self-hosted vs managed API

Dimension Self-hosted model Gladia managed API
Setup time Weeks (40+ engineering hours est.) Sub-24-hour integration
Monthly maintenance Estimated 2-4 hrs/month Minimal
Accuracy on real business audio High error rates 6.4% WER on Earnings22 (lowest of any provider tested). #1 vs AssemblyAI, ElevenLabs, Deepgram, Mistral, and Speechmatics on real customer recordings (Solaria-3)
GPU idle costs Constant at scale Zero
Diarization Requires separate model pyannoteAI Precision-2 included
Compliance certifications None pass-through SOC 2 Type II, HIPAA, GDPR, ISO 27001
Data retraining risk N/A Never on Growth/Enterprise plans
Customization High Medium-high (LLM configurable)
Pricing GPU + engineering overhead Starter at $0.61/hr async. See pricing for Growth and Enterprise rates

Aircall cut transcription time by 95% (from 30 minutes to 1.5 minutes per call) after switching to our API. They now process over 1M calls per week using Gladia as the foundational layer for search, AI summaries, sentiment analysis, and agent coaching, all from a single integration point.

Table 2: Total cost of ownership

Monthly volume DIY (self-hosted, est.) Gladia managed
1,000 hrs/mo GPU + engineering overhead ~$610 (Starter, $0.61/hr)
10,000 hrs/mo GPU + 5-10 eng. hrs/mo from ~$2,000 (Growth, at the lowest published rate. Actual cost depends on commitment tier)
50,000 hrs/mo Dedicated GPU cluster + eng. Enterprise (contact us)

Pre-flight checklist for your integration build

Setting up call recording pipelines

Before writing a single Zapier step, verify your audio pipeline meets these production requirements.

  1. Channel separation: Configure dual-channel recording when possible so the customer is on one channel and the agent on the other. Twilio supports dual-channel call recordings, verify that stereo recording is enabled on your phone number configuration in the Twilio console before building the pipeline. For Aircall, check your recording configuration for stereo output support. This directly improves diarization accuracy by giving the model clean per-speaker audio rather than a mixed mono stream.
  2. Audio format: Use WAV or FLAC for lossless quality. Our API accepts WAV, M4A, FLAC, and AAC files up to 135 minutes and 1,000MB, plus publicly accessible audio URLs per the transcription init reference.
  3. Public URL accessibility: Confirm the recording URL returned by your telephony provider is publicly accessible before passing it to our API. Inaccessible audio URLs are a common cause of failed transcription jobs. If your telephony provider uses signed URLs with expiration times, confirm the URL will still be valid by the time the Zapier step passes it to our API. Short-lived URLs can expire during queue delays.
  4. Latency expectations: Our async API processes approximately 60 seconds per hour of audio content. A 30-minute sales call is ready for CRM sync in roughly 30 seconds.

Set up secure Gladia API connectivity

Retrieve your API key from our console. New users receive a one-time credit that covers roughly 80+ hours of async transcription at the Starter rate, which is enough to validate the entire pipeline on real audio before committing.

If you're using an AI coding agent like Cursor or Claude Code to build this integration, run npx skills add gladiaio/skills before you start. This installs the Gladia Skills context files, which give your agent accurate knowledge of the pre-recorded transcription API and prevent hallucinated parameter names.

Zapier and HubSpot authentication

Set up your Zapier trigger using "Webhooks by Zapier" (Catch Hook event). Zapier generates a unique webhook URL: copy it, and configure your telephony provider to POST to this URL on recording completion. Authenticate Gladia actions using your API key in a custom request header (x-gladia-key: YOUR_API_TOKEN), following the Zapier integration guide for full configuration details.

For HubSpot, connect your account in Zapier. The installing user must be a Super Admin or have the App Marketplace Access permission in HubSpot. During OAuth, approve the requested scopes for contacts and engagements. If the installation fails with a permissions error, have a Super Admin complete the OAuth flow instead. If you plan to populate custom Deal properties (such as Call Summary, Next Steps, or Deal Stage Recommendation), create them in HubSpot before building the Zap, because mapping to non-existent properties fails silently in Zapier's test mode.

Step 1: route call streams to your stack

Configuring Twilio webhook endpoints

In your Twilio console, navigate to your phone number configuration and set the recording status callback URL to your Zapier webhook, targeting the recording-completed event, as detailed in the Twilio integration documentation. For Aircall, configure a webhook in the Aircall Developer Hub targeting the call.ended event. Recording data is included in the payload automatically when a recording is available for the call.

Capture and validate the recording payload

The incoming Twilio payload contains the fields your pipeline needs:

```json
{
  "RecordingUrl": "https://api.twilio.com/2010-04-01/Accounts/AC.../Recordings/RE...",
  "RecordingDuration": "187",
  "RecordingChannels": "2"
}
```

Map RecordingUrl, RecordingDuration, and RecordingChannels as Zapier variables. Add a Zapier Filter step to verify RecordingUrl is not empty and RecordingDuration exceeds a minimum threshold (for example, 30 seconds) to avoid transcribing incomplete or very short calls before the audio file is fully written to storage.

Step 2: name your variables for HubSpot mapping

Define the metadata schema for HubSpot

Assign clean Zapier variable names for downstream mapping at this step:

  • recording_url for the RecordingUrl field
  • call_duration_seconds for the RecordingDuration field
  • caller_phone for the Caller field, if present in your webhook payload
  • called_phone for the Called field, if present in your webhook payload
  • call_sid for the CallSid field, if present in your webhook payload

Use Zapier's built-in Formatter action (Text > URL Encode) if your RecordingUrl contains query parameters that need escaping before passing to our API. These variables feed the HubSpot "Find Contact" lookup in Step 5 and populate the engagement log.

Step 3: automate audio conversion with Gladia

Build the transcription request body

Add a Zapier "Webhooks by Zapier" action (POST event) targeting the Gladia transcription endpoint. Set the Content-Type header to application/json and your authentication header to x-gladia-key: YOUR_API_TOKEN.

```json
{
  "audio_url": "{{recording_url}}",
  "diarization": true,
  "diarization_config": {
    "min_speakers": 2,
    "max_speakers": 2
  },
  "language_config": {
    "languages": [],
    "code_switching": false
  },
  "callback_url": "YOUR_ZAPIER_CALLBACK_WEBHOOK_URL"
}
```

The API returns instantly with a result_url.

Enable speaker separation in Gladia

Setting diarization: true activates speaker attribution powered by pyannoteAI's Precision-2 model. Each utterance in the response includes a speaker field with an integer index (0 for the first speaker detected, 1 for the second). For a two-party sales call, set max_speakers: 2 to constrain inference and improve accuracy.

For dual-channel recordings, passing the stereo file can improve speaker separation and reduce cross-talk in the diarization output compared to mixed mono. Per-channel audio separation reduces cross-talk bleed that commonly affects telephony recordings. If your recording provider only outputs mono, set max_speakers: 2 explicitly rather than relying on automatic detection.

Choose the right model for your audio

For European business audio in English, French, German, Spanish, or Italian, select Solaria-3. Refer to the transcription init reference for the current model selection parameter and accepted enum values before adding "model": "solaria-3" to your request body. Solaria-3 ranks #1 on real customer English audio at 9.6% WER, ahead of AssemblyAI, ElevenLabs, Deepgram, and Mistral, per our published benchmark methodology. Independently, we hold the #2 position on the Hugging Face Open ASR Leaderboard's private conversational dataset.

For global teams where representatives and prospects switch languages mid-conversation (common in APAC and LatAm sales operations), use Solaria-1. It supports true mid-conversation code-switching across all 100+ supported languages. Solaria-1 is also the correct choice for any real-time streaming path. Test your own recordings across providers using the blind STT comparison tool, then validate the result against the async benchmark methodology, which covers 74+ hours of audio across 7 datasets with an open, reproducible methodology, before committing to any provider.

Monitor transcription job status

You can configure a callback_url in your transcription request to receive a notification when processing completes. The callback_url can point to any publicly accessible HTTP endpoint. In a Zapier pipeline, a second Catch Hook is a common choice, but any endpoint that accepts a POST request will work. When transcription finishes, our API fires a POST to that URL with the transcription_id. Once the callback fires, use the result_url from the original response to retrieve the full transcription result, via a follow-up Zap, a serverless function, or any HTTP client in your stack. For production volumes, the callback approach reduces unnecessary API calls and avoids polling intervals, though it does introduce a dependency on your receiving endpoint being available when the event fires. If uptime is a concern, add retry logic or a fallback poll to result_url to catch any missed callbacks.

Step 4: automating deal updates via LLM summary

Normalization for downstream LLM prompts

Parse the result.transcription.utterances array from the Gladia response. How you format the utterances for the LLM is up to your implementation. One common pattern is to prefix each utterance with its speaker index and place it on a new line (for example, Speaker 0: {text}), producing a labeled block the LLM can parse. Adjust the format to match whatever structure your chosen LLM prompt performs best with. For calls using the Audio-to-LLM pipeline, you can extract summaries and entities directly from our API without a separate LLM call.

When formatting transcripts for LLM analysis, consider filtering out filler utterances (backchannel responses like "mm-hmm" or "okay") before sending to the LLM. These utterances carry no propositional content, so excluding them keeps prompt input focused on the substantive exchange between speakers.

Structure LLM calls for HubSpot sync

The template below is a starting point. Adjust the field list and deal stage values to match your team's actual HubSpot pipeline configuration.

Use Zapier's OpenAI or ChatGPT action with the following prompt template:

```
You are a sales intelligence assistant. Analyze this sales call transcript and extract the following as JSON:
- "summary": 2-3 sentence summary of the call
- "deal_stage": recommended stage, use the exact stage names configured in your HubSpot pipeline (e.g., "Discovery", "Qualified", "Proposal Sent", "Negotiation", "Closed Won")
- "next_steps": specific action items the speakers committed to, as a plain string
- "budget_mentioned": true/false
- "decision_maker_present": true/false

Transcript:
{{formatted_transcript}}

Return only valid JSON. No explanation.
```

Set the response format to JSON in your OpenAI action to prevent parsing failures. Speaker attribution matters here: a budget mention from Speaker 1 (the prospect) carries different weight than the same phrase from Speaker 0 (the agent). A well-formed diarized transcript gives the LLM the structural context to distinguish who said what, which is why transcription accuracy at the first layer sets the ceiling for everything downstream, including named entity extraction of account numbers and intents.

Mapping LLM outputs to HubSpot CRM

Use Zapier's built-in JSON parser or a Code step to extract individual fields from the LLM JSON response. Assign each field to a named Zapier variable:

  • llm_summary = summary
  • llm_deal_stage = deal_stage
  • llm_next_steps = next_steps

These variables feed the HubSpot property mapping steps directly.

Step 5: map transcription data to HubSpot fields

Mapping call insights to deal records

Add a HubSpot "Find Deal" action in Zapier. Match on the contact's phone number (called_phone or caller_phone) using HubSpot's search filter. If no deal is found, use Zapier's Paths to either create a new deal or alert your team via Slack rather than silently dropping the transcription.

Map LLM variables to Deal properties

Map your Zapier variables to the custom HubSpot Deal properties you created in the pre-flight step:

LLM variable HubSpot property
llm_summary Call Summary (text)
llm_next_steps Next Steps (text)
llm_deal_stage Deal Stage (dropdown, map to HubSpot enum values)
recording_url Recording URL (URL field)

Pushing call logs to HubSpot records

Add a HubSpot "Create Engagement (Call)" action. Map call_duration_seconds to the duration field, recording_url to the recording URL field, and the full formatted transcript to the body field. Set the engagement type to "Call" and associate it with the matched contact and deal IDs from the previous step. This creates a timestamped activity log in the HubSpot timeline with the transcript attached.

Prevent data loss with error checks

HubSpot's Calling Extensions endpoint (/extensions/calls/v1/transcriptions/:recordingId) is a legacy path not covered by Zapier's standard HubSpot integration. Use the Create Engagement action instead.

Configure a Zapier "Paths" step after each HubSpot write action. On failure (status code 4xx or 5xx), send a Slack notification to your engineering channel with the call_sid and error message. Retry logic for transient HubSpot API errors can be handled with Zapier's built-in "Delay" and re-trigger pattern.

Evaluating long-term integration costs

Deepgram's per-minute base rate looks competitive until you add diarization, sentiment analysis, and redaction as separate line items. AssemblyAI's granular add-on model means calculating the true monthly cost at 10,000 hours requires a spreadsheet. Our pricing bundles diarization, translation, named entity recognition, sentiment analysis, and summarization at the base rate on Starter and Growth plans, per our pricing page.

For data governance: on Growth and Enterprise plans, customer audio is never used for model training, with no opt-out required. On the Starter plan, data can be used for training by default. Our compliance documentation covers SOC 2 Type II, HIPAA, GDPR, and ISO 27001 in full, with multi-region data residency configurable to EU-west or US-west. Gravite, a French CCaaS quality-monitoring platform, cut review time by 93% (approximately 15 minutes to 1 minute per call) while transcribing 50,000 hours of audio per year, choosing us specifically for French-first accuracy and European data sovereignty at production scale. For teams handling regulated sales conversations, move to Growth or Enterprise before pushing production call volume through the pipeline.

Start with €50 in free credits and have your integration in production in less than a day.

FAQs

What accuracy should we expect for accented speech on business calls?

Our Solaria-3 model leads on real customer English audio accuracy per our published benchmarks. For non-European languages and code-switching, Solaria-1 is the right choice. It handles mid-conversation language changes automatically and covers languages and regions beyond the European business audio focus of Solaria-3.

How long does it take to transcribe a call?

Our async API processes approximately 60 seconds per hour of audio content, meaning a typical 30-minute sales call is transcribed and ready for CRM sync in roughly 30 seconds.

What should we verify before building this integration?

Confirm your telephony provider supports webhook notifications for recording-completed events with a publicly accessible RecordingUrl. Verify that your HubSpot custom Deal and Contact properties are created with the correct data types (text, dropdown, URL) before building the Zap, as mapping to non-existent or mistyped properties fails silently in Zapier test mode.

Can this pipeline handle bilingual sales calls?

Yes. Solaria-1 supports true mid-conversation code-switching, automatically detecting and transcribing language changes without requiring a manual language parameter in your API request. It covers 100+ supported languages, making it the right model for global sales teams where representatives and prospects switch languages mid-conversation.

Does Gladia's call audio train your models?

On Growth and Enterprise plans, customer audio is never used for model training. This is the default behavior, not an opt-out toggle. On the Starter plan, data can be used for training by default. We offer configurable data residency in EU and US regions, and our full compliance documentation covers SOC 2 Type II, HIPAA, GDPR, and ISO 27001.

Key terms

Word error rate (WER): The percentage of words incorrectly transcribed in an audio file, measuring transcription accuracy. Lower WER indicates higher accuracy. For example, 10% WER means roughly 1 in 10 words contains an error.

Diarization: Speaker attribution across an audio recording, distinguishing who said what and when. Our async API uses pyannoteAI's Precision-2 model to label each utterance with a speaker index.

Webhook payload: The JSON data structure sent via HTTP POST when an event occurs, such as a completed call recording. It contains the metadata and URLs required for downstream processing steps in Zapier.

Channel separation: Recording each participant in a conversation on a separate audio channel (customer on channel one, agent on channel two). Clean channel separation improves diarization accuracy by giving the model isolated per-speaker audio.

Async transcription: Batch processing of a complete audio file after recording, as opposed to real-time streaming. It enables full-context analysis for higher accuracy, speaker diarization, and multilingual consistency.

Engagement log: A timestamped activity record in HubSpot's CRM timeline, such as a call, email, or meeting. It links to the associated contact and deal records and can carry the full transcript in the body field.

Code-switching: Mid-conversation language changes by a speaker, for example shifting from English to French within the same sentence or turn. Solaria-1 detects and transcribes these changes automatically without a manual language parameter.

CCaaS: Contact Center as a Service. Cloud-based customer service platforms that handle phone, chat, and email interactions. CCaaS platforms often integrate transcription APIs for quality monitoring, agent coaching, and compliance recording.

Contact us

280
Your request has been registered
A problem occurred while submitting the form.

Read more