logoPandorLabs
social data api

Meta Ads logoMeta Ads

Ad search, advertiser ads, ad details, ad transcripts and advertiser search across Facebook and Instagram.

Ad details1 request
Ad video transcript1 request
Search ads1 request
Ads run by an advertiser1 request
Find advertisers1 request
GET/v1/facebook/adLibrary/ad

Ad details

1 request

Returns full details for one Facebook ad, looked up by ID or URL: adArchiveID, isActive, pageName, startDate, endDate, plus a snapshot containing body, cta_text, link_url, display_format, images, and videos. Regulated ads can add aaa_info with regulatory transparency details. Delivery data for political and social issue ads is normalized into location_audience and age_country_gender_reach_breakdown; political location_audience rows carry reach, and political delivery figures are fractions of the total (0.08 is 8%). Regional transparency data may report reach as absolute counts. When an ad has several versions, its creative sits in snapshot.cards instead of snapshot.body.

Query parameters

id
string
ID of the Facebook ad.
url
string
Link to the Facebook ad.
trim
boolean
true returns a slimmer response.
cache_max_age
string
Accept a stored response up to this age. Inside that window the answer is free and comes back with cached: true and a cached_at time; past it, the request runs live for 1 request.

1d3d7d14d30d

curl "https://api.pandorlabs.com/v1/facebook/adLibrary/ad" \  -H "Authorization: Bearer $PANDORLABS_KEY"
Example response

Response

{
  "success": true,
  "credits_charged": 1,
  "adArchiveID": 1185617869915074,
  "endDate": 1750316400,
  "isAAAEligible": false,
  "isActive": true,
  "pageID": 15087023444,
  "pageName": "Nike",
  "politicalCountries": [],
  "reachEstimate": null,
  "snapshot": {
    "ad_creative_id": 1809449763118705,
    "cards": [],
    "body_translations": {},
    "byline": null,
    "caption": "fb.com",
    "cta_text": "Learn more",
    "dynamic_item_flags": {},
    "dynamic_versions": null,
    "edited_snapshots": [],
    "effective_authorization_category": "NONE",
    "event": [],
    "extra_images": [
      {
        "original_image_handle": "https://scontent-ord5-1.xx.fbcdn.net/v/t39.35426-6/508997149_744746594672572_3057533797808431470_n.jpg?_nc_cat=108&ccb=1-7&_nc_sid=c53f8f&_nc_ohc=eKgqs7-b06UQ7kNvwGSYm41&_nc_oc=AdnV_v1Anh3aqBBXDa3xwDrMtLJUCvE8yKIgP5ODbX3xsSMCtTv2ucMTy36I8Bq…",
        "resized_image_handle": "https://scontent-ord5-1.xx.fbcdn.net/v/t39.35426-6/508997149_744746594672572_3057533797808431470_n.jpg?stp=dst-jpg_s600x600_tt6&_nc_cat=108&ccb=1-7&_nc_sid=c53f8f&_nc_ohc=eKgqs7-b06UQ7kNvwGSYm41&_nc_oc=AdnV_v1Anh3aqBBXDa3xwDrMtLJUCvE8yKIgP5…"
      }
    ],
    "extra_links": [
      "https://www.nike.com.ar/"
    ],
    "extra_texts": [],
    "extra_videos": [],
    "instagram_shopping_products": [],
    "display_format": "image",
    "title": "6 cuotas sin interés",
    "link_description": null,
    "link_url": "https://fb.com/canvas_doc/1952657995267951",
    "page_welcome_message": null,
    "images": [
      {
        "original_image_url": "https://scontent-ord5-2.xx.fbcdn.net/v/t39.35426-6/499542231_3815578848587795_5060085138610262269_n.jpg?_nc_cat=104&ccb=1-7&_nc_sid=c53f8f&_nc_ohc=yk26_frcPLkQ7kNvwF5EWnq&_nc_oc=Adk8Xjt1SjUg-mBxkm6iUuDfXpyGXD5G5g6PBae8g0WWsJT-MfnhNGII7JL-KM…",
        "resized_image_url": "https://scontent-ord5-3.xx.fbcdn.net/v/t39.35426-6/509090139_3448752085259208_8196922920009954562_n.jpg?stp=dst-jpg_s600x600_tt6&_nc_cat=107&ccb=1-7&_nc_sid=c53f8f&_nc_ohc=tV3v2Y_NIh0Q7kNvwEMM-Vk&_nc_oc=AdnpccGMqNlM0k9O87VmMBIp9pGtj3l1dkO5H…",
        "watermarked_resized_image_url": "",
        "image_crops": {}
      }
    ],
    "videos": [],
    "creation_time": 1750344986,
    "page_id": 15087023444,
    "page_name": "Nike",
    "page_profile_picture_url": "https://scontent-ord5-2.xx.fbcdn.net/v/t39.35426-6/508670148_9776464209142246_4487234065380829819_n.jpg?stp=dst-jpg_s60x60_tt6&_nc_cat=105&ccb=1-7&_nc_sid=c53f8f&_nc_ohc=Q0UJas7Kz2wQ7kNvwGKBRCa&_nc_oc=AdnobFr6ScYQJzp_Za4UEgMY34n373z6WuZwOA3…",
    "page_categories": {
      "1713352298924731": "Sportswear"
    },
    "page_entity_type": "person_profile",
    "page_is_profile_page": false,
    "instagram_actor_name": "Nike",
    "instagram_profile_pic_url": "https://scontent-ord5-3.xx.fbcdn.net/v/t39.35426-6/499229861_3519049748228633_8442052921006945421_n.jpg?_nc_cat=109&ccb=1-7&_nc_sid=c53f8f&_nc_ohc=eJcuzztd8e4Q7kNvwEpFLbr&_nc_oc=AdlI7WAi5QRhAOZCLwHcU3ZgxpxWSTzJr9PjPiwtUN9U2mkMB49Surq8HsQcDW…",
    "instagram_url": "",
    "instagram_handle": "",
    "is_reshared": false,
    "version": 3,
    "body": "Aprovechá 6 cuotas sin interés con todos los bancos. ¿Te lo vas a perder? Comprá ahora.",
    "brazil_tax_id": null,
    "branded_content": null,
    "current_page_name": "Nike"
  },
  "totalActiveTime": 23488,
  "spend": null,
  "startDate": 1750316400,
  "publisherPlatform": [
    "facebook"
  ],
  "url": "https://www.facebook.com/ads/library?id=1185617869915074",
  "startDateString": "2025-06-19T07:00:00.000Z",
  "endDateString": "2025-06-19T07:00:00.000Z",
  "aaa_info": null
}
GET/v1/facebook/adLibrary/ad/transcript

