Automizer
Un moteur de règles qui surveille tes campagnes en background et déclenche des actions (pause, scale budget, alerte) quand des conditions sont remplies. Plus jamais à mater Voluum à 3h du matin pour pauser une campagne qui leak.

C'est quoi, l'Automizer
L'Automizer est un rule engine :
- Tu définis une règle : "si la campagne 42 dépense plus de 20 USD ET fait moins de 3 conversions sur 24h, alors pause-la et envoie-moi une notif".
- Trackily évalue toutes les règles toutes les 60 secondes (la boucle est dans
automizer.js:16). - Si toutes les conditions sont vraies (AND logic — voir
automizer.js:66), les actions s'exécutent. - Le déclenchement est loggué dans
automation_logpour audit.
C'est l'équivalent des "alertes" Voluum / RedTrack, mais avec deux trucs en plus :
- Tu peux exécuter des actions sur les APIs externes : pause une campagne Meta, change un bid Kadam, baisse le budget Taboola — directement depuis la règle.
- Les règles sont créables via MCP : tu peux dire à Claude "crée une règle qui pause toute campagne avec un ROI < -40% sur 6h" et l'agent appelle
create_automizer_rulepour toi.
L'automizer vs les ops manuelles
| Cas | Manuel | Automizer |
|---|---|---|
| Pause d'une campagne qui leak la nuit | Tu te lèves à 3h pour la pause | Pause auto en 60s, notif Telegram |
| Scale +20% sur les top performers | Tu compares les ROAS à la main chaque matin | Règle "ROAS > 2.5 sur 24h → +20% budget Meta" |
| Détection sources bot-heavy | Tu lis les logs fraud chaque jour | Règle "bot_rate > 30% sur 6h → pause source" |
| Tests A/B de creatives | Tu suis manuellement et tu coupes les perdants | Règle "EPC < 0.10 sur 1000 clicks → pause creative" |
| Réveil quand un client paie | Tu refresh Stripe | Règle "conversions > 0 → notif" (gimmick mais ça marche) |
L'idée centrale : tout ce que tu fais 2x ou plus par semaine devrait être une règle.
Les briques
Une règle a 4 composants :
{
"name": "Auto-pause low ROI 6h",
"campaign_id": 42, // ou null pour global
"conditions": [
{ "metric": "roi", "operator": "<", "value": -40, "window": "6h" },
{ "metric": "clicks", "operator": ">=", "value": 100, "window": "6h" }
],
"actions": [
{ "type": "pause_campaign" },
{ "type": "send_notification", "title": "Campaign paused", "message": "ROI dropped" }
],
"check_interval_minutes": 5,
"is_active": true
}
name— pour t'y retrouver dans la listecampaign_id(optionnel) — scope la règle à une seule campagne. Sans, elle est globaleproduct_id(optionnel, mutex aveccampaign_id) — scope à un produit (commerce natif)conditions— un array d'objets. AND entre eux (toutes doivent être vraies)actions— un array d'objets. TOUTES s'exécutent à la suite si les conditions sont metcheck_interval_minutes— fréquence d'évaluation. Défaut 5. La boucle globale tourne toutes les 60s mais respecte ce throttle par règle.
Comment c'est évalué (boucle 60s)
toutes les 60 secondes:
rules = SELECT * FROM automation_rules
WHERE is_active = true
AND (last_checked IS NULL
OR last_checked < NOW() - check_interval_minutes * INTERVAL '1 minute')
pour chaque rule:
stats = getStatsForTimeWindow(campaign_id, window) // ou getProductStatsForTimeWindow
allMet = true
pour chaque cond in rule.conditions:
met = (stats[cond.metric] OPERATOR cond.value)
si !met: allMet = false; break
UPDATE last_checked = NOW()
si allMet:
pour chaque action in rule.actions:
executeAction(action)
INSERT INTO automation_log (rule_id, conditions_met, actions_taken)
UPDATE last_triggered = NOW(), trigger_count = trigger_count + 1
dispatch notification 'rule_triggered'
Voir automizer.js:32 pour le code réel.
Une règle qui trigger plusieurs fois d'affilée → vérifie qu'elle a une action qui change l'état (ex :
pause_campaignfait queclicksarrête de monter, donc la prochaine évaluation ne re-trigger pas). Sinon ajoute une condition qui devient fausse après l'action.
Ce qui est dans cette section
| Page | Contenu |
|---|---|
| Rules | Créer une règle (UI + MCP). Schéma JSON complet. 3 exemples worked : auto-pause, auto-scale, anti-fraude. |
| Conditions | Toutes les métriques (clicks, cost, profit, roi, cr, epc, bot_rate…), tous les opérateurs (>, <, =, !=…), toutes les fenêtres ("1h", "6h", "24h", "7d"). |
Quelques cas réels
"Stop the bleeding" — pause les campagnes qui leak la nuit
{
"name": "Night safety net",
"conditions": [
{ "metric": "cost", "operator": ">", "value": 50, "window": "6h" },
{ "metric": "roi", "operator": "<", "value": -50, "window": "6h" }
],
"actions": [{ "type": "pause_campaign" }]
}
"Auto-scale" — augmente le budget des top performers
{
"name": "Scale winners +20%",
"campaign_id": 42,
"conditions": [
{ "metric": "roi", "operator": ">", "value": 80, "window": "24h" },
{ "metric": "conversions", "operator": ">=", "value": 10, "window": "24h" }
],
"actions": [
{ "type": "meta_change_daily_budget", "value_pct": 120 }
]
}
"Bot heatmap" — pause les sources noyées de bots
{
"name": "Block bot-heavy traffic",
"conditions": [
{ "metric": "bot_rate", "operator": ">", "value": 30, "window": "6h" },
{ "metric": "clicks", "operator": ">=", "value": 500, "window": "6h" }
],
"actions": [
{ "type": "pause_campaign" },
{ "type": "send_notification",
"title": "Bot leak", "message": "Bot rate > 30%" }
]
}
Actions disponibles
L'Automizer supporte 40+ types d'action, regroupés en familles. Liste exhaustive dans automizer.js:139.
Actions internes Trackily
| Type | Effet |
|---|---|
pause_campaign |
UPDATE campaigns SET is_active=false |
pause_offer |
UPDATE offers SET status='paused' |
change_weight |
Modifie le poids d'une landing/offer dans un flow |
change_bid |
Update campaigns.cost_value |
send_notification |
Notif via le système global (push, email, Telegram, Slack — selon conf) |
Actions API externes (sources de trafic)
Trackily peut appeler les APIs des principales sources de trafic pour pause/scale à leur niveau (pas juste côté tracker) :
| Plateforme | Actions disponibles |
|---|---|
| Meta (Facebook/Instagram) | meta_pause_campaign, meta_resume_campaign, meta_change_daily_budget, meta_change_lifetime_budget, meta_pause_adset, meta_resume_adset, meta_change_adset_budget |
| Kadam | kadam_pause_campaign, kadam_resume_campaign, kadam_change_bid, kadam_change_budget |
| PropellerAds | propeller_pause_campaign, propeller_resume_campaign, propeller_change_budget, propeller_change_daily_budget, propeller_change_bid |
| Taboola | taboola_pause_campaign, taboola_resume_campaign, taboola_change_budget, taboola_change_daily_budget, taboola_change_bid |
| TikTok Ads | tiktok_pause_campaign, tiktok_resume_campaign, tiktok_change_budget |
| MGID | mgid_pause_campaign, mgid_resume_campaign, mgid_change_budget |
| ExoClick | exoclick_pause_campaign, exoclick_resume_campaign, exoclick_change_budget, exoclick_change_daily_budget, exoclick_change_bid |
Pour que ça marche, la campagne (ou le produit) doit être liée à une
traffic_sourcesavec les credentials API valides ET avoir au moins unexternal_campaign_idmappé. Voir Sources.
Logs et historique
Chaque déclenchement crée une row dans automation_log :
CREATE TABLE automation_log (
id SERIAL PRIMARY KEY,
rule_id INTEGER REFERENCES automation_rules(id) ON DELETE CASCADE,
rule_name TEXT,
conditions_met JSONB, -- snapshot des valeurs au moment du trigger
actions_taken JSONB, -- résultats de chaque action (success/error)
created_at TIMESTAMPTZ DEFAULT NOW()
);
Le conditions_met capture les valeurs exactes au moment où la règle a fired :
[
{ "metric": "cost", "operator": ">", "target": 20, "actual": 23.45, "met": true },
{ "metric": "conversions", "operator": "<", "target": 3, "actual": 1, "met": true }
]
Et actions_taken capture le résultat de chaque action :
[
{ "type": "pause_campaign", "campaign_id": 42, "status": "paused" },
{ "type": "send_notification", "status": "notified" }
]
Tu peux consulter l'historique d'une règle dans Automizer → <rule> → Logs, ou via l'API /admin/api/automizer/rules/:id/logs.
Cohabitation cloaking ↔ automizer
Le cloaking décide quel visiteur voit la money page. L'automizer décide si la campagne continue de tourner. Ils sont indépendants :
- Un visiteur cloaké est compté dans
clicks(avecis_bot=trueou similaire) — donc il peut faire monterbot_rateet trigger une règle automizer - Une règle automizer qui pause une campagne empêche les nouveaux clicks — donc empêche le cloaking de se déclencher
Combo classique : règle "si bot_rate > 50% sur 1h → pause la campagne" → tu attrapes les attaques bot avant qu'elles ne te coûtent un fortune.
Voir aussi
- Rules — créer une règle (UI + MCP)
- Conditions — référence complète des métriques et opérateurs
- Cloaking — index — le côté server-side de la protection
- Vue d'ensemble — où l'Automizer s'insère dans la stack
- MCP — tokens — générer un token avec le scope
automizer:writepour piloter via agent