Pricing

Cómo Conectar Stripe a Google Sheets

Read this guide in English →

StripeSaved SearchDateDocumentAmount07/01INV-40214,280.0007/02INV-40221,860.5007/05INV-40239,140.0007/08INV-40242,375.2507/09INV-40256,902.7507/12INV-40263,118.40BrookedABCDateDocumentAmount123456707/01INV-40214,280.0007/02INV-40221,860.5007/05INV-40239,140.0007/08INV-40242,375.2507/09INV-40256,902.7507/12INV-40263,118.40Google SheetsStripe report
JW
James Whitfield

Sincroniza cargos, facturas y suscripciones de Stripe con Google Sheets, incluidos los importes en céntimos que hacen que los ingresos parezcan 100 veces mayores y los datos de modo test que nunca aparecen.

El dashboard de Stripe exporta a CSV en unos dos minutos, lo que resuelve la mayoría de peticiones financieras puntuales. Para reporting recurrente pasas por la API, y dos cosas producen números equivocados en el primer intento sin avisar: los importes llegan como enteros en céntimos, así que los ingresos parecen cien veces mayores, y una clave de modo test devuelve un conjunto de datos vacío o ficticio que parece una conexión rota. Esta guía cubre ambos casos, además de la paginación, la expansión y qué clave usar.

La opción de dos minutos: export CSV desde el dashboard

En el dashboard de Stripe abre Payments, Invoices o Balance → Payouts, define un rango de fechas y haz clic en Export. Puedes elegir qué columnas incluir, y las exportaciones grandes llegan por email en lugar de descargarse directamente. Importa el archivo a Sheets con Archivo → Importar.

Para conciliación específicamente, exporta balance transactions en lugar de cargos. Las balance transactions incluyen comisiones, reembolsos, disputas y el timing de los payouts, que es lo que realmente cuadra contra tu banco; una exportación de cargos muestra importes brutos y no va a cuadrar.

Stripe a Google Sheets gratis (Apps Script + API)

Crea una clave restringida en Developers → API keys en lugar de usar tu clave secreta. Concede permisos de solo lectura únicamente a los recursos que necesitas. Una clave restringida que se filtre por un sheet compartido no puede emitir reembolsos ni crear cargos; una clave secreta puede hacer ambas cosas.

La API de Stripe usa form-encoded en lugar de JSON para las peticiones, pasa la clave como usuario de basic auth con contraseña vacía, y pagina por cursor: lee has_more y luego pasa el ID del último objeto como starting_after.

