Contracargos de offerwall: por qué se revierten las conversiones y cómo dejar de pagarlas
Un contracargo en un offerwall significa que la red se lleva de vuelta el dinero de una conversión, a menudo semanas después de que ya pagaras al usuario. Esta guía explica por qué ocurre, cómo tratarlo en tu código y cómo dejar de pagarlo desde el principio.
Respuesta corta
Un contracargo de offerwall (reversión) es la red retirando el pago de una conversión que el anunciante rechazó, muchas veces días o semanas después de que acreditaras al usuario. Trata los postbacks de reversión por el ID de transacción, retén las conversiones arriesgadas hasta que pase la ventana de validación y revisa la cuenta antes del retiro, el último momento en que el dinero sigue siendo tuyo.
- Tasas de reversión habituales
- Las publicaciones del sector suelen hablar de un 10 a 25 por ciento en el tráfico de offerwall.
- Causas comunes
- VPN o país equivocado, usuarios duplicados, ofertas completadas demasiado rápido, emuladores y bots, postbacks repetidos.
- Métrica clave
- Tasa de reversión: importe revertido dividido entre el importe total pagado, por offerwall y por mes.
- Protección más sencilla
- Periodos de retención para cuentas nuevas y ofertas que pagan mucho.
Qué es un contracargo de offerwall
Cuando un usuario completa una oferta, la red envía un postback a tu sitio y tú acreditas al usuario. La red cobra del anunciante más tarde, cuando este ya ha revisado la calidad de los usuarios. Si el anunciante rechaza una conversión, la red la revierte y normalmente te envía un segundo postback con un importe negativo.
El problema es el momento. Las reversiones suelen llegar días o semanas después de la conversión original. Para entonces, un usuario fraudulento puede haber retirado y desaparecido, y el dinero sale de tu margen. Las publicaciones del sector suelen hablar de tasas de reversión del 10 al 25 por ciento en el tráfico de offerwall, así que no es un caso raro.
Motivos habituales para revertir conversiones
| Motivo | Qué pasó | Cómo evitarlo |
|---|---|---|
| País equivocado | El usuario estaba en una VPN o en un país al que el anunciante no apuntaba | Comprueba la red en el clic de la oferta y oculta los offerwalls a quien usa VPN |
| Usuarios duplicados | La misma persona instaló la app con varias cuentas | Vincula cuentas por dispositivo y por dirección de pago |
| Demasiado rápido | Nivel 10 en dos minutos, una encuesta respondida en segundos | Compara el tiempo de finalización con el de jugadores reales |
| Baja calidad | La app se instaló y se borró, sin uso real | Retenciones más largas en ofertas de instalación para cuentas nuevas |
| Emuladores y bots | Instalaciones desde emuladores, granjas de dispositivos o scripts | Detecta automatización y emuladores antes del clic |
| Postbacks duplicados | El mismo ID de transacción se envió o reenvió dos veces | Guarda los IDs de transacción e ignora las repeticiones |
Casi todo esto se ve antes de que la red revierta nada. Los datos están en tus propios registros: quién hizo clic, desde dónde, con qué dispositivo y cuánto tardó.
Trata bien los postbacks de reversión
Antes de pensar en prevenir, asegúrate de que tu sitio gestiona bien las reversiones. Muchos sitios ignoran en silencio los postbacks negativos, y así la pérdida nunca se descuenta del saldo del usuario.
- Acepta el postback de reversión. Lee en la documentación de la red qué estado o importe negativo envía y comprueba que tu endpoint lo trata.
- Asócialo por ID de transacción a la conversión original y registra ambas. Nunca apliques la misma reversión dos veces.
- Descuéntalo del saldo del usuario, aunque quede en negativo. Un saldo negativo bloquea el siguiente retiro hasta que se recupere.
- Muéstraselo al usuario en su historial, con el nombre de la oferta. Un historial claro reduce las consultas a soporte.
- Llévalo por offerwall y por usuario, para ver qué usuarios y qué offerwalls generan más reversiones.
// Sketch of a postback endpoint
$tx = $request->transaction_id;
$status = $request->status; // for example 'completed' or 'reversed'
if (Conversion::where('transaction_id', $tx)->where('status', $status)->exists()) {
return 'OK'; // already processed: ignore replays
}
if ($status === 'reversed') {
$original = Conversion::where('transaction_id', $tx)->firstOrFail();
$original->user->decrement('balance', $original->amount); // may go negative
}Periodos de retención: paga más tarde las conversiones arriesgadas
Un periodo de retención deja la conversión pendiente unos días antes de que el usuario pueda retirarla. Es la protección más sencilla contra las reversiones, porque la mayoría llegan mientras el dinero sigue de tu lado.
- Retén más tiempo las ofertas que pagan mucho. Una oferta de juego de varios dólares merece más retención que unos céntimos de una encuesta corta.
- Retén más tiempo las cuentas nuevas. La confianza crece con la antigüedad de la cuenta y un historial de retiros limpio.
- Libera antes a los usuarios de confianza. Los usuarios veteranos sin reversiones pueden saltarse casi toda la espera, y así mantienes contentos a tus mejores usuarios.
- Explica las retenciones en la página de la oferta. Los usuarios aceptan esperar cuando saben por qué y cuánto.
Para el fraude antes del retiro
La retención aplaza el problema; la detección lo elimina. El mejor momento para actuar es el retiro, porque es el último punto en que el dinero sigue siendo tuyo.
- Velocidad de la oferta. Registra cuándo hizo clic el usuario en la oferta y cuándo llegó la conversión. Compáralo con lo que tardan los usuarios reales.
- Velocidad de conversiones. Una ráfaga de conversiones en poco tiempo desde una cuenta rara vez es una persona real.
- IDs de transacción duplicados. Un ID repetido indica un postback reenviado o duplicado.
- Retiros de cuentas nuevas. Las cuentas recién creadas que retiran enseguida merecen una revisión más atenta.
- Dispositivos y direcciones de pago compartidos. Las reversiones se concentran en grupos de multicuentas.
Mide tu tasa de reversión
Divide el importe revertido entre el total pagado en cada offerwall, cada mes. Desglósalo por país y por antigüedad de la cuenta. Una tasa que sube en un offerwall suele apuntar a una fuente de tráfico o a un grupo de usuarios, y las redes vigilan este número de cerca cuando deciden cómo tratar tu sitio.
Cuando sabes qué segmentos revierten más, puedes endurecer retenciones y comprobaciones ahí y relajarlas en el resto, que es más justo con los usuarios honrados.
| Métrica | Cómo calcularla | Qué te dice |
|---|---|---|
| Tasa de reversión | Importe revertido dividido entre el total pagado, por offerwall y por mes | La calidad general del tráfico tal como la ve la red |
| Tasa de reversión por antigüedad | Lo mismo, separando cuentas de menos y más de 30 días | Si las cuentas nuevas necesitan retenciones más largas |
| Pagado antes de la reversión | Importe revertido que ya se había retirado | El dinero que de verdad perdiste |
| Usuarios más revertidos | Usuarios ordenados por importe revertido | Cuentas y grupos que revisar primero |
Trabaja con tus redes de offerwall
Las redes están de tu lado más a menudo de lo que parece. También pierden dinero con el tráfico revertido y prefieren quedarse con un publisher que corrige problemas antes que perderlo. Cuando suban las reversiones, pregunta a tu gestor de cuenta qué ofertas y países están afectados y si puede enviar el motivo de la reversión en cada postback negativo.
Cuéntale qué has cambiado: comprobación de VPN en el clic de la oferta, retenciones para cuentas nuevas, cola de revisión de retiros. Los publishers que pueden mostrar una tasa de reversión a la baja están en mucha mejor posición para pedir mejores pagos o acceso a ofertas premium.
Cómo lo automatiza CashoutGuard
Envía a CashoutGuard un evento de conversión cuando llegue un postback, con el ID de la oferta, el ID de transacción de la red y el importe. Recuerda el clic en la oferta, así que sabe cuánto tardó realmente.
offer_completed_too_fastcuando el tiempo entre el clic y la conversión es menor de lo que consiguen los jugadores reales.conversion_velocityycashout_velocitypara ráfagas de actividad.duplicate_transactionpara IDs de transacción repetidos.new_account_cashoutpara cuentas que retiran justo después de registrarse.
Cada retiro llega entonces a una cola de revisión con esos motivos, y los webhooks firmados avisan a tu backend en el momento en que una cuenta pasa a bloqueada, para congelar el saldo antes del siguiente retiro. Empieza en modo sombra y compara los retiros marcados con las reversiones que te envían tus redes. Consulta la documentación para los campos de la conversión.