RRelo Docs
API & GuíasGuías

Data Pull

Pull automático de AppsFlyer cada hora sin código: filtro de atribución primaria, cálculo de revenue, segmentación y frescura de datos.

Guide

Pull Automatico de Datos (Cero Codigo)

RELO jala tus datos de AppsFlyer cada hora automaticamente. Tu provees las credenciales, nosotros nos encargamos de todo lo demas.

Como Funciona la Pull API

El servicio Go de RELO en Hetzner ejecuta un job programado que llama a la AppsFlyer Pull API cada 60 minutos. Descarga reportes de eventos in-app, extrae datos de compra, corre matching de atribucion, y llena tu dashboard.

// Every 60 minutes, the Go service runs:

1. Download reports from AppsFlyer
   GET https://hq1.appsflyer.com/api/raw-data/export/app/{app_id}/
       in_app_events_report/v5
   ?from=2026-03-18&to=2026-03-18
   &event_name=af_purchase
   &additional_fields=is_primary_attribution,...

2. Filter by Primary Attribution
   Only rows where Is Primary Attribution = "true" are processed.
   This prevents double-counting when the same order appears in
   both UA and RT reports.

3. Extract products from Event Value JSON
   Parse af_content_id, af_price, af_quantity, items, awin_cg

4. Calculate correct revenue
   Priority: awin_cg > Event Revenue proportional > af_price

5. Run attribution matching
   Match campaign field against partner rules (exact/contains/etc.)

6. Classify products into segments
   MX, VD, DA, HA, IT, NW, TAB based on product name/category

7. Write to ClickHouse + Supabase (dual-write)
   Deduplication via sale_hash = SHA256(order_id|product_id|qty)

Reportes Descargados

Reporte

Frecuencia

Eventos

Plataformas

Eventos in-app UA

Cada 60 min

af_purchase

iOS + Android

Eventos in-app RT (Retargeting)

Cada 60 min

af_purchase

iOS + Android

Instalaciones

Diario a las 4 AM MX

install

iOS + Android

Reportes de fraude

Diario a las 4 AM MX

Instalaciones/eventos bloqueados

iOS + Android

Filtro de Atribucion Primaria

Cuando las campanas de retargeting estan activas, AppsFlyer exporta la misma compra en ambos reportes UA y RT. El campo Is Primary Attribution indica cual fuente es la ganadora.

// Example: Order MX251215-75414612 appears in BOTH reports

UA Report:
  Campaign: ...sub3... (PartnerC)
  Touch Time: 2025-12-14 17:48:54
  Is Primary Attribution: FALSE  // Not the winner

RT Report:
  Campaign: ...sub1... (PartnerA)
  Touch Time: 2025-12-14 17:50:15
  Is Primary Attribution: TRUE   // This is the winner

// RELO only processes rows where Is Primary Attribution = "true"
// This prevents double-counting and respects AppsFlyer's attribution decision

Sin este filtro: El primer CSV importado "ganaria" sin importar la atribucion real, llevando a atribucion incorrecta de partners y calculos de comisiones erroneos.

Calculo de Revenue

AppsFlyer provee multiples campos de precio. RELO usa una cadena de prioridad para obtener el revenue real (despues de descuentos), no el precio de lista:

// Revenue priority chain (highest accuracy first):

Priority 1: awin_cg (per-product breakdown)
  "Mobile_Smartphone:16984.30|Mobile_Wearable:719.10"
  -> Product 1 revenue: $16,984.30
  -> Product 2 revenue: $719.10
  -> Validates: sum must equal Event Revenue

Priority 2: Event Revenue (distributed proportionally)
  Event Revenue: $17,703.40
  af_price: [$41,998.99, $5,999.00]
  -> Product 1: $17,703.40 * (41998.99 / 47997.99) = $15,501.25
  -> Product 2: $17,703.40 * (5999.00 / 47997.99) = $2,202.15

Priority 3: af_price (list price fallback)
  Only used when neither awin_cg nor Event Revenue is available.
  WARNING: This is the list price BEFORE discounts.

Por que importa: Usar af_price directamente puede sobreestimar el revenue en 40-60% por descuentos promocionales. awin_cg da el revenue exacto por producto despues de descuentos.

Clasificacion de Segmento de Producto

Cada producto se clasifica automaticamente en un segmento para el calculo de comisiones:

Segmento

Nombre

Palabras Clave

MX

Mobile

galaxy s, galaxy z, buds, watch, sm-

VD

Visual Display

tv, qled, oled, soundbar, monitor

DA

Digital Appliances

refrigerador, lavadora, horno, bespoke

HA

Home Appliances

aire, microondas, aspiradora

IT

Computing

laptop, tablet, galaxy book, tab s

NW

Network

router, mesh, wifi, switch

TAB

Tablets

tab (word boundary match only)tab (solo match de palabra completa)

Configuracion: Proveyendo Credenciales

1

Obtiene tu token de Pull API de AppsFlyer

En AppsFlyer, ve a Settings → API Tokens. Copia el token de Pull API v2.0. Este NO es el mismo que el token V1 o el token de Admin API.

2

Comparte tus app IDs

Provee tu app ID de iOS (ej: id123456789) y el package name de Android (ej: com.samsung.shop.mx). RELO jala datos de ambas plataformas.

3

Envia las credenciales a tu account manager de RELO

Nosotros configuramos la Pull API en nuestro backbone de Hetzner. En 1 hora, tu primer pull de datos corre automaticamente y tu dashboard empieza a llenarse.

Trigger Manual

Los admins pueden disparar un pull de datos inmediato via la API (util despues de cambios de configuracion o para debuggear datos faltantes):

POST https://ingest.relo.mx/pull/trigger
Authorization: Bearer ADMIN_TOKEN
Content-Type: application/json

{
  "client_id": 3,
  "date": "2026-03-18",
  "reports": ["ua_purchase", "rt_purchase"]
}

// Response 200:
{
  "status": "started",
  "message": "Pull triggered for client 3, date 2026-03-18",
  "reports": ["ua_purchase", "rt_purchase"]
}

Frescura de Datos

Puedes verificar cuando fue la ultima vez que se jalaron datos via el endpoint de frescura de datos:

GET https://ingest.relo.mx/system/data-freshness

// Response 200:
{
  "clients": [
    {
      "client_id": 3,
      "client_name": "Marca",
      "last_pull": "2026-03-18T15:00:00Z",
      "minutes_ago": 32,
      "status": "fresh",
      "orders_today": 145,
      "orders_yesterday": 312
    }
  ]
}

Estado de frescura: fresh = jalado en los ultimos 90 minutos. stale = 90-180 minutos desde el ultimo pull. critical = mas de 180 minutos. El dashboard de admin muestra un banner de warning cuando los datos estan desactualizados.

On this page