Arbitrage Funnel v1
Default 4-stage arbitrage funnel: click -> lead -> registration -> purchase. Stops ads when spend reaches percentage-of-payout thresholds without the next funnel event firing, or when cost-per-event exceeds its target. Rule 9 (low funnel conversion) is disabled by default and can be enabled via overrides for specific campaigns.
system
Targets
- cpc
- payout * 2 / 100
- cpl
- payout * 10 / 100
- cpp
- payout * 80 / 100
- cpr
- payout * 20 / 100
Spend thresholds
- no_regs
- payout * 20 / 100
- no_leads
- payout * 10 / 100
- no_clicks
- payout * 2 / 100
- no_purchases
- payout * 70 / 100
Tracked events
click
lead
registration
purchase
Stop conditions (9)
rule_1_no_clicksclick
Spent 2% of payout without any clicks
{
"all": [
"spend >= spend_thresholds.no_clicks",
"clicks == 0"
]
}rule_2_expensive_cpc_no_leadsclick
lead
CPC above 2% of payout with zero leads
{
"all": [
"clicks > 0",
"cpc > targets.cpc",
"leads == 0"
]
}rule_3_no_leads_after_spendclick
lead
Spent 10% of payout with clicks but zero leads
{
"all": [
"spend >= spend_thresholds.no_leads",
"clicks > 0",
"leads == 0"
]
}rule_4_cpl_above_targetlead
Cost per lead above 10% of payout
{
"all": [
"leads > 0",
"cpl > targets.cpl"
]
}rule_5_no_regs_after_spendclick
registration
Spent 20% of payout with clicks but zero registrations
{
"all": [
"spend >= spend_thresholds.no_regs",
"clicks > 0",
"registrations == 0"
]
}rule_6_cpr_above_targetregistration
Cost per registration above 20% of payout
{
"all": [
"registrations > 0",
"cpr > targets.cpr"
]
}rule_7_no_purchases_after_spendclick
purchase
Spent 70% of payout with clicks but zero purchases
{
"all": [
"spend >= spend_thresholds.no_purchases",
"clicks > 0",
"purchases == 0"
]
}rule_8_cpp_above_targetpurchase
Cost per purchase above 80% of payout
{
"all": [
"purchases > 0",
"cpp > targets.cpp"
]
}rule_9_low_funnel_conversiondisabled
registration
purchase
5+ cheap registrations but zero purchases - low funnel quality
{
"all": [
"registrations >= 5",
"purchases == 0",
"cpr <= targets.cpr"
]
}Raw JSON
{
"kind": "arbitrage_funnel_v1",
"name": "Arbitrage Funnel v1",
"targets": {
"cpc": "payout * 2 / 100",
"cpl": "payout * 10 / 100",
"cpp": "payout * 80 / 100",
"cpr": "payout * 20 / 100"
},
"description": "Default 4-stage arbitrage funnel: click -> lead -> registration -> purchase. Stops ads when spend reaches percentage-of-payout thresholds without the next funnel event firing, or when cost-per-event exceeds its target. Rule 9 (low funnel conversion) is disabled by default and can be enabled via overrides for specific campaigns.",
"action_on_stop": "pause_ad",
"tracked_events": [
"click",
"lead",
"registration",
"purchase"
],
"stop_conditions": [
{
"id": "rule_1_no_clicks",
"when": {
"all": [
"spend >= spend_thresholds.no_clicks",
"clicks == 0"
]
},
"reason": "Spent 2% of payout without any clicks",
"enabled": true,
"required_events": [
"click"
]
},
{
"id": "rule_2_expensive_cpc_no_leads",
"when": {
"all": [
"clicks > 0",
"cpc > targets.cpc",
"leads == 0"
]
},
"reason": "CPC above 2% of payout with zero leads",
"enabled": true,
"required_events": [
"click",
"lead"
]
},
{
"id": "rule_3_no_leads_after_spend",
"when": {
"all": [
"spend >= spend_thresholds.no_leads",
"clicks > 0",
"leads == 0"
]
},
"reason": "Spent 10% of payout with clicks but zero leads",
"enabled": true,
"required_events": [
"click",
"lead"
]
},
{
"id": "rule_4_cpl_above_target",
"when": {
"all": [
"leads > 0",
"cpl > targets.cpl"
]
},
"reason": "Cost per lead above 10% of payout",
"enabled": true,
"required_events": [
"lead"
]
},
{
"id": "rule_5_no_regs_after_spend",
"when": {
"all": [
"spend >= spend_thresholds.no_regs",
"clicks > 0",
"registrations == 0"
]
},
"reason": "Spent 20% of payout with clicks but zero registrations",
"enabled": true,
"required_events": [
"click",
"registration"
]
},
{
"id": "rule_6_cpr_above_target",
"when": {
"all": [
"registrations > 0",
"cpr > targets.cpr"
]
},
"reason": "Cost per registration above 20% of payout",
"enabled": true,
"required_events": [
"registration"
]
},
{
"id": "rule_7_no_purchases_after_spend",
"when": {
"all": [
"spend >= spend_thresholds.no_purchases",
"clicks > 0",
"purchases == 0"
]
},
"reason": "Spent 70% of payout with clicks but zero purchases",
"enabled": true,
"required_events": [
"click",
"purchase"
]
},
{
"id": "rule_8_cpp_above_target",
"when": {
"all": [
"purchases > 0",
"cpp > targets.cpp"
]
},
"reason": "Cost per purchase above 80% of payout",
"enabled": true,
"required_events": [
"purchase"
]
},
{
"id": "rule_9_low_funnel_conversion",
"when": {
"all": [
"registrations >= 5",
"purchases == 0",
"cpr <= targets.cpr"
]
},
"reason": "5+ cheap registrations but zero purchases - low funnel quality",
"enabled": false,
"required_events": [
"registration",
"purchase"
]
}
],
"spend_thresholds": {
"no_regs": "payout * 20 / 100",
"no_leads": "payout * 10 / 100",
"no_clicks": "payout * 2 / 100",
"no_purchases": "payout * 70 / 100"
},
"payout_resolution": {
"sources": [
"ad.name",
"ad_set.name",
"campaign.name"
],
"patterns": [
"(?<![-\\d.])(\\d+(?:\\.\\d+)?)\\s*\\$",
"\\$\\s*(\\d+(?:\\.\\d+)?)",
"(?i)(?:payout|cpa|ставка|rate)[:=\\s]+(\\d+(?:\\.\\d+)?)",
"(?i)(?<![-\\d.])(\\d+(?:\\.\\d+)?)\\s+(?:payout|cpa|ставка|rate)"
]
}
}