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_citaoorden_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):
- Crea un producto/ítem o usa un concepto genérico (“Consulta de especialidad”).
- Indica importe y moneda; si usas importe variable, documenta el cálculo en tu Sheet.
- Adjunta metadatos:
id_cita,paciente_nombre,profesional,servicio,origen_lead. - Genera el enlace y prueba un pago de bajo valor en modo de prueba/sandbox.
- Registra el enlace en tu Sheet (“enlaces_emitidos”) para trazabilidad.
Tabla comparativa (enlaces de pago)
| Criterio | Stripe | Mercado Pago |
|---|---|---|
| Enlace de pago único/compartible | Sí | Sí |
| Metadatos en el pago | Sí (custom fields/metadata) | Sí (external_reference/metadata) |
| Métodos disponibles | Tarjetas, wallets, BNPL (según país) | Tarjetas, Pix/boletos/saldo (según país) |
| Vencimiento del enlace | Configurable | Configurable |
| Exportación/transmisión de eventos | Webhooks/exports | Webhooks/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:
enlaces_emitidos(esperado)pagos_brutos/pagos_netos(real)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_externoconpagos_netos.id_externo. - Si coincide y
estado = succeeded, marca Conciliado. - Si no hay pago tras X horas desde
fecha_hora_iniciode 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
failedochargebackdetectado. - Diferencia: monto conciliado difiere > tolerancia.
- Webhook caído: sin eventos en Y minutos.
- Duplicado potencial: mismo
payment_ido mismoid_externocon 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_referenceen 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.
