Illustration de l’extracteur Meta Ad LibraryFacebook & Instagram

Extracteur Meta Ad Library.

Collectez les publicités Facebook et Instagram de vos concurrents. Repérez offres et messages récurrents, puis préparez vos propres tests créatifs.

Lancer sur Apify

Comment utiliser cet extracteur.

Essayez ces exemples pour le marketing, la croissance et l’analyse concurrentielle.

01

Préparez une synthèse créative concurrentielle

Pour une marque par abonnement, suivez cinq concurrents chaque lundi. Classez les annonces par problème, promesse, preuve et offre. Choisissez trois angles pour vos prochains tests.

Vous aurez un tableau avec liens créatifs, catégories d’accroches, notes et test proposé.

02

Suivez une promotion saisonnière

Collectez les annonces quotidiennement autour d’une vente saisonnière. Comparez nouveaux identifiants et textes pour suivre remises, lots et promesses de livraison.

Gardez une chronologie de lancement et une bibliothèque d’offres annotées.

03

Trouvez des annonceurs que vous ne suiviez pas

Recherchez une catégorie comme running shoes pour découvrir d’autres annonceurs. Vérifiez les résultats avant de les ajouter à votre suivi régulier.

Élargissez la liste concurrentielle et choisissez qui étudier en premier.

DU PREMIER ESSAI AU FLUX RÉCURRENT

Votre premier essai, pas à pas.

  1. Ouvrez l’Actor sur Apify, choisissez Input et passez à l’éditeur JSON pour coller une configuration.
  2. Dans l’éditeur JSON, remplacez toute la saisie par l’exemple. Remplacez ZARA par le nom ou l’identifiant numérique de votre page. Dans le formulaire, effacez aussi le pageID prérempli pour éviter un second annonceur.
  3. Commencez par un pays, les annonces actives et une limite de 50. Gardez le proxy résidentiel activé. Laissez les dates vides pour ce premier essai, puis ajoutez une période après avoir vérifié la page.
  4. Lancez l’exécution et consultez le journal. Vérifiez les cibles et filtres retenus avant de conclure qu’aucun résultat n’existe.
  5. Ouvrez Storage → Dataset, vérifiez quelques lignes et exportez en JSON pour les données imbriquées ou en CSV pour un premier examen dans un tableur.
Configuration de départ
{
  "pageIDs": ["ZARA"],
  "country": "GB",
  "activeStatus": "active",
  "maxAds": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}

Collez ceci dans l’éditeur JSON de l’Actor. Remplacez les cibles d’exemple avant de lancer.

Voir le formulaire actuel sur Apify

Choisissez votre mode de recherche.

Choisissez une page si vous connaissez l’annonceur, ou un mot-clé pour découvrir des annonces sur un sujet. Ce sont des recherches distinctes : un mot-clé ne filtre pas automatiquement toutes les pages saisies.

Méthode de rechercheQuand l’utiliserCe qui change
Nom d’annonceur ou de marqueQuand l’utiliserVous avez une liste de concurrents à suivre.Ce qui changeIndiquez des identifiants, noms, pseudonymes ou liens Facebook. Les correspondances vérifiées sont prioritaires ; plusieurs correspondances exactes non vérifiées peuvent donner plusieurs pages.
Recherche par mots-clésQuand l’utiliserVous cherchez des résultats pertinents avant de choisir des cibles précises.Ce qui changePlusieurs recherches thématiques avec les mêmes pays, dates et type de correspondance. Elles partagent maxAds ; les résultats répétés sont dédupliqués.
URL de la bibliothèque publicitaireQuand l’utiliserVous avez déjà configuré la recherche sur le site source.Ce qui changeCollez des liens de pages, recherches ou annonces individuelles. Les filtres d’un lien de recherche priment ; un lien d’annonce récupère celle-ci sans ces filtres.

La différence à retenir

Début d’une période de diffusion au format YYYY-MM-DD. Des annonces commencées auparavant peuvent correspondre. Deux dates identiques élargissent la période d’un jour.

Comparer le scraper associé

Tous les paramètres, expliqués.

