
Transcripción en HubSpot: rutas de integración verificadas
Summarize this article with:
Conversation Intelligence de HubSpot (Sales Hub Professional a 90 $/usuario/mes) transcribe automáticamente las llamadas realizadas desde su marcador nativo, Zoom y Google Meet. Para llamadas desde marcadores externos, grabaciones subidas o idiomas fuera de su cobertura, necesitas enviar las transcripciones mediante la Calls API. Esta guía cubre ambas rutas: cuándo apoyarte en CI nativo y cuándo construir tú mismo el pipeline de webhook a engagement, con los IDs de asociación corregidos y un handler completo funcional.
La ruta más rápida para tener transcripciones de llamadas en HubSpot depende del origen de tus llamadas. Si tu equipo llama desde la herramienta de llamadas nativa de HubSpot, Zoom o Google Meet, Conversation Intelligence integrado de HubSpot se encarga de la transcripción automáticamente en los planes Professional y Enterprise. Si usas un marcador externo, recibes llamadas entrantes en una plataforma de terceros o quieres rellenar con grabaciones de Gong, Zoom Cloud o un bucket de S3, tendrás que enviar las transcripciones tú mismo mediante la Calls API.
Esta guía cubre ambas rutas.
Cuándo basta Conversation Intelligence nativo
HubSpot Sales Hub Professional (90 $ por usuario al mes, facturado anualmente) incluye Conversation Intelligence, que te da hasta 1.500 horas de transcripción por cuenta al mes. Las llamadas se transcriben automáticamente cuando se realizan a través de:
- La herramienta de llamadas integrada de HubSpot
- La integración nativa de Zoom (las grabaciones de reuniones se sincronizan automáticamente)
- Google Meet (Professional y Enterprise)
- Algunos proveedores de llamadas de terceros listados en el marketplace de HubSpot
En esos escenarios obtienes transcripciones adjuntas a la línea de tiempo del contacto sin escribir una sola línea de código. El responsable puede abrir un contacto, desplazarse por el feed de actividad y leer o buscar en la transcripción justo después de la llamada.
Las limitaciones: CI requiere una licencia de pago de Sales Hub o Service Hub por usuario, no transcribe llamadas de marcadores fuera de la lista compatible y no puede procesar grabaciones que subas manualmente desde un sistema de archivos.
Mi opinión: si todo tu equipo ya usa el marcador de HubSpot o Zoom a través de HubSpot, CI nativo es la elección obvia. La ruta de API de abajo es para los casos que quedan fuera.
Cuándo necesitas la ruta de API
La receta de API cubre:
- Llamadas grabadas fuera de HubSpot (exportaciones de Gong, Zoom Cloud independiente, marcadores externos, grabaciones presenciales).
- Rellenos masivos de grabaciones históricas.
- Idiomas o números de hablantes donde quieras controlar el motor de transcripción.
- Equipos que no pueden asumir el precio por usuario de Sales Hub Professional para cada comercial.
El flujo de trabajo es sencillo:
- Un comercial graba una llamada (Zoom independiente, marcador externo, audio subido).
- La grabación llega a un almacenamiento accesible (S3, Cloudflare R2, Google Drive).
- Tu sistema envía el archivo a una API de transcripción.
- Al completarse, un webhook se dispara hacia tu handler.
- El handler asocia la llamada con un contacto y un negocio de HubSpot.
- La transcripción se adjunta como un Call Engagement de HubSpot en la línea de tiempo del contacto.
- Opcionalmente, se actualizan las propiedades del negocio con señales extraídas (próximos pasos, sentimiento, objeciones).
Unas 200 líneas de código. La mayoría de los equipos de revenue ops lo tienen funcionando el mismo día.
Paso 1: Configuración de la app privada de HubSpot
En HubSpot: Ajustes, Integraciones, Apps privadas, Crear app privada.
Nómbrala «Integración de Transcripción» y solicita estos scopes:
crm.objects.contacts.readcrm.objects.contacts.writecrm.objects.deals.readcrm.objects.deals.writecrm.objects.calls.writecrm.schemas.calls.read
Guarda el token de acceso y configúralo como HUBSPOT_TOKEN en tu entorno.
Paso 2: Recibir el webhook de transcripción
El handler que se dispara cuando termina la transcripción. Consulta webhook vs polling para transcripciones para conocer las ventajas e inconvenientes.
import express from 'express';
import { Client as HubSpotClient } from '@hubspot/api-client';
import crypto from 'crypto';
const app = express();
const hubspot = new HubSpotClient({ accessToken: process.env.HUBSPOT_TOKEN });
app.post(
'/webhooks/transcript',
express.raw({ type: 'application/json' }),
async (req, res) => {
const sig = req.header('X-CATT-Signature');
const expected = crypto
.createHmac('sha256', process.env.TRANSCRIPT_WEBHOOK_SECRET)
.update(req.body)
.digest('hex');
if (!crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected))) {
return res.status(401).send('Bad signature');
}
const event = JSON.parse(req.body.toString());
if (event.event !== 'job.completed') return res.sendStatus(200);
await processCompletedTranscription(event.data);
res.sendStatus(200);
}
);

