En varios proyectos he querido responder una pregunta aparentemente sencilla pero vital: ¿cuánto están dispuestos a pagar realmente mis usuarios por este producto o característica? Montar un test de precio controlado me ha permitido medir la willingness-to-pay (WTP) por cohortes y tomar decisiones de producto y pricing con datos reales, no con suposiciones. Aquí te cuento cómo lo hago combinando Google Optimize para la experimentación front y Stripe para gestionar precios y pagos, junto con algunas piezas de backend y análisis para que puedas reproducirlo paso a paso.
Por qué usar Google Optimize + Stripe
Google Optimize es ideal para mostrar variantes de experiencia (precio visible, copy, ofertas). Stripe maneja la lógica de suscripción/pago y facilita recoger conversiones económicas reales. Juntos te permiten exponer a usuarios a precios distintos, capturar su comportamiento hasta la compra y agrupar resultados por cohortes (origen, fecha, plan, dispositivo, etc.).
Arquitectura general del test
La arquitectura que recomiendo es simple pero robusta:
Diseño del experimento en Google Optimize
Mi objetivo es que la asignación de variantes sea aleatoria y que puedas segmentar por cohorts. En Optimize creo un experimento tipo A/B con variantes que cambian el precio mostrado y, opcionalmente, el copy:
Para cada variante uso un custom dimension en Google Analytics o un atributo en el dataLayer que marca la variante (por ejemplo, optimizeVariant = 'price_15'). Esto me permite cruzar datos Behavioral + Revenue.
Mostrar el precio correcto en el front
Es crítico que el precio visible y el precio que Stripe cobra coincidan. No quiero sorpresas legales ni usuarios enfadados. Hay dos enfoques:
En proyectos con recursos, prefiero la versión server-side. En MVPs, la versión cliente es más rápida de montar pero exige verificaciones extra.
Registrar la variante y crear la sesión en Stripe
Cuando el usuario inicia el checkout, envía al backend:
El backend crea un registro de "intent" con esos campos y crea una sesión de Checkout en Stripe usando la price_id correspondiente. Importante: guarda la referencia de Stripe (session_id) con la intent para poder unificar más tarde.
Ejemplo conceptual en pseudo-Node.js:
<!-- Pseudo-código, no pegues sin adaptar -->
fetch('/create-checkout', {method:'POST', body: {variant: 'price_15', userId}})
En el servidor:
1) registrar intent en BD con variant y meta.
2) stripe.checkout.sessions.create({line_items:[{price: PRICE_ID_FOR_VARIANT, quantity:1}], success_url, cancel_url})
Usar webhooks de Stripe para medir conversiones reales
Los webhooks son la clave para medir conversiones económicas reales (no solo clicks). Registro eventos como:
Cada webhook actualiza el registro inicial (intent) con el resultado y la información de revenue. Así tienes una tabla donde cada fila es un intento con variante, cohortes y resultado monetizado.
Definir cohortes útiles
No todas las cohortes aportan valor. Yo suelo empezar con:
La idea es ver si la sensibilidad al precio varía entre grupos: quizá usuarios de una campaña paguen más que el tráfico orgánico, o clientes en un país X acepten precios más altos.
Métricas a calcular
Para evaluar WTP por variante y cohorte calculo:
| Métrica | Qué me dice |
|---|---|
| Tasa de conversión | Sensibilidad inmediata al precio |
| ARPU | Ingreso medio y trade-off entre precio y volumen |
| Churn inicial | Calidad del buyer (si sube con precio alto, quizá atraes different profile) |
Ejemplo de interpretación
En un experimento reciente, aumentar el precio 50% redujo conversión un 30% pero aumentó ARPU global un 10% y no empeoró churn a 30 días. Con esos datos decidimos subir precio para nuevos clientes mientras manteníamos descuentos de migración para usuarios existentes. Esa segmentación fue posible gracias a medir por cohortes (nuevos vs existentes) y por canal.
Precauciones legales y experiencia de usuario
Dos aspectos que no puedes ignorar:
Errores comunes que he cometido
- No guardar la variante en el backend: perdí muchos datos porque dependía solo del cookie de Optimize que caducó.
- No vincular webhooks con el intent: atribuía pagos a la variante incorrecta.
- Ignorar la tasa de fallo de pago: un precio más alto puede implicar más intentos fallidos por métodos de pago rechazados en ciertos países.
Próximos pasos para implantar tu propio test
Si te interesa, te dejo una checklist rápida para arrancar:
Si quieres puedo compartir un diagrama más técnico o snippets adaptados a tu stack (Node.js, Rails, Django). También puedo ayudarte a elegir variantes de precio iniciales basadas en la psicología del pricing (p. ej. anclajes, precio psicológico, ofertas por tiempo limitado). Es un ejercicio tan técnico como estratégico: con la instrumentación correcta, los datos te cuentan justo lo que necesitas saber.