Si llevas marketing o RevOps en una empresa B2B, HubSpot tiene los datos que mueven la mayoría de tus decisiones de reporting: qué campañas producen leads cualificados, cómo está moviéndose el pipeline entre lifecycle stages, qué deals están a punto de cerrar, y cómo está el engagement de email entre audiencias. El problema es que el reporting nativo de HubSpot funciona bien para dashboards in-app pero se queda corto en cuanto quieres combinar datos CRM con paid media, mandar resúmenes semanales a stakeholders, o construir una única fuente de verdad que cruce varias fuentes.
Google Sheets es el destino más común para esa combinación porque es gratis, scriptable, conecta con Looker Studio (ahora Data Studio tras el rebrand), BigQuery y Power BI, y deja al equipo construir vistas custom sin engineering. Esta guía recorre tres métodos para conectar HubSpot a Google Sheets en 2026, cuándo encaja cada uno y las limitaciones a tener en cuenta. Cubrimos el mismo workflow para plataformas de paid en nuestra guía de LinkedIn Ads a Google Sheets y guía de Meta Ads a Google Sheets; este post extiende la serie a datos de CRM.
Qué datos de HubSpot están disponibles
Antes de elegir método, ayuda saber qué datos viven en HubSpot y qué puedes extraer. HubSpot expone datos en siete tipos principales de objetos, cada uno con properties ricas:
- Contacts. Detalles personales, lifecycle stage (subscriber, lead, MQL, SQL, opportunity, customer, evangelist), atribución de fuente, lead score, historial de engagement, fechas de entrada/salida en cada lifecycle stage.
- Companies. Annual revenue, número de empleados, industria, lifecycle stage, total revenue de deals asociados, agregados de web analytics.
- Deals. Pipeline stage, deal amount, ARR, MRR, fecha de cierre, días para cerrar, likelihood to close, latest traffic source, owner del deal.
- Tickets. Fecha de primera respuesta del agente, última respuesta, pipeline stage del ticket, prioridad, fuente.
- Line items. Datos de catálogo de producto, ARR, MRR, billing terms, unit cost, recurring revenue.
- Email campaigns. Emails enviados, entregados, abiertos, clicados, unsubscribed, con click events sobre identified links.
- Lead objects. Page views específicas de leads, actividad web, datos de fuente.
Cada objeto tiene un historial largo de fechas: contact creado, became lead, became MQL, became SQL, became customer, last sales activity, last engagement, etc. Para una B2B SaaS típica, esa granularidad sobra para modelar el funnel entero desde visitante anónimo hasta cliente que paga.
La HubSpot CRM API expone los mismos datos programáticamente vía endpoints REST. La referencia oficial de HubSpot CRM API v3 contacts documenta cada endpoint, parámetro y forma de respuesta. La API usa filtrado por property, deja extraer registros en páginas de hasta 100 resultados, y soporta sync incremental vía filtros lastModifiedDate.
Método 1: Export manual a CSV desde la UI de HubSpot
Mejor para: exports puntuales, auditorías, presentaciones a ejecutivos, properties y listas segmentadas que solo necesitas una vez.
Tiempo de setup: menos de cinco minutos.
Coste: gratis.
En HubSpot, cada lista de objeto (Contacts, Deals, Companies, Tickets) tiene un botón Export arriba de la vista de lista. Filtra los registros que quieras, haz clic en Actions → Export, elige las properties a incluir, y HubSpot te manda un email con el link al CSV cuando el export esté listo. Luego importas el CSV a Google Sheets vía File → Import.
Esto funciona para análisis ad-hoc pero tiene tres limitaciones que lo hacen mal candidato para reporting recurrente. Primero, el export es punto-en-el-tiempo; si quieres una vista fresca la semana que viene, tienes que re-exportar. Segundo, listas grandes pueden tardar unos minutos en compilarse y llegarte. Tercero, no puedes joinear datos de contact con datos de deal con datos de line item en el mismo export; cada tipo de objeto exporta por separado, así que análisis cruzado entre objetos requiere VLOOKUPs manuales en Sheets después.
Para reporting semanal o mensual que siempre necesite el snapshot fresco, pasa a Método 2 o Método 3.
Método 2: Apps Script con la HubSpot CRM API
Mejor para: developers cómodos con JavaScript, reporting de un solo portal, control total sobre qué properties extraer, sin coste recurrente de software.
Tiempo de setup: 30-60 minutos para la primera integración; 5-10 minutos por cada object type adicional.
Coste: gratis (dentro de las rate limits de Apps Script y de la HubSpot API).
Apps Script es el camino que la mayoría de equipos internos de RevOps toman cuando quieren automatizar exports sin pagar por un conector. El setup implica crear una private app dentro de HubSpot para generar un access token, escribir un script que llame a la API, y disparar el script en una agenda.
Paso 1: Crea una HubSpot Private App y genera el access token. En HubSpot, ve a Settings → Integrations → Private Apps → Create a private app. Nómbrala algo como "Sheets Sync", concede los scopes que necesitas (CRM read scopes para contacts, deals, companies como mínimo), y haz clic en Create app. HubSpot genera un long-lived access token. Cópialo y guárdalo de forma segura; lo vas a pegar en tu Apps Script.
Paso 2: Abre Apps Script vinculado a tu Sheet objetivo. En tu Google Sheet, abre Extensiones → Apps Script. El proyecto nuevo ya está vinculado al Sheet, así que la llamada SpreadsheetApp.getActiveSpreadsheet() tiene acceso sin configuración extra.
Paso 3: Escribe el script de export. Abajo tienes un ejemplo funcional que extrae los contacts más recientes (con properties seleccionadas) desde HubSpot a la hoja activa.
function exportHubSpotContacts() {
const HUBSPOT_TOKEN = 'YOUR_PRIVATE_APP_TOKEN'; // paste the token from step 1
const properties = 'email,firstname,lastname,lifecyclestage,createdate,hs_lead_status';
const url = 'https://api.hubapi.com/crm/v3/objects/contacts?limit=100&properties=' + properties;
const options = {
method: 'GET',
headers: {
'Authorization': 'Bearer ' + HUBSPOT_TOKEN,
'Content-Type': 'application/json'
},
muteHttpExceptions: true
};
const response = UrlFetchApp.fetch(url, options);
const data = JSON.parse(response.getContentText());
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
sheet.clear();
sheet.appendRow(['Email', 'First Name', 'Last Name', 'Lifecycle Stage', 'Create Date', 'Lead Status']);
if (response.getResponseCode() === 200 && data.results && data.results.length > 0) {
data.results.forEach(row => {
const props = row.properties || {};
sheet.appendRow([
props.email || '',
props.firstname || '',
props.lastname || '',
props.lifecyclestage || '',
props.createdate || '',
props.hs_lead_status || ''
]);
});
} else if (response.getResponseCode() !== 200) {
Logger.log('Error: ' + response.getContentText());
}
}Paso 4: Ejecuta el script por primera vez y autoriza. Haz clic en Run dentro del editor del script. Apps Script te pedirá permiso para hacer requests HTTP externos y modificar la hoja activa. Aprueba.
Paso 5: Programa con un trigger. En Apps Script, abre Triggers (icono reloj, sidebar izquierdo), crea un trigger nuevo, y configúralo para correr exportHubSpotContacts con la cadencia que necesites.
Limitaciones de Apps Script:
- Aplican las rate limits de la HubSpot API: cuentas Marketing Hub gratis tienen 100 requests cada 10 segundos y 250.000 al día; los Hubs de pago escalan con el tier. Si consultas miles de contacts cada minuto, puedes chocar con los límites.
- Cada ejecución de Apps Script está limitada a 6 minutos en cuentas Workspace gratis, 30 minutos en pago. Extraer decenas de miles de registros en una llamada requiere lógica de paginación y puede no terminar en 6 minutos.
- Cada objeto de HubSpot (contacts, deals, companies, tickets) requiere su propio script o parametrización. Un setup de reporting multi-objeto se vuelve overhead de mantenimiento.
- Las properties tienen que enumerarse explícitamente en la URL. HubSpot tiene miles de properties por objeto; extraer todo no es práctico, y elegir qué incluir es su propio ejercicio de diseño.
Para un solo portal con necesidades de reporting estables, Método 2 es sólido. Para agencias multi-portal o equipos que no escriben código, Método 3 es más rápido.
Método 3: Conector programado (no-code)
Mejor para: equipos de RevOps que gestionan varios portales de HubSpot, agencias con reporting de clientes, cualquiera que quiera saltarse el mantenimiento de código y acceder a dimensiones derivadas que la API bare no expone.
Tiempo de setup: menos de 10 minutos.
Coste: suscripción (Dataslayer empieza en $35/mes en plan anual; prueba gratis disponible).
Los conectores programados manejan la autenticación con la API, la paginación, el scheduling y la recuperación de errores. Configuras el portal, los object types, las properties y la frecuencia de refresh una vez; el conector mantiene tu Sheet actualizado.
El setup con Dataslayer es directo.
Paso 1: Instala el add-on de Dataslayer. Desde tu Google Sheet, abre Extensiones → Complementos → Obtener complementos. Busca "Dataslayer" e instala. El add-on solicita los permisos estándar de Google Sheets.
Paso 2: Conecta tu cuenta de HubSpot. Abre Extensiones → Dataslayer → Abrir. Elige HubSpot como fuente de datos y haz clic en Conectar. Autoriza vía el flujo OAuth de HubSpot con la cuenta de Google que tenga acceso al portal.
Paso 3: Elige el portal. Dataslayer lista todos los portales de HubSpot a los que tu cuenta tiene acceso (útil para agencias gestionando varios portales de cliente). Elige el que vas a reportar. Se pueden consultar varios portales en la misma hoja usando rangos separados.
Paso 4: Elige dimensiones y métricas. Más allá de la API bare, Dataslayer expone el catálogo completo de fields de HubSpot (el schema de Dataslayer cubre 934 dimensiones y 249 métricas entre todos los objetos de HubSpot). Pre-organizado por categorías para que las encuentres: time (fechas de lifecycle stage, fechas de cierre de deal, fechas de envío de email), marketing (campañas, fuentes de tráfico, atribución), geo (ciudad del contact, país, region codes), device, content (páginas vistas, content engagement), y más.
Las categorías de fields más usadas en la práctica:
- Fechas de lifecycle de contact: contact create date, became lead date, became MQL/SQL date, became customer date.
- Datos de pipeline de deal: deal amount, ARR, MRR, días para cerrar, likelihood, deal stage, latest traffic source.
- Engagement de email: campaign emails sent, delivered, opened, unique clicks.
- Fields de atribución: first touch converting campaign, last touch converting campaign, original source.
- Fields de company: annual revenue, total revenue, page views, sessions.
Paso 5: Configura el rango de fechas. Últimos 7 días, últimos 30 días, último trimestre, year-to-date o custom. Para reporting de pipeline, "deals modificados en los últimos 30 días" es una query habitual.
Paso 6: Output de los datos. El conector escribe el resultado en el rango de celdas que selecciones. Desde ahí, construye pivot tables, charts, o alimenta Looker Studio desde el mismo Sheet.
Paso 7: Configura el refresh. Diario, semanal o on-demand. El refresh diario es el más común para dashboards de pipeline.
Limitaciones a saber:
- El conector hereda las rate limits de la HubSpot API. Para agencias consultando 20+ portales en la misma agenda, escalona los tiempos de refresh para evitar chocar con límites en cuentas de HubSpot compartidas.
- Las custom properties de HubSpot (las que tu equipo creó, no los fields estándar) están expuestas pero hay que seleccionarlas explícitamente. Dataslayer no las extrae por defecto para mantener el tamaño de respuesta manejable.
- Algunos informes avanzados de HubSpot (los multi-touch attribution reports específicamente) se computan server-side en HubSpot usando lógica interna que la public API no replica del todo. Para esos, el informe in-app de HubSpot sigue siendo la fuente de verdad; el conector es mejor para extracción de datos a nivel objeto.
Comparando los tres métodos
La decisión normalmente baja a número de portales y tiempo. Un portal y CRM es una pequeña parte de tu trabajo: Apps Script. Varios portales o CRM es tu responsabilidad principal: conector programado. Solo necesitas un export para un deck ejecutivo este viernes: CSV manual.
Casos de uso que merecen ser configurados
Más allá del informe estándar de "lista de contacts", cuatro casos de uso se benefician específicamente de automatizar HubSpot a Sheets:
Pipeline-by-stage reporting. Extrae deals con su pipeline stage, deal amount, días en stage actual y probabilidad. Construye un pivot mostrando deal value total por stage, semanalmente. El dashboard le dice al equipo dónde está atascado el pipeline e informa decisiones sobre qué stages necesitan más actividad de sales. Combínalo con nuestro framework de atribución de marketing para triangular qué canales producen los deals atascados en cada stage.
Tracking de conversion de lifecycle. Extrae contacts con sus fechas de lifecycle stage (creado → lead → MQL → SQL → opportunity → customer). Calcula el tiempo y la conversion rate en cada transición. El dashboard muestra dónde el funnel pierde gente y qué campañas producen los que avanzan más rápido.
Auditoría de engagement de email. Extrae rendimiento de email campaigns (sent, delivered, opens, unique clicks) joineado con lifecycle stage del contact. Identifica qué campañas producen engagement de contacts MQL+ vs subscribers. El dashboard separa campañas que mueven el funnel de campañas que solo generan opens de vanidad.
Atribución cross-source. Extrae fields de atribución de HubSpot (first touch converting campaign, last touch converting campaign, original source) joineado con cierre real de deal. Compara la declaración de HubSpot contra lo que dicen tus otras fuentes de atribución. Cubrimos el approach más amplio de cross-source en nuestro framework de atribución de marketing; los datos de HubSpot son uno de los inputs de esa triangulación.
Para mejores prácticas de layout de dashboards una vez que los datos están fluyendo, mira nuestra guía de buenas prácticas de diseño de dashboards. Para agencias que llevan esto entre múltiples portales de cliente, la guía de dashboard de atribución multi-channel cubre patrones que escalan entre plataformas.
Errores comunes y cómo leerlos
Algunos errores aparecen lo bastante como para que reconocerlos ahorre tiempo.
: el access token es inválido o ha sido revocado. Regenera el token de la private app en HubSpot Settings → Integrations → Private Apps y actualiza tu script o configuración de conector.
401 unauthorized
con error de scope: la private app no tiene el scope necesario para leer el objeto solicitado. Edita la private app, añade el CRM scope que falta, guarda y reintenta. La documentación de HubSpot Private Apps lista cada scope y qué concede.
403 forbidden
: chocaste con la rate limit de la HubSpot API. Espera y reintenta; o escalona tu agenda de refresh entre varios momentos del día si corres consultas de varios portales.
429 too many requests
Array results vacío sin error: el filtro que aplicaste excluye todos los registros. Causa típica: filtrar por un property name que no existe o por un date field con un formato inesperado (las fechas de HubSpot son milisegundos desde epoch; entrecomillarlas como string no matchea).
FAQ
¿Con qué frecuencia se actualizan los datos de HubSpot vía API?
Los datos de HubSpot son real-time en escrituras. Cuando cambia un lifecycle stage de un contact en la UI de HubSpot, la API lo refleja inmediatamente. El lag es de tu agenda de refresh, no del lado de HubSpot. El refresh diario de tu Google Sheet es la cadencia más habitual y es más que suficiente para la mayoría de necesidades de reporting.
¿Puedo extraer custom properties de HubSpot (las que creamos nosotros)?
Sí. Las custom properties se exponen vía API igual que las properties estándar. En Apps Script, añádelas al query parameter properties. En Dataslayer, las custom properties aparecen en el selector de fields una vez conectas el portal. Ambos métodos funcionan; Dataslayer las muestra en una UI en lugar de exigirte conocer el internal name de la property.
¿Necesito un tier de pago de HubSpot Marketing Hub para usar la API?
No. La HubSpot CRM API está disponible en tiers gratis y de pago, incluyendo Marketing Hub Free. Las rate limits son más estrictas en tiers gratis (100 requests cada 10 segundos, 250.000 al día para Marketing Hub Free) pero más que suficientes para un setup de reporting basado en Sheet.
¿Y el data sync de HubSpot Operations Hub, es lo mismo que un conector?
El Data Sync de HubSpot Operations Hub es una feature para mantener HubSpot en sync con otros CRMs (Salesforce, Pipedrive, etc.), no un conector a Google Sheets. Para Sheets específicamente, los tres métodos de este post (CSV manual, Apps Script, conector programado) son los caminos prácticos. Operations Hub no incluye un sync directo HubSpot a Google Sheets.
¿Debería usar private app o OAuth para mi integración de Apps Script?
Las private apps son más simples para uso interno (un solo equipo, un solo portal) y el camino que HubSpot recomienda para integraciones nuevas. OAuth es necesario si construyes una app que otras cuentas de HubSpot van a instalar. Para "quiero extraer los datos de mi propio portal a mi propio Sheet", usa una private app.
¿Cómo afecta el rebrand de Looker Studio a Data Studio el reporting de HubSpot?
No lo afecta. El rebrand fue un cambio de nombre, no de producto. Las conexiones existentes de HubSpot a Looker Studio (ahora Data Studio) siguen funcionando. Cubrimos los detalles del rebrand en nuestro post sobre el rebrand de Looker Studio a Data Studio.
¿Puedo mandar datos de Sheets de vuelta a HubSpot?
Este post cubre HubSpot a Sheets (dirección lectura). La dirección inversa (Sheets a HubSpot, por ejemplo para bulk-update de contacts) también es posible vía la HubSpot CRM API pero requiere write scopes en la private app y un patrón de código distinto. La mayoría de setups de reporting se quedan en una sola dirección: HubSpot → Sheets.
Conclusión
Los tres métodos para conectar HubSpot a Google Sheets cubren todo el espectro: CSV manual para exports puntuales, Apps Script para automatización gratis con código, y un conector programado para reporting multi-portal sin manos. La elección correcta depende de cuántos portales gestionas, si quieres mantener código, y con qué frecuencia los datos necesitan refrescarse.
La HubSpot CRM API expone un schema profundo (contacts, companies, deals, tickets, line items, email campaigns, lead objects), y los setups de reporting de 2026 se benefician de extraer esa data a Sheets donde se puede combinar con paid media data, atribuirse entre canales, y compartirse con stakeholders sin dashboards custom. Si llevas reporting de HubSpot y quieres saltarte el mantenimiento de código de la API, empieza una prueba gratis de Dataslayer. El conector maneja autenticación, paginación, scheduling y el catálogo de fields para que tu equipo se quede en el dashboard, no en la documentación de la API.


.avif)




