Як налаштувати кампанії з ROAS bidding (Alpha school)

Реальна конфігурація з 4076 кампаній Client Alpha. Без теорії — копіюємо налаштування 1-в-1.

TL;DR

Bid strategy: LOWEST_COST_WITH_MIN_ROAS (Min ROAS Goal в UI) Optimization goal: VALUE (Maximize value of conversions) Conversion event: Purchase (з value переданим) Critical prerequisite: pixel ОБОВ’ЯЗКОВО передає value параметр у кожному PURCHASE event

Якщо value не передається — ROAS bidding не запрацює, Meta поверне error або відмовиться оптимізувати.

Дві бідингові школи у vendor

ПараметрAlpha (ROAS school)Beta (Bid Cap school)
% campaigns74% з MIN_ROAS75% з BID_CAP
Bid strategyLOWEST_COST_WITH_MIN_ROASLOWEST_COST_WITH_BID_CAP
Optimization goalVALUE (98%)OFFSITE_CONVERSIONS (100%)
Pixel передає value?Так — обов’язковоНі (тільки event count)
Що ти контролюєшMin ROAS (наприклад 1.2 = 120%)Max CPC ($0.10)
Що Meta робитьШукає юзерів які куплять багатоШукає кліки в межах CPC
Коли вмикатиВисокий маржинальний vertical (loans, finance)Volume-driven vertical (jobs, services)
Мінімум spend для learning$50/day на adset, 50+ purchases/тиждень$10/day на adset, 5+ purchases/тиждень

Правило: ROAS bidding працює коли є чіткий signal на purchase value. Search arb типово має фіксований RPC per click → можна fake’ати value = RPC × 1, або реальний value через postback.


Setup ROAS bidding — крок за кроком

Крок 1: Pixel має передавати value

В JavaScript коді на landing:

// На КОЖЕН purchase event:
fbq('track', 'Purchase', {
  value: 0.45,           // RPC value (фактичний або estimated)
  currency: 'USD'        // ОБОВ'ЯЗКОВО
});

Source value:

  • Реальний: пост-постбек з search feed wrapper (Visymo/SearchLabz передає реальний RPC за клік)
  • Estimated: фіксована середня RPC по nicheу (наприклад $0.30 для jobs verticals в US)

Без value Meta не може оптимізувати під ROAS — кампанія застрягне у learning.

Крок 2: Створення кампанії

В Ads Manager UI або API:

FieldValue
ObjectiveSales (OUTCOME_SALES)
Buying typeAuction
Special ad categoriesNone (або Credit якщо loans US)
Campaign budget optimizationOFF (ABO, як у vendor)
Bid strategyLOWEST_COST_WITH_MIN_ROAS
Min ROAS goalЗалежно від маржі (див. таблицю нижче)

Крок 3: Adset налаштування

FieldValue
Conversion locationWebsite
PixelЗ нашого pool, ротуй
Conversion eventPurchase
Optimization goalVALUE (98% Alpha adsets — саме це)
Daily budget$50-100/day мінімум для ROAS learning ($10/day тут НЕ працює)
Schedule24/7

Крок 4: Targeting (як для bid caps — манул)

FieldValue
AudienceManual targeting only
Advantage AudienceOFF
LocationsКонкретний GEO
Age18-65
GenderAll
LanguagesЗа GEO
Detailed targetingEmpty
Custom AudiencesEmpty

Крок 5: Placements

Те ж саме що для Beta — FB+IG+Messenger+Threads, NO Audience Network, RELAXED brand safety, всі positions ON.


Min ROAS goal — як вибрати число

VerticalMargin зразковийMin ROAS
Loans (high RPC, low conv rate)50-70%1.5-2.0
Cosmetic procedures30-50%1.3-1.6
Jobs (low RPC, high CTR)10-20%1.0-1.2
Medical/Dental25-40%1.2-1.5
Legal aid20-35%1.1-1.4

Правило: Min ROAS = (RPC / CPC) × 0.95 (95% від breakeven для запасу)

Приклад: якщо ваш target CPC $0.10 і RPC $0.20 → ROAS goal = (0.20 / 0.10) × 0.95 = 1.9

На старт ставимо нижче, в процесі підвищуємо. Якщо ROAS goal занадто високий — Meta отримає 0 impressions (нікого не знайде).


Real приклади з Client Alpha

Кампанія KAVS04451OA1WWCP03

  • bid_strategy: LOWEST_COST_WITH_MIN_ROAS
  • daily_budget: $10 (1000 cents)
  • objective: OUTCOME_SALES
  • Adset optimization: VALUE
  • Pixel передає purchase value через postback з Visymo

Cost cap subgroup (1.6% adsets — 365 з 25,293)

Невелика частина adsets використовує COST_CAP strategy з конкретними bid amounts:

  • $0.14, $0.35, $0.45, $0.59, $0.69, $0.75
  • Optimization: OFFSITE_CONVERSIONS (не VALUE)
  • Це гібрид: target CPA замість Min ROAS

