Técnico8 min de lectura

Cómo cobrar suscripciones con MercadoPago en un SaaS: lo que aprendí con LeadsLocales

Cobrar en pesos todos los meses sin que nadie tenga que pagar a mano. Cómo funciona el cobro recurrente de MercadoPago, por qué el plan se activa con el webhook y no con la redirección, y las decisiones de negocio que tomé en LeadsLocales.

Facundo Campo··Actualizado
Cómo cobrar suscripciones con MercadoPago en un SaaS: lo que aprendí con LeadsLocales

Para cobrar suscripciones con MercadoPago en un SaaS se usa su API de suscripciones, conocida como preapproval: el usuario autoriza una sola vez un cobro recurrente con su tarjeta, MercadoPago lo debita cada período y le avisa a tu backend por webhook. La regla más importante es que tu aplicación active el plan cuando confirma el estado con MercadoPago, no cuando el usuario vuelve del checkout.

Así está armado el cobro de LeadsLocales, mi SaaS de generación de leads. Te cuento el flujo, los cuidados técnicos y las decisiones de negocio que hay alrededor.

¿Por qué MercadoPago para un SaaS argentino?

Porque tus usuarios ya lo tienen. Un freelancer o una agencia en Argentina probablemente ya pagó algo con MercadoPago, tiene la tarjeta cargada y confía en el checkout. Además, cobrás en pesos sin que el usuario tenga que pagar en dólares con tarjeta internacional, algo que en Argentina puede ser una barrera.

Como cualquier medio de cobro, MercadoPago cobra una comisión por cada pago. Revisá las condiciones vigentes en su sitio antes de definir tus precios, porque cambian con el tiempo y según el plazo de acreditación que elijas.

¿Qué es preapproval y cómo funciona?

Una preapproval es una suscripción: un acuerdo en el que el usuario autoriza a tu cuenta a cobrarle un monto cada cierto período. MercadoPago permite crearlas asociadas a un plan (definís el plan una vez y cada usuario se suscribe a él) o sin plan asociado (creás la suscripción con el monto y la frecuencia directamente).

Cada suscripción tiene un estado. Los que más vas a ver son pending (creada, todavía no autorizada), authorized (activa, se cobra cada período), paused y cancelled. Tu app tiene que reflejar ese estado: es la fuente de verdad sobre si el usuario está pagando. Los nombres exactos de endpoints, campos y eventos pueden cambiar, así que trabajá siempre con la documentación oficial de MercadoPago a mano.

¿Cómo es el flujo completo, paso a paso?

  • El usuario elige un plan en tu página de precios.
  • Tu backend crea la suscripción en MercadoPago e incluye una referencia externa con el id del usuario, para saber después de quién es.
  • Redirigís al usuario al checkout de MercadoPago con el link que te devuelve la API.
  • El usuario autoriza el cobro con su tarjeta o su cuenta.
  • MercadoPago notifica a tu webhook que la suscripción cambió.
  • Tu backend consulta la suscripción por su id, confirma el estado y activa el plan del usuario.
  • Cada período, MercadoPago intenta el cobro y te vuelve a notificar. Si falla o el usuario cancela, tu app lo refleja.

¿Por qué el plan se activa con el webhook y no con la redirección?

Porque la página a la que vuelve el usuario después del checkout (la URL de retorno) es solo eso: una página. Cualquiera la puede abrir copiando la dirección, el usuario puede cerrar la pestaña antes de que cargue, o el pago puede quedar pendiente. Si activás el plan ahí, tarde o temprano vas a tener usuarios con plan pago que no pagaron, o usuarios que pagaron y no tienen el plan.

El webhook, en cambio, lo dispara MercadoPago cuando algo cambia. En LeadsLocales, el webhook es el que activa el plan automáticamente: el usuario vuelve a la plataforma y su plan ya está activo, sin que nadie tenga que hacer nada a mano. La página de retorno solo muestra un mensaje de "estamos confirmando tu pago".

