Trackily Docs

Créer une campagne

Une campagne se crée en 30 secondes via l'UI ou en un seul appel MCP create_campaign. Tu obtiens une URL https://<domaine>/c/<slug> prête à recevoir du trafic.

Modal Création campagne

Concept

Créer la campagne, c'est seulement la première étape. La campagne nue, sans flow, renvoie une 404. Pour que le trafic soit dispatché, il te faut :

  1. La campagne (cet article) — slug + cost model + source.
  2. Au moins un flow de type default (flows).
  3. Au moins une landing dans schema.landings[] du flow.
  4. Optionnel : une offre dans schema.offers[], un cloaking workflow, des règles automizer.

La pause par défaut est OFF (la campagne est active dès la création). Si tu prépares un setup avant le lancement, pense à passer is_active: false.

Comment faire — via l'UI

  1. Va dans Campaigns dans la sidebar admin.
  2. Clic sur Add Campaign en haut à droite.
  3. Remplis le modal :
    • Name : libellé humain (ex: MemoMind FR — Push Kadam).
    • Slug : auto-dérivé du nom (memomind-fr-push-kadam). Tu peux le forcer.
    • Domain : domaine de tracking (todayoffer.store). Doit être déjà ajouté dans Domains.
    • Offer : sélectionne l'offre dans le dropdown (optionnel à la création, requis avant d'envoyer du trafic).
    • Source : la traffic source (Kadam / Meta / TikTok / Custom…).
    • Cost Model : CPC, CPM, CPA, revshare ou manual.
    • Cost Value : la valeur numérique correspondante (par défaut 0).
    • Cloaking workflow : optionnel — sélectionne un workflow déjà créé dans la section Cloaking.
  4. Save. Tu es redirigé vers la détail vue de la campagne (/admin/campaigns/<id>).
  5. Ajoute un flow via le bouton + Add Flow dans la détail vue (voir flows).

Comment faire — via MCP

Tool : create_campaign (scope campaigns:write, Tier-1 safe — pas de confirm_token).

{
  "name": "create_campaign",
  "arguments": {
    "name": "MemoMind FR — Push Kadam",
    "slug": "memomind-fr-push-kadam",
    "domain": "todayoffer.store",
    "source_id": 3,
    "offer_id": 12,
    "cost_model": "CPC",
    "cost_value": 0.08,
    "is_active": true
  }
}

Réponse :

{
  "status": "ok",
  "message": "Campaign #42 \"MemoMind FR — Push Kadam\" created.",
  "details": {
    "id": 42,
    "name": "MemoMind FR — Push Kadam",
    "slug": "memomind-fr-push-kadam",
    "offer_id": 12,
    "source_id": 3,
    "cost_model": "CPC",
    "cost_value": 0.08,
    "is_active": true
  },
  "tracking_url": "https://todayoffer.store/c/memomind-fr-push-kadam",
  "next_steps": [
    { "tool": "create_flow", "hint": "Add at least one flow (type=default)…" },
    { "tool": "assign_cloaking_workflow_to_campaign", "hint": "Attach a cloaking workflow…" }
  ]
}

Le tracking_url est ce que tu colles dans ton interface ad network. Le next_steps est un rappel — Trackily ne fera RIEN à ta place, c'est à toi (ou à ton LLM) d'enchaîner les appels.

Paramètres en détail

slug

  • Format [a-z0-9-]. Auto-dérivé du name si omis (MemoMind FR — Pushmemomind-fr-push).
  • Doit être unique au sein de l'instance. Si le slug existe déjà, Trackily répond avec une erreur.
  • Changer le slug après le lancement = casser toutes les URLs déjà placées chez tes sources. À éviter.

cost_model + cost_value

Modèle Quand l'utiliser cost_value
CPC Push, popunder, native — facture par clic. Coût unitaire d'un clic
CPM Display, video — facture aux 1000 impressions. CPM (ex 1.20)
CPA Funnel maison où tu connais ton coût d'acquisition. Coût par conversion
revshare Tu paies un % de la revenue (rare en outbound). Pourcentage (ex 0.30)
manual Tu insères les coûts à la main via reports. Ignoré