Коли COST_CAP замість MIN_ROAS:

  • Якщо value passback ще не налаштований
  • Якщо vertical волатильний (Meta не може стабільно прогнозувати ROAS)
  • Як safety net на нових account-ах перед переходом на ROAS

Що НЕ робити з ROAS bidding

Бюджет $10/day на adset — недостатньо для learning. ROAS bidding потребує $50-100/day на adset мінімум, інакше Meta не зможе зібрати достатньо conversion data.

Min ROAS > 3.0 на старт — Meta не знайде аудиторію, ad’и не пошлють impressions, кампанія “учиться” вічно. Стартуй з 1.0-1.5, нарощуй пізніше.

Запуск без value у pixel — error “Pixel does not pass value parameter” або кампанія застрягне у learning.

Зміна Min ROAS goal частіше ніж раз на 7 днів — Meta resets learning при кожній зміні bid strategy params.

Mix VALUE + OFFSITE_CONVERSIONS optimization в одній кампанії — 98% adsets Alpha на VALUE, виняток рідкий. Дотримуйся одного.


Тестова стратегія — як вирішити чи ROAS school підходить нашій вертикалі

Тиждень 1-2: запусти 10 кампаній з BID CAP (Beta school) — bid cap $0.10, optimize OFFSITE_CONVERSIONS, $10/day budget кожна.

Тиждень 3-4: коли будуть 50+ purchases/тиждень на топ 3 акаунтах — copy-clone тих кампаній на ROAS bidding:

  • bid strategy → MIN_ROAS, goal = 1.2
  • optimization → VALUE
  • budget → $50/day
  • pixel value passback ON

Порівняй за 2 тижні:

  • Cost per purchase
  • Total purchases per $1000 spent
  • Margin (RPC × purchases - spend)

Якщо ROAS виграє > 15% — перевести всі на ROAS school. Якщо ні — залишитись на BID CAP (як Beta).


Технічні вимоги до інфри (для розробника)

1. Postback endpoint на нашому tracker

Search feed (Visymo/SearchLabz) має зробити S2S постбек на наш endpoint після кожного клику на ad:

POST https://<наш-tracker>.com/postback
{
  "click_id": "abc123",       // з оригінального click
  "value": 0.42,              // RPC за цей клік (USD)
  "currency": "USD",
  "ad_id": "120209876543",    // Meta ad_id
  "fbclid": "fbclid_value"
}

2. Conversion API (CAPI) до Meta

Tracker має негайно forward’нути postback як PURCHASE event з value в Meta CAPI:

POST https://graph.facebook.com/v21.0/<pixel_id>/events
{
  "data": [{
    "event_name": "Purchase",
    "event_time": <unix>,
    "action_source": "website",
    "user_data": {
      "fbc": "fb.1.<unix>.<fbclid>",
      "client_ip_address": "<ip>",
      "client_user_agent": "<ua>"
    },
    "custom_data": {
      "value": 0.42,
      "currency": "USD"
    },
    "event_id": "<dedupe_id>"   // = client-side fbq event_id для dedupe
  }],
  "access_token": "<system_user_token>"
}

3. Client-side fbq event як backup (deduplication)

На landing JavaScript fires те саме event:

const eventId = generateEventId();  // unique per click
fbq('track', 'Purchase', {
  value: 0.42,
  currency: 'USD'
}, { eventID: eventId });

CAPI server-side event і client-side fbq event мають однаковий event_id → Meta дедупить, рахує як 1 event.

4. Pixel pool ротація

5+ pixels на старт. Кожна кампанія використовує конкретний pixel з pool. Postback handler знає який pixel прив’язаний до якого ad_id (з нашої БД).


Reporting — як читати ROAS у Meta

МетрикаЩо означає
ROASПокупки value / spend. Target ≥ Min ROAS goal.
Purchase ROASТе саме, тільки для purchase events
Cost per Purchasespend / purchases.
Conversion valueСума всіх values переданих у postback

Якщо ROAS у звіті < Min ROAS goal:

  1. Перевір чи value передається (DevTools на landing → fbq events)
  2. Перевір чи CAPI postbacks приходять (CAPI Events Manager → Activity)
  3. Перевір deduplication (events не повинні дублюватись 2x)
  4. Якщо все ОК — Meta потребує ще learning часу (7-14 днів)

Коротко на пам’ять

Beta school: bid cap $X, OFFSITE_CONVERSIONS, ти контролюєш CPC. Volume-driven.

Alpha school: MIN_ROAS goal, VALUE optimization, Meta контролює quality. Margin-driven.

Наш план MVP: стартуємо з Beta (простіше). Через 4-6 тижнів коли postback працює і є purchase value data — переключаємо частину на Alpha school для high-margin verticals.


На основі: 4076 ROAS-bidding campaigns + 24,880 VALUE-optimized adsets з Client Alpha (account: Alpha), $191K spend за останні 6 місяців.