Code.gs
function importStripeCharges() {  const KEY = "rk_live_XXXXXXXXXXXX";   // restringida, solo lectura  // Las claves live solo ven datos live; una clave test solo ve datos test.   const headers = {    Authorization: "Basic " + Utilities.base64Encode(KEY + ":")  };   // Las monedas sin decimales ya son unidades enteras. Dividirlas por 100  // subestima los ingresos 100x, el espejo del error habitual de céntimos.  const ZERO_DECIMAL = ["JPY","KRW","VND","CLP","ISK","BIF","DJF","GNF",                        "KMF","MGA","PYG","RWF","UGX","VUV","XAF","XOF","XPF"];   const rows = [];  let startingAfter = null;   do {    let url = "https://api.stripe.com/v1/charges?limit=100"      + "&expand[]=data.customer";        // si no, customer es solo un ID     if (startingAfter) url += "&starting_after=" + startingAfter;     const res = JSON.parse(      UrlFetchApp.fetch(url, { headers: headers, muteHttpExceptions: true })        .getContentText()    );    if (res.error) throw new Error(res.error.message);     res.data.forEach((c) => {      const cur = (c.currency || "").toUpperCase();      const amount = ZERO_DECIMAL.indexOf(cur) === -1 ? c.amount / 100 : c.amount;      rows.push([        c.id,        new Date(c.created * 1000),        // segundos de época, no milisegundos        amount,        cur,        c.status,        c.customer ? (c.customer.email || c.customer.id) : "",        c.refunded,      ]);    });     startingAfter = res.has_more ? res.data[res.data.length - 1].id : null;  } while (startingAfter);   const header = ["Charge ID","Created","Amount","Currency","Status","Customer","Refunded"];  const ss = SpreadsheetApp.getActiveSpreadsheet();  const sheet = ss.getSheetByName("Stripe") || ss.insertSheet("Stripe");  sheet.clearContents();  sheet.getRange(1, 1, 1, header.length).setValues([header]);  if (rows.length) {    sheet.getRange(2, 1, rows.length, header.length).setValues(rows);  }}

Dos detalles más en ese código. Los timestamps de Stripe son segundos de época Unix, así que hay que multiplicarlos por 1000 antes de que JavaScript los lea como fechas; si lo olvidas obtienes fechas de 1970. Y expand[]=data.customer es lo que convierte el campo customer de un ID opaco en un objeto con email.

Límites: el tope de seis minutos de Apps Script obliga a dividir por fechas en cuentas de alto volumen, usando los filtros created[gte] y created[lte]. Aquí Stripe es de solo lectura por diseño, y es uno de los connectors donde la escritura de vuelta no es algo que quieras.

Stripe Sigma

Sigma te permite ejecutar SQL directamente contra tus datos de Stripe dentro del dashboard, con consultas programadas y salida a CSV. Si tus preguntas son genuinamente de forma SQL, cruzando charges con subscriptions y customers usando funciones de ventana, Sigma las responde de forma más limpia que montar lo mismo a base de llamadas a la API. Se factura por uso, y llevar los resultados a Sheets sigue implicando exportar o reenviar la salida, así que complementa un connector de Sheets más que reemplazarlo.

El método Brooked

Brooked gestiona la paginación por cursor, convierte los importes usando la moneda de cada cargo para que las monedas sin decimales queden correctas, convierte los timestamps de época a fechas reales, y expande los clientes para que obtengas emails en lugar de IDs. Cargos, facturas, suscripciones, clientes y balance transactions pueden caer todos en la misma hoja de cálculo con una sola programación.

Paso 1: Instala Brooked

Instala Brooked desde el Google Workspace Marketplace. El free tier incluye 100 importaciones al mes, sin tarjeta de crédito.

Paso 2: Conecta Stripe

Elige Stripe en Brooked y pega una clave API restringida de solo lectura. Confirma que es una clave live si quieres datos live. Luego elige el objeto que quieras (cargos, facturas, suscripciones, clientes o balance transactions) e importa.

Paso 3: Programa la actualización

Configura la importación para que se repita cada hora, cada día o cada semana, así las tablas de MRR e ingresos se reconstruyen solas. Una relectura programada también captura reembolsos y disputas abiertas contra cargos antiguos, algo que un feed de webhooks que solo añade filas nunca revisaría.

BrookedBrooked AI, Stripe
Live
Ask anything about your Stripe data…

Comparación de métodos

MétodoCostoSetupActualizaciónBidireccionalIdeal para
Export CSV desde el dashboard de StripeGratis2 minManualNoUna exportación puntual de payouts o cargos
Apps Script + API de StripeGratis20 a 35 minTrigger temporalNoObjetos y campos personalizados, sin presupuesto
Stripe SigmaPago, según usoRequiere saber SQLConsultas programadasNoSQL complejo sobre datos de Stripe dentro de Stripe
Complemento BrookedFree tier · Pro $29/usuario/mes~2 minProgramado (horario, diario, semanal)NoReporting financiero programado en Sheets

Casos de uso habituales

  • Reporting de MRR y ARR: construye tablas de ingresos recurrentes desde las suscripciones en lugar de mirar el dashboard a ojo
  • Conciliación de ingresos: trae balance transactions con comisiones y payouts para cuadrar contra el banco
  • Análisis de churn: sigue las suscripciones canceladas por plan, cohorte y motivo
  • Recuperación de pagos fallidos: lista las facturas vencidas para el equipo que las persigue
  • Reporting para el board: combina los ingresos de Stripe con datos de pipeline o gasto que ya viven en el sheet

Solución de problemas

Preguntas frecuentes

  • ¿Por qué los importes de Stripe son 100 veces mayores de lo esperado?

    Stripe devuelve los importes como enteros en la unidad monetaria más pequeña, así que $49,99 llega como 4999. Divide por 100 para la mayoría de monedas, pero no para todas: las monedas sin decimales, incluidas JPY y KRW, ya son unidades enteras, y dividirlas por 100 hace que los ingresos parezcan 100 veces menores. Revisa el campo currency en lugar de dividir todo a ciegas.

  • ¿Puedo conectar Stripe a Google Sheets gratis?

    Sí. El dashboard de Stripe exporta pagos, payouts, facturas y más a CSV sin costo, lo que cubre las peticiones puntuales. Para datos que se actualicen, el método con Apps Script de esta guía usa una clave API restringida gratuita y un trigger temporal gratuito. El free tier de Brooked cubre 100 importaciones al mes.

  • ¿Qué clave API de Stripe debo usar en una hoja de cálculo?

    Una clave restringida, no tu clave secreta. En el dashboard, en Developers → API keys, puedes crear una clave restringida con acceso de solo lectura únicamente a los recursos que necesitas, como charges, invoices y subscriptions. Si esa clave se filtra por un sheet compartido o un script, no puede mover dinero ni cambiar nada, algo que una clave secreta completa sí puede hacer.

  • ¿Por qué faltan mis datos de Stripe o llegan vacíos?

    Casi siempre es modo test frente a modo live. Stripe mantiene los dos completamente separados, y una clave de test (sk_test_ o rk_test_) devuelve solo datos de prueba, que normalmente están vacíos o llenos de pagos ficticios. Los datos live necesitan una clave live. El selector del dashboard no afecta a lo que puede ver una clave API; eso lo determina la clave misma.

  • ¿Cómo obtengo más de 100 registros de Stripe?

    100 es el límite máximo en los endpoints de listado. Stripe pagina por cursor: lee has_more en la respuesta, toma el id del último objeto y pásalo como starting_after en la siguiente petición. Los SDK oficiales ofrecen auto-paginación que hace esto por ti, pero un fetch crudo en Apps Script necesita el bucle escrito a mano.

  • ¿Cómo traigo los datos del cliente junto con los cargos?

    Usa expand. Por defecto Stripe devuelve los objetos relacionados como cadenas de ID, así que un cargo muestra un ID de cliente en lugar de un email. Añadir expand[]=data.customer los infla a objetos completos en la misma respuesta. La expansión está limitada a cuatro niveles de profundidad y cada expansión aumenta el tamaño de la respuesta, así que expande solo lo que realmente necesites.

Conecta Stripe a Google Sheets hoy mismo.

El free tier de Brooked cubre 100 importaciones al mes, sin tarjeta de crédito. O consulta todos los detalles de la integración Stripe.

Instala Brooked gratis →

Also in Finance & ERP

More Finance & ERP guides

Finance & ERP

How to Connect Stripe to Google Sheets

Sync Stripe charges, invoices and subscriptions to Google Sheets, including the amounts in cents that make revenue look 100x too big and the test-mode data that never appears.

JW
James Whitfield
Read
Finance & ERP

How to Connect QuickBooks to Google Sheets

QBO Advanced has a native 'Export to Google Sheets' button, every other plan doesn't. Plus QuickBooks Desktop, third-party add-ons (SheetsSync, Coefficient, Skyvia), Zapier with the exact trigger and action names, and the entity coverage table that tells you which method supports invoices, journal entries, and P&L by plan tier.

JW
James Whitfield
Read
Finance & ERP

NetSuite Chrome Extension for Google Sheets

Export NetSuite reports and saved searches to Google Sheets from the browser, with no Token-Based Authentication, no integration record and no admin approval.

JW
James Whitfield
Read

Get your spreadsheet hours back

Brooked sets up in seconds. Your team is querying live data before lunch.