Retreiving Tanscript

syrenn_dev
Participant

Hello,

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

 
Any help would be appreciated!

related docs: 
http://community.hubspot.com/t5/APIs-Integrations/Retrieving-call-transcripts/m-p/1226523

https://community.hubspot.com/t5/APIs-Integrations/Retrieving-call-transcripts/m-p/766051


0 Upvotes
1 Accepted solution
RubenBurdin
Solution
Top Contributor

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.

 

This is consistent with what others have reported in recent community threads and aligns with the current documentation gaps around calling data (https://developers.hubspot.com/docs/api-reference/crm-calls-v3/guide

 

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 Ruben Burdin
HubSpot Advisor
Founder @ Stacksync
Real-Time Data Sync between any CRM and Database
Stacksync Banner

View solution in original post

4 Replies 4
RubenBurdin
Solution
Top Contributor

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.

 

This is consistent with what others have reported in recent community threads and aligns with the current documentation gaps around calling data (https://developers.hubspot.com/docs/api-reference/crm-calls-v3/guide

 

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 Ruben Burdin
HubSpot Advisor
Founder @ Stacksync
Real-Time Data Sync between any CRM and Database
Stacksync Banner
syrenn_dev
Participant

Thanks for the thorough reply, @RubenBurdin. I ended up using the LLM approach

0 Upvotes
JOB3
Community Manager
Community Manager

Hi @syrenn_dev

 

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 ! 

 

Josefina, Community Moderator 

syrenn_dev
Participant

Yes, my end goal is to retrieve the diarized transcripts generated by HubSpot after my team makes a HubSpot Call.

Here is a simplified request given a call id:

const myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
myHeaders.append("Authorization", "Bearer REDACTED");

const requestOptions = {
  method: "GET",
  headers: myHeaders,
  redirect: "follow"
};

fetch("https://api.hubapi.com/crm/v3/objects/calls/273684655854?properties=hs_call_transcription_id", requestOptions)
  .then((response) => response.text())
  .then((result) => console.log(result))
  .catch((error) => console.error(error));


Here is the response:

{
    "id": "273684655854",
    "properties": {
        "hs_call_transcription_id": null,
        "hs_createdate": "2025-12-04T20:44:50.286Z",
        "hs_lastmodifieddate": "2025-12-04T20:46:10.701Z",
        "hs_object_id": "273684655854"
    },
    "createdAt": "2025-12-04T20:44:50.286Z",
    "updatedAt": "2025-12-04T20:46:10.701Z",
    "archived": false,
    "url": REDACTED
}

 

0 Upvotes