SFOLN

Catalogue / Ad intelligence

Facebook Ad Details Scraper (by Ad ID)

sfoln/facebook-ad-lookup · Social media, Lead generation, Ecommerce On request

Get full details of Facebook and Instagram ads by Ad Library ID or URL: advertiser, dates, platforms, ad text, CTA, landing URL, media, EU reach and targeting, plus an optional video transcript. $5 per 1,000 ads; transcripts $4 per 1,000.

About

What it does

Facebook Ad Details Scraper (by Ad ID) looks up Facebook and Instagram ads by Ad Library ID or URL and returns one clean record per ad: advertiser page, active status, start/end dates, platforms, ad text, headline, call to action, landing URL, media type, image and video URLs, and – for ads shown in the EU or political/issue ads – reach, targeted age/gender/locations, payer/beneficiary and the reach breakdown by country, age and gender. Optionally add a transcript of the ad's video. Built for ad intelligence tools, agencies, researchers and AI agents that already have ad IDs (for example from the Facebook Ads Library Scraper).

Price

Price per delivered record

EventPricePer 1,000Charged for
Facebook ad record
facebook-ad-looked-up
$0.005$5 / 1,000Charged once per ad whose details were returned from the Meta Ad Library. A not-found ad is not charged unless the provider billed the lookup; invalid inputs and failed requests are not charged.
Facebook ad video transcript
facebook-ad-transcript
$0.004$4 / 1,000Charged once per ad for which a video transcript was requested (includeTranscript, paid plans only) and actually returned. Ads without video or without a transcript are not charged.

Apify free plan: up to 10 items per run. Paid plans have no per-run cap; set maxTotalChargeUsd to cap spend.

Run

Call it from code, an agent or the Console

This API is private on Apify for now. Email us and we will publish it for you, usually within two working days. The calls below work once it is public. contact@sfoln.com

curl · synchronous run, rows in the response
curl -X POST "https://api.apify.com/v2/actors/sfoln~facebook-ad-lookup/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"adIds":["1185617869915074"]}'
mcp.json · hosted Apify MCP server
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/facebook-ad-lookup"
    }
  }
}
asynchronous run · for large batches
POST https://api.apify.com/v2/actors/sfoln~facebook-ad-lookup/runs?maxTotalChargeUsd=1
GET  https://api.apify.com/v2/actor-runs/{runId}            # until status is SUCCEEDED
GET  https://api.apify.com/v2/datasets/{defaultDatasetId}/items?format=json

Authenticate with an Apify API token. MCP clients can instead sign in with OAuth when prompted. Example prompt for an agent: Look up the Facebook ad with Ad Library ID 1185617869915074 and tell me its advertiser, ad text, call to action, landing page and start date.

Input

Input fields

Paste Meta Ad Library ad IDs or URLs. Each ad produces one dataset record with a `status` field.

FieldTypeDefaultMeaning
adIds *arrayrequiredAd archive IDs or Ad Library URLs
Ad archive IDs (e.g. 1185617869915074) or Ad Library URLs such as https://www.facebook.com/ads/library/?id=1185617869915074, one per line. Accounts on the Apify free plan can process up to 10 ads per run.
includeTranscriptbooleanfalseInclude video transcript
Also return a transcript of the ad's video (native captions, or AI transcription for videos up to 2 minutes). Charged separately only when a transcript is returned.
maxItemsinteger1000Max ads
Safety cap on how many ads are looked up in this run. Range 1–10000.
concurrencyinteger4Concurrency
Ads looked up in parallel (1–8). Range 1–8.
itemTimeoutSecsinteger240Time limit per ad (seconds)
Maximum time for one ad lookup, including the optional transcript (60–900). Range 60–900.
includeRawbooleanfalseInclude raw upstream response
Attach the unmodified upstream payload to each record under `raw` (larger output).
Example input
{
  "adIds": [
    "1185617869915074"
  ]
}

Output

One record per input item

Records land in the run's dataset; a synchronous call returns them directly. Each has a status (ok is charged; everything else is free) and a charged flag. The run's OUTPUT record totals items and charges.

