I'm wondering if anyone has found a way to retreive the diarized transcripts that are generated by HubSpot after a HubSpot Call is made?
I am aware and able to dowload the call recording url and can pass it to an LLM for transcription, but I'd like to avoid having to go down that path if possible.
I've tried the suggestions from other threads (see belwo) but I can never retrieve a transcript because hs_call_transcription_id is null for every call.
GET /crm/v3/objects/calls/{callId}?properties=hs_call_transcription_id
then,
GET /crm/v3/objects/notes/{hs_call_transcription_id}?properties=hs_note_body
Hi @syrenn_dev , you’re not doing anything wrong. What you’re running into is a real platform limitation rather than a bug in your requests.
As of how HubSpot works today in 2025, diarized call transcripts generated by HubSpot are not reliably exposed via public APIs. The hs_call_transcription_id property exists, but in many portals it remains null even when a transcript is visible in the UI. That’s because HubSpot’s call transcription pipeline is asynchronous and tightly coupled to internal note objects that are not consistently created or linked in a way the CRM APIs can access. In other words, the UI has access to the transcript, but the API often does not.
A few important clarifications that usually explain this behavior. First, transcripts are only generated for HubSpot-native calls when call recording and AI transcription are enabled, and typically require Sales Hub or Service Hub Professional or Enterprise. Even then, diarization (speaker separation) is handled by HubSpot’s internal AI services and is not guaranteed to produce an API-accessible note.
Second, even when a transcript note exists, HubSpot does not currently guarantee that hs_call_transcription_id will be populated on the call object. This is why your second request to /crm/v3/objects/notes/{id} never works. There is simply no ID to follow.
HubSpot has never officially documented a supported way to fetch diarized transcripts via API, only call recordings and basic call metadata. So today, if you need programmatic access to the transcript text, the only reliable option is exactly what you’re trying to avoid: downloading the recording and transcribing it yourself. Many teams do this selectively, only for calls that matter, to keep costs down. Hopefully this saves you more debugging time chasing a property that isn’t consistently wired yet.
Did my answer help? Please mark it as a solution to help others find it too.
Ruben Burdin HubSpot Advisor Founder @ Stacksync Real-Time Data Sync between any CRM and Database
Hi @syrenn_dev , you’re not doing anything wrong. What you’re running into is a real platform limitation rather than a bug in your requests.
As of how HubSpot works today in 2025, diarized call transcripts generated by HubSpot are not reliably exposed via public APIs. The hs_call_transcription_id property exists, but in many portals it remains null even when a transcript is visible in the UI. That’s because HubSpot’s call transcription pipeline is asynchronous and tightly coupled to internal note objects that are not consistently created or linked in a way the CRM APIs can access. In other words, the UI has access to the transcript, but the API often does not.
A few important clarifications that usually explain this behavior. First, transcripts are only generated for HubSpot-native calls when call recording and AI transcription are enabled, and typically require Sales Hub or Service Hub Professional or Enterprise. Even then, diarization (speaker separation) is handled by HubSpot’s internal AI services and is not guaranteed to produce an API-accessible note.
Second, even when a transcript note exists, HubSpot does not currently guarantee that hs_call_transcription_id will be populated on the call object. This is why your second request to /crm/v3/objects/notes/{id} never works. There is simply no ID to follow.
HubSpot has never officially documented a supported way to fetch diarized transcripts via API, only call recordings and basic call metadata. So today, if you need programmatic access to the transcript text, the only reliable option is exactly what you’re trying to avoid: downloading the recording and transcribing it yourself. Many teams do this selectively, only for calls that matter, to keep costs down. Hopefully this saves you more debugging time chasing a property that isn’t consistently wired yet.
Did my answer help? Please mark it as a solution to help others find it too.
Ruben Burdin HubSpot Advisor Founder @ Stacksync Real-Time Data Sync between any CRM and Database
Thanks for reaching to the community on this regard !😊 It seems that your end goal is to retrieve the diarized transcripts generated by HubSpot after your team makes a HubSpot Call. Does that sound correct ?
You mentioned that using the endpoints below returns a null hs_call_transcription_id even after attempting the steps on this thread.
GET /crm/v3/objects/calls/{callId}?properties=hs_call_transcription_id
then,
GET /crm/v3/objects/notes/{hs_call_transcription_id}?properties=hs_note_bod
It might be worth to share the full call you're making ( redacting any personal information) so the community can assist. I'm also pinging some of our Top Community Experts: @AMARIE@BarryGrennan@daveroma👋 do you have any suggestions for best next steps in this case ? Thank you in advance !