Search Arbitrage — Media Buyer Manual
Operational manual для медіабаєра який буде запускати кампанії. Все що треба знати: що ставити, як скейлити, коли killати. На основі реверсу 2 vendor клієнтів ($396K spend, 99K ads, 105K кампаній проаналізовано).
Зміст
- Що ми ллємо і навіщо
- Що тобі дадуть на старт
- Налаштування кампанії — копі-пейст
- Naming convention — обов’язково
- Daily routine
- Scaling rules — коли scale, коли kill
- Tracker і landing — як перевіряти
- Метрики які дивимось
- Common problems & fixes
- Dos and Don’ts
- Reporting
1. Що ми ллємо і навіщо
Search arbitrage. Купуєш дешевий клік на FB → юзер на нашій landing бачить “search results” → клікає → Google AdSense платить нам більше ніж ми заплатили Meta.
$0.10 заплатили Meta → юзер на landing → клік на ad-результат → $0.20 від Google → +$0.10 нам
Ллемо великим обсягом дрібних кампаній, kill 95% які не зайшли, scale 5% winners. Це і є операція.
Ми НЕ оптимізуємо під ROAS у Meta (бо value passback не вмикаємо). Ми контролюємо CPC через bid cap і дивимось revenue у tracker dashboard поза Meta.
2. Що тобі дадуть на старт
Доступи
- ✅ Meta Business Manager + ad accounts (масовий пул)
- ✅ Meta Pixel pool — мінімум 5 pixels (rotation)
- ✅ Tracker URL базис — даємо тобі генератор лінків (
https://<наш-tracker>.com/cf/r/<id>?ad_id={{ad.id}}&...) - ✅ Landing URL pool — наші статті/landing pages
- ✅ CRM доступ — для бачення spend cap, balance
- ✅ Креативи — pipeline на Slack/Drive (готові + on-demand)
- ✅ Slack/Telegram чат для comms
Перш ніж запустити першу кампанію
- Перевір що pixel’и встановлені на наших landing (не клієнтських!)
- Перевір що tracker URL працює (відкрий, дивись redirect chain в DevTools)
- Перевір що Meta accounts мають spending limit > $0
- Білий лист доменів tracker’ів додано в BM під “Domain verification”
3. Налаштування кампанії — копі-пейст
Campaign level
| Параметр | Значення | Чому |
|---|---|---|
| Objective | Sales (OUTCOME_SALES) | Це базис для search arb. НЕ Traffic, НЕ Engagement. |
| Buying type | Auction | Завжди |
| Special ad categories | None | Допоки не loans-у-США (там Credit) |
| Campaign budget | НІКОЛИ — використовуй ABO (на adset рівні) | Не CBO. vendor обидва робять ABO. |
| Campaign spending limit | Залежить від плану scaling. Стандартно нема. |
Adset level
| Параметр | Значення |
|---|---|
| Conversion location | Website |
| Pixel | З нашого pool, ротуй між adsets |
| Conversion event | Purchase |
| Optimization | Conversions (під PURCHASE event) |
| Daily budget | $10-25/day на старт |
| Bid strategy | Bid cap (LOWEST_COST_WITH_BID_CAP) |
| Bid amount | $0.05-0.15 на старт (залежить від GEO — деталі нижче) |
| Schedule | 24/7 на старт |
Targeting
| Параметр | Значення |
|---|---|
| Audience | Manual targeting тільки |
| Advantage Audience | OFF (вимкнути!) |
| Locations | Конкретна країна (US, UK, AU, CA, DE…). НЕ “worldwide” на старт. |
| Age | 18-65 (мінімальна сегментація) |
| Gender | All |
| Languages | Залежно від GEO (en для англомовних, en+es для США, etc) |
| Detailed targeting | Empty — НЕ додавати interests на старт |
| Connections | Empty |
| Custom Audiences | НЕ використовувати на старт (no LAL, no retargeting) |
Placements
| Платформа | ON/OFF |
|---|---|
| ON | |
| ON | |
| Messenger | ON |
| Threads | ON (це нова, але vendor активно ллє) |
| Audience Network | OFF (низька якість) |
| Brand safety | RELAXED |
| Positions | All ON (не filter’ити на старт) |
Ad level
| Параметр | Значення |
|---|---|
| Identity | Наша FB page + IG account |
| Format | Single image, Single video, або Stories — пробуй |
| Primary text | Дають з креативу |
| Headline | З креативу |
| Description | З креативу |
| Website URL | Tracker URL з макросами: https://<tracker>.com/cf/r/<id>?ad_id={{ad.id}}&adset_id={{adset.id}}&campaign_id={{campaign.id}}&ad_name={{ad.name}}&adset_name={{adset.name}}&campaign_name={{campaign.name}}&source={{site_source_name}}&placement={{placement}} |
| Display link | Без UTM, чистий домен (наприклад gurusharp.com) |
| CTA | Залежно від креативу: “Apply now”, “Learn more”, “Get offer” |
4. Naming convention — ОБОВ’ЯЗКОВО
Кожна кампанія має traceable name. Якщо я не зможу прочитати з назви що ти запустив — я не зможу прочитати дані потім.
Наш формат (на основі vendor)
<seq>_<system>_<operator>_<acc>_<channel>_<keyword>_<GEO>_<lang>_<tracker>_<DDMM>
Приклад:
0142_AutoFlow_Bayer_4451_ch10260_packing_jobs_US_en_main_28-04
Розшифровка:
0142— наш seq counter (з CRM, монотонно зростає)AutoFlow— назва нашої системи автозаливуBayer— твоє прізвище як оператора (в назві кампанії!)4451— наш внутрішній номер ad account (не Meta ID)ch10260— channel/feed identifier (з landing pool)packing_jobs— keyword/темаUS— GEO (ISO code, абоWOдля worldwide)en— languagemain— tracker pool name28-04— дата запуску
Adset name
<campaign_name>_AS01
<campaign_name>_AS02
...
Ad name
<campaign_name>_AD<creative_id>
Приклад: 0142_AutoFlow_Bayer_4451_ch10260_packing_jobs_US_en_main_28-04_AS01_AD7281
Чому так суворо
Клієнтські оператори роблять рівно так. Це дозволяє:
- За одним SQL запитом тягнути всі твої кампанії
- Швидко знаходити winners по pattern
- Reverse engineer-ити свої власні дії потім
- Поміж операторами не плутатись
Якщо забув наш seq counter — пиши в Slack, я скажу. НЕ запускай без seq.
5. Daily routine
Графік
- Робочі дні — повна активність (Пн-Пт)
- Вихідні — мінімум, тільки моніторинг (як vendor)
Часові вікна (UTC)
- 9:00-15:00 UTC — основні запуски (як vendor). Перед US prime time.
- 02:00-04:00 UTC — нічого не запускаєм
- Реал-тайм моніторинг активних — 2-3 рази на день
Daily checklist
Ранок (9:00-10:00 UTC):
- Перевір overnight статуси: чи всі pixels живі, чи ад акаунти активні, чи нема Meta попереджень
- Перевір яким кампаніям виконалось 24h+ — застосуй scaling/kill rules (див. §6)
- Подивись Slack: які кампанії вчора показали найкращий результат — знайди ad_name + creative для replication
Полудень (12:00-14:00 UTC):
- Запуск нової партії: 5-10 кампаній з варіаціями (різні keyword × GEO × creative)
- Перевір real-time spend: ні одна кампанія не випередила budget (якщо bid cap працює — не повинно)
- Швидкий check tracker: вибери випадкову нову кампанію, відкрий ad → click → дивись що landing завантажується
Вечір (17:00-18:00 UTC):
- Перевір 6-год performance launch’нутих сьогодні
- Phantom check: чи нема ads з 0 impressions через 4+ годин (значить creative відхилений або pixel не fired)
- Daily report у Slack: spend, impressions, clicks, перші killі/scales
6. Scaling rules — коли scale, коли kill
Kill criteria (без жалю)
Кампанію killaєш коли:
- ❌ 3+ дні spend > $30 і 0 purchases (з сurрент трекером)
- ❌ CTR < 1% після 1000+ impressions (креатив не зачіпає)
- ❌ CPC > 2x median по нашій вертикалі після $20 spent
- ❌ Frequency > 4 (audience exhausted)
- ❌ Meta показує “Disapproved” — pause, escalate в Slack
- ❌ No Pixel events fired після 500+ кліків (tracker/landing broken — escalate first)
Правило: 95% кампаній мають бути killнуті. Якщо ти killаешь менше 80% — щось не так з критерієм (мабуть фантомні winners).
Scale criteria
Scale тільки якщо:
- ✅ 3+ дні positive trend (spend росте, purchases ростуть, CPL стабільний)
- ✅ CTR > 4% на 1000+ impressions
- ✅ CPC ≤ target по GEO (див. таблицю CPC нижче)
- ✅ Покращення кожен день (не плато)
Scaling steps
| Day | Action |
|---|---|
| Day 1 | Запуск з $10/day budget, bid cap $0.10 |
| Day 2-3 | Якщо метрики OK — без змін, просто моніторинг |
| Day 4 | Якщо стабільний winner — duplicate adset на same campaign, не зачіпай оригінал |
| Day 5-7 | Якщо обидва adsets живуть — підняти budget на winners +50% (з $10 до $15) |
| Day 8+ | Якщо все добре — clone в окрему campaign на іншому акаунті (horizontal scale) |
НЕ піднімай budget стрибком. НЕ змінюй bid cap кожного дня. НЕ змінюй targeting працюючого adset. Кожна зміна = Meta resets learning phase.
Target CPC по GEO (orientational, на основі vendor даних)
| GEO | Target CPC | Bid cap старт |
|---|---|---|
| US | $0.10-0.20 | $0.15 |
| UK | $0.08-0.15 | $0.12 |
| CA | $0.07-0.13 | $0.10 |
| AU | $0.06-0.12 | $0.10 |
| DE/FR/IT | $0.05-0.10 | $0.08 |
| ES/PT | $0.04-0.08 | $0.06 |
| Tier 2 (BR, MX, AR) | $0.02-0.05 | $0.04 |
| Worldwide (WO) | $0.05-0.10 | $0.08 |
7. Tracker і landing — як перевіряти
Перш ніж запустити кампанію — sanity check
- Відкрий tracker URL у браузері (заміни
{{ad.id}}на 12345 і так далі) - Дивись redirect chain у DevTools → Network tab: має бути 1-3 hops до landing
- Landing має завантажитись повністю: hero, текст, search box
- На landing підключений pixel? В DevTools → Sources → шукай
connect.facebook.net/en_US/fbevents.js - Pixel fires PageView? В DevTools → Network → filter
pixel→ має бути POST доtr/?id=...&ev=PageView
Якщо щось з цього не працює — НЕ запускай. Пиши в Slack.
Tracker URL — макроси
https://<tracker>.com/cf/r/<id>?
ad_id={{ad.id}}
&adset_id={{adset.id}}
&campaign_id={{campaign.id}}
&ad_name={{ad.name}}
&adset_name={{adset.name}}
&campaign_name={{campaign.name}}
&source={{site_source_name}}
&placement={{placement}}
Macros в {{...}} Meta заміняє автоматично перед redirect. Не редагуй ці параметри. Якщо дам тобі тестовий URL — копія саме така повинна бути.
Якщо landing 404 / помилка
- Pause кампанію
- Screenshot тебе як юзера, redirect chain з DevTools
- Slack у канал
#sa-techз тегом@max - НЕ продовжуй запуск інших кампаній на той самий landing поки не зафіксую
8. Метрики які дивимось
Що дивимось у Ads Manager (per ad, daily)
| Метрика | Що бачимо | Threshold |
|---|---|---|
| Spend | Скільки витратили | n/a |
| Impressions | Покази | мінімум 500 щоб судити |
| Clicks | Кліки на оголошення | через CTR |
| CTR (link) | % клікнули | >3% на старті, >5% scale |
| CPC | Cost per click | див. таблицю по GEO |
| CPM | Cost per 1000 imps | для діагностики аудиторії |
| Frequency | Скільки разів один юзер бачив | <3 ОК, >4 kill |
| Conversions (Purchase) | Скільки PURCHASE events | критично — це наш сигнал |
| CPA / Cost per Purchase | Spend / purchases | depends on RPC, побачимо |
Що ми НЕ дивимось у Ads Manager (це обманчиво)
- ROAS у Meta — у нас value passback вимкнений, тому 0. Не використовуй для рішень.
- Purchase value — те саме, не tracked
- AdSense revenue — це поза Meta, я скажу окремо
Реальний P&L дивимось у tracker dashboard
| Метрика | Де знайти |
|---|---|
| Visits (трафік на landing) | Tracker dashboard |
| Search clicks (кліки на ad-результат) | Tracker dashboard |
| RPC (revenue per click) | Tracker dashboard / wrapper dashboard |
| Total revenue | Wrapper dashboard (Visymo/SearchLabz) |
| Margin = Revenue - Meta spend | Calc в Excel/Notion |
9. Common problems & fixes
Кампанія в “Learning” >24h і не виходить
- Likely причина: занадто низький бюджет або bid cap
- Fix: збільшити budget +50% або bid cap +20%
- Якщо все одно — kill, перезапусти на іншому акаунті
CTR 5%+ але 0 purchases
- Likely причина: pixel не fired через broken landing
- Action: відкрий landing → DevTools → перевір PageView event
- Якщо broken — Slack в
#sa-tech - Поки чекаєш — pause кампанію, не throw money
Meta auto-pause “Low quality”
- Це Meta модерація стрейкнула landing
- Pause всі кампанії на той landing
- Slack
#sa-tech— поміняємо landing у пулі - Кампанії на інших landing — продовжуй
”Account disabled” попередження
- НЕ паника. Цей акаунт виходить з пулу.
- Slack
@maxдля escalation — буде appeal або заміна - Перенеси активні кампанії з цього acc на інший (clone)
Spend взлітає за день
- Перевір чи bid cap встановлений (не WITHOUT_CAP)
- Перевір чи campaign budget немає (має бути на adset)
- Якщо все ок — це нормально на winner, але pause як safeguard, escalate
Pixel показує 0 PageView events
- Tracker або landing broken
- Pause негайно. НЕ запускай нічого нового на той landing.
- Slack
#sa-tech
10. Dos and Don’ts
✅ Завжди
- ✅ Bid cap на кожному adset
- ✅ Manual targeting (Advantage Audience OFF)
- ✅ Naming з seq + Bayer + acc + ch + kw + GEO + lang + date
- ✅ Tracker URL з макросами для всіх кампаній
- ✅ Pixel ротуй між кампаніями (не один pixel у всіх)
- ✅ Brand safety RELAXED
- ✅ Wait 24-72h перед рішенням scale/kill
- ✅ Запуск 9-15 UTC на робочих днях
- ✅ Daily Slack report у кінці дня (spend, killed, scaled, problems)
❌ Ніколи
- ❌ CBO (Campaign Budget Optimization) — завжди ABO
- ❌ Advantage Audience — manual only
- ❌ LOWEST_COST_WITHOUT_CAP — завжди cap
- ❌ Detailed targeting на старт — empty interests
- ❌ Custom/Lookalike audiences на старт — broad only
- ❌ Один pixel у всіх кампаніях — minimum 5 у пулі
- ❌ Скейл одного adset >2x за 24h — Meta resets learning
- ❌ Запуск без перевірки tracker+landing — fix first, launch after
- ❌ Запуск без seq у назві — без traceability мертвий
- ❌ Audience Network ON — низька якість
- ❌ CBO (повторюю!)
11. Reporting
Daily (в кінці дня UTC, ~18:00)
Slack #sa-daily:
[28.04] Bayer daily
Запущено: 12 кампаній (acc 4451-4458, GEO US/UK/AU)
Активні: 47 (з попередніх днів)
Killed: 23 (CTR<1.5% або 0 purch)
Scaled: 3 (4451_ch10260_packing_jobs_US, 4452_ch10261_jobs_UK, 4455_ch10380_dentures_AU)
Spend сьогодні: $X
Total purchases (Meta): X
CPC avg: $X
Issues:
- pixel 9203847... не fires на landing gurusharp variant 3
- acc 4453 disabled — escalation pending
Top winner: 4451_ch10260_packing_jobs_US — CTR 7.2%, CPC $0.09, 124 purchases
Weekly (понеділок ранок)
Email/Notion: spend, total purchases, top-10 winners з ad_name, GEO breakdown, kill rate. Шаблон даю окремо.
Ad-hoc
Будь-яка з цих ситуацій → Slack @max ASAP:
- Meta попередження на BM рівні (не account)
- Tracker domain недоступний
- Pixel pool істощений (всі 5 у “issues”)
- Спалах spend (>2x normal day)
Quick reference card
OBJECTIVE: Sales (Outcome Sales)
OPTIMIZATION: Conversions → Purchase event
BID: Bid cap (LOWEST_COST_WITH_BID_CAP)
TARGETING: Manual, Adv Audience OFF, broad
BUDGET: ABO, $10-25/day adset
PLATFORMS: FB+IG+Messenger+Threads, NO Audience Network
BRAND SAFETY: RELAXED
PIXELS: 5+ rotation
URL: Tracker з макросами {{ad.id}} тощо
NAMING: <seq>_AutoFlow_Bayer_<acc>_<ch>_<kw>_<GEO>_<lang>_<tracker>_<DDMM>
KILL: 3 days, $30+, 0 purchases / CTR <1% / CPC 2x median
SCALE: 3 days steady → +50% budget → clone to new acc
LAUNCH WINDOW: 9-15 UTC, weekdays
WORK CYCLE: 5/2 (Sa/Su minimal)
Питання?
Slack #sa-buyers для daily — @max для escalation.
Перш ніж запускати першу кампанію — прочитай повністю, склади 5-10 запитань, обговоримо на kickoff. Не починай вгадувати в Ads Manager.
Підготовлено: 2026-04-28
Базис: реверс 2 vendor клієнтів (Alpha + Beta), $396K spend, 99K ads, 105K кампаній
Більше деталей: див. intel/_comparison/MASTER_PLAYBOOK.md для бізнес-контексту