Si llevas LinkedIn Ads, estás llevando un canal B2B. Eso cambia cómo debería ser el reporting. La mayoría de las guías "LinkedIn Ads a Google Sheets" te llevan a exportar un CSV de impresiones y clics. Se saltan el punto: en LinkedIn, lo que mueve la conversación de presupuesto no es el CTR — es qué seniority laboral, qué tamaño de empresa o qué industria produjo los leads que cerraron.
Esta guía toma el flujo de datos como un medio, no el fin. Tres métodos para meter datos de LinkedIn en Sheets (CSV manual, Apps Script, conector programado), los gotchas específicos de LinkedIn en cada capa (rotación de tokens cada 60 días, app review para scopes de Lead Gen, versioning de la API), y luego — la parte que se salta el resto de internet — los dos informes B2B que deberías estar construyendo: un tracker de engagement a nivel de cuenta ABM y un waterfall firmográfico de lead-gen.
Para el análisis del lado CRM que toma el relevo cuando el lead llega a HubSpot, mira nuestra guía de HubSpot a Google Sheets para RevOps. Este post va del lado de adquisición: meter datos de LinkedIn Ads en una forma que puedas trocear por firmográfico y joinear con deal data. Para creative testing en otro canal paid, mira nuestra guía de Meta Ads a Google Sheets; para integridad de datos analytics, la de GA4 a Google Sheets; para confianza SEO, la de Search Console a Google Sheets.
Lo que LinkedIn expone que Google y Meta no
Antes de los métodos, los datos. La Marketing API de LinkedIn expone desgloses firmográficos que no existen en ningún otro canal de paid:
MEMBER_INDUSTRY— la industria de LinkedIn del receptor de la impresiónMEMBER_JOB_FUNCTION— rol amplio (Marketing, Engineering, Sales, Finance, etc.)MEMBER_SENIORITY— IC, Manager, Director, VP, CXOMEMBER_COMPANY_SIZE— bucketizado (1–10, 11–50, 51–200, 201–500, 501–1000, 1001–5000, 5001–10000, 10001+)MEMBER_REGION_V2— región del miembroMEMBER_COUNTRY_V2— paísCOMPANY— la empresa named a nivel de cuenta (cuando matchea)
Estos no están disponibles en Google Ads ni en Meta con la misma fidelidad. El insight B2B que LinkedIn desbloquea es que puedes responder "¿Qué marketers de nivel VP en empresas SaaS de 200–1000 personas nos cuestan más por lead cualificado?" La UI de Campaign Manager te deja pedir un desglose cada vez. Sheets — con la extracción correcta — te deja cross-tabularlos y joinearlos con CRM.
Si no extraes esas dimensiones de desglose, no puedes construir el waterfall firmográfico. Las columnas por defecto de Campaign Manager no las muestran; tienes que añadirlas en el column picker (UI), especificarlas como parámetro pivot (API), o seleccionarlas en el field picker del conector. La sección de cada método explica cómo.
Método 1: Exportación manual de CSV desde Campaign Manager
Para auditorías puntuales y decks de board trimestrales. Rápido, gratis, inútil para reporting B2B recurrente porque los datos de la semana que viene no están en el export.
Setup: en LinkedIn Campaign Manager, selecciona la cuenta publicitaria, elige el nivel (Cuenta, Campaign Group, Campaign, o Anuncio), ajusta rango de fechas, clic Export, elige tipo de informe:
- Performance — impresiones, clics, inversión, conversiones (nivel campaña, sin desglose firmográfico por defecto)
- Audience — este es el relevante para B2B: desgloses por industria, función laboral, seniority, tamaño de empresa, región
- Lead Gen Form — informe separado para envíos de formulario con todos los campos de respuesta
- Conversion — para datos de conversión del Insight Tag
- Content — para performance de contenido orgánico (no ads)
Para reporting B2B necesitas dos exports a la semana como mínimo: el informe Audience (desgloses firmográficos) y el informe Lead Gen Form (envíos). Luego los coses a mano en Sheets por campaign ID.
Gotchas específicos de LinkedIn en esta capa:
- Los desgloses de audience son una dimensión cada vez. El export de UI te deja elegir
IndustryOSeniorityOCompany Size— no las tres a la vez. Cross-tabular "industria × seniority × tamaño de empresa" requiere la ruta API o conector. - Las respuestas de Lead Gen Form no incluyen las dimensiones firmográficas. El export de Lead Gen te da lo que el usuario tecleó en el formulario; el export Audience te da los datos firmográficos de LinkedIn. Joinearlos significa matchear por email enviado + campaign ID, que es frágil.
- Los Lead Gen Forms tienen estructura de columnas separada por formulario. Si la campaña A y la campaña B usan formularios distintos con campos distintos, las columnas del CSV difieren. Coser data de Lead Gen multi-campaña en una sola hoja requiere una pasada de reconciliación de columnas.
- Rangos de fechas mayores a 90 días se entregan por email en lugar de descarga inmediata. El correo llega entre 5–30 minutos después, fragmentando el flujo.
Encaja cuando: snapshot trimestral para board, RFP puntual de agencia, auditoría de atribución.
No encaja cuando: reporting semanal multi-cuenta, matching de lista ABM, cualquier cosa que requiera trocear por más de una dimensión firmográfica a la vez.
Método 2: Google Apps Script + LinkedIn Marketing API
El camino para un equipo B2B interno que quiere refresh diario, data firmográfica multi-pivot, y matching de lista ABM — sin suscribirse a un conector. Setup: 2–4 horas incluyendo la espera de app review de LinkedIn. Mantenimiento: tuyo para siempre.
Paso 1 — Crea una App de Developer en LinkedIn. Ve a developers.linkedin.com, crea una app, solicita acceso a Marketing Developer Platform. Los scopes que necesitas para reporting B2B:
r_ads— leer estructura de ad accounts, campañas, adsr_ads_reporting— leer analytics (impresiones, clics, conversiones, desgloses)r_ads_leadgen_automation— leer respuestas de Lead Gen Formr_organization_social— leer actividad de tu company page (opcional, para contexto orgánico)
El scope r_ads_leadgen_automation requiere app review de LinkedIn antes de funcionar en producción. Espera típica: 3–10 días laborables. Los otros scopes de ads suelen aprobarse automáticamente para partners de Marketing Developer Platform pero aún así pasan por app review.
Paso 2 — Flujo OAuth 2.0. Tokens con vida útil de 60 días. Monta un flujo de refresh token si quieres automatización a largo plazo, o asume que alguien re-autentica cada 60 días.
Paso 3 — Apps Script que extrae desglose firmográfico. Pega en Extensiones → Apps Script en tu Sheet:
function pullLinkedInFirmographic() {
const ACCESS_TOKEN = 'YOUR_ACCESS_TOKEN';
const SPONSORED_ACCOUNT = 'urn:li:sponsoredAccount:1234567890';
const VERSION = '202604'; // revisa la página de versioning de la API de LinkedIn
// pivot=MEMBER_SENIORITY te da coste/clics/conversiones desglosado por nivel de seniority
// cambia pivot a MEMBER_INDUSTRY, MEMBER_COMPANY_SIZE, MEMBER_JOB_FUNCTION según necesites
const url = 'https://api.linkedin.com/rest/adAnalytics' +
'?q=analytics' +
'&pivot=MEMBER_SENIORITY' +
'&dateRange=(start:(year:2026,month:4,day:1),end:(year:2026,month:4,day:30))' +
'&accounts=List(' + encodeURIComponent(SPONSORED_ACCOUNT) + ')' +
'&fields=externalWebsiteConversions,impressions,clicks,costInUsd,leadGenerationMailContactInfoShares,pivotValue';
const response = UrlFetchApp.fetch(url, {
headers: {
'Authorization': 'Bearer ' + ACCESS_TOKEN,
'LinkedIn-Version': VERSION,
'X-Restli-Protocol-Version': '2.0.0'
},
muteHttpExceptions: true
});
const data = JSON.parse(response.getContentText());
const sheet = SpreadsheetApp.getActiveSheet();
sheet.clear();
sheet.appendRow(['Seniority','Impresiones','Clics','Inversion USD','Conversiones','Envios Lead Form']);
(data.elements || []).forEach(row => {
sheet.appendRow([
row.pivotValue,
row.impressions,
row.clicks,
row.costInUsd,
row.externalWebsiteConversions,
row.leadGenerationMailContactInfoShares
]);
});
}
Paso 4 — Programa. Apps Script → Triggers → Add Trigger → ejecutar diariamente a las 6 AM. Tu desglose firmográfico se refresca antes del standup.
Gotchas específicos de LinkedIn en la capa API:
- El header
LinkedIn-Versiones obligatorio y cambia cada trimestre. Olvidarte de actualizarlo te da un 400. Sigue la página de versioning de la API de LinkedIn. - El scope
r_ads_leadgen_automationrequiere app review. Sin él, tus respuestas de Lead Gen Form vuelven vacías incluso si la llamada API tuvo éxito. - Solo single-pivot por llamada. El parámetro
pivotacepta un valor. Para sacar "industria × seniority", necesitas dos pulls y un outer join en Sheets — o usapivots(en plural) en las versiones v202403+ para cross-tabulación. - Los rate limits van por tier. Apps standard: unos cientos de llamadas analytics al día. Partners de Marketing Developer Platform tienen límites más altos. Pegar 429 a mitad de extracción te deja la hoja a medio llenar.
- Las respuestas de Lead Gen Form son un endpoint separado (
/rest/leadFormResponses), no parte deadAnalytics. Extraer envíos + firmográfico + data de coste en un informe son tres llamadas API y un merge.
Para montar los permisos de cuenta publicitaria correctamente antes de que nada de esto funcione, mira nuestra guía de setup de LinkedIn Ads para agencias.
Método 3: Conector programado (no-code)
El camino para equipos B2B o agencias con varias cuentas de LinkedIn Ads (típico en una cartera de clientes o un setup parent-company-más-filiales), o para equipos que necesitan desgloses cross-pivot sin escribir la lógica de merge.
Dataslayer conecta LinkedIn Ads con Google Sheets en menos de 10 minutos. Desde Google Sheets: Extensiones → Add-ons → Obtener add-ons → instala Dataslayer. Luego Extensiones → Dataslayer → Abrir, elige LinkedIn Ads, autentícate, elige cuentas, elige dimensiones, elige métricas, ajusta rango de fechas, haz clic en Run.
Por qué un conector gana específicamente para trabajo B2B en LinkedIn:
- Multi-cuenta en una query. Agencias siguiendo 5–20 cuentas de cliente las extraen en un workbook con una columna de cuenta. El conector agrupa las llamadas API respetando los rate limits por cuenta.
- Selector cross-pivot de dimensiones. Elige
Industry,Seniority, yCompany Sizeen la misma query — el conector gestiona el merge multi-pivot por debajo. El conector de LinkedIn Ads de Dataslayer expone la superficie completa de desgloses de la Marketing API. - Respuestas de Lead Gen Form integradas. Las preguntas a nivel de formulario aparecen en la misma query que data de performance, joineadas automáticamente por campaign + form ID. Sin coser a mano.
- Conversiones del Insight Tag expuestas.
externalWebsiteConversionsestá como métrica estándar — no te tienes que acordar del nombre de campo de los docs. - Autorización de scopes gestionada. El flujo OAuth pide
r_ads,r_ads_reporting, yr_ads_leadgen_automationa la vez, así que la data de Lead Gen funciona desde la primera ejecución en lugar de después de re-autenticar.
Precios: Gratis para 1 conector y 1 usuario. Starter $35/mes anual cubre 3 conectores y 1 destino. Advanced $115/mes añade refresh por horas, AI Insights, e integración MCP para Claude/ChatGPT (le preguntas a Claude "¿qué cambió en nuestro CPL de LinkedIn por seniority esta semana?" y consulta en directo). Pro $345/mes cubre 100+ cuentas por conector. Mira dataslayer.ai/pricing.
El gotcha de LinkedIn que NINGÚN método resuelve: la LinkedIn Conversions API (CAPI) para uploads de conversión server-to-server es una API de escritura — ninguna herramienta del lado de lectura la cubre. Si necesitas mandar conversiones de vuelta a LinkedIn para atribución offline, estás usando la Conversions API directamente o un CDP que la envuelve. Los métodos de lectura (CSV, Apps Script, conector) sacan datos de LinkedIn.
Los 2 dashboards B2B que merece la pena construir
Una vez los datos fluyen a Sheets, aquí están los dos informes que cambian cómo marketing B2B toma decisiones de presupuesto. Ninguno es algo que la UI de LinkedIn muestre, y ambos requieren el desglose firmográfico + extracción de respuestas Lead Gen.
Dashboard 1: Tracker de engagement a nivel de cuenta ABM
La pregunta: de las 200 cuentas named en nuestra lista ABM target, ¿cuáles están viendo nuestros anuncios, quién en esas cuentas hace clic, y cuál es el funnel de impresión a closed-won?
Columnas a extraer de LinkedIn:
- Campaign ID, Campaign Name (filtrado a campañas ABM)
- Impresiones, Clics, Inversión, externalWebsiteConversions (nivel campaña)
- Pivot por
COMPANY(desglose por cuenta named) — te da impresiones/clics por empresa target - Pivot por
MEMBER_JOB_TITLEdentro de cada empresa (qué roles dentro de la cuenta están viendo/clicando)
Columnas a extraer de tu CRM (HubSpot, Salesforce):
- Account name (matcheado a
COMPANYde LinkedIn) - Lifecycle stage (Lead, MQL, SQL, Opportunity, Customer)
- First touch source = LinkedIn, timestamps de lifecycle
Cálculos en Sheets:
- Account engagement score:
Impresiones × 1 + Clics × 10 + Envíos de form × 100por empresa — marca cuentas que se calientan - CPL a nivel de cuenta:
inversión LinkedIn en esa empresa / leads de esa empresa(cuando la columna company del CRM matchea) - Tiempo hasta primer MQL después de la primera impresión:
MQL_date - first_impression_datepor cuenta (donde el MQL llegó vía LinkedIn)
Layout de pivot:
- Filas: nombre de cuenta target (top 50 por engagement score)
- Columnas: impresiones, clics, envíos, leads al CRM, lifecycle stage, días desde primera impresión
- Formato condicional: marca cuentas donde el engagement score se duplicó week-over-week
Qué saca a la luz que la UI de LinkedIn no:
- "Acme Corp ha visto 4.200 impresiones en 17 empleados, 8 clics, 0 envíos de form" → ad fatigue en esa cuenta, o creativo equivocado para su stage
- "Globex pasó de 0 a 32 clics en 2 semanas con 9 VPs distintos" → activación de buying committee; dile a ventas ahora
- "Hemos gastado $1.200 en impresiones a Initech en 60 días sin un envío de Lead Gen" → mata o rota creativo
Dashboard 2: Waterfall firmográfico de lead-gen
La pregunta: de los envíos de form que tuvimos el trimestre pasado, ¿qué combinaciones de job seniority / tamaño de empresa / industria realmente convirtieron a closed-won — y cuál fue el coste por closed-won por segmento?
Columnas a extraer de LinkedIn:
- Respuestas Lead Gen Form (una fila por envío): email enviado, empresa enviada, job title enviado, campaign ID, form ID, timestamp de envío
- Pivot por
MEMBER_SENIORITYenadAnalytics: impresiones/clics/inversión/conversiones por bucket de seniority - Pivot por
MEMBER_COMPANY_SIZE: mismas métricas por bucket de tamaño de empresa - Pivot por
MEMBER_INDUSTRY: mismas métricas por industria
Columnas a extraer de tu CRM:
- Email del contact (matcheado al email enviado en Lead Gen)
- Progresión de lifecycle stage: fecha MQL, fecha SQL, fecha Customer
- Importe del deal y stage (joineado vía primary contact)
Cálculos en Sheets:
- Conversion rate MQL por seniority: % de envíos de Lead Gen donde seniority = VP que pegaron MQL en 30 días
- Conversion rate SQL por tamaño de empresa: de envíos donde company size = 200–1000, qué % pegaron SQL
- Closed-won rate por industria: % de envíos de Lead Gen en industria SaaS que se hicieron Customer
- Coste por closed-won por segmento:
inversión LinkedIn en ese segmento / número de closed-wons de ese segmento
Layout de pivot:
- Filas: combinaciones seniority × company size (ej. "VP en empresa de 200–1000", "Manager en empresa de 1000–5000")
- Columnas: envíos, % a MQL, % a SQL, % a Customer, coste por customer
- Ordena por coste por customer ascendente
Qué responde este dashboard que el QBR no podría sin este informe:
- VPs en empresas de 200–1000 tienen 31% rate MQL→Customer vs Directors en mismo tamaño con 11% — mueve presupuesto a campañas con target VP
- Industria SaaS: coste por customer es $4.200 vs Manufacturing: $14.000 — el presupuesto LinkedIn va a la vertical equivocada
- El bucket CXO tiene el CPL más bajo pero el closed-won rate más bajo — rellenan el form, nunca compran. Deja de pujar por impresiones CXO
Para tracking de velocidad CRM una vez estos leads aterrizan en HubSpot, mira HubSpot a Google Sheets para RevOps. Para contexto más amplio de atribución de marketing, mira Por Qué la Atribución de Marketing Está Rota en 2026.
Comparando los tres métodos
La decisión normalmente baja a número de cuentas y apetito del equipo por código. Una cuenta, tienes un developer: Apps Script. Múltiples cuentas o B2B es tu trabajo full-time: conector programado. Solo un deck para el board trimestral: CSV manual.
Quirks de LinkedIn que vale la pena saber
Cinco comportamientos de LinkedIn que afectan a cada método y a cada dashboard que construyas:
- Rotación de tokens cada 60 días. Ningún método se libra. Planifica un ritual de re-auth o monta lógica de refresh token. Sáltatelo y tu refresh diario falla en el día 61.
- El header
LinkedIn-Versioncambia cada trimestre. Las versiones de API siguen formatoYYYYMM. Olvidarte de subirlo después de 6 meses te da un 400 con "version deprecated". - El scope
r_ads_leadgen_automationrequiere app review. Es la razón más habitual de "mi data de Lead Gen está vacía" — el scope no se otorgó, así que la API devuelve arrays vacíos en silencio en lugar de un error. - Single-pivot por llamada de
adAnalytics. Cross-tabularMEMBER_SENIORITY × MEMBER_COMPANY_SIZE × MEMBER_INDUSTRYrequiere varias llamadas y un merge en Sheets. Planifica el presupuesto de llamadas API. - La ventana de atribución importa. La UI de LinkedIn por defecto es 30 días post-click + 7 días view-through. La API te deja ajustarla por llamada. Si los números de Sheets no coinciden con Campaign Manager, la ventana de atribución es el primer sospechoso.
Errores comunes y cómo leerlos
Algunos errores aparecen lo suficiente como para que reconocerlos ahorre tiempo de debugging.
401 Unauthorized: access token expirado (el reloj de 60 días) o scopes cambiados. Vuelve a correr el flujo OAuth. En Dataslayer, haz clic en la conexión de LinkedIn en el panel de conexiones y vuelve a autenticar.
429 Too Many Requests: pegaste un rate limit de LinkedIn. Los tiers de app standard capan llamadas analytics a unos cientos al día; partners de Marketing Developer Platform tienen más. Solución: reparte las extracciones, agrupa campañas en una llamada, o pasa al tier de partner.
Array elements vacío sin error: el problema Lead Gen más común — scope r_ads_leadgen_automation no otorgado. Verifica en el LinkedIn Developer Portal que la app tiene el scope aprobado, luego vuelve a autenticar.
400 Bad Request — "Invalid pivot value": usaste pivot=MEMBER_TITLE pero la versión actual de API usa MEMBER_JOB_TITLE. El vocabulario de pivot a veces se renombra; revisa la referencia de Marketing API para la versión que estás llamando.
Discrepancia de conversiones con UI: la UI usa la ventana de atribución guardada de la campaña; la API usa la ventana que especifiques en la llamada. Si tu Sheet muestra conversiones distintas a Campaign Manager, la ventana de atribución es la causa el 80% de las veces.
FAQ
¿Por qué LinkedIn cuesta tanto más por clic que Google o Meta?
El targeting B2B es caro porque la audiencia es pequeña y el comprador es valioso. La comparación correcta no es CPC, es coste por deal closed-won — que es lo que el waterfall firmográfico del Dashboard 2 realmente calcula. Un CPC de $25 que produce customers de $50K es más barato que un CPC de $2 que produce customers de $200.
¿Necesito el partnership de Marketing Developer Platform para usar la LinkedIn Marketing API?
Sí para uso en producción de r_ads_reporting y r_ads_leadgen_automation a escala. LinkedIn aprueba automáticamente Marketing Developer Platform para la mayoría de casos legítimos de marketing/agencia, pero la review tarda 3–10 días laborables. Para experimentación interna, puedes usar la API con una app de developer básica bajo rate limits más bajos antes de la aprobación.
¿Por qué mis respuestas de Lead Gen form aparecen vacías?
La causa más común con diferencia: el scope r_ads_leadgen_automation no está otorgado. Incluso si tu app fue aprobada, puede que necesites re-autenticar después de que LinkedIn añada el scope. Comprueba Settings → API Keys en tu app de developer y vuelve a correr OAuth.
¿Puedo matchear las impresiones de LinkedIn con mi lista de cuentas target ABM?
Sí — extrae adAnalytics con pivot=COMPANY para obtener métricas de impresión/clic/inversión por cuenta named, luego VLOOKUP contra tu lista ABM en Sheets. El Dashboard 1 de arriba está construido sobre este patrón.
¿Es la LinkedIn Conversions API lo mismo que externalWebsiteConversions?
No. externalWebsiteConversions es la métrica del lado de lectura (un conteo de conversiones del Insight Tag). La Conversions API (CAPI) es el endpoint de escritura donde mandas conversiones offline de vuelta a LinkedIn para atribución. Este post cubre la dirección de lectura.
¿Con qué frecuencia debería refrescar data de LinkedIn para tracking ABM?
Diario como mínimo. Las cuentas ABM compran en ciclos de fin de trimestre; refresh semanal significa que te pierdes la activación del buying committee que pasa en 3–5 días. El tier hourly del plan Advanced de Dataslayer o un trigger de Apps Script a las 6 AM diariamente es el setup típico.
¿Me da la API de LinkedIn data de eventos LinkedIn Live o engagement de posts orgánicos junto con ads?
El contenido orgánico requiere el scope r_organization_social y un endpoint API distinto (/rest/organizationalEntityShareStatistics). Es un flujo separado de reporting de ads; combinar los dos son dos llamadas API y un merge en Sheets por company page ID + fecha.
Conclusión
Tres métodos para meter data de LinkedIn Ads en Google Sheets existen en un espectro: CSV manual para auditorías trimestrales, Apps Script para equipos pesados en engineering que pueden absorber la rotación de tokens de 60 días y la espera de app review, conector programado para equipos B2B corriendo reporting multi-cuenta o multi-pivot sin bandwidth de engineering.
Pero los métodos son medios, no el fin. El deliverable son los dos informes B2B: un tracker de engagement a nivel de cuenta ABM que muestra qué cuentas named se están calentando, y un waterfall firmográfico de lead-gen que cuantifica qué combinaciones de job seniority × tamaño de empresa × industria realmente convierten a ingresos. Ambos requieren extraer los pivots firmográficos y joinear con data del CRM — y la mayoría de los equipos se saltan esos pivots en su primer export de Lead Gen, luego se preguntan por qué su flujo LinkedIn-a-Sheets no cambia cómo se asigna el presupuesto de marketing.
Extrae las dimensiones firmográficas. Construye los dashboards. El conector es una tarde de martes de setup; el insight firmográfico es algo sobre lo que vas a actuar cada trimestre durante el próximo año. Empieza una prueba gratis de Dataslayer si quieres saltarte el mantenimiento de la API y llegar a los dashboards más rápido.







