Stripe/Mercado Pago: enlaces de pago y conciliación en Sheets

Introducción
Cobrar con enlaces de pago es rápido y evita fricción: no necesitas checkout complejo ni terminal física, solo un link seguro que envías por WhatsApp, email o SMS. El desafío empieza después: ¿cómo confirmas cada pago y cuadras la caja sin perderte entre pestañas?

En este how-to verás cómo generar enlaces en Stripe o Mercado Pago, registrar confirmaciones y conciliar todo en Google Sheets. Además, agregarás alertas ante pagos atrasados o fallidos y tendrás una planilla lista para duplicar en tu operación.

Nota: respeta la privacidad y las normativas locales. Esto no es asesoría legal.

Resumen accionable

  • Configura un enlace de pago con concepto, importe, moneda e identificadores (p. ej., id_cita o orden_id).
  • Capta la confirmación vía webhook o exportación y normaliza campos clave (método, estado, comisiones, referencia).
  • Usa una Sheet de conciliación con pestañas: pagos_brutos, pagos_netos, conciliacion, alertas.
  • Define reglas de cruce: id_externo + monto + fecha (tolerancia). Aplica idempotencia para evitar duplicados.
  • Implementa reintentos automáticos si el webhook falla y registra logs con marcas de tiempo.
  • Activa alertas por email/Slack cuando haya diferencias o pagos pendientes > X horas.
  • Audita semanalmente: reporte de aging y resumen de comisiones para control financiero.

Crear enlace

Los enlaces de pago te permiten cobrar sin desarrollo: generas un URL único que el cliente abre para pagar con tarjeta, saldo o Pix/boletos según el procesador y el país. Es clave que el enlace incluya metadatos que luego te ayuden a conciliar (p. ej., id_cita, paciente_nombre, servicio). También conviene fijar la moneda, el importe y la validez del enlace para evitar errores.

Antes de crear, define una nomenclatura mínima. Recomiendo generar un id_externo legible (p. ej., CITA-2025-10-30-1234) y repetirlo en todos los sistemas: en el enlace, en la cita/agendamiento y en la planilla. Así, la conciliación por cruce exacto es más simple y reduces revisiones manuales.

Pasos sugeridos (aplican a Stripe y Mercado Pago, con menús equivalentes):

  1. Crea un producto/ítem o usa un concepto genérico (“Consulta de especialidad”).
  2. Indica importe y moneda; si usas importe variable, documenta el cálculo en tu Sheet.
  3. Adjunta metadatos: id_cita, paciente_nombre, profesional, servicio, origen_lead.
  4. Genera el enlace y prueba un pago de bajo valor en modo de prueba/sandbox.
  5. Registra el enlace en tu Sheet (“enlaces_emitidos”) para trazabilidad.

Tabla comparativa (enlaces de pago)

CriterioStripeMercado Pago
Enlace de pago único/compartible
Metadatos en el pagoSí (custom fields/metadata)Sí (external_reference/metadata)
Métodos disponiblesTarjetas, wallets, BNPL (según país)Tarjetas, Pix/boletos/saldo (según país)
Vencimiento del enlaceConfigurableConfigurable
Exportación/transmisión de eventosWebhooks/exportsWebhooks/exports

Tras crear los enlaces y estandarizar metadatos, estarás listo para capturar confirmaciones y alimentar la planilla sin dobles registros.

Confirmación

Una confirmación confiable evita reconciliaciones a ciegas. Puedes obtenerla de dos maneras: webhooks (ideal, en tiempo casi real) o exportaciones (descargas periódicas). Los webhooks te envían eventos cuando el pago cambia de estado, con los metadatos que configuraste. Si prefieres exportar, agenda un proceso horario que descarga movimientos y los pega en pagos_brutos.

Estandariza campos en tu Sheet para que Stripe o Mercado Pago “hablen” el mismo idioma. Propón estas columnas base:

  • payment_id | id_externo | fecha_hora (ISO) | zona_horaria | monto_bruto | moneda | comision | impuestos | monto_neto | estado (succeeded/failed/pending/refunded) | metodo | cliente | metadata.id_cita

Si tu operación incluye agenda, añade el estándar de citas para trazabilidad:

Estructura sugerida de citas (ejemplo):
id_cita | fecha_hora_inicio (ISO) | zona_horaria | paciente_nombre | paciente_contacto | profesional | servicio | estado | origen_lead | consentimiento

Cuando recibas una confirmación, normaliza el estado: úsalo como succeeded, pending o failed sin variantes locales. Completa id_externo con lo que enviaste en el enlace (p. ej., external_reference) y asegúrate de poblar monto_neto = monto_bruto - comision - impuestos. Mantén idempotencia: si llega el mismo evento dos veces, no dupliques filas (usa payment_id + evento_tipo + timestamp para detectar repetidos).

Conciliar

La conciliación compara lo esperado (enlaces emitidos o agenda) con lo cobrado (pagos confirmados) y marca diferencias. Trabaja en tres pestañas:

  1. enlaces_emitidos (esperado)
  2. pagos_brutos / pagos_netos (real)
  3. conciliacion (resultado)