FieldTypeMeaning
inputstring | objectInput
The input query this record belongs to.
statusstringStatus
ok | not_found | error | skipped_invalid | skipped_budget | skipped_free_plan
chargedbooleanCharged
Whether this record incurred a pay-per-event charge.
chargedEventstringCharged event
Pay-per-event event charged for this record.
sourcestringSource
Upstream data source (scrapecreators = ScrapeCreators API over the public ad library).
fetchedAtstringFetched at
ISO timestamp.
errorobjectError
code / message when status is not ok.
warningsarrayWarnings
Non-fatal notes (e.g. stopped early).
adArchiveIdstring | nullAd archive ID
Meta Ad Library ID of the ad.
adLibraryUrlstring | nullAd Library URL
Public Ad Library link to the ad (snapshot).
pageIdstring | nullPage ID
Advertiser's Facebook page ID.
pageNamestring | nullPage name
Advertiser's page name.
pageUrlstring | nullPage URL
Advertiser's Facebook page.
pageLikeCountinteger | nullPage likes
Page like count at fetch time.
pageCategoriesarrayPage categories
Page categories.
isActiveboolean | nullActive
Ad is currently running.
startDatestring | nullStart date
ISO date the ad started running.
endDatestring | nullEnd date
ISO date the ad stopped (or last seen) running.
totalActiveTimeSecsinteger | nullActive time (s)
Total active time in seconds when reported.
platformsarrayPlatforms
Publisher platforms: facebook, instagram, audience_network, messenger, threads.
adTextstring | nullAd text
Primary text (body) of the ad; first card's body for multi-version ads.
headlinestring | nullHeadline
Link title / headline.
linkDescriptionstring | nullLink description
Text under the headline.
linkUrlstring | nullLanding URL
Destination link.
displayUrlstring | nullDisplay URL
Domain shown on the ad (caption).
ctaTextstring | nullCTA text
Call-to-action button text.
ctaTypestring | nullCTA type
Call-to-action code, e.g. SHOP_NOW, LEARN_MORE.
mediaTypestring | nullMedia type
image | video | multi_images | carousel | dco | dpa | text …
imageUrlsarrayImage URLs
Creative images (original resolution where available).
videoUrlsarrayVideo URLs
Creative videos (HD where available).
thumbnailUrlstring | nullThumbnail
Video preview image or resized first image.
cardCountinteger | nullCards
Number of carousel / version cards.
collationCountinteger | nullVersions
Number of ad versions grouped under this ad (search results only; usually null for a lookup).
languagesarrayLanguages
Ad languages when the library reports them.
impressionsTextstring | nullImpressions
Impressions range text when Meta discloses it (political / EU ads).
reachEstimateinteger | nullReach estimate
Estimated reach when disclosed.
spendLowernumber | nullSpend (lower)
Lower spend bound when disclosed (political ads).
spendUppernumber | nullSpend (upper)
Upper spend bound when disclosed.
currencystring | nullCurrency
Currency of the spend bounds.
targetedCountriesarrayTargeted countries
Targeted / reached or political countries when reported.
targetsEuboolean | nullTargets EU
EU transparency data present.
euTotalReachinteger | nullEU reach
Total EU reach.
audienceAgeMininteger | nullAudience age min
Targeted minimum age.
audienceAgeMaxinteger | nullAudience age max
Targeted maximum age.
audienceGenderstring | nullAudience gender
Targeted gender.
audienceLocationsarrayAudience locations
Targeted locations.
payersarrayPayers
Who paid for the ad (EU transparency; ad details only).
beneficiariesarrayBeneficiaries
Who benefits from the ad (EU transparency; ad details only).
reachBreakdownarrayReach breakdown
EU reach by country / age range / gender.
transcriptstring | nullTranscript
Video transcript (only with includeTranscript; null when none).
transcriptChargedboolean | nullTranscript charged
facebook-ad-transcript was charged for this record.
Example record
{
  "input": "https://www.facebook.com/ads/library/?id=702369045530963",
  "adArchiveId": "702369045530963",
  "adLibraryUrl": "https://www.facebook.com/ads/library?id=702369045530963",
  "pageId": "166258896830103",
  "pageName": "Porto Montenegro",
  "pageUrl": "https://www.facebook.com/61575286107814/",
  "pageCategories": [
    "Marina"
  ],
  "isActive": false,
  "startDate": "2025-05-22T07:00:00.000Z",
  "endDate": "2025-05-23T07:00:00.000Z",
  "totalActiveTimeSecs": 41782,
  "platforms": [
    "facebook",
    "instagram",
    "audience_network"
  ],
  "adText": "Reflections ripple, light gathers,\nand tomorrow brings a new rhythm to the square.\n\nOne day until the Grand Opening of Boka Place.",
  "headline": null,
  "linkUrl": "https://www.portomontenegro.com/attractions-events/boka-place-grand-opening/",
  "displayUrl": "www.portomontenegro.com",
  "ctaText": "Learn more",
  "ctaType": "LEARN_MORE",
  "mediaType": "video",
  "videoUrls": [
    "https://video.xx.fbcdn.net/…hd.mp4"
  ],
  "thumbnailUrl": "https://scontent.xx.fbcdn.net/…jpg",
  "targetsEu": true,
  "euTotalReach": 1657,
  "audienceAgeMin": 18,
  "audienceAgeMax": 65,
  "audienceGender": "All",
  "audienceLocations": [
    "Dubrovnik, Croatia"
  ],
  "payers": [
    "Porto Montenegro"
  ],
  "beneficiaries": [
    "Porto Montenegro"
  ],
  "reachBreakdown": [
    {
      "country": "HR",
      "ageRange": "25-34",
      "male": 374,
      "female": 238,
      "unknown": 8
    }
  ],
  "transcript": "One day until the grand opening of Boka Place…",
  "transcriptCharged": true,
  "status": "ok",
  "charged": true,
  "chargedEvent": "facebook-ad-looked-up",
  "source": "scrapecreators",
  "fetchedAt": "2026-10-14T10:00:00.000Z"
}

Machine-readable

This page for agents