Transcripción completada lista para enrutar a un contacto o negocio del CRM.
Paso 3: Asociar la llamada a un contacto de HubSpot
La asociación de contactos es la parte que la mayoría de los equipos subestima. Tres señales funcionan:
Número de teléfono. La mejor señal cuando tu marcador captura el número saliente. Normaliza antes de buscar: elimina todos los caracteres que no sean dígitos para que "+55 11 99999-8888" y "551199998888" coincidan con el mismo registro.
async function findContactByPhone(phone) {
const digits = phone.replace(/\D/g, '');
const result = await hubspot.crm.contacts.searchApi.doSearch({
filterGroups: [{
filters: [{ propertyName: 'phone', operator: 'EQ', value: digits }]
}],
limit: 1
});
return result.results[0] ?? null;
}
Dirección de correo electrónico. Cuando la llamada se programó vía calendario, la invitación contiene los correos de los participantes. Úsalos para encontrar el contacto:
async function findContactByEmail(email) {
const result = await hubspot.crm.contacts.searchApi.doSearch({
filterGroups: [{
filters: [{ propertyName: 'email', operator: 'EQ', value: email }]
}],
limit: 1
});
return result.results[0] ?? null;
}
Respaldo con comercial y marca de tiempo. Cuando ni el teléfono ni el correo estén disponibles (llamadas en frío, líneas compartidas), recurre a los negocios abiertos del comercial activos alrededor de la hora de la llamada. Menos fiable, pero útil para no perder la transcripción por completo.
Paso 4: Crear un Call Engagement de HubSpot
Una vez asociada, escribe la transcripción como un Call Engagement. El ID de tipo de asociación correcto para llamada-contacto es 194. Para llamada-negocio, el ID correcto es 220 (no 195, que es incorrecto y fallará silenciosamente o creará asociaciones erróneas).
async function attachTranscriptToContact(contactId, dealId, data) {
const durationMs = data.duration_seconds * 1000;
const call = await hubspot.crm.objects.calls.basicApi.create({
properties: {
hs_timestamp: new Date().toISOString(),
hs_call_title: `Recorded call (${Math.round(data.duration_seconds / 60)} min)`,
hs_call_body: data.transcript,
hs_call_duration: String(durationMs),
hs_call_status: 'COMPLETED',
hs_call_direction: 'OUTBOUND',
hs_call_summary: data.summary ?? ''
},
associations: [
{
to: { id: contactId },
types: [{ associationCategory: 'HUBSPOT_DEFINED', associationTypeId: 194 }]
},
...(dealId
? [{
to: { id: dealId },
types: [{ associationCategory: 'HUBSPOT_DEFINED', associationTypeId: 220 }]
}]
: [])
]
});
return call.id;
}
El campo hs_call_body contiene el texto de la transcripción. Para llamadas largas, comprueba si el texto se mantiene dentro del límite de caracteres por propiedad de HubSpot (según la documentación de HubSpot, consulta la API de propiedades para conocer el techo actual de fieldType: textarea). Para transcripciones muy largas, usa una segunda propiedad personalizada o guarda el texto completo externamente y enlázalo.
Paso 5: Extraer señales del negocio (opcional)
Si la respuesta de tu transcripción incluye un resumen o quieres pasar un LLM sobre el texto, puedes enviar señales estructuradas a las propiedades del negocio. Crea primero las propiedades personalizadas en HubSpot (Ajustes, Propiedades, Negocios) y luego actualiza:
async function updateDealFromTranscript(dealId, transcript, summary) {
await hubspot.crm.deals.basicApi.update(dealId, {
properties: {
last_call_summary: summary ?? '',
last_call_date: new Date().toISOString().split('T')[0]
// Add your custom properties here: last_call_sentiment, next_steps, etc.
}
});
}
Para extracción estructurada (señales BANT, objeciones, decisores), ejecuta una llamada LLM aparte sobre el texto de la transcripción antes de este paso. La herramienta de transcripción de reuniones puede generar resúmenes formateados que encajan directamente en esta actualización.
El handler completo de extremo a extremo
async function processCompletedTranscription(data) {
const meta = await getCallMetadata(data.audio_filename);
const contact =
(await findContactByPhone(meta.phone)) ??
(await findContactByEmail(meta.email));
if (!contact) {
await logUnmatchedCall(data, meta);
return;
}
const deal = await getActiveDealForContact(contact.id);
await attachTranscriptToContact(contact.id, deal?.id ?? null, data);
if (deal && data.summary) {
await updateDealFromTranscript(deal.id, data.transcript, data.summary);
}
await notifyRep(meta.rep_email, contact, data);
}
La función getCallMetadata extrae teléfono, correo y comercial del nombre del archivo de grabación o de un archivo sidecar de metadatos. La fuente exacta depende de tu plataforma de llamadas.
Gestión de llamadas sin asociar
Espera que entre el 5 % y el 15 % de las llamadas fallen en la asociación de contacto: prospección en frío, leads nuevos que aún no están en HubSpot o llamadas en líneas compartidas.
Opción A: Crea un nuevo contacto a partir de la llamada. Establece el teléfono como primera propiedad, la etapa del ciclo de vida como «Lead» y deja que el SDR lo enriquezca después.
Opción B: Registra las llamadas sin asociar en un objeto personalizado «Transcripciones sin asociar» y envíalas a una cola de SDR para triaje semanal.
Opción C: Guarda la transcripción en tu propia base de datos y omite HubSpot para esa llamada. Algunas llamadas (números equivocados, robollamadas) son ruido genuino.
Lo que el CI nativo no cubre y esto soluciona
Para equipos que ya están en Sales Hub Professional, la ruta de API añade valor en brechas específicas:
- Marcadores externos: Las llamadas realizadas desde Outreach, Salesloft o un sistema VoIP que no esté en la lista de socios de HubSpot omiten por completo el CI. La ruta de API las captura.
- Rellenos históricos: CI solo procesa llamadas hacia adelante. La ruta de API te permite ingestar un año de grabaciones de Zoom Cloud de la noche a la mañana.
- Cobertura de idiomas: El soporte de idiomas de transcripción de CI es más limitado que el de APIs de transcripción dedicadas. Para equipos que no trabajan principalmente en inglés, una capa de transcripción aparte (ver mejores APIs de voz a texto para 2026) ofrece mejor precisión.
- Llamadas fuera de usuarios de HubSpot: CI requiere una licencia de pago por usuario. Empleados contratados, agentes offshore o comerciales de partners que usen herramientas separadas no generan transcripciones de CI. La ruta de API procesa sus grabaciones igualmente.
Cuánto cuesta esto frente a Gong
Antes de esta integración, los equipos que querían inteligencia de transcripción de llamadas normalmente consideraban:
- Gong: Tarifa de plataforma de 5.000 a 50.000 $ al año más aproximadamente 1.400 a 2.000 $ por usuario al año (no publicado, cotización enterprise). Para un equipo de 10 comerciales, presupuesta de 20.000 a 35.000 $ al año.
- Notas manuales: Los comerciales escriben resúmenes después de cada llamada. Incompleto, lento y sesgado hacia los detalles favorables.
La ruta de API cuesta:
- Una suscripción a una API de transcripción (las opciones de tarifa plana empiezan por menos de 15 $/mes para un usuario individual, y escalan desde ahí).
- HubSpot ya lo tienes.
- Un día de configuración de ingeniería.
El compromiso es honesto: Gong y Chorus construyen analíticas de coaching, seguimiento de palabras clave y previsión de negocios sobre las transcripciones. La ruta de API te da la base y deja la capa de analítica en tus manos (o en un complemento más barato como las propias herramientas de IA de HubSpot).
Si solo necesitas transcripciones limpias adjuntas a contactos y negocios sin una suscripción dedicada de conversation intelligence, la herramienta de transcripción de reuniones de ConvertAudioToText admite envío directo de archivos o URL y devuelve una salida estructurada que encaja limpiamente en el handler de arriba.
Alternativa con Zapier
Zapier tiene una app nativa de HubSpot listada en el marketplace de HubSpot. Para equipos no técnicos, el flujo es:
- Trigger: Webhook (evento job.completed de transcripción).
- Filter o Formatter: Normalizar el número de teléfono.
- Search: Buscar el contacto de HubSpot por teléfono o correo.
- Action: Crear un Call Engagement de HubSpot con el texto de la transcripción.
Esto cubre el caso sencillo. El código personalizado maneja mejor los casos límite, especialmente la asociación de contactos para llamadas en frío y la lógica de respaldo para llamadas sin asociar.
Errores comunes en producción
Normalización de números de teléfono. Números internacionales como "+55 11 99999-8888" necesitan eliminar los caracteres no numéricos antes de buscar en HubSpot. Crea un helper normalizePhone(str) y pásale cada número antes de cualquier búsqueda.
Líneas telefónicas multi-tenant o compartidas. Si varios comerciales comparten un número, la coincidencia por teléfono es ambigua. Recurre al correo o al contexto del calendario.
Fiabilidad del webhook. Construye un trabajo diario de reconciliación que consulte los trabajos de transcripción completados aún no registrados en HubSpot. De lo contrario, una caída de tu handler puede crear huecos.
Permisos de llamadas en HubSpot. Por defecto, los registros de llamadas son visibles para cualquiera con acceso a contactos. Para llamadas de ventas sensibles, restringe mediante equipos y roles de HubSpot antes de lanzar a producción.
Probar los IDs de asociación. Ejecuta una creación de llamada de prueba contra un contacto y negocio sandbox antes de conectar a producción. Registra el ID de llamada devuelto y confirma que el engagement aparece tanto en la línea de tiempo del contacto como en la del negocio.
Preguntas frecuentes
¿HubSpot transcribe las llamadas de forma nativa?
Sí, pero solo en el plan Sales Hub Professional (90 $/usuario/mes facturado anualmente) o Enterprise. Las llamadas realizadas desde el marcador nativo de HubSpot, la integración de Zoom, la integración de Google Meet y determinados proveedores de llamadas de terceros se transcriben automáticamente. Las llamadas desde marcadores externos o archivos de audio subidos requieren una ruta de envío por API aparte.
¿Puedo subir una grabación externa para que HubSpot la transcriba?
Sí, pero con restricciones. La API de extensiones de llamadas de HubSpot acepta archivos WAV, FLAC y MP4 para transcripción, el audio debe ser multicanal (cada hablante en un canal separado) y la transcripción solo funciona para usuarios con licencia de pago de Sales Hub o Service Hub. El flujo requiere registrar un endpoint autenticado para la URL de tu grabación, registrar la llamada con hs_call_source establecido en INTEGRATIONS_PLATFORM y luego llamar al endpoint /recordings/ready para activar el procesamiento.
¿Cuál es el ID de tipo de asociación correcto de HubSpot para vincular una llamada a un negocio?
El ID de tipo de asociación correcto para llamada-negocio es 220, no 195. Para llamada-contacto es 194. Ambos usan associationCategory establecido en HUBSPOT_DEFINED. Usar 195 fallará silenciosamente o creará una asociación incorrecta.
¿Hay alguna forma sin código de enviar transcripciones a HubSpot?
Zapier tiene una app nativa de HubSpot listada en el marketplace de HubSpot. Puedes configurar un trigger de webhook al completarse la transcripción y usar la acción de HubSpot para crear un engagement. La limitación está en la asociación de contactos: Zapier maneja búsquedas simples por correo o teléfono, pero casos límite como llamadas en frío o líneas telefónicas compartidas requieren código personalizado con lógica de respaldo.
Fuentes
- Precios de HubSpot Sales Hub - verificado en julio de 2026
- Revisar grabaciones y transcripciones de llamadas - Base de conocimiento de HubSpot - verificado en julio de 2026
- HubSpot Calling Extensions: API de grabaciones y transcripciones - verificado en julio de 2026
- API v3 de Calls Engagement de HubSpot - IDs de tipos de asociación - verificado en julio de 2026
- Precios de Gong 2026 - verificado en julio de 2026
- Integración de Zapier con HubSpot - Marketplace de HubSpot - verificado en julio de 2026
Try transcription free
Convert any audio or video to clean, unwatermarked text — speaker labels, timestamps, and AI summaries included. First 10 minutes free, no account.
Related Articles

Speechmatics Alternative for Non-Developers: Web Transcription Without Code
Speechmatics is genuinely excellent for developers: 50 hours free per month, 56 languages, on-prem deployment. If you need a drag-and-drop web app with flat $9.99/mo pricing instead of an API, here is an honest comparison of the two.

Best Transcription Tools with API Access (2026)
Which transcription SaaS tools actually give you API keys, and on which plan? Verified pricing and plan gates for Descript, Sonix, Fireflies, Happy Scribe, AssemblyAI, and more.