CashoutGuard

Cómo bloquear el fraude en el registro, el clic en la oferta y el retiro

Puntuar el fraude es solo la mitad del trabajo. El dinero se salva cuando tu sitio actúa según la respuesta. Esta guía muestra los cuatro puntos donde actuar, qué hacer en cada uno y las pocas líneas de código que hacen falta.

Los cuatro puntos donde actuar

El fraude en un sitio de recompensas sigue siempre el mismo camino: abrir cuentas, completar ofertas, cobrar las conversiones y retirar. Cada paso es una oportunidad para frenarlo, y cada uno cuesta menos que el siguiente.

  1. Registro. Rechazar aquí una cuenta de granja no cuesta nada. Nunca gana, nunca hace clic y nunca llega a tus anunciantes.
  2. Clic en la oferta. Si la cuenta ya está marcada, no abras la oferta. El fraude nunca llega al offerwall ni al anunciante, así que después no hay nada que revertir.
  3. Conversión (postback). Acredita la recompensa, pero en espera. Los puntos existen, el usuario no puede gastarlos y tú decides después de echar un vistazo.
  4. Retiro. El último momento en que el dinero sigue siendo tuyo. Retén el retiro y revísalo antes de pagar.

Qué hacer con cada respuesta

CashoutGuard responde a cada evento con allow, review o block, además de los motivos. Esta es una política inicial sensata:

Dóndeblockreviewallow
RegistroRechazar la cuenta o dejarla suspendidaAceptar, vigilar el primer retiroAceptar
Clic en la ofertaMostrar "oferta no disponible"Abrir la ofertaAbrir la oferta
ConversiónAcreditar en espera, sin saldoAcreditar con normalidad, marcar para la revisión del retiroAcreditar con normalidad
RetiroRetener; normalmente rechazar tras la revisiónRetener para una revisión rápidaPagar

Suspende la cuenta en lugar de eliminarla. Si fue una falsa alarma, con un clic el usuario vuelve con su historial intacto.

El código

El script del navegador asigna a cada visitante un request_id. Envíalo con el formulario a tu servidor y luego consulta a CashoutGuard desde el servidor con tu clave secreta. Los ejemplos usan el SDK de PHP de la documentación; los SDK de Node.js y Python funcionan igual.

Registro

$cg = new \CashoutGuard\Client(getenv('CASHOUTGUARD_SECRET'));

$user = createUser($request);   // your own signup
$r = $cg->evaluate([
    'event'      => 'signup',
    'account_id' => (string) $user->id,
    'request_id' => $request->input('cg_request_id'),
    'ip'         => $request->ip(),
    'email'      => $user->email,
]);
if ($r->isBlocked()) {
    $user->suspend();          // keep it, so a false alarm is one click away
    return back()->withErrors(['email' => 'We could not create your account.']);
}

Clic en la oferta

$r = $cg->evaluate(['event' => 'offer_click', 'account_id' => (string) $user->id,
    'request_id' => $request->input('cg_request_id'), 'offer_id' => $offer->id, 'click_id' => $clickId]);
if ($r->isBlocked()) {
    return response()->view('offer-unavailable', [], 403);
}
return redirect()->away($offer->trackingUrl($user, $clickId));

Conversión (postback)

// Ask BEFORE crediting, so a blocked conversion never touches the balance.
$r = $cg->evaluate(['event' => 'conversion', 'account_id' => (string) $userId,
    'offer_id' => $offerId, 'transaction_id' => $transId, 'amount' => $payoutUsd, 'currency' => 'USD']);
$status = $r->isBlocked() ? 'hold' : 'approved';
creditReward($userId, $points, $status);   // 'hold' = recorded, not spendable

Retiro

$r = $cg->evaluate(['event' => 'cashout', 'account_id' => (string) $user->id,
    'request_id' => $request->input('cg_request_id'), 'amount' => $usd, 'currency' => 'USD',
    'payout_method' => $method, 'payout_address' => $address]);
$withdrawal->status = $r->isBlocked() ? 'hold' : ($r->needsReview() ? 'review' : 'pending');
$withdrawal->save();

Sin riesgos: modo sombra y fail-open

Dos ajustes protegen a los usuarios honestos mientras lo pones en marcha.

  • Primero, modo sombra. Un sitio nuevo responde allow a todo, pero registra lo que habría hecho. Ejecuta tu código en modo sombra unos días, revisa las cuentas que habría bloqueado y luego pasa el sitio a modo activo. Tu código no cambia.
  • Fail-open. El SDK espera como máximo dos segundos y responde allow si CashoutGuard va lento o no responde. Un problema de red nunca bloquea un registro ni un pago.

Qué señales merecen un bloqueo

No todos los motivos pesan lo mismo. Una buena política bloquea ante evidencias difíciles de explicar de forma inocente y solo manda a revisión el resto. Estas son las señales que más a menudo justifican un bloqueo por sí solas:

  • Una dirección de pago que ya cobró para otra cuenta. Un mismo email de PayPal o una misma wallet cobrando para varias cuentas es una sola persona.
  • Un dispositivo compartido con cuentas que ya bloqueaste. El mismo navegador o móvil que vuelve con otro nombre es el patrón clásico de una granja.
  • Un emulador, una máquina virtual o una herramienta de automatización. Los usuarios reales no completan ofertas desde un navegador headless ni desde un emulador de Android.
  • Tor o una IP de datacenter en ofertas con segmentación geográfica. El anunciante pagó por un país en el que el usuario nunca estuvo, así que la conversión se va a revertir.
  • Una dirección que está en tu propia lista de bloqueo. Cada red confirmada te deja dispositivos, IPs y direcciones que nunca deberían volver a ganar.