Utilisez les noms exacts ci-dessous en JSON. Dans le formulaire Apify, saisissez les éléments des listes séparément et respectez les types numériques et booléens.

Valeur par défaut et préremplissage sont différents. La valeur par défaut s’applique si vous omettez un réglage ; le préremplissage est un exemple déjà saisi dans le formulaire Apify. Vérifiez cibles et limites avant chaque collecte. Certains réglages n’ont pas de valeur par défaut dans le schéma. Indiquez au moins une cible prise en charge.

Cibles et recherches6
adLibraryUrls
Liste

Collez des liens de pages, recherches ou annonces individuelles. Les filtres d’un lien de recherche priment ; un lien d’annonce récupère celle-ci sans ces filtres.

adLibraryUrl
Texte

Version à un seul lien de adLibraryUrls. Utilisez un seul de ces champs pour éviter les ambiguïtés. Les liens Facebook ordinaires utilisent les filtres globaux.

pageIDs
Liste

Indiquez des identifiants, noms, pseudonymes ou liens Facebook. Les correspondances vérifiées sont prioritaires ; plusieurs correspondances exactes non vérifiées peuvent donner plusieurs pages.

pageID
TexteExemple prérempli : 15087023444

Une page, dans les mêmes formats que pageIDs. Effacez la page préremplie pour une recherche par mot-clé uniquement, sinon les deux cibles sont collectées.

keyword
Texte

Trouve les annonces sur un thème parmi les annonceurs. Cette recherche est distincte des pages et s’ajoute aux cibles déjà renseignées.

keywords
Liste

Plusieurs recherches thématiques avec les mêmes pays, dates et type de correspondance. Elles partagent maxAds ; les résultats répétés sont dédupliqués.

Marchés, dates et filtres5
searchType
TextePar défaut : keyword_unordered

keyword_unordered accepte les mots dans tout ordre ; keyword_exact_phrase exige la phrase exacte. Uniquement pour les mots-clés ; search_type du lien prime.

Valeurs JSON proposées
keyword_unordered keyword_exact_phrase
minDate
Texte

Début d’une période de diffusion au format YYYY-MM-DD. Des annonces commencées auparavant peuvent correspondre. Deux dates identiques élargissent la période d’un jour.

maxDate
Texte

Fin incluse de la période de diffusion. Avec minDate, sélectionne les annonces diffusées pendant cette période, pas seulement celles créées alors.

activeStatus
TextePar défaut : allExemple prérempli : active

active collecte les annonces en cours ; inactive les annonces arrêtées ; all inclut l’historique. Le formulaire préremplit active, mais un champ omis utilise all.

Valeurs JSON proposées
all active inactive
country
TextePar défaut : ALL

Un code ou nom de pays, ou ALL pour tous. Un pays inconnu devient ALL avec un avertissement ; consultez le journal si le filtre semble trop large.

Valeurs JSON proposées
ALL US GB DE FR ES IT BR MX CA AU IN AF AX AL DZ AS AD AO AI AQ AG AR AM AW AC AT AZ BH BD BB BY BE BZ BJ BM BT BO BQ BA BW BV IO VG BN BG BF BI KH CM CV KY CF TD CL CN CX CC CO KM CK CR HR CU CW CY CZ CD DK DJ DM DO EC EG SV GQ ER EE SZ ET FK FO FM FJ FI GF PF TF GA GM GE GH GI GR GL GD GP GU GT GG GN GW GY HT HM HN HK HU IS ID IR IQ IE IM IL CI JM JP JE JO KZ KE KI XK KW KG LA LV LB LS LR LY LI LT LU MO MG MW MY MV ML MT MH MQ MR MU YT MD MC MN ME MS MA MZ MM NA NR NP NL NC NZ NI NE NG NU NF KP MK MP NO OM PK PW PS PA PG PY PE PH PN PL PT PR QA CG RE RO RU RW BL KN LC MF PM VC WS SM ST SA SN RS SC SL SG SX SK SI SB SO ZA GS KR SS LK SH SD SR SJ SE CH SY TW TJ TZ TH BS TL TG TK TO TT TN TR TM TC TV UG UA AE UM VI UY UZ VU VA VE VN WF EH YE ZM ZW
Limites, détails et proxys6
proxyConfiguration
ObjetPar défaut : {"useApifyProxy":true,"apifyProxyGroups":["RESIDENTIAL"]}Exemple prérempli : {"useApifyProxy":true,"apifyProxyGroups":["RESIDENTIAL"]}

