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
| Daraja | Nimani belgilaydi | Endpoint | SDK metodi |
|---|---|---|---|
| Reklama kabineti | Valyuta, to'lov, kirish huquqi | act_{id} | ads.ad_accounts |
| Kampaniya | Bitta maqsad (objective), special_ad_categories, ixtiyoriy umumiy byudjet | POST /act_{id}/campaigns | create_campaign |
| Ad set | Auditoriya, byudjet, jadval, optimallashtirish va to'lov hodisasi | POST /act_{id}/adsets | create_adset |
| Rasm | Kreativda ishlatiladigan hash | POST /act_{id}/adimages | upload_image |
| Kreativ | Rasm yoki video, matn, havola, CTA; yaratilgandan keyin o'zgarmaydi | POST /act_{id}/adcreatives | create_creative |
| Reklama | Ad set va kreativni bog'laydi | POST /act_{id}/ads | create_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.
| Objective | Qachon tanlanadi |
|---|---|
OUTCOME_AWARENESS | Ko'proq odamga ko'rsatish, brendni eslatish |
OUTCOME_TRAFFIC | Sayt, ilova yoki profilga o'tishlar |
OUTCOME_ENGAGEMENT | Post bilan o'zaro ta'sir, video ko'rishlar, xabarlar |
OUTCOME_LEADS | Lead formalar va boshqa murojaatlar |
OUTCOME_SALES | Sotuv va konversiyalar |
OUTCOME_APP_PROMOTION | Ilova 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
Kabinetni tanlang
ads.ad_accountsfoydalanuvchi kira oladigan kabinetlarniact_...identifikatori va valyutasi bilan qaytaradi. Byudjetni shu valyutada hisoblaysiz.Qiziqish va joylashuvlarni qidiring
search_interests(type=adinterest) —id,name,pathva auditoriya hajmi oralig'i.search_locations(type=adgeolocation) — targeting'da ishlatiladigankey. Nom emas, ID saqlang: Meta qiziqishlar nomini o'zgartirishi mumkin.Targeting'ni yig'ing
Custom Audience ishlatilmasa, kamida bitta davlat majburiy.
age_min13 dan kichik,age_max65 dan katta bo'lmaydi;genders: 1 — erkaklar, 2 — ayollar, berilmasa — hammasi. Shahar radiusi 17–80 km.Auditoriyani pul sarflamasdan baholang
GET /act_{id}/delivery_estimatetaxminiy oylik auditoriya oralig'ini (estimate_mau_lower_bound,estimate_mau_upper_bound) vaestimate_dauni beradi.estimate_ready=falsebo'lsa, birozdan keyin qayta so'rang.Kampaniya yarating
Maqsad (
OUTCOME_*),special_ad_categoriesvastatus=PAUSED.Ad set yarating
Targeting, byudjet,
optimization_goal(masalanLINK_CLICKS),billing_event(masalanIMPRESSIONS) va yanaPAUSED.Rasm, kreativ va reklama
Rasmni
/adimagesga yuklabhasholasiz, kreativdaobject_story_spec(sahifa, havola, matn, CTA) ichida shuhashni ko'rsatasiz, reklamada esa{"creative_id": ...}.Tekshirib, yoqing
Ko'rinishni tekshiring, keyin kampaniya, ad set va reklamani
ACTIVEqiling. Reklama avval ko'rib chiqishdan o'tadi —effective_statusdaPENDING_REVIEWyokiDISAPPROVEDni kuzating.
Python: auditoriyani topish va baholash
Hali hech narsa yaratilmaydi va pul sarflanmaydi — faqat qidiruv va baholash.
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.
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.
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_categoriesaniq berilgan (oddiy reklama uchun[]).- Targeting'da kamida bitta davlat yoki Custom Audience bor.
delivery_estimateauditoriya oralig'i maqsadga mos.- Kampaniya, ad set va reklama
PAUSEDholatda yaratilgan va ko'rib chiqilgan. - Yoqish uchun uchala daraja
ACTIVE, to'xtatish uchun kampaniyaPAUSEDqilinadi. effective_statusva sarf muntazam kuzatiladi.
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.