Otras señales sirven más como motivo para mirar que para bloquear: una VPN por sí sola, una zona horaria que no coincide con la IP, una cuenta recién creada o una oferta completada muy rápido. Dos o tres de ellas juntas en la misma cuenta suelen sumar de todos modos una puntuación de bloqueo, y de eso se trata puntuar: una señal débil rara vez decide; varias fuertes siempre lo hacen.

Cómo elegir tus umbrales

Cada sitio tiene dos números: la puntuación a partir de la cual un evento pasa a revisión y la puntuación a partir de la cual se bloquea. Los valores por defecto funcionan para la mayoría de los sitios de recompensas, pero tu tráfico no es igual al de los demás.

  1. Deja el sitio en modo sombra entre tres y siete días para tener tráfico real puntuado.
  2. Abre las cuentas que se habrían bloqueado y revisa veinte a mano. Si casi todas son claramente fraude, el umbral de bloqueo es correcto o incluso podría bajar un poco.
  3. Haz lo mismo con veinte cuentas en revisión. Si la mayoría son honestas, sube el umbral de revisión para que tu equipo solo mire los casos que importan.
  4. Repite después de cambios grandes: un offerwall nuevo, un país nuevo o un método de pago nuevo cambian quién llega a tu sitio.

Las reglas ayudan cuando una señal importa más en tu sitio que en otros. Un sitio que solo paga en cripto quizá quiera bloquear toda wallet compartida; a un sitio de encuestas quizá le preocupe sobre todo la velocidad. Las reglas cambian el peso de un motivo sin tocar tu código.

Cuando se bloquea a un usuario honesto

Va a pasar. Una familia que comparte un mismo portátil, un viajero en el wifi de un hotel o un usuario detrás de un operador móvil que rota IPs pueden parecer inusuales. Lo que importa es lo rápido que puedas deshacerlo.

  • Conserva la cuenta, suspéndela. Eliminarla tira a la basura el historial que necesitas para decidir.
  • Da una vía de regreso. Basta un mensaje neutro con un enlace a soporte. Las granjas rara vez escriben; los usuarios honestos sí.
  • Incluye la cuenta en la lista de permitidos tras comprobarla. Cuando estés seguro, añádela a la lista de permitidos para que las mismas señales no la vuelvan a bloquear la semana siguiente.
  • Libera rápido el dinero retenido. Una conversión o un retiro retenido que resulta estar en regla debería pagarse el mismo día. Eso es lo que hace que una retención sea aceptable para los usuarios honestos.

Plan de implementación en una semana

DíaPasoPor qué
1Instala el script y envía los retiros y los postbacks, con el sitio en modo sombraSe puntúa tráfico real sin ningún riesgo
2-3Revisa una muestra de los posibles bloqueos y revisionesContrasta los umbrales con tus propios usuarios
4Pasa a modo activo y actúa solo sobre los retirosProtege el dinero con el menor impacto
5Retén las conversiones bloqueadas en el handler de postbacksLos saldos dejan de crecer en las cuentas marcadas
6-7Rechaza los registros bloqueados y mantén cerradas las ofertas bloqueadasLas granjas se quedan en la puerta y nunca llegan a tus anunciantes

Cómo medir el resultado

Tres números te dicen si el bloqueo funciona. Revísalos cada semana durante el primer mes.

  • Tasa de reversiones de tus redes. El porcentaje de conversiones revertidas semanas después debería bajar a medida que las cuentas bloqueadas dejan de ganar.
  • Dinero retenido y dinero liberado. Si liberas la mayor parte de lo que retienes, tus umbrales son demasiado estrictos. Si casi nunca liberas nada, quizá sean demasiado laxos.
  • Tickets de soporte por bloqueos. Unos pocos por semana es normal. Un salto repentino suele significar que una señal pesa demasiado para tu audiencia.

Próximos pasos

Empieza por el retiro: es una sola llamada y protege el dinero directamente. Luego integra el postback y, después, el registro y el clic en la oferta. La checklist de retiros cubre qué mirar durante la revisión, y la página de precios incluye una prueba de 14 días del plan Growth.

Preguntas frecuentes

¿Debo bloquear en el registro o en el retiro?

En ambos, pero por motivos distintos. El registro frena a las granjas antes de que te cuesten nada; el retiro es la última red de seguridad para las cuentas que al principio parecían limpias.

¿De verdad sirve bloquear el clic en la oferta?

Sí. Si la oferta nunca se abre, el offerwall nunca registra la instalación, así que el anunciante no recibe fraude desde tu sitio y no hay nada que revertir semanas después.

¿Qué pasa si CashoutGuard está caído?

Los SDK funcionan en modo fail-open: tras dos segundos responden allow y tu sitio sigue funcionando como si la comprobación no existiera.

¿Puedo bloquear solo en el retiro y limitarme a observar el resto?

Sí. Tu código decide sobre qué respuestas actuar. Muchos sitios empiezan reteniendo los retiros bloqueados y solo más adelante rechazan registros.

Sigue leyendo