Ad video transcript

1 request

Returns a transcript for one Facebook video ad, looked up by ID or URL. Facebook's captions are used when present; otherwise the API attempts to transcribe the public video. You are only charged when a transcript comes back. For ads without video, or when no transcript can be produced, transcript is null and the call is free.

Query parameters

id
string
ID of the Facebook ad.
url
string
Link to the Facebook ad.
cache_max_age
string
Accept a stored response up to this age. Inside that window the answer is free and comes back with cached: true and a cached_at time; past it, the request runs live for 1 request.

1d3d7d14d30d

curl "https://api.pandorlabs.com/v1/facebook/adLibrary/ad/transcript" \  -H "Authorization: Bearer $PANDORLABS_KEY"
Example response

Response

{
  "success": true,
  "credits_charged": 1,
  "data": {
    "ad_id": "1020359190509080",
    "url": "https://www.facebook.com/ads/library?id=1020359190509080",
    "transcript": "Sample transcript text from the ad video...",
    "transcript_available": true
  }
}
GETPOST/v1/facebook/adLibrary/search/ads

Search ads

1 request

Runs a keyword search across Meta ads on Facebook and Instagram. You can narrow by language using a 2-letter code like EN or ES. Each match has ad_archive_id, is_active, page_name, publisher_platform, plus a snapshot holding the ad's body text, cta_text, images, and videos. GET and POST both work; use GET by default, and switch to POST with the same parameters in a JSON body if the cursor grows too long after many pages.

Query parameters

query
stringrequired
Keyword to search for.
sort_by
string
total_impressions (highest first) or relevancy_monthly_grouped (most recent); total_impressions when omitted.

total_impressionsrelevancy_monthly_grouped

search_type
string
Match the keywords in any order or as an exact phrase.

keyword_unorderedkeyword_exact_phrase

ad_type
string
All ads, or only political and issue ads.

allpolitical_and_issue_ads

country
string
A single 2-letter country code; ALL when omitted.
language
string
2-letter language code to filter on, for example EN, ES, or FR.
status
string
Ad status filter; ACTIVE when omitted.

ALLACTIVEINACTIVE

media_type
string
Media filter; ALL when omitted. MEME means an image combined with text.

ALLIMAGEVIDEOMEMEIMAGE_AND_MEMENONE

