LurkAPI
Docs · Ad Library ads by company

Ad Library ads by company

Every ad one advertiser is running (or ran) on Facebook and Instagram, from Meta's Ad Library.

1 credit per callFresh within 30 minutesMCP tool: facebook_company_ads
GEThttps://api.lurkapi.com/v1/facebook/adLibrary/company/ads

Example response

When to use this

Use it to study one competitor's ads: their creative, offers and landing pages. Pass pageId (exact) or companyName (we use the top match). Stopped ads are included unless you pass status=active.

Get pageId from search companies (facebook_search_companies), or from the view_all_page_id in an Ad Library URL. With companyName, the response's page_id and page_name say which page we matched, and no match returns 404 not_found. The ads are under results (keyword search uses searchResults).

Pagination. The first page has up to 30 ads and searchResultsCount, the estimated total. For more, pass cursor back with the same filters. Later pages have up to 10 ads (Facebook's own page size), and searchResultsCount is null there. cursor is null on the last page.

Example request

Copy one and replace YOUR_API_KEY with your API key (get one free). The code versions read the key from the LURKAPI_API_KEY environment variable instead.

Language

Parameters

Add them to the URL after a ?, as in ?pageId=15087023444&status=active. Join several with &.

ParameterDescription
pageId
stringoptional
The advertiser's Facebook page id, e.g. 15087023444 (Nike). Required unless you pass companyName.
Example
15087023444
companyName
stringoptional
Advertiser name, e.g. Nike. We use the top match from search companies. Ignored when pageId is set.
country
stringoptional
The country the ad ran in, as a 2-letter code (US, GB, DE…), or ALL for every country. One country per request.
Default
ALL
status
stringoptional
Only ads that are running now (active), only stopped ads (inactive), or both (all).
One of
allactiveinactive
Default
all
Example
active
media_type
stringoptional
Ad format. meme is Facebook's name for an image with text. none means text-only ads.
One of
allimagevideomemeimage_and_memenone
Default
all
ad_type
stringoptional
Ad category. Political and issue ads also show spend and impression ranges.
One of
ALLPOLITICAL_AND_ISSUE_ADSEMPLOYMENT_ADSHOUSING_ADSCREDIT_ADS
Default
ALL
language
stringoptional
Language of the ad text as an ISO 639-1 code, e.g. en or es.
sort_by
stringoptional
total_impressions puts the most-seen ads first. relevancy_monthly_grouped puts the newest first.
One of
total_impressionsrelevancy_monthly_grouped
Default
total_impressions
start_date
stringoptional
Only ads shown on or after this date (YYYY-MM-DD). The ad itself may have launched earlier.
end_date
stringoptional
Only ads shown on or before this date (YYYY-MM-DD).
cursor
stringoptional
The cursor from the previous response, to get the next page. Keep every other param the same.
trim
booleanoptional
true leaves out image and video URLs, including those in snapshot.cards, for a much smaller response. All text stays.
One of
truefalse
Default
false

Example response

A real response, captured from the live API. Lists are trimmed to a couple of items, and long text such as media links is cut short with ….

Show the example response (17 KB)
{
  "success": true,
  "credits_remaining": 998,
  "credits_charged": 1,
  "page_id": "15087023444",
  "page_name": "Nike",
  "results": [
    {
      "ad_archive_id": "1702938977100376",
      "ad_id": null,
      "categories": [
        "UNKNOWN"
      ],
      "collation_count": null,
      "collation_id": null,
      "contains_digital_created_media": false,
      "contains_sensitive_content": false,
      "currency": "",
      "end_date": 1790751600,
      "end_date_string": null,
      "fev_info": null,
      "gated_type": "ELIGIBLE",
      "has_user_reported": false,
      "hide_data_status": "NONE",
      "impressions_with_index": {
        "impressions_text": null,
        "impressions_index": -1
      },
      "is_aaa_eligible": false,
      "is_active": true,
      "menu_items": [],
      "page_id": "15087023444",
      "page_is_deleted": false,
      "page_name": "Nike",
      "publisher_platform": [
        "FACEBOOK",
        "INSTAGRAM",
        "AUDIENCE_NETWORK",
        "MESSENGER"
      ],
      "reach_estimate": null,
      "regional_regulation_data": {
        "finserv": {
          "is_deemed_finserv": false,
          "is_limited_delivery": false
        },
        "tw_anti_scam": {
          "is_limited_delivery": false
        }
      },
      "report_count": null,
      "snapshot": {
        "additional_info": null,
        "branded_content": null,
        "brazil_tax_id": null,
        "byline": null,
        "caption": "itunes.apple.com",
        "cards": [
          {
            "body": "Bring sports more fully into your day with the Nike App.",
            "caption": "itunes.apple.com",
            "cta_text": "Install Now",
            "cta_type": "INSTALL_MOBILE_APP",
            "image_crops": [],
            "link_description": "₱9,895",
            "link_url": "https://www.nike.com/ph/t/invincible-3-road-running-shoes-LL61DX/DR2660-001",
            "original_image_url": "https://scontent-iad3-2.xx.fbcdn.net/v/t39.35426-6/431631323_92872743202…",
            "resized_image_url": "https://scontent-iad3-2.xx.fbcdn.net/v/t39.35426-6/431631323_92872743202…",
            "title": "Nike Invincible 3 Women's Road Running Shoes",
            "video_hd_url": null,
            "video_preview_image_url": null,
            "video_sd_url": null,
            "watermarked_resized_image_url": "",
            "watermarked_video_hd_url": null,
            "watermarked_video_sd_url": null
          },
          {
            "body": "Bring sports more fully into your day with the Nike App.",
            "caption": "itunes.apple.com",
            "cta_text": "Install Now",
            "cta_type": "INSTALL_MOBILE_APP",
            "image_crops": [],
            "link_description": "₱3,995",
            "link_url": "https://www.nike.com/ph/t/run-swift-3-road-running-shoes-2fHbzp/DR2698-002",
            "original_image_url": "https://scontent-iad6-1.xx.fbcdn.net/v/t39.35426-6/431679131_94921416663…",
            "resized_image_url": "https://scontent-iad6-1.xx.fbcdn.net/v/t39.35426-6/431679131_94921416663…",
            "title": "Nike Run Swift 3 Women's Road Running Shoes",
            "video_hd_url": null,
            "video_preview_image_url": null,
            "video_sd_url": null,
            "watermarked_resized_image_url": "",
            "watermarked_video_hd_url": null,
            "watermarked_video_sd_url": null
          },
          {
            "body": "Bring sports more fully into your day with the Nike App.",
            "caption": "itunes.apple.com",
            "cta_text": "Install Now",
            "cta_type": "INSTALL_MOBILE_APP",
            "image_crops": [],
            "link_description": "₱5,039",
            "link_url": "https://www.nike.com/ph/t/cosmic-unity-3-basketball-shoes-hcwmW0/DV2757-100",
            "original_image_url": "https://scontent-iad6-1.xx.fbcdn.net/v/t39.35426-6/431644642_73750860147…",
            "resized_image_url": "https://scontent-iad6-1.xx.fbcdn.net/v/t39.35426-6/431644642_73750860147…",
            "title": "Cosmic Unity 3 Basketball Shoes",
            "video_hd_url": null,
            "video_preview_image_url": null,
            "video_sd_url": null,
            "watermarked_resized_image_url": "",
            "watermarked_video_hd_url": null,
            "watermarked_video_sd_url": null
          },
          {
            "body": "Bring sports more fully into your day with the Nike App.",
            "caption": "itunes.apple.com",
            "cta_text": "Install Now",
            "cta_type": "INSTALL_MOBILE_APP",
            "image_crops": [],
            "link_description": "₱3,599",
            "link_url": "https://www.nike.com/ph/t/acg-polartec-wolf-tree-mid-rise-trousers-mVbQBn/CV0615-060",
            "original_image_url": "https://scontent-iad3-1.xx.fbcdn.net/v/t39.35426-6/431748186_28931604736…",
            "resized_image_url": "https://scontent-iad3-1.xx.fbcdn.net/v/t39.35426-6/431748186_28931604736…",
            "title": "Nike ACG Polartec ® 'Wolf Tree' Women's Mid-Rise Trousers",
            "video_hd_url": null,
            "video_preview_image_url": null,
            "video_sd_url": null,
            "watermarked_resized_image_url": "",
            "watermarked_video_hd_url": null,
            "watermarked_video_sd_url": null
          },
          {
            "body": "Bring sports more fully into your day with the Nike App.",
            "caption": "itunes.apple.com",
            "cta_text": "Install Now",
            "cta_type": "INSTALL_MOBILE_APP",
            "image_crops": [],
            "link_description": "₱1,695",
            "link_url": "https://www.nike.com/ph/t/dri-fit-icon-basketball-jersey-4Z5f8P/DV9968-010",
            "original_image_url": "https://scontent-iad3-2.xx.fbcdn.net/v/t39.35426-6/431718739_34998891035…",
            "resized_image_url": "https://scontent-iad3-2.xx.fbcdn.net/v/t39.35426-6/431718739_34998891035…",
            "title": "Nike Dri-FIT Icon Men's Basketball Jersey",
            "video_hd_url": null,
            "video_preview_image_url": null,
            "video_sd_url": null,
            "watermarked_resized_image_url": "",
            "watermarked_video_hd_url": null,
            "watermarked_video_sd_url": null
          },
          {
            "body": "Bring sports more fully into your day with the Nike App.",
            "caption": "itunes.apple.com",
            "cta_text": "Install Now",
            "cta_type": "INSTALL_MOBILE_APP",
            "image_crops": [],
            "link_description": "₱3,595",
            "link_url": "https://www.nike.com/ph/t/fc-barcelona-2023-24-stadium-fourth-dri-fit-fo…",
            "original_image_url": "https://scontent-iad3-1.xx.fbcdn.net/v/t39.35426-6/431734766_93023398175…",
            "resized_image_url": "https://scontent-iad3-1.xx.fbcdn.net/v/t39.35426-6/431734766_93023398175…",
            "title": "Nike F.C. Barcelona 2023/24 Stadium Fourth Women's Nike Dri-FIT Football Shirt",
            "video_hd_url": null,
            "video_preview_image_url": null,
            "video_sd_url": null,
            "watermarked_resized_image_url": "",
            "watermarked_video_hd_url": null,
            "watermarked_video_sd_url": null
          }
        ],
        "country_iso_code": null,
        "cta_text": "Install now",
        "cta_type": "INSTALL_MOBILE_APP",
        "disclaimer_label": null,
        "display_format": "DPA",
        "ec_certificates": [],
        "event": null,
        "extra_images": [],
        "extra_links": [],
        "extra_texts": [],
        "extra_videos": [],
        "images": [],
        "is_reshared": false,
        "link_description": null,
        "link_url": "http://itunes.apple.com/app/id1095459556",
        "page_categories": [
          "Sportswear",
          "Product/service"
        ],
        "page_id": "15087023444",
        "page_is_deleted": false,
        "page_like_count": 39514042,
        "page_name": "Nike",
        "page_profile_picture_url": "https://scontent-iad3-1.xx.fbcdn.net/v/t39.35426-6/431756959_71287105437…",
        "page_profile_uri": "https://facebook.com/nike",
        "root_reshared_post": null,
        "title": "{{product.name}}",
        "videos": [],
        "body": {
          "text": "Bring sports more fully into your day with the Nike App."
        }
      },
      "spend": null,
      "start_date": 1744009200,
      "start_date_string": null,
      "state_media_run_label": null,
      "targeted_or_reached_countries": [],
      "total_active_time": null,
      "url": null
    },
    {
      "ad_archive_id": "1559738104701476",
      "ad_id": null,
      "categories": [
        "UNKNOWN"
      ],
      "collation_count": null,
      "collation_id": null,
      "contains_digital_created_media": false,
      "contains_sensitive_content": false,
      "currency": "",
      "end_date": 1790751600,
      "end_date_string": null,
      "fev_info": null,
      "gated_type": "ELIGIBLE",
      "has_user_reported": false,
      "hide_data_status": "NONE",
      "impressions_with_index": {
        "impressions_text": null,
        "impressions_index": -1
      },
      "is_aaa_eligible": false,
      "is_active": true,
      "menu_items": [],
      "page_id": "15087023444",
      "page_is_deleted": false,
      "page_name": "Nike",
      "publisher_platform": [
        "FACEBOOK",
        "INSTAGRAM",
        "AUDIENCE_NETWORK",
        "MESSENGER"
      ],
      "reach_estimate": null,
      "regional_regulation_data": {
        "finserv": {
          "is_deemed_finserv": false,
          "is_limited_delivery": false
        },
        "tw_anti_scam": {
          "is_limited_delivery": false
        }
      },
      "report_count": null,
      "snapshot": {
        "additional_info": null,
        "branded_content": null,
        "brazil_tax_id": null,
        "byline": null,
        "caption": "play.google.com",
        "cards": [
          {
            "body": "Encuentra tu mejor estilo.\nLlegó el momento de que disfrutes los benefic…",
            "caption": "play.google.com",
            "cta_text": "Install Now",
            "cta_type": "INSTALL_MOBILE_APP",
            "image_crops": [],
            "link_description": "$2,294",
            "link_url": "https://www.nike.com/mx/t/calzado-air-force-1-07-WGq1wQ?cp=54413048966_soc_",
            "original_image_url": "https://scontent-iad3-2.xx.fbcdn.net/v/t39.35426-6/400057885_87665133739…",
            "resized_image_url": "https://scontent-iad3-2.xx.fbcdn.net/v/t39.35426-6/400057885_87665133739…",
            "title": "Calzado para mujer Nike Air Force 1 '07 - Blanco",
            "video_hd_url": null,
            "video_preview_image_url": null,
            "video_sd_url": null,
            "watermarked_resized_image_url": "",
            "watermarked_video_hd_url": null,
            "watermarked_video_sd_url": null
          },
          {
            "body": "Encuentra tu mejor estilo.\nLlegó el momento de que disfrutes los benefic…",
            "caption": "play.google.com",
            "cta_text": "Install Now",
            "cta_type": "INSTALL_MOBILE_APP",
            "image_crops": [],
            "link_description": "$1,409",
            "link_url": "https://www.nike.com/mx/t/pants-de-tejido-woven-upf-sportswear-tech-pack…",
            "original_image_url": "https://scontent-iad3-2.xx.fbcdn.net/v/t39.35426-6/399999246_15658089508…",
            "resized_image_url": "https://scontent-iad3-2.xx.fbcdn.net/v/t39.35426-6/399999246_15658089508…",
            "title": "Pants de tejido Woven para hombre UPF Nike Sportswear Tech Pack - Negro",
            "video_hd_url": null,
            "video_preview_image_url": null,
            "video_sd_url": null,
            "watermarked_resized_image_url": "",
            "watermarked_video_hd_url": null,
            "watermarked_video_sd_url": null
          },
          {
            "body": "Encuentra tu mejor estilo.\nLlegó el momento de que disfrutes los benefic…",
            "caption": "play.google.com",
            "cta_text": "Install Now",
            "cta_type": "INSTALL_MOBILE_APP",
            "image_crops": [],
            "link_description": "$854",
            "link_url": "https://www.nike.com/mx/t/shorts-dri-fit-de-18-900-versátiles-sin-forro-…",
            "original_image_url": "https://scontent-iad3-2.xx.fbcdn.net/v/t39.35426-6/399960590_10038894207…",
            "resized_image_url": "https://scontent-iad3-2.xx.fbcdn.net/v/t39.35426-6/399960590_10038894207…",
            "title": "Shorts Dri-FIT de 18 cm versátiles sin forro para hombre Nike Form - Negro",
            "video_hd_url": null,
            "video_preview_image_url": null,
            "video_sd_url": null,
            "watermarked_resized_image_url": "",
            "watermarked_video_hd_url": null,
            "watermarked_video_sd_url": null
          },
          {
            "body": "Encuentra tu mejor estilo.\nLlegó el momento de que disfrutes los benefic…",
            "caption": "play.google.com",
            "cta_text": "Install Now",
            "cta_type": "INSTALL_MOBILE_APP",
            "image_crops": [],
            "link_description": "$2,699",
            "link_url": "https://www.nike.com/mx/t/calzado-blazer-mid-77-se-j99WT3?cp=54413048966_soc_",
            "original_image_url": "https://scontent-iad3-1.xx.fbcdn.net/v/t39.35426-6/400107091_32468404422…",
            "resized_image_url": "https://scontent-iad3-1.xx.fbcdn.net/v/t39.35426-6/400107091_32468404422…",
            "title": "Calzado para hombre Nike Blazer Mid '77 SE - Blanco",
            "video_hd_url": null,
            "video_preview_image_url": null,
            "video_sd_url": null,
            "watermarked_resized_image_url": "",
            "watermarked_video_hd_url": null,
            "watermarked_video_sd_url": null
          },
          {
            "body": "Encuentra tu mejor estilo.\nLlegó el momento de que disfrutes los benefic…",
            "caption": "play.google.com",
            "cta_text": "Install Now",
            "cta_type": "INSTALL_MOBILE_APP",
            "image_crops": [],
            "link_description": "$584",
            "link_url": "https://www.nike.com/mx/t/camiseta-de-tirantes-estampada-cropped-dri-fit…",
            "original_image_url": "https://scontent-iad6-1.xx.fbcdn.net/v/t39.35426-6/399930460_24955988143…",
            "resized_image_url": "https://scontent-iad6-1.xx.fbcdn.net/v/t39.35426-6/399930460_24955988143…",
            "title": "Camiseta de tirantes estampada cropped para mujer Nike Dri-FIT One - Negro",
            "video_hd_url": null,
            "video_preview_image_url": null,
            "video_sd_url": null,
            "watermarked_resized_image_url": "",
            "watermarked_video_hd_url": null,
            "watermarked_video_sd_url": null
          },
          {
            "body": "Encuentra tu mejor estilo.\nLlegó el momento de que disfrutes los benefic…",
            "caption": "play.google.com",
            "cta_text": "Install Now",
            "cta_type": "INSTALL_MOBILE_APP",
            "image_crops": [],
            "link_description": "$2,069",
            "link_url": "https://www.nike.com/mx/t/dri-fit-adv-aps-chamarra-de-condición-física-7…",
            "original_image_url": "https://scontent-iad3-1.xx.fbcdn.net/v/t39.35426-6/399982152_69380555947…",
            "resized_image_url": "https://scontent-iad3-1.xx.fbcdn.net/v/t39.35426-6/399982152_69380555947…",
            "title": "Nike Dri-FIT ADV A.P.S. Chamarra de condición física para hombre - Negro",
            "video_hd_url": null,
            "video_preview_image_url": null,
            "video_sd_url": null,
            "watermarked_resized_image_url": "",
            "watermarked_video_hd_url": null,
            "watermarked_video_sd_url": null
          }
        ],
        "country_iso_code": null,
        "cta_text": "Install now",
        "cta_type": "INSTALL_MOBILE_APP",
        "disclaimer_label": null,
        "display_format": "DPA",
        "ec_certificates": [],
        "event": null,
        "extra_images": [],
        "extra_links": [],
        "extra_texts": [],
        "extra_videos": [],
        "images": [],
        "is_reshared": false,
        "link_description": null,
        "link_url": "http://play.google.com/store/apps/details?id=com.nike.omega",
        "page_categories": [
          "Sportswear",
          "Product/service"
        ],
        "page_id": "15087023444",
        "page_is_deleted": false,
        "page_like_count": 39514042,
        "page_name": "Nike",
        "page_profile_picture_url": "https://scontent-iad6-1.xx.fbcdn.net/v/t39.35426-6/400027547_35873985350…",
        "page_profile_uri": "https://facebook.com/nike",
        "root_reshared_post": null,
        "title": "{{product.name}}",
        "videos": [],
        "body": {
          "text": "Encuentra tu mejor estilo.\nLlegó el momento de que disfrutes los benefic…"
        }
      },
      "spend": null,
      "start_date": 1745564400,
      "start_date_string": null,
      "state_media_run_label": null,
      "targeted_or_reached_countries": [],
      "total_active_time": null,
      "url": null
    }
  ],
  "searchResultsCount": 3198,
  "cursor": "AQHTSMQB_ilt9UKh88HFxw9XeDw_S-boWBzDyu2zJ501ztCVwRkxXJhPBxpxMJXVjKXd"
}

Response fields

Every field in a successful response, and what it means. A name with [] belongs to each item of a list: results[].ad_archive_id is the ad_archive_id of every item in results. null means there's no value.

Show all 106 fields
FieldTypeDescription
successtrueAlways true here; errors have success: false.
credits_remainingnumberYour balance after this call. On anonymous playground calls: free tries left today.
credits_chargednumberCredits this call cost; 0 on free endpoints. On anonymous playground calls: tries used (1).
page_idstringThe page these ads are from: pageId as given, or the page we matched for companyName.
page_namestringcan be nullThat page's name (the matched page for companyName, else from the ads); null when there are no ads.
resultsobject[]The advertiser's ads.
results[].ad_archive_idstringcan be nullThe Ad Library id. Pass it as id to the ad details endpoint.
results[].ad_idstringcan be nullMeta's internal ad id. null in every response we've seen; use the Ad Library id.
results[].page_idstringcan be nullThe advertiser's Facebook page id. Pass it as pageId to the company ads endpoint.
results[].page_namestringcan be nullThe advertiser's page name.
results[].is_activebooleanWhether the ad is running now.
results[].start_datenumbercan be nullThe day the ad started running, as Unix seconds at midnight Pacific time.
results[].end_datenumbercan be nullThe day the ad stopped, or its latest delivery day if still running, as Unix seconds at midnight Pacific time.
results[].start_date_stringstringcan be nullThe same date as ISO 8601 text when Facebook includes it; null in every response we've seen, so use the Unix seconds field.
results[].end_date_stringstringcan be nullThe same date as ISO 8601 text when Facebook includes it; null in every response we've seen, so use the Unix seconds field.
results[].total_active_timenumbercan be nullSeconds the ad has run, when Facebook reports it; usually null.
results[].publisher_platformstring[]Where it ran, uppercase: FACEBOOK, INSTAGRAM, AUDIENCE_NETWORK, MESSENGER, THREADS.
results[].collation_countnumbercan be nullHow many near-identical versions are grouped under this ad. A high count means the advertiser is scaling it; null for a single version.
results[].collation_idstringcan be nullId shared by the grouped versions of this ad; null for a single version.
results[].snapshotobjectThe creative: copy, media, landing page and advertiser details.
results[].snapshot.page_idstringcan be nullThe advertiser's page id (same as the ad's).
results[].snapshot.page_namestringcan be nullThe advertiser's page name as shown on the ad.
results[].snapshot.page_profile_uristringcan be nullThe advertiser's Facebook page URL.
results[].snapshot.page_profile_picture_urlstringcan be nullThe advertiser's profile picture, 60×60 px.
results[].snapshot.page_like_countnumbercan be nullFollowers of the advertiser's page.
results[].snapshot.page_categoriesstring[]Page categories, e.g. ["Outdoor & Sporting Goods Company"].
results[].snapshot.page_is_deletedbooleanWhether the advertiser's page has been deleted.
results[].snapshot.titlestringcan be nullHeadline under the creative; null when there is none.
results[].snapshot.captionstringcan be nullDisplay link under the creative, usually the domain (e.g. HOKA.com).
results[].snapshot.link_urlstringcan be nullLanding page the ad sends people to, UTM tags included.
results[].snapshot.link_descriptionstringcan be nullText under the headline; null when there is none.
results[].snapshot.cta_textstringcan be nullButton label, e.g. "Shop now".
results[].snapshot.cta_typestringcan be nullButton type, e.g. SHOP_NOW, LEARN_MORE, NO_BUTTON.
results[].snapshot.display_formatstringcan be nullCreative format, e.g. IMAGE, VIDEO, DCO (dynamic creative), DPA (dynamic product ad) or MULTI_IMAGES. For DCO and DPA ads the creative is in cards.
results[].snapshot.imagesobject[]Image creatives. Empty for video and card-based ads, and with trim=true.
results[].snapshot.images[].original_image_urlstringcan be nullFull-size image URL. Facebook's links expire after a few days, so download what you need.
results[].snapshot.images[].resized_image_urlstringcan be null600 px image URL, good for thumbnails.
results[].snapshot.images[].watermarked_resized_image_urlstringWatermarked copy; empty or null in every response we've seen.
results[].snapshot.images[].image_cropsany[]Facebook internal field; an empty array in every response we've seen. Crop hints for the image.
results[].snapshot.videosobject[]Video creatives. Empty for image and card-based ads, and with trim=true.
results[].snapshot.videos[].video_hd_urlstringcan be nullHD video file URL; null if Facebook has no HD version.
results[].snapshot.videos[].video_sd_urlstringcan be nullSD video file URL.
results[].snapshot.videos[].video_preview_image_urlstringcan be nullPoster frame (still image) URL.
results[].snapshot.videos[].watermarked_video_hd_urlstringcan be nullWatermarked copy; empty or null in every response we've seen.
results[].snapshot.videos[].watermarked_video_sd_urlstringcan be nullWatermarked copy; empty or null in every response we've seen.
results[].snapshot.cardsobject[]Carousel, dynamic-creative and product versions, each with its own copy and media. With trim=true the text stays and media URLs are null.
results[].snapshot.cards[].titlestringcan be nullThis version's headline.
results[].snapshot.cards[].bodystringcan be nullThis version's primary text.
results[].snapshot.cards[].captionstringcan be nullThis version's display link, usually the domain.
results[].snapshot.cards[].cta_textstringcan be nullButton label, e.g. "Shop now".
results[].snapshot.cards[].cta_typestringcan be nullButton type, e.g. SHOP_NOW, LEARN_MORE.
results[].snapshot.cards[].link_urlstringcan be nullThis version's landing page URL.
results[].snapshot.cards[].link_descriptionstringcan be nullText under the headline; null when there is none.
results[].snapshot.cards[].original_image_urlstringcan be nullFull-size image URL; null for video versions.
results[].snapshot.cards[].resized_image_urlstringcan be null600 px image URL; null for video versions.
results[].snapshot.cards[].watermarked_resized_image_urlstringWatermarked copy; empty or null in every response we've seen.
results[].snapshot.cards[].image_cropsany[]Facebook internal field; an empty array in every response we've seen. Crop hints for the image.
results[].snapshot.cards[].video_hd_urlstringcan be nullHD video file URL; null for image versions.
results[].snapshot.cards[].video_sd_urlstringcan be nullSD video file URL; null for image versions.
results[].snapshot.cards[].video_preview_image_urlstringcan be nullPoster frame URL; null for image versions.
results[].snapshot.cards[].watermarked_video_hd_urlstringcan be nullWatermarked copy; empty or null in every response we've seen.
results[].snapshot.cards[].watermarked_video_sd_urlstringcan be nullWatermarked copy; empty or null in every response we've seen.
results[].snapshot.bylinestringcan be nullWho paid for the ad (the "Paid for by" name) on political and issue ads; null on most others.
results[].snapshot.disclaimer_labelstringcan be nullThe disclaimer kind on political and issue ads, e.g. PAID_FOR_BY (the name is in byline); null otherwise.
results[].snapshot.country_iso_codestringcan be nullFacebook internal field; null in every response we've seen. A country code on some ads.
results[].snapshot.is_resharedbooleanWhether the ad reshares an existing post (see root_reshared_post).
results[].snapshot.root_reshared_postanyThe original post when is_reshared is true; null otherwise.
results[].snapshot.branded_contentanyPaid partnership details when the ad is branded content; null otherwise.
results[].snapshot.additional_infoanyFacebook internal field; null in every response we've seen.
results[].snapshot.brazil_tax_idanyAdvertiser tax id shown on ads under Brazil's rules; null otherwise.
results[].snapshot.ec_certificatesany[]Facebook internal field; an empty array in every response we've seen.
results[].snapshot.eventanyEvent details on event ads; null otherwise.
results[].snapshot.extra_imagesany[]More images from dynamic creative; usually empty.
results[].snapshot.extra_linksany[]More landing page URLs from dynamic creative; usually empty.
results[].snapshot.extra_textsany[]More text variations from dynamic creative; usually empty.
results[].snapshot.extra_videosany[]More videos from dynamic creative; usually empty.
results[].snapshot.bodyobjectcan be nullPrimary text as { text }; null when the copy is only in cards.
results[].snapshot.body.textstringcan be nullThe ad's primary text.
results[].categoriesstring[]Special ad categories Facebook assigned. ["UNKNOWN"] for ordinary ads.
results[].targeted_or_reached_countriesstring[]Countries the ad targeted or reached, when Facebook discloses them; empty in most results.
results[].currencystringCurrency code of spend (e.g. USD) when spend is reported; an empty string otherwise.
results[].spendanySpend range as Facebook shows it, e.g. "$600K - $700K" or ">$1M" (see currency). Political and issue ads only; null otherwise.
results[].impressions_with_indexobjectImpressions range, reported for political and issue ads only.
results[].impressions_with_index.impressions_textstringcan be nullThe range as Facebook shows it; null when not reported.
results[].impressions_with_index.impressions_indexnumberFacebook's bucket number for the range; -1 when not reported. Ad details usually omit it.
results[].reach_estimateanyEstimated reach as Facebook shows it, e.g. ">1M", on political and issue ads and some EU-delivered ads; null otherwise.
results[].urlstringcan be nullAd Library link for this ad. null in every response we've seen; build it as https://www.facebook.com/ads/library/?id=<Ad Library id>.
results[].contains_digital_created_mediabooleanWhether Facebook labels the creative as AI-generated or digitally altered.
results[].contains_sensitive_contentbooleanFacebook internal field; false in every response we've seen. Facebook's sensitive-content flag.
results[].gated_typestringFacebook internal field; ELIGIBLE (lowercase in ad details) in every response we've seen.
results[].has_user_reportedbooleanWhether the viewer reported the ad. Always false, since we read the Ad Library logged out.
results[].hide_data_statusstringFacebook internal field; NONE in every response we've seen.
results[].is_aaa_eligiblebooleanFacebook flag, true on a few ads; meaning undocumented. Ad details' aaa_info holds the related data when present.
results[].menu_itemsany[]Facebook internal field; an empty array in every response we've seen.
results[].page_is_deletedbooleanWhether the advertiser's page has been deleted.
results[].regional_regulation_dataobjectDelivery limits under regional ad rules.
results[].regional_regulation_data.finservobjectFinancial-services ad rules.
results[].regional_regulation_data.finserv.is_deemed_finservbooleanFacebook treats the ad as a financial-services ad.
results[].regional_regulation_data.finserv.is_limited_deliverybooleanDelivery is limited under financial-services rules.
results[].regional_regulation_data.tw_anti_scamobjectTaiwan's anti-scam ad rules.
results[].regional_regulation_data.tw_anti_scam.is_limited_deliverybooleanDelivery is limited under Taiwan's anti-scam rules.
results[].report_countnumbercan be nullTimes the ad was reported, when disclosed; null in every response we've seen.
results[].fev_infoanyFacebook internal field; null in every response we've seen.
results[].state_media_run_labelanyLabel for ads run by state-controlled media; null otherwise.
searchResultsCountnumbercan be nullTotal matching ads, as Facebook estimates it. Only on the first page; null on cursor pages.
cursorstringcan be nullPass as cursor for the next page. null on the last page.

