Operated by Sourcelane✓ verified
Scrapes the Meta (Facebook & Instagram) Ad Library to retrieve every matching ad for keywords, advertiser pages, or Ad Library URLs and returns one record per ad containing publisher identity and page metadata, active/inactive status and run dates, ad copy elements (headlines, body text, captions, call-to-action text and types, landing page URLs), creative assets (image and video CDN URLs, HD/SD video links, preview images, carousel cards, display format), distribution metadata (publisher platforms and variant counts), timing metrics (total active time and run duration), and political/issue ad attributes (spend ranges, currency, reach estimates, impressions ranges, disclaimers and bylines). Technical features include direct scraping of the public Ad Library without login or a developer account, support for queries by keyword, advertiser page or Ad Library URL (with URL-embedded filters honored), country/platform/media/status/language/date filtering, pagination through large result sets reported by the Ad Library, and generation of signed creative URLs that expire after a short period.
Verified Sep 28, 3:55 AM
$0.0008
per ad
Up to 100 per call. Only pay for results returned; failed calls are refunded.
| Window | Uptime | Success rate | p50 | p95 | Calls |
|---|---|---|---|---|---|
| 24h | — | — | — | — | 0 |
| 7d | — | — | — | — | 0 |
| 30d | — | — | — | — | 0 |
Call it through Sourcelane's gateway or MCP server. We run the connector, apply your agent's spend guardrails, and bill only the results returned.
Call it via Sourcelane
curl -X POST https://api.usesourcelane.com/v1/call \
-H "Authorization: Bearer sl_live_your_agent_key" \
-H "Content-Type: application/json" \
-d '{"listing":"meta-ad-library-scraper","params":{"keywords":["lululemon"],"maxAdsPerQuery":5},"maxResults":10}'Request params
| Field | Type | Required | Description |
|---|---|---|---|
keywords | array | optional | Search the Ad Library by keyword or phrase (e.g. 'protein powder', 'lululemon'). Each keyword is a separate search. |
pageIds | array | optional | Numeric Facebook page IDs to pull every ad from (find it in the Ad Library URL as view_all_page_id=...). Use this to scrape all ads for a specific competitor. |
adLibraryUrls | array | optional | Paste full facebook.com/ads/library URLs. Keyword (q=), page (view_all_page_id=), country, status, media type and date filters embedded in the URL are honoured. |
country | string | optional | 2-letter country code the ads were shown in (US, GB, AU, DE,...) or ALL for worldwide. |
adActiveStatus | string | optional | Only currently running ads, only ended ads, or both. |
mediaType | string | optional | Filter by creative format. 'Meme' is Meta's name for image ads with text overlaid. |
adType | string | optional | All ads, or only political and social-issue ads (these include spend and impression ranges). |
searchType | string | optional | How keywords are matched against ad text (keyword searches only). |
sortBy | string | optional | Order results by estimated impressions (most-seen ads first) or by most recent. |
language | string | optional | Optional 2-letter language code to filter ad text (EN, ES, FR, DE,...). Leave empty for all languages. |
startDate | string | optional | Only ads that started running on or after this date, YYYY-MM-DD. Leave empty for no lower bound. |
endDate | string | optional | Only ads that started running on or before this date, YYYY-MM-DD. Leave empty for no upper bound. |
maxAdsPerQuery | integer | optional | Maximum ads to return for each keyword, page ID or URL. Set 0 for no limit (the connector pages through the whole result set). Capped at 100 per call. |
Each result contains
| Field | Type | Description |
|---|---|---|
query | string | Query |
queryType | string | Query Type |
adArchiveId | string | Ad Archive Id |
adLibraryUrl | string | Ad Library Url |
isActive | boolean | Is Active |
startDate | string | Start Date |
endDate | string | End Date |
totalActiveTimeSeconds | null | Total Active Time Seconds |
pageId | string | Page Id |
pageName | string | Page Name |
pageProfileUrl | string | Page Profile Url |
pageProfilePictureUrl | string | Page Profile Picture Url |
pageLikeCount | integer | — |
pageCategories | array | — |
publisherPlatforms | array | — |
displayFormat | string | — |
title | null | — |
body | string | — |
caption | string | — |
linkUrl | string | — |
linkDescription | null | — |
ctaText | string | — |
ctaType | string | — |
images | array | — |
videos | array | — |
cards | array | — |
extraTexts | array | — |
extraLinks | array | — |
collationCount | integer | — |
collationId | string | — |
spend | null | — |
currency | null | — |
reachEstimate | null | — |
impressions | null | — |
countryIsoCode | null | — |
disclaimer | null | — |
byline | null | — |
instagramActorName | null | — |
isAaaEligible | boolean | — |
scrapedAt | string | — |
Pick your tool and connect in under a minute. Then just ask — for example: “What ads is Shein running right now on Meta and Google? Group them by offer.”
Connect Claude
Web, desktop and mobile. Paste one URL.
Adds the Sourcelane MCP server with your key as a header.
claude mcp add --transport http sourcelane https://api.usesourcelane.com/mcp \
--header "Authorization: Bearer sl_live_your_agent_key"Alternative to the connector URL: add to claude_desktop_config.json, then restart Claude.
{
"mcpServers": {
"sourcelane": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.usesourcelane.com/mcp",
"--header",
"Authorization:${AUTH_HEADER}"
],
"env": {
"AUTH_HEADER": "Bearer sl_live_your_agent_key"
}
}
}
}Add to ~/.cursor/mcp.json (or Windsurf's mcp_config.json).
{
"mcpServers": {
"sourcelane": {
"url": "https://api.usesourcelane.com/mcp",
"headers": {
"Authorization": "Bearer sl_live_your_agent_key"
}
}
}
}Save as .vscode/mcp.json. VS Code prompts for your key once.
{
"servers": {
"sourcelane": {
"type": "http",
"url": "https://api.usesourcelane.com/mcp",
"headers": {
"Authorization": "Bearer ${input:sourcelane-key}"
}
}
},
"inputs": [
{
"type": "promptString",
"id": "sourcelane-key",
"description": "Sourcelane agent key",
"password": true
}
]
}Create a GPT → Actions → Import from URL, then Authentication: API Key, Bearer.
https://usesourcelane.com/openapi.jsonOne POST. Pass maxResults to cap cost.
curl -X POST https://api.usesourcelane.com/v1/call \
-H "Authorization: Bearer sl_live_your_agent_key" \
-H "Content-Type: application/json" \
-d '{"listing":"meta-ad-library-scraper","params":{"keywords":["lululemon"],"maxAdsPerQuery":5},"maxResults":10}'Wrap the REST call as a tool, or point an MCP client at the endpoint.
import requests
res = requests.post(
"https://api.usesourcelane.com/v1/call",
headers={"Authorization": "Bearer sl_live_your_agent_key"},
json={
"listing": "meta-ad-library-scraper",
"params": {"keywords":["lululemon"],"maxAdsPerQuery":5},
"maxResults": 10,
},
timeout=300,
)
body = res.json()
print(body["receipt"]["chargedMicros"], "micro-USD for", body["receipt"]["results"], "results")
print(body["data"])—
0 reviews
Leave a review
Loading reviews…