Si ta source envoie le coût dans l'URL (Kadam : &cost={cost}), Trackily préfère TOUJOURS la valeur reçue par macro à la cost_value configurée. La cost_value ne sert que de fallback quand la macro est absente.

source_id

FK vers traffic_sources.id. Sert à :

  • Identifier la plateforme pour les futurs appels API (sync stats, list source campaigns…).
  • Récupérer les macros par défaut (voir sources).
  • Filtrer les reports par source.

Si tu omets, la campagne est source-less — elle marche, mais tu perds le reporting par plateforme et les sync API.

offer_id

FK vers offers.id. C'est l'URL de destination par défaut. Le flow peut ensuite override avec un schema.offers[] (rotation entre plusieurs offres).

cloaking_workflow_id

FK vers cloaking_workflows.id. Si non-NULL, chaque requête à /c/<slug> passe par le moteur cloaking AVANT le flow engine. Voir cloaking pour brancher ça en deux étapes via MCP.

domain

Le domaine de tracking utilisé pour construire l'URL retournée. N'est pas validé contre la table tracking_domains dans l'API MCP (mais l'UI le fait). Si tu donnes un domaine non configuré côté nginx, l'URL renvoyée pointe dans le vide.

Champs JSONB par défaut (créés vides)

  • bot_filter{"enabled": false}
  • freq_cap{"enabled": false}
  • tracking{}
  • sticky_cta{"enabled": false}
  • retargeting_pixels[]
  • external_campaign_ids{}
  • audience_passback{}

Tu peux les éditer après création via l'UI (Campaign Detail → Settings tab) ou via MCP update_campaign_* (Tier-2, confirm_token requis).

Exemples

Campagne push Kadam minimaliste

{
  "name": "create_campaign",
  "arguments": {
    "name": "VPN PRO US — Kadam push",
    "domain": "trackily.online",
    "source_id": 1,
    "offer_id": 8,
    "cost_model": "CPC",
    "cost_value": 0.02
  }
}

Campagne paused pour préparation (lancement plus tard)

{
  "name": "create_campaign",
  "arguments": {
    "name": "Diet Keto FR — Meta",
    "slug": "diet-keto-fr-meta",
    "source_id": 2,
    "offer_id": 19,
    "cost_model": "CPC",
    "cost_value": 0.45,
    "is_active": false
  }
}

Campagne avec cloaking dès la création

{
  "name": "create_campaign",
  "arguments": {
    "name": "Crypto Trade US — TikTok",
    "domain": "crypto-deal.world",
    "source_id": 4,
    "offer_id": 22,
    "cloaking_workflow_id": 7,
    "cost_model": "CPC",
    "cost_value": 0.18
  }
}

Workflow complet : campagne → flow → trafic

Le minimum vital après create_campaign :

{
  "name": "create_flow",
  "arguments": {
    "campaign_id": 42,
    "type": "default",
    "schema": {
      "landings": [{ "id": 17, "weight": 100 }],
      "offers":   [{ "id": 12, "weight": 100 }]
    }
  }
}

Avec ça, la campagne est utilisable : /c/memomind-fr-push-kadam route 100 % vers landing #17 puis offer #12.

Erreurs courantes

  • Slug déjà pris : Trackily n'auto-incrémente PAS. Choisis un slug différent ou supprime/renomme la campagne existante.
  • Source non testée : ne pas oublier test_source_connection avant le premier appel API. Une campagne marche sans, mais tu perds la sync stats.
  • Pas de flow : /c/<slug> renvoie 404 si la campagne n'a aucun flow. Pense à create_flow juste après.
  • Cloaking sur safe page seule : si le workflow envoie 100 % du trafic vers la safe page (mauvaise config), aucune conversion n'arrive. Vérifie le workflow avec get_cloaking_workflow avant l'assign.
  • Coût en cents vs en dollars : cost_value: 8 veut dire $8.00 (pas $0.08). Confusion classique pour les push à bas coût.
  • MCP sans scope : create_campaign requiert le scope campaigns:write sur le token MCP. Sinon 403.

Voir aussi