Facebook Ad Library

7 endpoints.

GET /v1/facebook/ads_ad

Ad Details

Retrieves detailed information about a specific Facebook ad by its ID or URL. Returns adArchiveID, pageName, isActive, startDate, endDate, and a snapshot containing body, images, videos, display_format, link_url, and cta_text. Regulated ads may also include source-dependent aaa_info using the structure shown below. Political and social issue delivery data is normalized to location_audience and age_country_gender_reach_breakdown. Political location_audience rows include reach, and political delivery values are fractional shares, so 0.08 means 8%. Regional transparency data may use absolute reach counts. For ads with multiple versions, the ad creative is found in the snapshot.cards array rather than snapshot.body. Transcription is opt-in via get_transcript=true. Default short AI (up to 120 seconds, inclusive) is included in the existing base endpoint price, with no extra AI fee. By default, successful AI transcription of videos up to 120 seconds (two minutes, inclusive) costs a flat 1 credit per request. Over 120 seconds, videos cannot be AI-transcribed by default. Set allow_long_transcription=true to opt into paid AI with no fixed duration cap: ALL successful AI transcriptions in this mode cost 10 credits per started minute, including short videos: 10 * ceil(duration_seconds / 60). For example, 177 seconds costs 30 credits and an opted-in 60 seconds costs 10 credits. Empty AI results and errors cost 0 credits for AI transcription. On detail routes, successful paid-mode AI costs are in addition to the existing base endpoint cost; media-download pricing is unchanged. Returned native captions leave the base endpoint price unchanged. Empty AI results and errors incur no AI fee; the base scrape fee still applies when the detail scrape succeeds. These routes remain synchronous. Allow at least 30 seconds on your client. Paid long transcription can exceed resource limits or timeouts, so successful transcription of long videos is not guaranteed.

Parameters

NameInTypeDescription
idquerystringFacebook Ad Id
urlquerystringFacebook Ad URL
allow_long_transcriptionquerybooleanPaid opt-in, enabled only by the literal query value 'true' (allow_long_transcription=true). Defaults to false when omitted; other values do not enable paid mode. By default, successful AI transcription of videos up to 120 seconds (two minutes, inclusive) costs a flat 1 credit per request. Over 120 seconds, videos cannot be AI-transcribed by default. Set allow_long_transcription=true to opt into paid AI with no fixed duration cap: ALL successful AI transcriptions in this mode cost 10 credits per started minute, including short videos: 10 * ceil(duration_seconds / 60). For example, 177 seconds costs 30 credits and an opted-in 60 seconds costs 10 credits. Empty AI results and errors cost 0 credits for AI transcription. This flag does not force AI and does not enable transcription or AI fallback by itself. Keep get_transcript=true or use_ai_as_fallback=true where required by the endpoint. Returned native captions still cost 1 credit on dedicated transcript routes, even for long videos with this flag; on detail routes they leave the base price unchanged. These routes remain synchronous. Allow at least 30 seconds on your client. Paid long transcription can exceed resource limits or timeouts, so successful transcription of long videos is not guaranteed.
get_transcriptquerybooleanTranscription is opt-in via get_transcript=true. Default short AI (up to 120 seconds, inclusive) is included in the existing base endpoint price, with no extra AI fee. By default, successful AI transcription of videos up to 120 seconds (two minutes, inclusive) costs a flat 1 credit per request. Over 120 seconds, videos cannot be AI-transcribed by default. Set allow_long_transcription=true to opt into paid AI with no fixed duration cap: ALL successful AI transcriptions in this mode cost 10 credits per started minute, including short videos: 10 * ceil(duration_seconds / 60). For example, 177 seconds costs 30 credits and an opted-in 60 seconds costs 10 credits. Empty AI results and errors cost 0 credits for AI transcription. On detail routes, successful paid-mode AI costs are in addition to the existing base endpoint cost; media-download pricing is unchanged. Returned native captions leave the base endpoint price unchanged. Empty AI results and errors incur no AI fee; the base scrape fee still applies when the detail scrape succeeds. These routes remain synchronous. Allow at least 30 seconds on your client. Paid long transcription can exceed resource limits or timeouts, so successful transcription of long videos is not guaranteed.
trimquerybooleanSet to true for a trimmed down version of the response
cache_max_agequerystringIf we have a response in the cache that is this many days old or newer, return the cached response (0 credits, with "cached": true and a "cached_at" timestamp). Otherwise, scrape a live result (1 credit; default short AI is included; allow_long_transcription=true adds 10 credits per started minute to the existing base cost). See the Caching page for details.
one of: 1d, 3d, 7d, 14d, 30d