Empieza con una regla de cruce simple: id_externo exacto. Agrega salvaguardas: tolerancia de fecha (±1 día) y monto (±0,5% para redondeos). Si no hay match, clasifica como pendiente (emitido sin cobro) o extraño (cobro sin enlace). Utiliza fórmulas o Apps Script para automatizar los cruces y colorear estados.

Lógica de cruce (ejemplo en prosa):

  • Une (JOIN) enlaces_emitidos.id_externo con pagos_netos.id_externo.
  • Si coincide y estado = succeeded, marca Conciliado.
  • Si no hay pago tras X horas desde fecha_hora_inicio de la cita, marca Pendiente.
  • Si hay pago sin enlace, marca Investigar y alerta.

Diagrama ASCII (flujo simplificado)

[Enlace emitido] 
      | (id_externo)
      v
[Pago realizado] --webhook--> [Sheets: pagos_brutos] --normaliza--> [pagos_netos]
      |                                                         \
      |                                                          \ (JOIN por id_externo, tolerancias)
      v                                                           v
[Estado succeeded/pending/failed] ----------------------------> [conciliacion]

Para mayor control, añade reintentos: si el webhook falla, reintenta cada 5 minutos hasta 12 veces y marca en logs_webhook con status, error y retry_count. Configura alertas cuando retry_count supere 3 o cuando una fila permanezca en Pendiente más de 24 horas.

Alertas

Las alertas te ayudan a actuar a tiempo y reducir pérdidas. Define triggers claros y envía notificaciones por correo, Slack o WhatsApp (según política interna). Mantén un log de cada alerta con timestamp, tipo, id_externo, responsable y resuelto_en.

Triggers recomendados:

  • Pago pendiente: enlace emitido sin cobro tras X horas.
  • Pago fallido: estado failed o chargeback detectado.
  • Diferencia: monto conciliado difiere > tolerancia.
  • Webhook caído: sin eventos en Y minutos.
  • Duplicado potencial: mismo payment_id o mismo id_externo con dos cobros.

Buenas prácticas de operación:

  • En cada alerta, asigna responsable y fecha objetivo.
  • Cierra el ciclo: cuando marques “resuelto”, registra la causa raíz (tarjeta rechazada, enlace vencido, error de datos).
  • Revisa semanalmente un dashboard con aging de pendientes y comisiones por método de pago.

Errores comunes

  • No incluir id_externo/external_reference en el enlace, dificultando el cruce.
  • Mezclar formatos de fecha y no usar ISO (provoca falsos negativos).
  • Ignorar idempotencia y duplicar filas por reintentos de webhook.
  • No registrar comisiones/impuestos, distorsionando margen.
  • Tolerancias muy amplias que emparejan pagos incorrectos.
  • No tener plan B (exportación) cuando el webhook falla.

Al evitar estos errores y mantener reglas claras de cruce, tu conciliación será consistente y auditable, con menos trabajo manual y más previsibilidad de caja.

Checklist / Plantilla (versión resumida)

Pestañas sugeridas en Google Sheets:

  • enlaces_emitidos: id_externo, fecha_emision, moneda, monto, paciente_nombre, profesional, servicio, origen_lead.
  • pagos_brutos: payment_id, id_externo, fecha_hora, moneda, monto_bruto, comision, impuestos, monto_neto, estado, metodo, cliente.
  • pagos_netos (normalizada): mismas columnas, con estados y montos estandarizados.
  • conciliacion: id_externo, match_status (Conciliado/Pendiente/Investigar), diferencia_monto, observaciones.
  • alertas: timestamp, tipo, id_externo, detalle, responsable, resuelto_en.
  • logs_webhook: evento_id, payment_id, retry_count, status, mensaje.

Campos de citas (si aplica):
id_cita | fecha_hora_inicio (ISO) | zona_horaria | paciente_nombre | paciente_contacto | profesional | servicio | estado | origen_lead | consentimiento

FAQ

1) ¿Puedo usar enlaces con importes variables?
Sí. Incluye en metadatos cómo se calculó el importe y guarda el detalle en enlaces_emitidos. Define tolerancias estrictas para conciliar.

2) ¿Qué pasa si el cliente paga dos veces el mismo enlace?
Activa idempotencia en la recepción y crea una alerta de duplicado potencial. Verifica y procesa la devolución según política interna.

3) ¿Cómo manejo reembolsos y contracargos en la conciliación?
Regístralos como líneas separadas con signo negativo y referencia al payment_id original. Ajusta el estado en conciliacion.

4) ¿Necesito un desarrollador para webhooks?
No siempre. Puedes empezar con exportaciones programadas. Aun así, los webhooks reducen la latencia y errores manuales.

5) ¿Qué hacer con monedas distintas?
Normaliza a una moneda base en una columna aparte y guarda el tipo de cambio usado ese día para auditoría.

Autor - Jonathan Silva
Jonathan Silva

Soy Jonathan Silva, experto en automatización no-code para clínicas. Ayudo a reducir no-show y ganar eficiencia conectando Zapier, Make y datos accionables.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Rolar para cima