Search Arbitrage — Media Buyer Manual

Operational manual для медіабаєра який буде запускати кампанії. Все що треба знати: що ставити, як скейлити, коли killати. На основі реверсу 2 vendor клієнтів ($396K spend, 99K ads, 105K кампаній проаналізовано).

Зміст

  1. Що ми ллємо і навіщо
  2. Що тобі дадуть на старт
  3. Налаштування кампанії — копі-пейст
  4. Naming convention — обов’язково
  5. Daily routine
  6. Scaling rules — коли scale, коли kill
  7. Tracker і landing — як перевіряти
  8. Метрики які дивимось
  9. Common problems & fixes
  10. Dos and Don’ts
  11. 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

ПараметрЗначенняЧому
ObjectiveSales (OUTCOME_SALES)Це базис для search arb. НЕ Traffic, НЕ Engagement.
Buying typeAuctionЗавжди
Special ad categoriesNoneДопоки не loans-у-США (там Credit)
Campaign budgetНІКОЛИ — використовуй ABO (на adset рівні)Не CBO. vendor обидва робять ABO.
Campaign spending limitЗалежить від плану scaling. Стандартно нема.

Adset level

ПараметрЗначення
Conversion locationWebsite
PixelЗ нашого pool, ротуй між adsets
Conversion eventPurchase
OptimizationConversions (під PURCHASE event)
Daily budget$10-25/day на старт
Bid strategyBid cap (LOWEST_COST_WITH_BID_CAP)
Bid amount$0.05-0.15 на старт (залежить від GEO — деталі нижче)
Schedule24/7 на старт

Targeting

ПараметрЗначення
AudienceManual targeting тільки
Advantage AudienceOFF (вимкнути!)
LocationsКонкретна країна (US, UK, AU, CA, DE…). НЕ “worldwide” на старт.
Age18-65 (мінімальна сегментація)
GenderAll
LanguagesЗалежно від GEO (en для англомовних, en+es для США, etc)
Detailed targetingEmpty — НЕ додавати interests на старт
ConnectionsEmpty
Custom AudiencesНЕ використовувати на старт (no LAL, no retargeting)

Placements

ПлатформаON/OFF
FacebookON
InstagramON
MessengerON
ThreadsON (це нова, але vendor активно ллє)
Audience NetworkOFF (низька якість)
Brand safetyRELAXED
PositionsAll ON (не filter’ити на старт)

Ad level

ПараметрЗначення
IdentityНаша FB page + IG account
FormatSingle image, Single video, або Stories — пробуй
Primary textДають з креативу
HeadlineЗ креативу
DescriptionЗ креативу
Website URLTracker 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 — language
  • main — tracker pool name
  • 28-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

DayAction
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 даних)

GEOTarget CPCBid 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

  1. Відкрий tracker URL у браузері (заміни {{ad.id}} на 12345 і так далі)
  2. Дивись redirect chain у DevTools → Network tab: має бути 1-3 hops до landing
  3. Landing має завантажитись повністю: hero, текст, search box
  4. На landing підключений pixel? В DevTools → Sources → шукай connect.facebook.net/en_US/fbevents.js
  5. 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 / помилка

  1. Pause кампанію
  2. Screenshot тебе як юзера, redirect chain з DevTools
  3. Slack у канал #sa-tech з тегом @max
  4. НЕ продовжуй запуск інших кампаній на той самий landing поки не зафіксую

8. Метрики які дивимось

Що дивимось у Ads Manager (per ad, daily)

МетрикаЩо бачимоThreshold
SpendСкільки витратилиn/a
ImpressionsПоказимінімум 500 щоб судити
ClicksКліки на оголошеннячерез CTR
CTR (link)% клікнули>3% на старті, >5% scale
CPCCost per clickдив. таблицю по GEO
CPMCost per 1000 impsдля діагностики аудиторії
FrequencyСкільки разів один юзер бачив<3 ОК, >4 kill
Conversions (Purchase)Скільки PURCHASE eventsкритично — це наш сигнал
CPA / Cost per PurchaseSpend / purchasesdepends 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 revenueWrapper dashboard (Visymo/SearchLabz)
Margin = Revenue - Meta spendCalc в 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 для бізнес-контексту