Request

curl "https://api.scrapall.bipsport.com/scapi/v1/facebook/ads_ad" \
  -H "X-Scapi-Key: YOUR_API_KEY"
const res = await fetch("https://api.scrapall.bipsport.com/scapi/v1/facebook/ads_ad", {
  headers: { "X-Scapi-Key": "YOUR_API_KEY" }
});
const data = await res.json();
import requests

r = requests.get(
    "https://api.scrapall.bipsport.com/scapi/v1/facebook/ads_ad",
    headers={"X-Scapi-Key": "YOUR_API_KEY"},
)
print(r.json())

Response 200 (sample)

{
  "ad_id": 1185617869915074,
  "end_date": 1750316400,
  "is_aaa_eligible": false,
  "is_active": true,
  "page_id": 15087023444,
  "page_name": "Nike",
  "political_countries": [],
  "reach_estimate": null,
  "creative": {
    "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-b06U...",
        "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=c..."
      }
    ],
    "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_frcPL...",
        "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=...",
        "watermarked_resized_image_url": "",
        "image_crops": {}
      }
    ],
    "videos": [],
    "creation_time": 1750344986,
    "page_id": 15087023444,
    "...": "25 more fields"
  },
  "total_active_time": 23488,
  "spend": null,
  "start_date": 1750316400,
  "publisher_platform": [
    "facebook"
  ],
  "url": "https://www.facebook.com/ads/library?id=1185617869915074",
  "start_date_string": "2025-06-19T07:00:00.000Z",
  "end_date_string": "2025-06-19T07:00:00.000Z",
  "aaa_info": null
}

GET /v1/facebook/ads_ad_captions

Ad Transcript

Retrieves a transcript for a Facebook Ad Library video ad by ID or URL. Returned native captions cost 1 credit. Otherwise the public video URL is transcribed with AI. If the ad has no video or no transcript is available, transcript is null and the charge is 0 credits. By default, successful AI transcription of videos up to 120 seconds (two minutes, inclusive) costs a flat 1 credit per request. Over 120 seconds, videos cannot be AI-transcribed by default. Set allow_long_transcription=true to opt into paid AI with no fixed duration cap: ALL successful AI transcriptions in this mode cost 10 credits per started minute, including short videos: 10 * ceil(duration_seconds / 60). For example, 177 seconds costs 30 credits and an opted-in 60 seconds costs 10 credits. Empty AI results and errors cost 0 credits for AI transcription. These routes remain synchronous. Allow at least 30 seconds on your client. Paid long transcription can exceed resource limits or timeouts, so successful transcription of long videos is not guaranteed.

Parameters

NameInTypeDescription
idquerystringFacebook Ad Id
urlquerystringFacebook Ad URL
allow_long_transcriptionquerybooleanPaid opt-in, enabled only by the literal query value 'true' (allow_long_transcription=true). Defaults to false when omitted; other values do not enable paid mode. By default, successful AI transcription of videos up to 120 seconds (two minutes, inclusive) costs a flat 1 credit per request. Over 120 seconds, videos cannot be AI-transcribed by default. Set allow_long_transcription=true to opt into paid AI with no fixed duration cap: ALL successful AI transcriptions in this mode cost 10 credits per started minute, including short videos: 10 * ceil(duration_seconds / 60). For example, 177 seconds costs 30 credits and an opted-in 60 seconds costs 10 credits. Empty AI results and errors cost 0 credits for AI transcription. This flag does not force AI and does not enable transcription or AI fallback by itself. Keep get_transcript=true or use_ai_as_fallback=true where required by the endpoint. Returned native captions still cost 1 credit on dedicated transcript routes, even for long videos with this flag; on detail routes they leave the base price unchanged. These routes remain synchronous. Allow at least 30 seconds on your client. Paid long transcription can exceed resource limits or timeouts, so successful transcription of long videos is not guaranteed.
cache_max_agequerystringIf we have a response in the cache that is this many days old or newer, return the cached response (0 credits, with "cached": true and a "cached_at" timestamp). Otherwise, scrape a live result (Returned native captions cost 1 credit, even for long videos with the paid flag. By default, successful AI up to 120 seconds costs a flat 1 credit per request; over 120 seconds requires allow_long_transcription=true, which bills ALL successful AI at 10 credits per started minute, including short videos; empty AI results and errors cost 0 credits; no transcript: 0 credits). See the Caching page for details.
one of: 1d, 3d, 7d, 14d, 30d

Request