Utilisez un proxy résidentiel Apify. Les sorties datacenter sont souvent bloquées. Gardez useApifyProxy à true et apifyProxyGroups à RESIDENTIAL.

maxConcurrency
EntierPar défaut : 4

De 1 à 6 sessions parallèles. Plusieurs cibles et grandes périodes peuvent être traitées ensemble. Utilisez 1 pour l’ordre strict ou en cas de captcha ; la valeur par défaut est 4.

maxAds
EntierExemple prérempli : 100

Plafond d’annonces uniques pour tout le run, toutes cibles et tous marchés compris. Commencez à 50. Sans ce plafond, une recherche large peut produire beaucoup plus de données.

maxPages
Entier

Limite les pages de chaque sous-période, pas de tout le run. Utile pour tester ; effacez pour élargir. Zéro ou vide signifie illimité.

delayMs
EntierPar défaut : 300

Pause entre requêtes de pages, en millisecondes. Augmentez-la en cas de limitation ; la réduire ne supprime ni la latence ni les limites de la source.

pageSize
EntierPar défaut : 30

Taille de lot demandée, pas un nombre garanti. Meta renvoie environ 10 annonces par page ; augmenter cette valeur ne supprime pas cette limite.

Réglages avancés et reprise8
raw
Vrai ou fauxPar défaut : false

Renvoie la structure source plutôt que la présentation normalisée. Gardez false pour des colonnes cohérentes ; utilisez true pour déboguer ou effectuer vos propres transformations.

proxyRotations
EntierPar défaut : 3

Réessaie les requêtes refusées avec une nouvelle session proxy. Davantage d’essais peut surmonter des blocages temporaires, mais ajoute du temps et du trafic. Gardez le réglage par défaut sauf indication du journal.

resume
Vrai ou fauxPar défaut : true

Sauvegarde la progression environ toutes les 30 secondes pour reprendre après un redémarrage ou une migration Apify. Laissez-le activé.

continueFromLastRun
Vrai ou fauxPar défaut : false

Poursuit le travail inachevé du run précédent avec la même entrée. Les résultats précédents restent dans son dataset. Gardez false pour une collecte nouvelle ou régulière.

shardSplitThreshold
EntierPar défaut : 1500

Divise les grandes périodes au-delà de ce nombre d’annonces. Seulement avec maxConcurrency supérieur à 1. Gardez 1500 sauf optimisation d’archives ; les valeurs sous 100 deviennent 100.

docId
Texte

Remplace un identifiant interne de requête. Laissez vide : l’Actor actualise les identifiants obsolètes. Ce n’est pas un identifiant d’annonceur ou d’annonce.

proxySessionId
Texte

Fixe une session proxy pour le débogage. Laissez vide en usage normal. Les tâches parallèles nécessitent leurs propres sessions et peuvent ignorer cette session fixe.

impersonate
TextePar défaut : chrome146

Identité du navigateur utilisée pour les requêtes. Gardez la valeur par défaut sauf pour diagnostiquer un blocage immédiat. Elle modifie l’empreinte des requêtes, pas les données demandées.

Cette référence reprend les paramètres de l’Actor. Vérifiez le formulaire actuel avant de modifier un flux de production. Voir le formulaire actuel sur Apify.

Des configurations à copier.

Chaque exemple est une exécution distincte. Commencez petit, vérifiez les résultats, puis élargissez. Adaptez les cibles, pays et dates à votre recherche.

Suivi hebdomadaire des concurrents

Collectez les annonces actives de deux marques au Royaume-Uni, avec 100 annonces uniques au total. Planifiez une nouvelle collecte chaque semaine, ajoutez une date dans Sheets et comparez les identifiants avec la semaine précédente.

Suivi hebdomadaire des concurrents
{
  "pageIDs": ["ZARA", "H&M"],
  "country": "GB",
  "activeStatus": "active",
  "maxAds": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}

