Asosiy mazmunga o'tish
Socialift
Qo'llanma

Meta Marketing API: reklamani API orqali yaratish

Marketing API'da reklama to'rt qavatdan yig'iladi: kampaniya (maqsad, masalan OUTCOME_TRAFFIC), ad set (auditoriya, byudjet, jadval), kreativ (rasm, matn, havola) va reklama. Byudjet valyutaning eng kichik birligida butun son bo'lib yuboriladi, special_ad_categories har kampaniyada majburiy, obyektlarni esa PAUSED holatda yaratib, tekshirgandan keyin yoqish xavfsiz yo'l.

Yangilangan:

Qisqacha: kampaniya API orqali qanday yaratiladi?

Tartib qat'iy: reklama kabinetini (act_...) tanlaysiz, auditoriyani qidirib, pul sarflamasdan baholaysiz, keyin POST /act_{id}/campaigns (maqsad va special_ad_categories), /adsets (targeting, byudjet, optimallashtirish), /adimages va /adcreatives (rasm va matn), oxirida /ads. Har birini PAUSED holatda yarating va tekshirib bo'lgach, uchala darajani ACTIVE qiling.

Ruxsatlar: hisobotlar uchun ads_read, yaratish va boshqarish uchun ads_management. Boshqa kompaniyalarning kabinetlari bilan ishlash uchun ads_management Advanced Access talab qiladi — demak App Review.

Obyektlar ierarxiyasi: nima qayerda belgilanadi

Obyektlar ierarxiyasi: nima qayerda belgilanadi — Platformalar bo'yicha imkoniyatlar jadvali
DarajaNimani belgilaydiEndpointSDK metodi
Reklama kabinetiValyuta, to'lov, kirish huquqiact_{id}ads.ad_accounts
KampaniyaBitta maqsad (objective), special_ad_categories, ixtiyoriy umumiy byudjetPOST /act_{id}/campaignscreate_campaign
Ad setAuditoriya, byudjet, jadval, optimallashtirish va to'lov hodisasiPOST /act_{id}/adsetscreate_adset
RasmKreativda ishlatiladigan hashPOST /act_{id}/adimagesupload_image
KreativRasm yoki video, matn, havola, CTA; yaratilgandan keyin o'zgarmaydiPOST /act_{id}/adcreativescreate_creative
ReklamaAd set va kreativni bog'laydiPOST /act_{id}/adscreate_ad

Bitta ad set ichidagi barcha reklamalar bir xil auditoriya va optimallashtirish maqsadiga ega. Kreativni o'zgartirib bo'lmaydi — yangisini yaratib, reklamaga ulaysiz.

Kampaniya maqsadlari (objective)

Marketing API v17.0'dan beri yangi kampaniyalar faqat soddalashtirilgan OUTCOME maqsadlari bilan yaratiladi.

Kampaniya maqsadlari (objective) — Platformalar bo'yicha imkoniyatlar jadvali
ObjectiveQachon tanlanadi
OUTCOME_AWARENESSKo'proq odamga ko'rsatish, brendni eslatish
OUTCOME_TRAFFICSayt, ilova yoki profilga o'tishlar
OUTCOME_ENGAGEMENTPost bilan o'zaro ta'sir, video ko'rishlar, xabarlar
OUTCOME_LEADSLead formalar va boshqa murojaatlar
OUTCOME_SALESSotuv va konversiyalar
OUTCOME_APP_PROMOTIONIlova o'rnatish va ilovadagi harakatlar

Eski LINK_CLICKS, CONVERSIONS, REACH kabi maqsadlar bilan yangi kampaniya yaratib bo'lmaydi; ular bilan avval yaratilgan kampaniyalar ishlashda davom etadi.

Byudjet qaysi birlikda yuboriladi?

daily_budget va lifetime_budget — kabinet valyutasidagi butun son, valyutaning eng kichik birligida (Meta buni offset deydi). Offset 100 bo'lgan valyutada (USD, EUR, RUB va boshqalar) kuniga 20 dollar 2000 bo'lib yuboriladi. Offset 1 bo'lgan valyutalarda (JPY, KRW, IDR, VND, CLP, COP, CRC, HUF, ISK, PYG, TWD) qiymat asosiy birlikda yoziladi.

O'zbek so'mi (UZS) Meta'ning valyutalar ro'yxatida yo'q, shuning uchun byudjetni har doim kabinetning o'z valyutasida (account.currency) hisoblang.