curl "https://api.scrapall.bipsport.com/scapi/v1/facebook/ads_ad_captions" \
  -H "X-Scapi-Key: YOUR_API_KEY"
const res = await fetch("https://api.scrapall.bipsport.com/scapi/v1/facebook/ads_ad_captions", {
  headers: { "X-Scapi-Key": "YOUR_API_KEY" }
});
const data = await res.json();
import requests

r = requests.get(
    "https://api.scrapall.bipsport.com/scapi/v1/facebook/ads_ad_captions",
    headers={"X-Scapi-Key": "YOUR_API_KEY"},
)
print(r.json())

Response 200 (sample)

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

GET /v1/facebook/ads_company_ads

Company Ads

Fetches all ads currently running for a specific company from the Meta Ad Library. Each ad includes ad_archive_id, page_name, is_active, publisher_platform, and a snapshot with body, images, videos, and display_format. Supports filtering by country, media_type, date range, and language with cursor-based pagination. Both GET and POST are supported. If the cursor becomes too large after extensive pagination, use POST and send the same parameters in the JSON body.

Parameters

NameInTypeDescription
page_idquerystringThe companies ad library page id. You can get this with my Search For Companies Endpoint. Can either use this or companyName
company_namequerystringThe name of the company. Can either use this or pageId
countryquerystringThis can only be one country. It has to be the 2 letter code for the country. It defaults to ALL.
statusquerystringStatus of the ad. Defaults to ACTIVE.
one of: ALL, ACTIVE, INACTIVE
media_typequerystringMedia type of the ad. Defaults to ALL. Meme refers to ads with image and text. Not sure why they call it meme.
one of: ALL, IMAGE, VIDEO, MEME, IMAGE_AND_MEME, NONE
languagequerystringLanguage to filter ads on. Needs to be 2 letter language code, ie EN, ES, FR, etc
sort_byquerystringSort by impressions (high to low), or Most Recent (relevancy_monthly_grouped). Defaults to impressions.
one of: total_impressions, relevancy_monthly_grouped
start_datequerystringStart date to search for. Format: YYYY-MM-DD
end_datequerystringEnd date to search for. Format: YYYY-MM-DD
trimquerybooleanSet to true for a trimmed down version of the response
next_cursorquerystringCursor to paginate through results

Request

curl "https://api.scrapall.bipsport.com/scapi/v1/facebook/ads_company_ads" \
  -H "X-Scapi-Key: YOUR_API_KEY"
const res = await fetch("https://api.scrapall.bipsport.com/scapi/v1/facebook/ads_company_ads", {
  headers: { "X-Scapi-Key": "YOUR_API_KEY" }
});
const data = await res.json();
import requests

r = requests.get(
    "https://api.scrapall.bipsport.com/scapi/v1/facebook/ads_company_ads",
    headers={"X-Scapi-Key": "YOUR_API_KEY"},
)
print(r.json())

Response 200 (sample)

{
  "results": [
    {
      "ad_id": "1212560900568826",
      "end_date": 1750230000,
      "is_aaa_eligible": false,
      "is_active": true,
      "page_id": "15087023444",
      "page_name": "Nike",
      "political_countries": [],
      "reach_estimate": null,
      "creative": {
        "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=c53...",
        "...": "10 more fields"
      },
      "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"
    }
  ],
  "next_cursor": "AQHR2LpCDWOZyAGp-ZKr8rUsapAXh8rWjYuNxVvuU7L0kte18hxkxnaXM3e5jEZNgdcU"
}

POST /v1/facebook/ads_company_ads

Company Ads

Fetches all ads currently running for a specific company from the Meta Ad Library. Each ad includes ad_archive_id, page_name, is_active, publisher_platform, and a snapshot with body, images, videos, and display_format. Supports filtering by country, media_type, date range, and language with cursor-based pagination. Both GET and POST are supported. If the cursor becomes too large after extensive pagination, use POST and send the same parameters in the JSON body.

Parameters

NameInTypeDescription
pageIdbodystringThe companies ad library page id. You can get this with my Search For Companies Endpoint. Can either use this or companyName
companyNamebodystringThe name of the company. Can either use this or pageId
countrybodystringThis can only be one country. It has to be the 2 letter code for the country. It defaults to ALL.
statusbodystringStatus of the ad. Defaults to ACTIVE.
one of: ALL, ACTIVE, INACTIVE
media_typebodystringMedia type of the ad. Defaults to ALL. Meme refers to ads with image and text. Not sure why they call it meme.
one of: ALL, IMAGE, VIDEO, MEME, IMAGE_AND_MEME, NONE
languagebodystringLanguage to filter ads on. Needs to be 2 letter language code, ie EN, ES, FR, etc
sort_bybodystringSort by impressions (high to low), or Most Recent (relevancy_monthly_grouped). Defaults to impressions.
one of: total_impressions, relevancy_monthly_grouped
start_datebodystringStart date to search for. Format: YYYY-MM-DD
end_datebodystringEnd date to search for. Format: YYYY-MM-DD
trimbodybooleanSet to true for a trimmed down version of the response
cursorbodystringCursor to paginate through results