Repérer une offre récurrente

Recherchez les annonces américaines utilisant l’expression « free shipping ». La recherche porte sur plusieurs annonceurs. Remplacez l’expression par votre offre et effacez toute page préremplie avant de lancer.

Repérer une offre récurrente
{
  "keywords": ["free shipping"],
  "searchType": "keyword_exact_phrase",
  "country": "US",
  "activeStatus": "active",
  "maxAds": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}

Examiner une période de campagne passée

Cet exemple de septembre 2026 recherche les annonces diffusées pendant une période. Modifiez les deux dates. Les filtres portent sur le chevauchement de diffusion : une annonce peut avoir été créée avant la première date.

Examiner une période de campagne passée
{
  "pageIDs": ["ZARA"],
  "country": "GB",
  "activeStatus": "all",
  "minDate": "2026-09-01",
  "maxDate": "2026-09-30",
  "maxAds": 100,
  "maxConcurrency": 4,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}

Exécutez, vérifiez, exportez, recommencez.

Utilisez les identifiants de page et de création pour les jointures, et conservez liens, texte, médias et dates. Pour les annonces commerciales, l’absence de dépenses ou de portée est normale ; la bibliothèque ne fournit pas de conversions. Gardez les relevés hebdomadaires dans BigQuery, aplatissez les médias avec dbt et affichez les nouvelles créations dans Looker Studio.

  1. Consultez le dataset et le record SUMMARY. Comparez le total à votre limite, vérifiez les entrées ignorées ou échouées et contrôlez quelques liens sources.
  2. Conservez les identifiants et ajoutez collected_at et run_id à l’enregistrement. Utilisez CSV pour les colonnes simples et JSON pour les listes ou détails imbriqués.
  3. Enregistrez la configuration testée comme Apify Task et programmez-la. Pour des observations régulières, laissez continueFromLastRun à false. Dédupliquez par identifiant en conservant chaque date d’observation.
  4. Dans Make ou n8n, attendez la fin du run, récupérez son dataset et mappez les champs vers Sheets ou votre entrepôt. Alimentez Looker Studio avec une table de reporting et utilisez dbt pour transformer et tester les modèles.
  5. Le même JSON fonctionne avec l’API Actors d’Apify. Dans Claude avec Apify MCP, nommez cet Actor, demandez la lecture du schéma et précisez cibles, marchés et limites avant l’exécution.

Reprendre ne crée pas une nouvelle observation

resume protège le run actuel si Apify le redémarre. continueFromLastRun poursuit un ancien run avec la même configuration ; ses données restent dans son dataset. Réunissez les deux datasets et augmentez une limite déjà atteinte. Relancez de zéro pour observer les changements d’aujourd’hui.

Suivre les guides Sheets, Claude, Looker et BigQuery
Lancer cet Actor par l’API

Enregistrez une configuration ci-dessus dans input.json. Définissez APIFY_TOKEN avec votre jeton Apify dans le terminal, puis envoyez le fichier comme corps de requête.

Démarrer la collecte
curl --fail-with-body --request POST \
  --url "https://api.apify.com/v2/actors/jmlp~meta-ad-library-scraper/runs" \
  --header "Authorization: Bearer $APIFY_TOKEN" \
  --header "Content-Type: application/json" \
  --data-binary @input.json

La réponse contient un identifiant de collecte et defaultDatasetId, pas les résultats finaux. Attendez la réussite, définissez DATASET_ID avec cet identifiant et récupérez les lignes. Pour les gros jeux, utilisez limit et offset pour paginer.

Récupérer les données
curl --fail-with-body \
  --url "https://api.apify.com/v2/datasets/$DATASET_ID/items?format=json" \
  --header "Authorization: Bearer $APIFY_TOKEN"

Référence API de lancement et d’export d’Apify
Options d’export des données

Si les résultats vous surprennent.

Modifiez un réglage à la fois, gardez une petite limite et consultez le résumé avant d’élargir.

Les résultats appartiennent au mauvais annonceur.

