Apify actor · whoareyouanas/meta-ad-lite-scraper
Meta (Facebook) Ad Library Scraper - Modern, Fast & Reliable
Export unique Facebook and Instagram ads from Meta Ad Library using a keyword, advertiser Page ID, or supported search URL. Choose an explicit ad limit and review copy, CTAs, formats, dates, and source-hosted media links.
Documentation checked 2026-10-29 · deployed build 0.1.15 · run through your Apify account
01 / Overview
Match the actor to the job.
One focused search
Use one keyword, Page ID, or direct search URL per run.
Bound the ad sample
Set maxAds rather than relying on Meta's approximate displayed result count.
Keep creative structure
Review image, video, carousel, and dynamic creative fields in JSON or dataset exports.
02 / Input
Start with a clear, bounded input.
Provide targetUrl, searchQuery, or pageId with the appropriate country/status/media filters. maxAds controls the requested unique-ad limit. The proxy setting has its own cost and coverage implications.
{
"searchQuery": "dinosaur",
"country": "US",
"activeStatus": "active",
"maxAds": 10
}Replace example targets and credential placeholders before running. These are documentation examples, not a promise of currently available source results.
| Field | Type / required | Default | Purpose |
|---|---|---|---|
| targetUrl | string | Not specified | Search URL takes precedence over Page ID and keyword, including the example keyword. URL filters take precedence over form defaults. Single-ad URLs are not supported. |
| searchQuery | string | Not specified | Search public ads by keyword. The example searches nike. A URL or Page ID takes precedence when provided. |
| pageId | string | Not specified | Numeric advertiser Page ID. Takes precedence over the keyword example. A search URL takes precedence over this field. |
| country | string | "US" | Two-letter country code or ALL. Used for keyword/Page ID searches. |
| activeStatus | string | "active" | Filter by status. Applies to keyword/Page ID searches. Options: active, inactive, all |
| maxAds | integer | 100 | Maximum unique ads delivered in this run. Scraping may stop earlier when results end or the run budget is reached. Minimum: 1 · Maximum: 10000 |
All other input controls (2)
| Field | Type / required | Default | Purpose |
|---|---|---|---|
| mediaType | string | "all" | Filter by media type. Applies to keyword/Page ID searches. Options: all, image, video, meme, none |
| proxyConfiguration | object | {"useApifyProxy":true,"apifyProxyGroups":["RESIDENTIAL"]} | Residential proxies are enabled by default for reliable public Meta requests, including the one-ad example. Disable explicitly for a direct connection. Custom proxy charges depend on your provider. |
03 / Output
Know what each returned row represents.
- Rows include ad identity, advertiser, copy, CTA, media references, status, dates, platforms, and adLibraryUrl.
- Unknown status, dates, counts, and durations can be null. A carousel does not by itself establish multiple ad versions.
{
"libraryID": "example-ad-id",
"brand": "Example Brand",
"pageId": "example-page-id",
"active": null,
"body": "Illustrative ad copy",
"format": "image",
"platforms": [
"Facebook",
"Instagram"
],
"images": [
{
"url": "https://example.com/creative.jpg"
}
],
"videos": [],
"adLibraryUrl": "https://www.facebook.com/ads/library/?id=example-ad-id"
}Example values illustrate the published contract. Available fields and populated values depend on the source, mode, and result status.
Fields in the documented output view
libraryID
Ad ID
brand
Advertiser
pageId
pageId
active
active
body
Ad copy
linkTitle
linkTitle
ctaText
ctaText
linkUrl
Landing page
format
format
platforms
platforms
startDate
startDate
endDate
endDate
images
images
videos
videos
adLibraryUrl
View ad
Output views select columns. They do not necessarily filter record types or exhaust the full JSON payload. Use structured JSON when you need nested arrays or objects.
Dataset links and run artifacts (2)
- Ads
- Available through the actor's Output tab for your run.
- Run summary
- Available through the actor's Output tab for your run.
04 / Pricing
Understand the billable unit.
These are the active public event prices checked on 2026-10-29, in USD. They describe each event, not a universal flat price for a run. Confirm your current Apify plan and run budget before starting.
| Billable event | Rate (USD) | When it applies |
|---|---|---|
result apify-default-dataset-item | $0.004 / event | Single result in the default dataset. $4.00 per 1,000 of this event. Other events and separate services are additional. |
- This configuration currently lists the dataset-result event without an actor-start event. Do not add another actor's startup assumptions.
- Check the live Pricing tab and your proxy settings before scaling; custom proxy providers can bill separately.
A result limit and a spending cap are different controls. Account charges, applicable taxes, and separately billed providers or proxies must be considered where relevant. A cap setting is not a minimum invoice charge.
05 / API & automation
Use the same input from your workflow.
Test a small run in Apify Console, inspect its records and charges, then save a task or call the actor from your own application. Keep your Apify token in an environment variable. Source-specific credentials, if required, are separate from the Apify API token.
# Save the input example as input.json and set APIFY_TOKEN.
# This request starts an asynchronous, potentially billable run.
curl --request POST \
'https://api.apify.com/v2/acts/whoareyouanas~meta-ad-lite-scraper/runs' \
--header "Authorization: Bearer $APIFY_TOKEN" \
--header 'Content-Type: application/json' \
--data @input.jsonThe response identifies the run. Wait for it to finish, inspect its status, and use its default dataset and key-value store to retrieve results. A successful run can still contain partial or failed records; check the output contract above before continuing downstream.
Coverage & interpretation
Check the result before relying on it.
- No date-range enrichment, spend, reach, or ROAS is inferred from creative records.
- Meta media URLs can expire. One search is not guaranteed to expose every ad or match its approximate result total.
Questions
Before you build an integration.
What do I need to provide?
Provide targetUrl, searchQuery, or pageId with the appropriate country/status/media filters. maxAds controls the requested unique-ad limit. The proxy setting has its own cost and coverage implications.
What should I check in the output?
- Rows include ad identity, advertiser, copy, CTA, media references, status, dates, platforms, and adLibraryUrl.
- Unknown status, dates, counts, and durations can be null. A carousel does not by itself establish multiple ad versions.
How do I budget the run?
- This configuration currently lists the dataset-result event without an actor-start event. Do not add another actor's startup assumptions.
- Check the live Pricing tab and your proxy settings before scaling; custom proxy providers can bill separately.
Keep exploring