start_date
string
Start of the impressions window, as YYYY-MM-DD.
end_date
string
End of the impressions window, as YYYY-MM-DD.
cursor
string
Cursor from the previous response, used to load the next page.
trim
boolean
true returns a slimmer response.
curl "https://api.pandorlabs.com/v1/facebook/adLibrary/search/ads?query=running" \  -H "Authorization: Bearer $PANDORLABS_KEY"
Same call with a JSON body, for long cursors
curl -X POST "https://api.pandorlabs.com/v1/facebook/adLibrary/search/ads" \  -H "Authorization: Bearer $PANDORLABS_KEY" \  -H "Content-Type: application/json" \  -d '{"query":"running","cursor":"<cursor>"}'
Example response

Response

{
  "success": true,
  "credits_charged": 1,
  "searchResults": [
    {
      "ad_archive_id": "1378176106734781",
      "end_date": 1747638000,
      "is_aaa_eligible": false,
      "is_active": true,
      "page_id": "119749581219299",
      "page_name": "Makhumalo",
      "political_countries": [],
      "reach_estimate": null,
      "snapshot": {
        "branded_content": null,
        "page_id": "119749581219299",
        "page_is_deleted": false,
        "page_profile_uri": "https://www.facebook.com/61550737114480/",
        "root_reshared_post": null,
        "byline": null,
        "disclaimer_label": null,
        "page_name": "Makhumalo",
        "page_profile_picture_url": "https://scontent-sjc3-1.xx.fbcdn.net/v/t39.35426-6/499107970_2293645317822147_4932735414928456888_n.jpg?stp=dst-jpg_s60x60_tt6&_nc_cat=106&ccb=1-7&_nc_sid=c53f8f&_nc_ohc=DBNo3Z6ft4AQ7kNvwESjMWN&_nc_oc=AdnZGvglABgVlSJ6UIGIbWgFeUL2LnoBSuMbBvt…",
        "body": {
          "text": "This is my second pair. I only take them off to go to sleep. I put them on first thing in the morning. I am 59 and have neuropathy in my feet, they bring me comfort every day.” -Lydia P.👍👍👍\n❤️These orthopedic shoes provide great comfort and…"
        },
        "is_reshared": false,
        "brazil_tax_id": null,
        "caption": "ghemshop.com",
        "cards": [],
        "cta_text": "Shop now",
        "cta_type": "SHOP_NOW",
        "country_iso_code": null,
        "current_page_name": "Makhumalo",
        "display_format": "IMAGE",
        "event": null,
        "images": [
          {
            "original_image_url": "https://scontent-sjc3-1.xx.fbcdn.net/v/t39.35426-6/499507599_4016645891948767_4341363175504946673_n.jpg?_nc_cat=105&ccb=1-7&_nc_sid=c53f8f&_nc_ohc=3EJ6TbZR3GEQ7kNvwErfuF4&_nc_oc=AdkQPpJ9OYN_J3P5xTetGSb9FDCFZzfoLSj59Bbp6s-g5HGg-zTECrgOm8mjkJ…",
            "resized_image_url": "https://scontent-sjc3-1.xx.fbcdn.net/v/t39.35426-6/499504336_1222720305887055_488411876974522066_n.jpg?stp=dst-jpg_s600x600_tt6&_nc_cat=104&ccb=1-7&_nc_sid=c53f8f&_nc_ohc=DYkDYH-EJrQQ7kNvwF-b_ov&_nc_oc=Adn2l2fDwHaN4h6W-OxxgoYkb0IUAeCpYH5boc…",
            "watermarked_resized_image_url": "",
            "image_crops": []
          }
        ],
        "link_description": "🔥Best Seller-Last Day Sale 60% OFF🔥 Buckled Square Heel Sandals for Women",
        "link_url": "https://www.ghemshop.com/products/buckled-square",
        "page_categories": [
          "Musician"
        ],
        "page_entity_type": "PERSON_PROFILE",
        "page_is_profile_page": false,
        "page_like_count": 7,
        "title": "🔥Best Seller-Last Day Sale 60% OFF🔥 Buckled Square Heel Sandals for Women",
        "videos": [],
        "additional_info": null,
        "ec_certificates": [],
        "extra_images": [],
        "extra_links": [],
        "extra_texts": [],
        "extra_videos": []
      },
      "total_active_time": null,
      "spend": null,
      "start_date": 1747638000,
      "publisher_platform": [
        "FACEBOOK"
      ],
      "url": "https://www.facebook.com/ads/library?id=1378176106734781",
      "start_date_string": "2025-05-19T07:00:00.000Z",
      "end_date_string": "2025-05-19T07:00:00.000Z"
    }
  ],
  "searchResultsCount": 50001,
  "cursor": "AQHRLKHyzb3ZNTn1O3qr6lG7ncS9gfboI0HWGSDETVUnipTSXVY8E4Wb-568JBicOvYS"
}
GETPOST/v1/facebook/adLibrary/company/ads