Pagination

Results come in pages. For the next page, repeat the call with the same parameters and add the response's cursor as cursor. On the last page, cursor is null. Each page costs 1 credit.

The first five pages, in JavaScript
let cursor = null;for (let page = 1; page <= 5; page++) {const params = new URLSearchParams({ pageId: "15087023444", status: "active" });if (cursor) params.set("cursor", cursor);const res = await fetch(`https://api.lurkapi.com/v1/facebook/adLibrary/company/ads?${params}`, {headers: { "x-api-key": process.env.LURKAPI_API_KEY },});const data = await res.json();if (!data.success) throw new Error(`${data.code}: ${data.error}`);console.log(data.results);cursor = data.cursor;if (!cursor) break; // last page}

Cost and freshness

Each call costs 1 credit. Calls turned away before they reach the platform (invalid parameters, a key or balance problem, a rate limit) are free, and so are 5xx errors. A not_found is charged, since the platform was checked. How charging works.

Answers are cached for up to 30 minutes. A repeat call within that time can return the same data, and costs the same.

Errors

A failed call returns success: false, an error message, a code your program can check, and a docs link. These are the errors this endpoint can return. All error codes.

StatusCodeMeaning
401missing_api_keyNo API key was sent. Put it in the x-api-key header.
401invalid_api_keyThis key doesn't exist or was revoked.
402insufficient_creditsNot enough credits for this call. Buy a pack, or wait for tomorrow's free top-up.
402over_max_creditsThis call would cost more than the max_credits you set. The error says what it needs; raise max_credits to allow it. Not charged.
403account_suspendedThis account is suspended. Email support@lurkapi.com. Not charged.
404not_foundWhat you asked for (a post, an ad, a subreddit) doesn't exist, or there's no endpoint at that path. Charged if the platform was checked.
405method_not_allowedEndpoints only take GET, with parameters in the URL.
429rate_limitedToo many calls in a short time. Wait as many seconds as the retry-after header says, then retry.
500internal_errorSomething broke on our side. Retry. Not charged.
502upstream_errorThe platform didn't send a usable answer. Retry. Not charged.
503upstream_busyAll our connections to the platform are busy. Retry in a few seconds. Not charged.
504upstream_timeoutThe platform took over 30 seconds to answer (90 for web pages). Retry. Not charged.

Use it in Claude

Connect LurkAPI to Claude and ask in plain English. This endpoint is the facebook_company_ads tool. For example:

Ask Claude
Use LurkAPI's facebook_company_ads tool with pageId "15087023444", status "active", then summarize what you find.

Claude calls facebook_company_ads with arguments like these, and each call costs 1 credit:

Tool arguments
{"pageId": "15087023444","status": "active"}

To save tokens, tool results leave out empty fields, keep one URL per image or video, and give transcripts as plain text unless you pass timestamps=true. A result over 45,000 characters comes in parts. Its _note gives the offset for the next part, and later parts are free for 15 minutes. Pass trim=false for the full response.

From the blog

All posts