FrancodesystemsFran<code>systems
Pasarelas de pagoIntegración a medida

Integración Holded Stripe

Cobros Stripe contabilizados en Holded sin Excel ni reconciliación manual.

HoldedHolded
Stripe

Tiempo de implantación · 4-7 días laborables

Diagnóstico

El problema

Stripe es excelente cobrando: link de pago, recurrencia, gestión de tarjetas, todo lo que necesitas. Pero deja completamente huérfana la facturación contable española. Para reconciliar 200 pagos mensuales con tu Holded, alguien acaba descargando el CSV mensual de Stripe, abriéndolo en Excel, buscando cada cliente, y creando facturas a mano. En cuanto pasas de 50 pagos/mes esto es 5-10 horas mensuales de admin tirando datos. Stripe Invoicing existe pero su numeración no encaja con AEAT, no tiene los modelos fiscales españoles (303, 390, 349) y no gestiona bien IVA intracomunitario. Holded sí, pero por defecto no escucha a Stripe.

Propuesta

La solución

Cada pago Stripe (one-off, suscripción, link de pago, payment element) genera la factura correspondiente en Holded con el cliente, el IVA y la serie correctos. Los refunds disparan facturas rectificativas. Las comisiones Stripe se contabilizan como gasto en su cuenta correspondiente. Los pagos en divisas se registran con su contravalor EUR al tipo de cambio del propio Stripe. Idempotencia garantizada con el event ID de Stripe: reintentos infinitos no duplican nada.

Scope

Qué automatizamos

  • PaymentIntent succeeded → factura Holded con cliente, IVA y serie correctas
  • Stripe Subscription renewal → factura recurrente con la serie de recurrentes
  • Stripe Checkout / Payment Link → factura tras succeeded
  • Refund Stripe (total o parcial) → factura rectificativa Holded
  • Stripe fee → asiento de gasto en la cuenta contable que definas
  • Multidivisa con contravalor EUR al tipo del propio Stripe
  • Failed payments → notificación Holded para gestión de dunning
  • Customer Portal: cambios de plan reflejados en próxima factura recurrente
  • Tax IDs de Stripe → NIF/VIES en Holded con validación intracomunitaria
Quién lo usa

Casos de uso reales

Estos son los perfiles que más nos piden la integración HoldedStripe y qué consiguen al final.

Caso 01

SaaS B2B con suscripciones Stripe (200 clientes activos)

Antes: Cada renovación mensual requería que admin generara factura a mano. 8 h/semana.

Después: Renovaciones automáticas con serie de recurrentes correcta. Admin se queda solo con dunning de fallos.

Caso 02

Ecommerce DTC cobrando con Stripe + Klarna

Antes: 200 pagos/mes, refunds parciales por devoluciones, descuentos por código.

Después: Factura emitida en segundos tras succeeded. Refunds parciales → rectificativas exactas. Cero fugas.

Caso 03

Consultoría con cobros internacionales en USD

Antes: Pagos en USD se facturaban al tipo del día del banco, generando descuadre con cobro real.

Después: Tipo de cambio fijado al del propio Stripe. Banco y Holded cuadran al céntimo.

Antes / Después

Qué cambia exactamente

El día a día sin la integración y con ella, lado a lado.

Sin la integración

  • CSV mensual de Stripe abierto en Excel y limpiado a mano
  • 5-10 h/mes generando facturas para pagos Stripe
  • Refunds parciales mal reflejados o ignorados
  • Comisiones Stripe sin contabilizar como gasto
  • Multidivisa con desfases EUR/USD

Con la integración

  • Webhook Stripe → factura Holded en segundos
  • Cero admin para pagos exitosos, solo dunning de fallos
  • Rectificativas parciales automáticas con importe exacto
  • Fees Stripe como asiento de gasto contable
  • Multidivisa con contravalor EUR del propio Stripe
Arquitectura

Cómo lo construimos

Endpoint webhook firmado de Stripe (verificación HMAC con secret) que filtra solo los events relevantes: payment_intent.succeeded, charge.refunded, invoice.payment_succeeded, customer.subscription.updated. Cola persistida BullMQ, worker idempotente con dedupe por event.id de Stripe, llamadas a API REST de Holded con backoff. Toda la lógica de mapeo (qué Stripe Product → qué Holded item, qué serie según moneda o tipo de cobro) en config versionada. Si Holded está caído, reintentamos durante 24 h; si pasado eso falla, alerta por email/Slack.

flow.ts
webhook stripe.event
queue.enqueue(jobId)
worker.handle() // idempotente
holded.api.call() // retries con backoff
log.emit({ status: 'ok' })
FAQ

Preguntas frecuentes

¿Y los pagos en USD u otras divisas?

Registramos el contravalor EUR usando el exchange rate del propio Stripe (que es el que aplica al payout). Eso elimina desfases entre lo que Stripe paga a tu banco y lo que figura en Holded.

¿Funciona con Stripe Subscriptions y Stripe Billing?

Sí. Cada renovación dispara factura recurrente Holded con la serie que definas. Cambios de plan (upgrade/downgrade) generan facturas con prorrateo idéntico al que Stripe calcula.

¿Cómo se manejan los chargebacks?

Cuando Stripe notifica un dispute, lo registramos como factura rectificativa pending. Si gana el comercio, la rectificativa se anula; si gana el cliente, se cierra como definitiva. Quedas con trazabilidad fiscal en todo momento.

¿Stripe Connect (marketplace) está soportado?

Sí. Para marketplaces con Connect, generamos factura del comprador y separamos la comisión de plataforma como ingreso propio. Las transferencias a partners van como gastos contables.

¿NIF intracomunitario en Stripe?

Sí. Stripe permite guardar Tax IDs en el Customer. Los leemos y validamos contra VIES en el momento del cobro. Si es válido B2B intracomunitario, IVA 0%; si no, tipo local del país.

¿Y los pagos fallidos / dunning?

Los failed_payment events se reflejan en Holded como facturas pendientes. Te integramos también con tu CRM (HubSpot, Pipedrive, etc.) para que comercial vea el riesgo de churn.

Francodesystems

¿Hablamos de tu integración con Stripe?

Llamada de 30 minutos sin compromiso. Salimos con alcance y precio.