¿Qué cuidados hay que tener con el webhook?

  • No confíes en el contenido de la notificación. Usala como aviso y consultá la suscripción a la API con tus credenciales para leer el estado real.
  • Validá la firma. MercadoPago firma sus notificaciones con una clave secreta que configurás en tu cuenta: verificala para descartar llamadas falsas.
  • Respondé rápido. Contestá 200 enseguida y procesá después. Si tu endpoint tarda o falla, MercadoPago reintenta.
  • Hacelo idempotente. La misma notificación puede llegar más de una vez: procesarla dos veces no tiene que activar dos planes ni sumar créditos de más.
  • Guardá un registro. Cada notificación recibida y cada cambio de plan, con fecha. Cuando un usuario te diga "pagué y no se activó", es lo primero que vas a mirar.
  • Probá con usuarios de prueba. MercadoPago tiene credenciales y usuarios de prueba para simular el flujo completo sin cobrar de verdad.

¿Qué hace tu app en cada estado de la suscripción?

EstadoQué significaQué hace tu app
pendingCreada, sin autorizar.No activa nada. Muestra "pago pendiente".
authorizedActiva, se cobra cada período.Activa el plan y renueva sus beneficios cada período.
pausedPausada, no se cobra.Según tu política: suspendés beneficios o das un período de gracia.
cancelledTerminada.Pasás al usuario al plan gratis y conservás lo que corresponda según tu política.

Los nombres de los estados corresponden a la API de suscripciones de MercadoPago; verificalos en la documentación oficial al momento de implementar.

Caso real

¿Cómo está armado el cobro en LeadsLocales?

LeadsLocales tiene un plan gratis y planes pagos en pesos con cobro recurrente vía MercadoPago PreApproval y un webhook de activación automática. Cada plan da créditos mensuales para desbloquear contactos de negocios.

Dos decisiones de negocio pesan tanto como la técnica. La primera: los contactos desbloqueados quedan del usuario para siempre, incluso si cancela. Genera confianza ("no pierdo lo que pagué") y baja las cancelaciones, porque nadie siente que tiene que seguir pagando para no perder su trabajo. La segunda: el panel de administración permite cambiar el plan de un usuario a mano (override), con un log de actividad. Siempre aparece un caso especial, como una prueba extendida o un pago que se resolvió por otro lado, y conviene poder resolverlo sin tocar la base de datos.

Ver el caso técnico de LeadsLocales

¿Qué stack usé?

React en el frontend, Node.js con Express en el backend y SQLite como base de datos. Cuento por qué elegí SQLite en producción en la historia de LeadsLocales. Si estás comparando backends gestionados para tu producto, te puede servir Supabase vs Firebase.

Preguntas frecuentes

¿Se pueden cobrar suscripciones con MercadoPago?

Sí. MercadoPago tiene una API de suscripciones (preapproval) que debita automáticamente la tarjeta del usuario cada período y te notifica por webhook. Es lo que usa LeadsLocales para sus planes pagos en pesos.

¿Cuándo hay que activar el plan del usuario?

Cuando confirmás con MercadoPago que la suscripción está autorizada, no cuando el usuario vuelve a tu sitio después del checkout. La redirección la puede ver cualquiera; el estado consultado a la API es el dato confiable.

¿Qué pasa con lo que el usuario usó si cancela?

Es una decisión de negocio. En LeadsLocales, los contactos desbloqueados quedan del usuario para siempre aunque cancele: genera confianza y baja las cancelaciones.

¿Cuánto cuesta desarrollar un SaaS con suscripciones?

Depende de las funcionalidades, de cuántos planes tenga, de las integraciones y del panel de administración que necesites. Contame tu idea por WhatsApp o mail y te paso un presupuesto cerrado en 48 horas.

Tu proyecto

Si tenés una idea de SaaS y necesitás cobrar suscripciones en pesos, la desarrollo de punta a punta: producto, pagos, panel de administración y servidor.

#suscripciones mercadopago#cobro recurrente mercadopago#mercadopago preapproval#cobrar suscripciones saas argentina#webhook mercadopago