Request

curl -X POST "https://api.scrapall.bipsport.com/scapi/v1/facebook/ads_company_ads" \
  -H "X-Scapi-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
const res = await fetch("https://api.scrapall.bipsport.com/scapi/v1/facebook/ads_company_ads", {
  method: "POST",
  headers: { "X-Scapi-Key": "YOUR_API_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({})
});
const data = await res.json();
import requests

r = requests.post(
    "https://api.scrapall.bipsport.com/scapi/v1/facebook/ads_company_ads",
    headers={"X-Scapi-Key": "YOUR_API_KEY"},
    json={},
)
print(r.json())

Response 200 (sample)

{
  "results": [
    {
      "ad_id": "1212560900568826",
      "end_date": 1750230000,
      "is_aaa_eligible": false,
      "is_active": true,
      "page_id": "15087023444",
      "page_name": "Nike",
      "political_countries": [],
      "reach_estimate": null,
      "creative": {
        "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=c53...",
        "...": "10 more fields"
      },
      "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"
    }
  ],
  "next_cursor": "AQHR2LpCDWOZyAGp-ZKr8rUsapAXh8rWjYuNxVvuU7L0kte18hxkxnaXM3e5jEZNgdcU"
}

GET /v1/facebook/ads_search_ads

Search

Searches the Meta Ad Library by keyword and returns matching ads. Supports filtering by language with a 2-letter code such as EN or ES. Each result includes ad_archive_id, page_name, is_active, publisher_platform, and a snapshot with body text, images, videos, and cta_text. Both GET and POST are supported. Use GET for normal requests. If the cursor becomes too large after extensive pagination, use POST and send the same parameters in the JSON body.

Parameters

NameInTypeDescription
query requiredquerystringKeyword to search for
sort_byquerystringSort by impressions (high to low), or Most Recent (relevancy_monthly_grouped). Defaults to impressions.
one of: total_impressions, relevancy_monthly_grouped
search_typequerystringIf you want to search by exact phrase or not
one of: keyword_unordered, keyword_exact_phrase
ad_typequerystringSearch for all ads or only political and issue ads
one of: all, political_and_issue_ads
countryquerystringThis can only be one country. It has to be the 2 letter code for the country. It defaults to ALL.
languagequerystringLanguage to filter ads on. Needs to be a 2 letter language code, such as EN, ES, or FR.
statusquerystringStatus of the ad. Defaults to ACTIVE.
one of: ALL, ACTIVE, INACTIVE
media_typequerystringMedia type of the ad. Defaults to ALL. Meme just means the ad has text and an image. No clue why they call it meme.
one of: ALL, IMAGE, VIDEO, MEME, IMAGE_AND_MEME, NONE
start_datequerystringImpressions start date. Needs to be in YYYY-MM-DD format.
end_datequerystringImpressions end date. Needs to be in YYYY-MM-DD format.
trimquerybooleanSet to true for a trimmed down version of the response
next_cursorquerystringCursor to paginate through results

Request

curl "https://api.scrapall.bipsport.com/scapi/v1/facebook/ads_search_ads?query=running" \
  -H "X-Scapi-Key: YOUR_API_KEY"
const res = await fetch("https://api.scrapall.bipsport.com/scapi/v1/facebook/ads_search_ads?query=running", {
  headers: { "X-Scapi-Key": "YOUR_API_KEY" }
});
const data = await res.json();
import requests

r = requests.get(
    "https://api.scrapall.bipsport.com/scapi/v1/facebook/ads_search_ads?query=running",
    headers={"X-Scapi-Key": "YOUR_API_KEY"},
)
print(r.json())

Response 200 (sample)

{
  "results": [
    {
      "ad_id": "1378176106734781",
      "end_date": 1747638000,
      "is_aaa_eligible": false,
      "is_active": true,
      "page_id": "119749581219299",
      "page_name": "Makhumalo",
      "political_countries": [],
      "reach_estimate": null,
      "creative": {
        "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=c5...",
        "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 ..."
        },
        "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=3EJ6TbZR3G...",
            "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=c...",
            "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",
        "...": "10 more fields"
      },
      "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"
    }
  ],
  "search_results_count": 50001,
  "next_cursor": "AQHRLKHyzb3ZNTn1O3qr6lG7ncS9gfboI0HWGSDETVUnipTSXVY8E4Wb-568JBicOvYS"
}