Indiquez des identifiants, noms, pseudonymes ou liens Facebook. Les correspondances vérifiées sont prioritaires ; plusieurs correspondances exactes non vérifiées peuvent donner plusieurs pages.

La source renvoie des pages vides ou des erreurs d’accès.

Utilisez un proxy résidentiel Apify. Les sorties datacenter sont souvent bloquées. Gardez useApifyProxy à true et apifyProxyGroups à RESIDENTIAL.

Faut-il modifier les paramètres avancés des requêtes ?

Remplace un identifiant interne de requête. Laissez vide : l’Actor actualise les identifiants obsolètes. Ce n’est pas un identifiant d’annonceur ou d’annonce.

Le run a réussi, mais reste vide

Un succès indique que l’Actor a terminé, pas que la source a fourni des données. Consultez SUMMARY.inputProblem, SUMMARY.problem et le journal : cible manquante, filtre non pris en charge ou requête refusée. Essayez une cible connue avec moins de filtres.

Moins de lignes que prévu

Vérifiez les limites globales, par recherche et par page, la couverture et les doublons. Plusieurs recherches peuvent trouver la même ligne. Le total annoncé par la source peut inclure des données non accessibles publiquement. Vérifiez les tâches inachevées avant de considérer le dataset complet.

Utilisez les résultats dans vos outils.

Google Sheets

Utilisez Make ou n8n pour ajouter les résultats après chaque succès. Dédupliquez avec ad_archive_id et ajoutez collected_at. Prévoyez des colonnes pour accroches, notes d’offres et prochains tests.

Lire le guide
Claude + MCP

Demandez à Claude un nombre limité d’annonces d’une page, groupées par thème avec ad_archive_id. Vérifiez les créations d’origine avant d’utiliser la synthèse.

Lire le guide
Looker Studio

Placez les champs utiles dans un tableau ou BigQuery. Tracez les annonces par annonceur, début et plateforme. Présentez les comptes comme observations de la bibliothèque.

Lire le guide
BigQuery + dbt

Gardez le JSON brut de chaque exécution avec sa date. Utilisez dbt pour décomposer snapshot et une table créative séparée par ad_archive_id.

Lire le guide
Copier une consigne pour Claude
Consigne pour Claude + Apify MCP
Utilise jmlp/meta-ad-library-scraper pour collecter jusqu’à 50 annonces actives ZARA en GB. Vérifie d’abord le schéma de l’Actor. Regroupe messages par accroche et offre, cite les identifiants d’origine et propose trois hypothèses de campagne testables. Ne déduis ni dépenses ni conversions.

Les champs disponibles.

Conservez la date de collecte et les identifiants d’origine pour vérifier la provenance d’un résultat ou le comparer à une exécution ultérieure.

Avant de tirer des conclusions

Les annonces commerciales ne publient généralement ni dépenses ni portée. Meta le fait surtout pour les annonces politiques et sociales. Une annonce durable mérite une étude, mais son âge ne révèle ni conversion, rentabilité ni ROAS.

ad_archive_id
Identifiant stable pour dédupliquer et retrouver la bibliothèque d’origine.
page_id / page_name
Annonceur du résultat.
is_active / start_date / end_date
Activité et dates observées ; dates en secondes Unix.
publisher_platform
Facebook, Instagram et autres canaux Meta déclarés.
snapshot
Texte, titre, CTA, page de destination et médias de la création.
collation_id / collation_count
Identifiants et nombres des variantes liées.

Questions fréquentes.

Puis-je l’utiliser sans connexion Facebook ?

Oui. Il lit la bibliothèque publique, sans compte Facebook. Un compte Apify reste nécessaire.

Puis-je savoir quelles publicités gagnent ?

Vous pouvez étudier les messages récurrents et créations durables. La bibliothèque ne donne pas les conversions nécessaires pour déclarer une publicité gagnante.

Source et informations actuelles : Actor Meta Ad Library de JMLP sur Apify.

D’autres extracteurs
qui pourraient vous être utiles.

Parlons de
votre projet.

Dites-moi ce que vous devez collecter ou comprendre. Je peux vous aider avec un extracteur sur mesure, un pipeline ou l’analyse.

Parlons de votre projet