Byudjet kampaniya darajasida (Meta uni ad set'lar orasida o'zi taqsimlaydi) yoki ad set darajasida beriladi — ikkalasida birdaniga emas. lifetime_budget bilan end_time majburiy; daily_budget esa 24 soatdan uzun ishlaydigan ad set'lar uchun.

Socialift SDK'da daily_budget_major=20 qiymati CURRENCY_OFFSET (100) ga ko'paytirilib, 2000 bo'lib ketadi. Bu offset 100 bo'lgan valyutalarga to'g'ri keladi; kabinet offset 1 bo'lgan valyutada bo'lsa, qiymatni 100 ga bo'lib bering.

special_ad_categories: har kampaniyada majburiy

Meta har bir yangi yoki tahrirlangan kampaniya maxsus toifaga tegishlimi-yo'qmi, aniq ko'rsatilishini talab qiladi. Oddiy reklama uchun bo'sh ro'yxat ([]) yuboriladi — SDK'ning create_campaign metodi buni sukut bo'yicha qiladi.

Toifalar: HOUSING (uy-joy), EMPLOYMENT (ish), FINANCIAL_PRODUCTS_SERVICES (moliyaviy mahsulotlar; eski CREDIT qiymati o'rniga) va ISSUES_ELECTIONS_POLITICS (ijtimoiy masalalar, saylov, siyosat). Toifa tanlansa, special_ad_category_country ham majburiy bo'ladi.

Bu toifalarda targeting cheklanadi: masalan, AQSh, Kanada yoki Yevropaga yo'naltirilgan uy-joy, ish va moliya reklamalarida yosh oralig'i odatda 18–65+ ga qotiriladi, jinsni tanlab bo'lmaydi, joylashuv radiusi kamida 25 km, lookalike auditoriya mavjud emas.

Kampaniyani noldan ishga tushirish: 8 qadam

  1. Kabinetni tanlang

    ads.ad_accounts foydalanuvchi kira oladigan kabinetlarni act_... identifikatori va valyutasi bilan qaytaradi. Byudjetni shu valyutada hisoblaysiz.

  2. Qiziqish va joylashuvlarni qidiring

    search_interests (type=adinterest) — id, name, path va auditoriya hajmi oralig'i. search_locations (type=adgeolocation) — targeting'da ishlatiladigan key. Nom emas, ID saqlang: Meta qiziqishlar nomini o'zgartirishi mumkin.

  3. Targeting'ni yig'ing

    Custom Audience ishlatilmasa, kamida bitta davlat majburiy. age_min 13 dan kichik, age_max 65 dan katta bo'lmaydi; genders: 1 — erkaklar, 2 — ayollar, berilmasa — hammasi. Shahar radiusi 17–80 km.

  4. Auditoriyani pul sarflamasdan baholang

    GET /act_{id}/delivery_estimate taxminiy oylik auditoriya oralig'ini (estimate_mau_lower_bound, estimate_mau_upper_bound) va estimate_dauni beradi. estimate_ready=false bo'lsa, birozdan keyin qayta so'rang.

  5. Kampaniya yarating

    Maqsad (OUTCOME_*), special_ad_categories va status=PAUSED.

  6. Ad set yarating

    Targeting, byudjet, optimization_goal (masalan LINK_CLICKS), billing_event (masalan IMPRESSIONS) va yana PAUSED.

  7. Rasm, kreativ va reklama

    Rasmni /adimages ga yuklab hash olasiz, kreativda object_story_spec (sahifa, havola, matn, CTA) ichida shu hashni ko'rsatasiz, reklamada esa {"creative_id": ...}.

  8. Tekshirib, yoqing

    Ko'rinishni tekshiring, keyin kampaniya, ad set va reklamani ACTIVE qiling. Reklama avval ko'rib chiqishdan o'tadi — effective_status da PENDING_REVIEW yoki DISAPPROVED ni kuzating.

Python: auditoriyani topish va baholash

Hali hech narsa yaratilmaydi va pul sarflanmaydi — faqat qidiruv va baholash.

audience.py
import asyncio, os
from socialift import Ads

async def main() -> None:
    token = os.environ["META_USER_TOKEN"]
    async with Ads(app_secret=os.environ["FACEBOOK_APP_SECRET"]) as ads:
        account = (await ads.ad_accounts(token))[0]
        print(account.id, account.currency)

        interests = await ads.search_interests(token, "fitness", limit=5)
        cities = await ads.search_locations(token, "Tashkent", country_code="UZ")
        print([c["key"] for c in cities])  # cities=[...] uchun

        targeting = ads.build_targeting(
            countries=["UZ"],
            age_min=18,
            interests=[{"id": i["id"], "name": i["name"]} for i in interests[:3]],
        )  # advantage_audience=True — sukut bo'yicha
        estimate = await ads.delivery_estimate(token, ad_account_id=account.id, targeting=targeting)
        print(estimate.get("estimate_mau_lower_bound"), estimate.get("estimate_mau_upper_bound"))

asyncio.run(main())

interests ro'yxatidagilar "YOKI" bilan birlashadi. "A VA B" sharti kerak bo'lsa, build_targetingning flexible_spec parametridan foydalaning.

Meta aniq son bermaydi — faqat oraliq. Oraliq juda tor chiqsa, qiziqishlarni kamaytiring yoki Advantage+ audience'ni yoqilgan holda qoldiring.

Python: kampaniya → ad set → kreativ → reklama

SDK'da status sukut bo'yicha PAUSED — hech bir chaqiruv o'zi pul sarflashni boshlamaydi.

launch.py
from socialift import Ads

async def launch(ads: Ads, token: str, account_id: str, page_id: str, targeting: dict) -> str:
    campaign = await ads.create_campaign(
        token, ad_account_id=account_id, name="Kuzgi aksiya",
        objective="OUTCOME_TRAFFIC", special_ad_categories=[],
    )
    adset = await ads.create_adset(
        token, ad_account_id=account_id, name="UZ 18+", campaign_id=campaign["id"],
        targeting=targeting, optimization_goal="LINK_CLICKS", billing_event="IMPRESSIONS",
        daily_budget_major=20,  # USD kabinet: 2000 sent yuboriladi
    )
    with open("banner.jpg", "rb") as f:
        image = await ads.upload_image(token, ad_account_id=account_id, image=f.read(), filename="banner.jpg")
    creative = await ads.create_creative(
        token, ad_account_id=account_id, name="Banner A", page_id=page_id,
        link="https://example.uz", message="Kuzgi chegirmalar", image_hash=image["hash"],
    )
    ad = await ads.create_ad(
        token, ad_account_id=account_id, name="Banner A",
        adset_id=adset["id"], creative_id=creative["id"],
    )
    return ad["id"]

Reklama ko'rsatila boshlashi uchun kampaniya, ad set va reklamaning uchalasi ACTIVE bo'lishi kerak: ota obyekt to'xtatilgan bo'lsa, reklamaning effective_statusi CAMPAIGN_PAUSED yoki ADSET_PAUSED bo'ladi. Yoqish: await ads.set_status(token, node_id, "ACTIVE") — har bir daraja uchun.

To'xtatishning eng ishonchli joyi — kampaniya: uni PAUSED qilsangiz, ostidagi hamma narsa ko'rsatilmay qoladi.

Instagram akkaunti nomidan ko'rsatish uchun create_creativega instagram_user_id bering — Meta eski instagram_actor_id maydoni o'rniga shuni talab qiladi.

Advantage+ audience: v23.0'dan beri aniq ko'rsatiladi

Advantage+ audience Meta'ning yetkazib berish tizimiga siz bergan auditoriyadan tashqariga chiqib, natija beradigan odamlarni izlashga ruxsat beradi. API'da bu targeting.targeting_automation.advantage_audience maydoni: 1 — yoqilgan, 0 — o'chirilgan.

Graph API v23.0'dan boshlab yangi ad set yaratishda bu qiymat sukut bo'yicha 1 bo'ladi yoki aniq 1/0 berilishi talab qilinadi. Mavjud ad set'larni yangilashga bu o'zgarish ta'sir qilmaydi.

Yoqilgan holatda yosh qat'iy chegara emas: age_min faqat 18–25 oralig'ida beriladi, age_max esa 65 ga qotiriladi. Toraroq yosh oralig'i kerak bo'lsa, u age_range orqali tavsiya sifatida uzatiladi. Qat'iy nazorat kerak bo'lsa (masalan, huquqiy cheklov), build_targeting(..., advantage_audience=False) qiling va age_min/age_max ni chegara sifatida bering.

Ruxsatlar va Marketing API kirish darajalari

ads_read — reklama hisobotlari va Insights API. ads_management — kabinetni o'qish va boshqarish, kampaniya yaratish; u pages_read_engagement va pages_show_listga bog'liq va boshqa bizneslar uchun Advanced Access talab qiladi. Boshqa bizneslarning ma'lumoti bilan ishlaydigan tech provider'lar uchun Access Verification ham kerak.

Marketing API'ning o'z darajalari bor: Limited Access (avvalgi Standard) — Marketing API qo'shilganda avtomatik, har bir kabinet bo'yicha qattiq rate limit, ishlab chiqish uchun. Full Access (avvalgi Advanced) — App Review'dan keyin, rate limit yengilroq. Meta talabi: so'nggi 15 kunda kamida 500 ta Marketing API chaqiruvi va oxirgi 500 chaqiruvda xatolar 15% dan kam.

Natijalarni o'qish: insights

Har bir darajada /{object-id}/insights bor: kabinet, kampaniya, ad set va reklama.

report.py
summary = await ads.insights(token, campaign_id, since="2026-09-01", until="2026-09-16")
print(summary.spend, summary.impressions, summary.reach, summary.ctr)

rows = await ads.insights_rows(
    token, account_id, level="adset", date_preset="last_7d", breakdowns=["age", "gender"]
)
for row in rows:
    print(row.get("age"), row.get("gender"), row.get("spend"), row.get("cpc"))

insights sana berilmasa butun davr (date_preset=maximum) bo'yicha yig'indini qaytaradi; Meta'ning o'zi parametrsiz so'rovda odatda so'nggi 30 kunni beradi.

insights_rows kesimli xom satrlar beradi — "qaysi yosh guruhida bosish arzonroq" degan savolga javob shu yerda. Ba'zi kesimlarni birga so'rab bo'lmaydi: xato bo'lsa, bittadan qo'shib sinang.

Ishga tushirishdan oldin tekshiring

  • Kabinet valyutasi va offset'i aniqlangan, byudjet shunga mos hisoblangan.
  • special_ad_categories aniq berilgan (oddiy reklama uchun []).
  • Targeting'da kamida bitta davlat yoki Custom Audience bor.
  • delivery_estimate auditoriya oralig'i maqsadga mos.
  • Kampaniya, ad set va reklama PAUSED holatda yaratilgan va ko'rib chiqilgan.
  • Yoqish uchun uchala daraja ACTIVE, to'xtatish uchun kampaniya PAUSED qilinadi.
  • effective_status va sarf muntazam kuzatiladi.

← Blogga qaytish

Ko'p so'raladigan savollar

Byudjet nega 100 barobar katta yoki kichik chiqdi?

Marketing API byudjetni valyutaning eng kichik birligida kutadi. USD'da 20 dollar — 2000, JPY kabi offset 1 bo'lgan valyutada esa 2000 — 2000 iyena. Kabinet valyutasini tekshiring va shunga mos yuboring.

Eski LINK_CLICKS objective'ini ishlatsam bo'ladimi?

Yangi kampaniya uchun yo'q: v17.0'dan beri faqat OUTCOME_* maqsadlari qabul qilinadi. LINK_CLICKS endi ad set darajasidagi optimization_goal sifatida ishlatiladi.

Pul sarflamasdan auditoriya hajmini bilsa bo'ladimi?

Ha, delivery_estimate endpoint'i taxminiy oylik auditoriya oralig'i va kunlik faol foydalanuvchilarni qaytaradi. Meta aniq son bermaydi, faqat oraliq.

Reklama yaratildi, lekin ko'rsatilmayapti — nega?

Ko'pincha kampaniya yoki ad set hali PAUSED bo'ladi, yoki reklama ko'rib chiqishda (PENDING_REVIEW) yoki rad etilgan (DISAPPROVED). Reklamaning effective_status maydoniga qarang.

ads_management uchun App Review kerakmi?

O'z kabinetlaringiz va app rollaridagi odamlar uchun — Standard (Limited) Access yetarli. Boshqa bizneslarning kabinetlarini boshqarish uchun Advanced Access, ya'ni App Review va Business Verification kerak.

special_ad_categories'ni umuman bermasa bo'ladimi?

Yo'q, u majburiy. Oddiy reklama uchun bo'sh ro'yxat yuboriladi; uy-joy, ish, moliya yoki siyosat mavzusida tegishli toifa va special_ad_category_country ko'rsatiladi.

Manbalar

  1. Meta: Ad Campaign reference
  2. Meta: Currencies
  3. Meta: Special Ad Categories
  4. Meta: Advantage+ audience
  5. Meta: Ad Account delivery estimate
  6. Meta: Marketing API authorization

Bog'liq sahifalar