Ads run by an advertiser

1 request

Returns the ads a given company is currently running on Facebook and Instagram. For every ad you get ad_archive_id, is_active, page_name, publisher_platform, plus a snapshot holding body, display_format, images, and videos. Narrow results by country, language, media_type, or a date range, and paginate with a cursor. GET and POST both work; switch to POST with the same parameters in a JSON body if the cursor grows too long after many pages.

Query parameters

pageId
string
Page ID of the company, available from the Search for Companies endpoint. Use this or companyName.
companyName
string
Company name. Use this or pageId.
country
string
A single 2-letter country code; ALL when omitted.
status
string
Ad status filter; ACTIVE when omitted.

ALLACTIVEINACTIVE

media_type
string
Media filter; ALL when omitted. MEME means an image combined with text.

ALLIMAGEVIDEOMEMEIMAGE_AND_MEMENONE

language
string
2-letter language code to filter on, such as EN, ES, or FR.
sort_by
string
total_impressions (highest first) or relevancy_monthly_grouped (most recent); total_impressions when omitted.

total_impressionsrelevancy_monthly_grouped

start_date
string
Earliest date to include, as YYYY-MM-DD.
end_date
string
Latest date to include, as YYYY-MM-DD.
cursor
string
Cursor from the previous response, used to load the next page.
trim
boolean
true returns a slimmer response.
curl "https://api.pandorlabs.com/v1/facebook/adLibrary/company/ads" \  -H "Authorization: Bearer $PANDORLABS_KEY"
Same call with a JSON body, for long cursors
curl -X POST "https://api.pandorlabs.com/v1/facebook/adLibrary/company/ads" \  -H "Authorization: Bearer $PANDORLABS_KEY" \  -H "Content-Type: application/json" \  -d '{"cursor":"<cursor>"}'
Example response

Response

