Meta-Anzeigenbibliothek
GET /api/v1/adlibrary searches Meta (Facebook / Instagram) ads with your API key. /api/adlibrary is a supported alias. Auth and metering match the API-Referenz. MCP equivalent: Facebook-Anzeigen suchen (and Gewinnerprodukte finden, Kreativ-Inspirationspaket) — see MCP · Werkzeugübersicht.
HOLEN /api/v1/adlibrary
curl -sS -G -H "X-API-Key: $WH_API_KEY" "{origin}/api/v1/adlibrary" \
--data-urlencode "keyword=skincare" \
--data-urlencode "searchkeyword=adtext" \
--data-urlencode "countries=US" \
--data-urlencode "sorting=reach" \
--data-urlencode "page=0" \
--data-urlencode "min=" --data-urlencode "max=" \
--data-urlencode "from=" --data-urlencode "to=" \
--data-urlencode "mediafilter=" --data-urlencode "scroll=" \
--data-urlencode "scaling=" --data-urlencode "niches=" \
--data-urlencode "fromlastseen=" --data-urlencode "tolastseen=" \
--data-urlencode "activestatus="
{
"data": [
{
"id": "1284756102394857",
"page_name": "Glow Beauty Co.",
"ad_creative_body": "This serum changed my skin in 14 days…",
"ad_snapshot_url": "https://www.facebook.com/ads/library/?id=1284756102394857",
"media_type": "video",
"started": "2024-05-12",
"reach": 184000,
"ad_rank": 3
}
],
"total": 240,
"scroll": "eyJwYWdlIjoxfQ=="
}
Der Aufruf der Meta-Anzeigenaufrufe in der App /api/fb-ads with the same query shape — copy a working request from your browser's network tab and swap the path to /api/v1/adlibrary.
Eingabewächter (erforderliche Abfrageschlüssel)
Der Endpunkt gibt seine Haupt-JSON-Daten nur dann zurück, wenn alle folgenden Schlüssel in der Abfragezeichenfolge vorhanden sind (eine leere Zeichenfolge ist zulässig):
Suchbegriff, Stichwort, min, Länder, von, zu, Sortieren, Medienfilter, Seite, max, scrollen, Skalierung, Nischen, seit dem letzten Besuch, zu sehen, Aktivitätsstatus
Falls welche fehlen, handelt es sich bei der Antwort nicht um die übliche Listen-Nutzlast (vermeiden Sie dies in Clients).
Außerdem muss das innere Tor Probe in der Abfrage festlegen oder a angemeldet / API-Schlüssel aufgelöst Sitzung. Mit einem gültigen X-API-Schlüssel, erfüllen Sie die Sitzungsvoraussetzung automatisch. Andernfalls lautet die Antwort:
{"error":"logged_out"}
Alle Abfrageparameter
Alles, was folgt, wird aus der Abfragezeichenfolge (gleiche Form wie /api/fb-ads (in der App).
isset Gate (muss vorhanden sein; eine leere Zeichenfolge ist zulässig)
Dieselbe Liste wie Eingangswache oben:
Suchbegriff, Stichwort, min, max, Länder, von, zu, Sortieren, Medienfilter, Seite, scrollen, Skalierung, Nischen, seit dem letzten Besuch, zu sehen, Aktivitätsstatus.
Bei jeder wärmstens empfohlen#
Der Handler liest Website, Sprachen, Seitentypfilter, Sortierrichtung, Appsund Themen ohne das durchzumachen isset Liste. Das Dashboard spiegeln und mindestens Website=Alle, Sprachen=Alle, pagetypefilter= (leer = alle Seitentypen), sortdirection=desc, Apps=Alle, Themen=Alle damit das Verhalten der Benutzeroberfläche entspricht und optionale Schlüssel immer definiert sind.
Snake_case aliases (MCP-parity names)
/api/v1/adlibrary (and the /api/adlibrary alias) also accepts the same snake_case argument names as the MCP Facebook-Anzeigen suchen tool, normalized server-side to the internal keys below (FacebookAdsFilterSpec::publicQueryAliases()). When both names are sent, the internal name wins. Highlights:
| Alias | Internal key |
|---|---|
Land / Länder, Länder ausschließen |
Länder, Länder ausschließen |
Nische / Nischen |
Nischen |
Technologie / Technologien |
Website |
Sprache / Sprachen, Sprachen ausschließen |
Sprachen, Sprachen ausschließen |
Thema / Themen, Apps, exclude_apps |
Themen, Apps, excludeApps |
Medientyp, Seitentyp, Bewertung, geringe Impressionen, Rangwachstumsfilter |
Medienfilter, Seitentypfilter, adscorefilter, geringe Impressionen, Rangwachstumsfilter |
ad_created_from / ad_created_to |
von / zu |
last_seen_from / last_seen_to |
seit dem letzten Besuch / zu sehen |
product_created_from / product_created_to |
Herkunft des Produkts / Produkt_zu |
page_created_from / page_created_to |
Seite von / Seite |
min_duplicates / max_duplicates |
min / max |
Mindestausgaben für Werbung / maximale Werbeausgaben, ad_spend_timeframe |
minadspend / maximale Werbeausgaben, Zeitraum für Werbeausgaben |
min_reach / max_reach, reach_timeframe |
minreach / maxreach, Zeitraum |
min_monthly_visits / max_monthly_visits |
mintraffic / maxtraffic |
min_days_running / max_days_running |
Mindays / maxdays |
min_active_ads / max_active_ads |
minactiveads / maxactiveads |
min_active_ads_growth / max_active_ads_growth, active_ads_growth_period |
minactiveadsgrowth / maxactiveadsgrowth, activeadsgrowthperiod |
min_reach_growth / max_reach_growth, reach_growth_period |
minreachgrowth / maxreachgrowth, reachgrowthperiod |
min_ad_rank / max_ad_rank |
Minadrank / maxadrank |
min_page_likes / max_page_likes, Mindestpreis / Höchstpreis, min_copy_length / max_copy_length, min_video_length / max_video_length, min_products_on_store / max_products_on_store |
minpagelikes / maxpagelikes, Mindestpreis / Höchstpreis, Minkopylänge / maximale Kopierlänge, Mindestlänge des Videos / maximale Videolänge, minproductsonstore / maxproductsonstore |
sort_by / Sortierreihenfolge |
Sortieren / Sortierrichtung |
active_status |
Aktivitätsstatus |
On the API route the entry-guard keys are defaulted server-side (Dashboard::fbAdsPublicBaseQuery()), so a request like ?keyword=skincare&last_seen_from=2026-01-01&last_seen_to=2026-02-01 is valid without sending every isset-gate key. When Stichwort is set and Suchbegriff is empty, searchkeyword=All is applied automatically.
Auth / Sitzung /
| Parameter | Rolle |
|---|---|
| (keine) | Mit X-API-Schlüssel… wird die Anfrage unter Ihrem Konto ausgeführt (das entspricht dem Effekt einer Anmeldung). |
Probe |
Falls gesetzt (z. B. test=true), gelten die Regeln für anonyme Gewinnsucher; in Kombination mit Filtern für Seite ≠ 0 kann dies zu folgenden Ergebnissen führen {"message":"need_account"}. |
Paginierung, Cursor,
| Parameter | Anmerkungen |
|---|---|
Seite |
Seitenindex beginnend bei 0. |
scrollen |
Cursor für die tiefe Paginierung aus der Suche; bei der ersten Anfrage leer, dann den scrollen Wert aus der vorherigen JSON-Antwort. |
Das nächste Mal |
Unix Sekunden; wird verwendet, wenn Sortierung=Datum gefunden (Auf der Startseite wird häufig ein Anker-Zeitstempel aus der Benutzeroberfläche verwendet.) |
Suchbegriff |
Optional [a-zA-Z0-9_-]+; Krawatten Anzeigen pro Marke Großbuchstaben bei der Tabulatortaste/Suche in der Sitzung. |
Stichwortsuche
| Parameter | Zulässige / typische Werte |
|---|---|
Stichwort |
Freitext; URL-kodiert; serverseitig in Kleinbuchstaben umgewandelt. |
Suchbegriff |
'', Alle, Ziel-URL, Seitenname, Anzeigentext, Produktname (muss in diesem Satz enthalten sein, wenn Stichwort (ist nicht leer). |
Aktive Anzeigen, Skalierung, Medien, Seitentyp, AdScore,
| Parameter | Werte (entsprechen den Filtern für Meta-Anzeigen in der App) |
|---|---|
Aktivitätsstatus |
Zeichenkette richtig oder falsch (nur aktive vs. inklusive inaktiver). |
Skalierung |
'' (keine), keine Verkleinerung, Hochskalierung, Herunterskalierung. |
Medienfilter |
'' / Auslassung hat die Wirkung: alle Formate; andernfalls Videos, Bilder, Karussell, dco (entspricht Anzeigeformat (in ES). |
Seitentypfilter |
'' = alle; Produkte, Kollektionen, Trichter, nofunnels. |
adscorefilter |
'' = keine; siegreich (gegründet), Skalierung (hat Potenzial), Testen (Nicht festgelegt). Erfordert die entsprechende In-App-Stufe. |
geringe Impressionen |
'' = Alle anzeigen; ausblenden = Zeilen mit sehr geringen Impressionen ausschließen (gleiche Funktionsweise wie der Dashboard-Filter). |
Rangwachstumsfilter |
'' = keine; durch Kommas getrennte Teilmenge von steigend, stabil, abnehmend (Rang-Momentum vs. historisch) Rangverlauf; gleiche Semantik wie das Dashboard Rangwachstum Filter). |
Minadrank, maxadrank |
Natürliche Zahlen — Werbeplatzierung innerhalb der Marke (je niedriger, desto stärker für diese Marke; Nr. 3 / N (in der Benutzeroberfläche). Leer = keine Bindung. Entspricht dem Dashboard Platzierung der Anzeige Filter. |
| Parameter | Werte |
|---|---|
Sortierrichtung |
asc oder Beschreibung (Wenn das Feld leer ist, wird standardmäßig Beschreibung). |
Sortieren |
'' (Keine → zufällige Reihenfolge, wenn nicht gemischt), trending, Anzeigenbudget, zuletzt gesehen, Datum gefunden, mostrecent (ad start date / begonnen), adspend, am längsten laufend, Reichweite, monatliche Besuche, pageactiveads, Lauftage, Spitzenplatz (sofern dies für Ihre Bereitstellung aktiviert ist). Lauftage darf keinen speziellen Sortierzweig anwenden (verhält sich wie „None“, sofern sich das Produkt nicht ändert). |
Ausgaben, Reichweite (mit Fenster), Traffic, Schaltdauer, Preis, Text, Videolänge, aktive Anzeigen auf
| Parameter | Anmerkungen |
|---|---|
minadspend, maximale Werbeausgaben |
Ganzzahlen / numerische Zeichenfolgen. maxadspend=999999 wird bei der Überprüfung adspend als „keine Obergrenze“ behandelt. Für adspend aussagekräftige adspend ist möglicherweise eine höhere In-App-Stufe erforderlich. |
Zeitraum für Werbeausgaben |
alle, 7, 30, 90 — Eingabefeld für adspend (ungültige Werte → alle). |
minreach, maxreach |
Ganzzahlen. Erfordert möglicherweise eine höhere In-App-Stufe. |
Zeitraum |
Gleiche zulässige Menge wie Zeitraum für Werbeausgaben. |
mintraffic, maxtraffic |
Store monthly-visits range (absolute). May require a higher in-app tier. |
minstorerevenue, maxstorerevenue |
Est. monthly store revenue range in USD (overlaps store_traffic.monthly_revenue_{min,max} on wlads). Same tier gate as traffic filters. |
storebasedin |
Comma-separated ISO2 shop origin countries → store_traffic.shop_origin_country on wlads (same values as Explore Shops Mit Sitz in / stores metadata.country). |
storevisitorcountrymain |
Comma-separated ISO2 — country tied for top visitor share (store_traffic.visitor_country_main). |
storevisitorcountryamong |
Comma-separated ISO2 — country appears in traffic mix (store_traffic.top_countries). |
storevisitorcountryexclude |
Comma-separated ISO2 — exclude ads whose store has traffic from that country. |
trustpilotrating |
Trustpilot stars dash range on store_traffic.trustpilot.ratings (z. B. 4–5, 2,5–3,5). Same tier gate as traffic filters. |
trustpilotreviews |
Trustpilot review-count dash range on store_traffic.trustpilot.total_reviews (z. B. 1000–10000, 100.000–1.000.000.000). |
storecreated_from, storecreated_to |
Store creation window (J-M-T) on store_traffic.first_product_created_at. Same tier gate as traffic filters. UI chip param: datestorecreated (Lightpick display range). |
mingrowth, maxgrowth, growthperiod |
Monthly visit growth range, as a signed % change in store traffic (UI values: 25 = 25%). growthperiod selects the window: 1 (default) or 3 months → ranges on store_traffic.monthly_visits_growth_{1,3}m (indexed at 1/100 of the UI %, e.g. 1695 → 16.95). Empty min/max = no bound; negatives select declining stores. Same in-app tier gate as mintraffic. |
minactiveadsgrowth, maxactiveadsgrowth, activeadsgrowthperiod |
Page active ads % growth (Dashboard Active ads growth, Page tab). UI min/max are human percent (z. B. 25 = 25%; negatives allowed). activeadsgrowthperiod tokens: 1w, 14d, 1m, 3m (Standard 1m; legacy 7d→1w, 2m→14d, 30d→1m, 90d→3m). Server maps tokens to indexed baselines total_active_ads_on_page_growth_{1w,14d,1m,3m} and filters on ((\texttt{total_active_ads_on_page} - \texttt{baseline}) / \texttt{baseline} \times 100) (baseline is the prior-period active-ad count, not a precomputed pct field). Dashboard labels: 1 week→1w (7d), 2 weeks→14d (14d), 1 month→1m (30d). |
minreachgrowth, maxreachgrowth, reachgrowthperiod |
Ad cumulative EU reach % growth (Dashboard Ad EU Reach Growth, EU/UK tab). Same UI % and period semantics as ads growth. Ranges total_eu_views_growth_pct_{period} only (not reach_growth_pct_*, which is page-level reach). Same in-app tier gate as minreach / maxreach. |
Mindays, maxdays |
Filter für die Anzahl der Tage in Folge; erfordert möglicherweise eine höhere In-App-Stufe. |
Mindestpreis, Höchstpreis |
|
Minkopylänge, maximale Kopierlänge |
|
Mindestlänge des Videos, maximale Videolänge |
|
minactiveads, maxactiveads |
Obergrenze für den Stil „Aktive Anzeigen auf der Seite“ (im Testablauf können minactiveads (serverseitig). |
minpagelikes, maxpagelikes |
Facebook page likes range on indexed page_like_count (ads without the field are excluded when a min is set). |
minigfollowers, maxigfollowers |
Instagram followers range on wlads tracking.igfollowers (denormalized at ingest; no pages-index join). Currently disabled in app (Ads::WLADS_IG_FOLLOWERS_FILTER_ENABLED); enable after field backfill + dashboard UI. |
Data dependency — monthly visit growth.
mingrowth/maxgrowthrange onstore_traffic.monthly_visits_growth_{1,3}mon thewladsindex. The 1-month field is widely populated; 3-month may return no matches until the indexer backfills that scalar.
Data dependency — wlads % growth filters.
minactiveadsgrowtherforderttotal_active_ads_on_pageplustotal_active_ads_on_page_growth_{1w,14d,1m,3m}aufwlads(baselines must be prior counts, not deltas).minreachgrowthusestotal_eu_views_growth_pct_{period}when backfilled. Sparse baselines reduce match counts; use broader ranges when testing.
Datumsangaben (Zeichenfolgen, in der Regel J-M-T)
| Parameter | Bedeutung |
|---|---|
von, zu |
Anzeige Entstehung (begonnen). |
seit dem letzten Besuch, zu sehen |
Zuletzt gesehen (aktualisiert am). |
Herkunft des Produkts, Produkt_zu |
Fenster zur Produkterstellung. |
Seite von, Seite |
Fenster zur Seitenerstellung. |
Datumsbereiche ohne festgelegte Enddaten werden serverseitig normalisiert (z. B. nur von Einstellung → zu kann entsprechend angepasst werden von).
Katalog: Länder, Shops, Nischen, Sprachen, Apps, Themen,
| Parameter | Format |
|---|---|
Länder |
Alle oder durch Kommas getrennt ISO 3166-1 Alpha-2 Codes (z. B. USA, Großbritannien). |
Website |
Alle oder durch Kommas getrennte Filialcodes (z. B. SH = Shopify – siehe Website-Filter im Dashboard). |
Nischen |
Alle oder durch Kommas getrennte Segmente (voreingestellte Codes, /Pfad/... Pfade aus dem Nischenkatalog oder numerische IDs – serverseitig normalisiert). Wenn die Liste Einkaufen, fügt der Server Produkt. |
Sprachen |
Alle oder durch Kommas getrennte Sprachcodes (wie im Dashboard) #Sprache). |
Apps |
Alle oder durch Kommas getrennt numerisch App-IDs (gleiche Werte wie beim Filter für In-App-Apps). |
Themen |
Alle oder durch Kommas getrennte Themenzeichenfolgen (zu finden unter GET /api/themes). |
Länder ausschließen, Websites ausschließen, Sprachen ausschließen, Nischen ausschließen, excludeApps |
Dieselben durch Kommas getrennten Muster wie auf der Einfüge-Seite; Nischen normalisiert wie Nischen. |
Deep Links, Shuffle,
| Parameter | Anmerkungen |
|---|---|
pageidfromurl |
Facebook -Seiten-ID – beschränkt die Anzeige auf die Anzeigen einer bestimmten Seite. |
Produkt-ID |
Shopify -Produkt-ID. |
Mischen |
Jeder nicht leere, wahrwertige Ausdruck → Shuffle-Modus (zufällige Sortierung; optionales Standardfenster für zuletzt angezeigte Elemente). |
Anzeigen pro Marke |
1, 2, 3, 5, 10 nur – maximale Anzahl an Anzeigen pro Marke, wenn die Logik zur Begrenzung pro Marke beim Mischen angewendet wird. |
Validierung /
Ungültig min oder max (außerhalb von 0…90000000) kann zu {"error":"value_not_in_range_1"} oder _2oder ein Nicht-JSON falsch Körper in Ausnahmefällen.
Gültige Ergebnisse finden Nischen und Themen (kein API-Schlüssel für diese Routen)
Integrationen sollten die zulässigen Werte aus dem Discovery-JSON-Datensatz entnehmen und nicht durch Raten ermitteln:
| Endpunkt | Zweck |
|---|---|
GET /api/niche-counts |
Rücksendungen { "niches": [ { "code": "…", "count": N }, … ], "total_with_niche": … } auf der Grundlage desselben Meta-Ads-Indexes erstellt, den das Produkt verwendet. Verwenden Sie den Code Zeichenfolgen (durch Kommas getrennt in Nischen / Nischen ausschließen) als Referenzdatensatz, der tatsächlich in den Werbedaten vorkommt. Optional: refresh=1 umgeht den Festplatten-Cache für eine einzelne Anfrage. |
GET /api/themes |
Gibt ein JSON-Objekt mit einem Themen Liste (häufigste Werte + Häufigkeiten, im Cache gespeichert ~1 Stunde). Optionale Abfrage: q — wenn Länge ≥ 2, Teilstringsuche für die automatische Vervollständigung. Optional: Grenze (Standardwert 200, Maximalwert 500). Zurückgegebenes Design verwenden Namen/Schlüssel genau wie Themen= durch Kommas getrennte Werte in /api/adlibrary. |
Voreingestellte Nischen-Shortcuts (UI-„Chips“): Die App stellt außerdem benutzerfreundliche Zweibuchstabencodes (z. B. CG, VON, SP) im Nischenfilter. Das sind gültige Segmente in Nischen= genauso, wie der Browser sie sendet.
Pfad / numerische Nischensegmente: Die Werte werden anhand des Nischenkatalogs des Servers aufgelöst (Pfade wie /Bekleidung/... und numerisch IDs (Zuordnung zu kanonischen Namen in der Suche). Ist ein Segment unbekannt, kann es unverändert weitergeleitet werden – bevorzugt /api/niche-counts anstatt sich Strings auszudenken.
Hinweis: /api/niche-counts und /api/themes sind Entdeckung Helfer und verbrauchen die Credits der Meta-Ad-Library-API nicht auf dieselbe Weise /api/adlibrary Das ist richtig. Für Ihre Bereitstellung sind möglicherweise weiterhin eine Anmeldung oder andere Richtlinien vor diesen Routen erforderlich.
Feature-Gates (JSON-Aktualisierung)
Bei Konten, die nicht über die erforderliche Produktstufe verfügen, liefern bestimmte Filter oder Sortiermodi 200 mit einem kleinen JSON-Body (die Aufforderung zum Upgrade lautet innerhalb des Frequenzbands(nicht immer HTTP 403):
| Antwort | Zustand (vereinfacht) |
|---|---|
{"upgrade":"standard_adspend"} |
Filter für Werbeausgaben verwendet, oder adspend |
{"upgrade":"standard_reach"} |
Reichweitenfilter oder Sortierung=Reichweite |
{"upgrade":"standard_traffic"} |
Verkehrsfilter |
{"upgrade":"standard_daysrunning"} |
Filter nach Anzahl der Tage in Folge oder Sortierung=Tage seit Start |
{"upgrade":"standard_adscore"} |
adscorefilter Satz |
Weitere bemerkenswerte
{"message":"need_account"}— AnonymProbeAnfragen, die über die zulässige Nutzung hinausgehen (Sicherheitsgrenzen für Testversionen).- Erfolgsdaten: JSON-Objekt mit folgenden Elementen
Daten(Anzeigen), optionalNachricht(für Menschen lesbare Filterhinweise),insgesamt+total_relation(computed on every page for API-key / MCP requests; the dashboard UI fetches totals separately viacount_only=1),scrollen(deep-pagination cursor), and free-tier credit fields when applicable.insgesamtcan still benullfor query shapes that post-filter in PHP (e.g.Rangwachstumsfilter). Each ad may includeAnzeigenrang(Positionsnummer innerhalb der Marke/Seite) undRangverlauf(Zeitreihen, die für die Momentum-/Rangwachstumsfilterung im Dashboard verwendet werden). Programmatische und MCP-Nutzdaten enthalten diese Felder, sofern sie in den Suchergebnissen vorhanden sind.