POST /v1/facebook/ads_search_ads

Search

Searches the Meta Ad Library by keyword and returns matching ads. Supports filtering by language with a 2-letter code such as EN or ES. Each result includes ad_archive_id, page_name, is_active, publisher_platform, and a snapshot with body text, images, videos, and cta_text. Both GET and POST are supported. Use GET for normal requests. If the cursor becomes too large after extensive pagination, use POST and send the same parameters in the JSON body.

Parameters

NameInTypeDescription
query requiredbodystringKeyword to search for
sort_bybodystringSort by impressions (high to low), or Most Recent (relevancy_monthly_grouped). Defaults to impressions.
one of: total_impressions, relevancy_monthly_grouped
search_typebodystringIf you want to search by exact phrase or not
one of: keyword_unordered, keyword_exact_phrase
ad_typebodystringSearch for all ads or only political and issue ads
one of: all, political_and_issue_ads
countrybodystringThis can only be one country. It has to be the 2 letter code for the country. It defaults to ALL.
languagebodystringLanguage to filter ads on. Needs to be a 2 letter language code, such as EN, ES, or FR.
statusbodystringStatus of the ad. Defaults to ACTIVE.
one of: ALL, ACTIVE, INACTIVE
media_typebodystringMedia type of the ad. Defaults to ALL. Meme just means the ad has text and an image. No clue why they call it meme.
one of: ALL, IMAGE, VIDEO, MEME, IMAGE_AND_MEME, NONE
start_datebodystringImpressions start date. Needs to be in YYYY-MM-DD format.
end_datebodystringImpressions end date. Needs to be in YYYY-MM-DD format.
trimbodybooleanSet to true for a trimmed down version of the response
cursorbodystringCursor to paginate through results

Request

curl -X POST "https://api.scrapall.bipsport.com/scapi/v1/facebook/ads_search_ads" \
  -H "X-Scapi-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "example"}'
const res = await fetch("https://api.scrapall.bipsport.com/scapi/v1/facebook/ads_search_ads", {
  method: "POST",
  headers: { "X-Scapi-Key": "YOUR_API_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({"query": "example"})
});
const data = await res.json();
import requests

r = requests.post(
    "https://api.scrapall.bipsport.com/scapi/v1/facebook/ads_search_ads",
    headers={"X-Scapi-Key": "YOUR_API_KEY"},
    json={'query': 'example'},
)
print(r.json())

Response 200 (sample)

{
  "results": [
    {
      "ad_id": "1378176106734781",
      "end_date": 1747638000,
      "is_aaa_eligible": false,
      "is_active": true,
      "page_id": "119749581219299",
      "page_name": "Makhumalo",
      "political_countries": [],
      "reach_estimate": null,
      "creative": {
        "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=c5...",
        "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 ..."
        },
        "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=3EJ6TbZR3G...",
            "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=c...",
            "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",
        "...": "10 more fields"
      },
      "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"
    }
  ],
  "search_results_count": 50001,
  "next_cursor": "AQHRLKHyzb3ZNTn1O3qr6lG7ncS9gfboI0HWGSDETVUnipTSXVY8E4Wb-568JBicOvYS"
}

GET /v1/facebook/ads_search_companies

Search for Companies

Searches for companies by name in the Meta Ad Library and returns their page IDs for use with other ad library endpoints. Each result includes page_id, name, category, likes, verification status, and Instagram details like ig_username and ig_followers.

Parameters

NameInTypeDescription
query requiredquerystringKeyword to search for

Request

curl "https://api.scrapall.bipsport.com/scapi/v1/facebook/ads_search_companies?query=nike" \
  -H "X-Scapi-Key: YOUR_API_KEY"
const res = await fetch("https://api.scrapall.bipsport.com/scapi/v1/facebook/ads_search_companies?query=nike", {
  headers: { "X-Scapi-Key": "YOUR_API_KEY" }
});
const data = await res.json();
import requests

r = requests.get(
    "https://api.scrapall.bipsport.com/scapi/v1/facebook/ads_search_companies?query=nike",
    headers={"X-Scapi-Key": "YOUR_API_KEY"},
)
print(r.json())

Response 200 (sample)

{
  "results": [
    {
      "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...",
      "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
    }
  ]
}