{
  "success": true,
  "credits_charged": 1,
  "results": [
    {
      "ad_archive_id": "1212560900568826",
      "end_date": 1750230000,
      "is_aaa_eligible": false,
      "is_active": true,
      "page_id": "15087023444",
      "page_name": "Nike",
      "political_countries": [],
      "reach_estimate": null,
      "snapshot": {
        "body": {
          "text": "Que el frío no te detenga. Explora la colección de invierno con estilo y actitud Nike. 🧥"
        },
        "branded_content": null,
        "brazil_tax_id": null,
        "byline": null,
        "caption": "fb.com",
        "cards": [],
        "cta_text": "Learn more",
        "cta_type": "LEARN_MORE",
        "country_iso_code": null,
        "current_page_name": "Nike",
        "disclaimer_label": null,
        "display_format": "VIDEO",
        "event": null,
        "images": [],
        "is_reshared": false,
        "link_description": null,
        "link_url": "https://fb.com/canvas_doc/569658969305127",
        "page_categories": [
          "Ropa deportiva"
        ],
        "page_entity_type": "PERSON_PROFILE",
        "page_id": "15087023444",
        "page_is_deleted": false,
        "page_is_profile_page": false,
        "page_like_count": 37497718,
        "page_name": "Nike",
        "page_profile_picture_url": "https://scontent-ord5-1.xx.fbcdn.net/v/t39.35426-6/508742493_1906025190144374_200543536673957484_n.jpg?stp=dst-jpg_s60x60_tt6&_nc_cat=108&ccb=1-7&_nc_sid=c53f8f&_nc_ohc=GUPolKbhQA4Q7kNvwH8Woql&_nc_oc=AdnsaYY9-9p8kkFm594f86VsMEc2Wias8yMQ69ZC…",
        "page_profile_uri": "https://facebook.com/nike",
        "root_reshared_post": null,
        "title": "Look de invierno activado",
        "videos": [
          {
            "video_hd_url": "https://video-ord5-2.xx.fbcdn.net/v/t42.1790-2/508345466_4710910465802253_4502560017294477681_n.?_nc_cat=111&ccb=1-7&_nc_sid=c53f8f&_nc_ohc=_z9ndrNSqU4Q7kNvwErNTOY&_nc_oc=AdlSb3GVLWTjl3iI6uvIsrEya2ZR-1ex8t8yXOr3e9u13u3xboXylCxrkWzfLsvDQcU&_…",
            "video_preview_image_url": "https://scontent-ord5-3.xx.fbcdn.net/v/t39.35426-6/508472131_2706791729511119_7655112167724018421_n.jpg?_nc_cat=100&ccb=1-7&_nc_sid=c53f8f&_nc_ohc=-GGzon31Wl4Q7kNvwHpWdG2&_nc_oc=AdnRHcWzvX05mBu9KrhDjKgOuCYLKjNg_hm8eKY2dNaFg-4tpYznNPJvbLl7CA…",
            "video_sd_url": "https://video-ord5-3.xx.fbcdn.net/v/t42.1790-2/503830433_1272051757688626_4613408767025280545_n.mp4?_nc_cat=106&ccb=1-7&_nc_sid=c53f8f&_nc_ohc=zKD6ziOmKVgQ7kNvwFGCx5N&_nc_oc=AdkdTw235NDuAczGAvCTLl5TnQ8rUcWjy1QBEj8CC4Id8hVQPMexxPtU3froQOYk1O…",
            "watermarked_video_hd_url": "",
            "watermarked_video_sd_url": ""
          }
        ],
        "additional_info": null,
        "ec_certificates": [],
        "extra_images": [],
        "extra_links": [
          "https://www.nike.com.pe/productos/ropa/casacas-y-chalecos_conjunto_pantalones_poleras?utm_source=facebook&utm_medium=paid&utm_campaign=junio_invierno_transacciones&utm_content=intereses2_invierno_collection2"
        ],
        "extra_texts": [],
        "extra_videos": [
          {
            "video_hd_handle": "https://video-ord5-3.xx.fbcdn.net/v/t42.1790-2/508262243_4710910432468923_4352661581573318069_n.?_nc_cat=107&ccb=1-7&_nc_sid=c53f8f&_nc_ohc=bQXAtOCS-PMQ7kNvwEbVbC_&_nc_oc=AdnZ87pJ-oeIb5L7fizjaxNmRp0qkvq2SP_ADcnPFzMPca1L8gvUkpmF_c5vrAYmetw&_…",
            "video_sd_handle": "https://video-ord5-3.xx.fbcdn.net/v/t42.1790-2/503830433_1272051757688626_4613408767025280545_n.mp4?_nc_cat=106&ccb=1-7&_nc_sid=c53f8f&_nc_ohc=zKD6ziOmKVgQ7kNvwFGCx5N&_nc_oc=AdkdTw235NDuAczGAvCTLl5TnQ8rUcWjy1QBEj8CC4Id8hVQPMexxPtU3froQOYk1O…",
            "watermarked_video_hd_url": null,
            "watermarked_video_sd_url": null
          }
        ]
      },
      "total_active_time": null,
      "spend": null,
      "start_date": 1750143600,
      "publisher_platform": [
        "FACEBOOK"
      ],
      "url": "https://www.facebook.com/ads/library?id=1212560900568826",
      "start_date_string": "2025-06-17T07:00:00.000Z",
      "end_date_string": "2025-06-18T07:00:00.000Z"
    }
  ],
  "cursor": "AQHR2LpCDWOZyAGp-ZKr8rUsapAXh8rWjYuNxVvuU7L0kte18hxkxnaXM3e5jEZNgdcU"
}
GET/v1/facebook/adLibrary/search/companies

Find advertisers

1 request

Looks up advertisers by name so you can get the page IDs the other Meta ads endpoints need. Each match has page_id, name, category, likes, whether the page is verified, and Instagram data such as ig_username and ig_followers.

Query parameters

query
stringrequired
Company name or keyword to search for.
curl "https://api.pandorlabs.com/v1/facebook/adLibrary/search/companies?query=nike" \  -H "Authorization: Bearer $PANDORLABS_KEY"
Example response

Response

{
  "success": true,
  "credits_charged": 1,
  "searchResults": [
    {
      "page_id": "51212153078",
      "category": "Product/service",
      "image_uri": "https://scontent.ford4-1.fna.fbcdn.net/v/t39.30808-1/387181570_863325755161415_3589774989337788111_n.jpg?stp=dst-jpg_s200x200_tt6&_nc_cat=103&ccb=1-7&_nc_sid=418b77&_nc_ohc=SzL6LoxpjrMQ7kNvgF5Uyy3&_nc_oc=AdgIflwSC-gA-77yFJHPKOC1dEGUI7YqvKYk…",
      "likes": 41136495,
      "verification": "BLUE_VERIFIED",
      "name": "Nike Football",
      "country": null,
      "entity_type": "PERSON_PROFILE",
      "ig_username": "nikefootball",
      "ig_followers": 46451228,
      "ig_verification": true,
      "page_alias": "nikefootball",
      "page_is_deleted": false
    }
  ]
}