Ad Library Scraper — Advertisers, Creatives & Ad Links
Pricing
from $1.80 / 1,000 ad creatives
Ad Library Scraper — Advertisers, Creatives & Ad Links
Collect supported Facebook, Meta, TikTok and Google ads; inspect creatives and advertisers. No login. Bulk export: JSON, CSV, Excel and API. PPE: from $1.8/1K ad creatives; usage extra.
Pricing
from $1.80 / 1,000 ad creatives
Rating
0.0
(0)
Developer
Apivault Labs
Maintained by CommunityActor stats
0
Bookmarked
11
Total users
1
Monthly active users
15 days ago
Last modified
Categories
Share
Ad Library Scraper — Facebook, Instagram, TikTok & Google Ads
Search public ad libraries across Facebook, Instagram, TikTok, Google and YouTube. Track one exact competitor or switch to keyword discovery to find ads from multiple advertisers in a niche. Get creatives, copy, landing pages and days-running signals in one normalized dataset.
Built for ecommerce, Shopify, dropshipping and DTC product research. Build a dated creative-reference sample before planning your own tests. Source observations do not establish which products are profitable or being scaled.
✅ No login. No cookies. No API keys. No browser extensions. Fast, bulk, pay-per-result — from $1.80/1K ads. Export CSV, JSON, Excel or via API/webhooks.
Creative-reference research for agencies and ecommerce teams
Use this Ad Library Scraper to build an observed reference set from the supported public transparency paths. A marketer can review a known domain, an agency can inspect source advertiser identities, and a researcher can compare hooks and landing pages that are actually supplied. Ad duration, creative count and a familiar brand name do not establish revenue, spend, conversion rate or profit.
| Workflow | Start with | Review in the export |
|---|---|---|
| Inspect a known website | domains in competitor mode | Source domain match, actual advertiser and resolution method |
| Review an exact Google identity | advertiserIds | Creative/advertiser IDs and source links |
| Explore a niche sample | discovery mode and small limits | Keyword-derived provenance, not verified brand ownership |
| Add Meta or TikTok paths | Explicit includeMeta/includeTikTok | Source/region availability and free status rows |
| Keep a creative worksheet | IDs, source dates, copy/media when available | Expiring media and incomplete field coverage |
For a first request, explicitly disable unnecessary platform paths and media rehosting. maxItems applies per selector/source path, not as a single global multi-platform row ceiling. Use the run event-charge limit to bound the first collection.
🚀 Why this one
| This Actor | Typical ad scrapers | |
|---|---|---|
| Platforms in one run | Meta + Google + YouTube + TikTok | One platform |
| Search modes | Exact competitor + keyword/product discovery | Usually one input type |
| Input | Domain, brand, keyword, advertiser ID or FB Page ID | Advertiser ID only |
| Media | Playable videos & images, optional copies in run storage | Expiring raw links |
| Winning signal | daysRunning when source dates support it | Not available |
| Empty results | Free status row explains why (no ads / no match / error) | Silent zero |
| You're charged | Only for ads actually delivered | Often per run |
🎯 What you get per ad
- The creative — image or video, playable right in the results table. Optional copies follow run-storage access and retention; indefinite availability is not guaranteed.
- The offer — headline, ad copy, CTA, sitelinks.
- The destination — landing page URL and domain (Google & Meta).
- The timing — first shown, last shown, and
daysRunning: an observed source-date interval, not proof of continuous delivery or profitability. - The reach — placements (Facebook / Instagram / Messenger / Threads), TikTok impressions & audience size.
- The provenance — competitor mode verifies the store domain/page name;
discovery mode labels keyword-derived rows. Both expose
matchConfidence,matchSignalsandsearchQueryso downstream systems can audit the match.
Results are organized into six focused views: Ads overview, Creatives & media, Winning signals, Copy & offer, Landing pages, and Run status.
Quick start
Track an exact competitor
{"mode": "competitor","domains": ["gymshark.com"],"region": "US","maxItems": 20}
Omit region to search worldwide. Google and Meta search all countries, while
TikTok sweeps the countries available in its public transparency library.
Without a domain, you can request a brand-name match; review its source identity and match evidence:
{ "mode": "competitor", "searchQuery": ["Gymshark"], "region": "US", "maxItems": 20 }
Google domain lookup and bulk result limits
Google domain inputs now use the Ads Transparency domain filter directly. A domain such as nike.com is not resolved by taking the first similar advertiser-name suggestion. A source-filtered domain result is labelled resolutionMethod: "google_domain_filter" and matchSignals: ["google_domain_filter"]; this records Google's search selection, not independent proof of advertiser ownership.
For a bounded Google-only check:
{"domains": ["nike.com"],"maxItems": 30,"includeMeta": false,"includeTikTok": false,"includeAdvertiserInfo": false,"rehostGoogleVideos": false}
The Actor checks each creative's source targetDomain against the requested domain (including its subdomains), follows source page tokens and deduplicates creatives. Missing or mismatching target domains are not delivered as paid domain matches. maxItems limits each Google input selector (a domain or advertiser); it does not guarantee that many available ads. A domain may match multiple advertisers in the source. Use advertiserIds when you require a specific Google advertiser. The searchQuery path still uses advertiser-name suggestions; do not treat its first result as confirmed domain ownership.
SUMMARY.googleSources records page count, collected count and stopReason for each Google selector. MAX_ITEMS means the requested cap was reached; SOURCE_EXHAUSTED means the source returned no continuation; SOURCE_UNAVAILABLE or REPEATED_PAGE_TOKEN means partial collection. Earlier useful creatives survive a later source failure. Free rows marked _status: true describe failures or empty sources and do not incur creative events. coverageComplete stays false: bounded source results are not an exhaustive archive. Explicit advertiser-ID lookup, Meta and TikTok keep their existing paths.
Discover products, niches and offers
{"mode": "discovery","searchQuery": ["posture corrector", "skincare bundle"],"region": "US","maxAdvertisers": 5,"maxItems": 30}
Discovery mode inspects several matching Google advertisers and accepts the platform libraries' keyword results on Meta and TikTok. Competitor mode keeps strict brand matching to reduce unrelated ads.
💡 Use cases
- Creative duration research — compare
daysRunningwhere available; duration does not establish sales or scaling. - Fresh-launch alerts — set
startedWithinDays: 7to see only what competitors launched this week. - Creative swipe file — save available media copies for review, subject to retention; performance is not measured.
- Landing-page teardown — collect where every ad sends traffic and study the funnels.
- Agency audits — a bounded observed creative sample for a reviewed advertiser or domain.
⚙️ Input
| Field | Type | Description |
|---|---|---|
mode | string | competitor for exact-brand matching; discovery for niche/product keyword search |
domains | array | Competitor domains (e.g. nike.com) |
searchQuery | array | Brand names or discovery keywords |
advertiserIds | array | Exact Google advertiser IDs (AR…) |
metaPageIds | array | Exact Facebook Page IDs |
region | string | Country code (US, GB, DE…) or empty for anywhere |
startedWithinDays | int | Only ads launched in the last N days (0 = all) |
maxAdvertisers | int | Google advertisers per discovery keyword (default 5) |
maxItems | int | Max ads per advertiser/source query (default 1000; set an explicit small cap) |
includeMeta | bool | Facebook & Instagram ads (default false) |
includeTikTok | bool | Optional TikTok transparency path (default false); current source region coverage varies |
includeAdvertiserInfo | bool | Verified advertiser name + country |
rehostGoogleVideos / rehostMetaMedia / rehostTikTokMedia | bool | Optional run-storage media copies; switches default true, set false explicitly for small first runs |
maxRehostVideos | int | Max media files to save per run (default 0) |
maxConcurrency | int | Parallel competitors (default 2, benchmarked) |
💰 Pricing
Pay per result — only for ads actually delivered to your dataset:
- $1.80 per 1,000 ads on any paid Apify plan
- $5.00 per 1,000 ads on the Free plan
- Status rows (explaining why a competitor has no ads) are always free
Cap any run's spend with Max total charge in the run options — the actor stops cleanly at your budget and keeps everything already delivered.
❓ FAQ
Where does the data come from? The platforms' own public ad-transparency libraries — the same pages anyone can browse, returned structured and in bulk.
Which regions does TikTok cover? This Actor's TikTok transparency path is designed for its documented EU/EEA, UK, Switzerland and Türkiye scope. US TikTok collection is unsupported by this path. Meta/Google source access and region coverage still vary; this does not assert that every ad exists in every region.
Do TikTok ads include landing pages? TikTok doesn't publish destination URLs, so TikTok ads are matched by advertiser name and carry the video, dates, impressions and audience size instead of a landing link.
How fresh is the data? Each run requests source observations. Library caching, access and update latency are not independently verified; source dates do not prove current continuous delivery.
Do I need a Facebook/Google/TikTok account? No. Nothing to connect, nothing to configure.
MCP and AI agents
Use this Actor when an agent needs structured public ad intelligence rather than
general web search. Prefer a small maxItems (10–30) for interactive calls.
Decision rules:
- Known store, brand or Page ID →
mode: "competitor". - Product, niche, hook or offer →
mode: "discovery"withmaxAdvertisers: 3–5. - US-only request → set
region: "US"; TikTok returns a freeregion_unsupportedstatus row because its public library does not cover US ads. - Enable media rehosting only when a run-storage copy is needed, and manage long-term retention yourself.
- Rows with
_status: trueare free diagnostics, not ads. Inspectstatusanddetail; retry onlyfetch_failed. Do not retryno_ads,no_advertiser_found,no_confirmed_matchorregion_unsupportedunchanged.
Example agent prompt:
Find active skincare offer ads in the US, return 20 rows, rank by daysRunning, and summarize recurring hooks and landing-page domains.⚖️ Use responsibly
This tool structures publicly available advertising transparency data. It is not affiliated with or endorsed by Meta, Google or TikTok. Use the data in line with applicable laws and platform terms.
Small ad-reference collection inputs
These examples focus on one selector and a small return cap. They do not establish complete platform coverage, current ad activity or commercial performance. Keep advertiser/source identity even when a domain or brand initiated the lookup.
Two Google domain-filtered creatives
{"mode": "competitor","domains": ["nike.com"],"maxItems": 2,"includeMeta": false,"includeTikTok": false,"includeAdvertiserInfo": false,"rehostGoogleVideos": false,"rehostMetaMedia": false,"rehostTikTokMedia": false,"maxRehostVideos": 0}
This uses the supported Google domain filter and actual targetDomain matching. A domain can have multiple source advertisers. The returned association does not independently verify who owns the brand or domain.
Use an explicit Google advertiser ID
{"advertiserIds": ["AR16735076323512287233"],"maxItems": 2,"includeMeta": false,"includeTikTok": false,"includeAdvertiserInfo": true,"rehostGoogleVideos": false,"maxRehostVideos": 0}
Prefer a confirmed source ID when that identity is the question. Optional advertiser enrichment and media fields can remain unavailable; a useful core creative can still be paid.
Keep a bounded advertiser-name discovery sample
{"mode": "discovery","searchQuery": ["skincare"],"maxAdvertisers": 1,"maxItems": 2,"includeMeta": false,"includeTikTok": false,"rehostGoogleVideos": false,"maxRehostVideos": 0}
The Google path resolves advertiser-name suggestions. It is not exhaustive full-text ad-copy search for every skincare offer. Review matchSignals/searchQuery and the actual advertiser before attaching the result to a brand.
Inspect a recent source-date subset
{"mode": "competitor","domains": ["nike.com"],"startedWithinDays": 7,"maxItems": 2,"includeMeta": false,"includeTikTok": false,"rehostGoogleVideos": false,"maxRehostVideos": 0}
This filter uses available source timing. A missing or differently reported source date is not proof that an ad was launched or stopped in the real world. The observed duration is not evidence that a campaign is profitable.
Preserve evidence in an ad research worksheet
Keep platform, creative/advertiser IDs, source URL, resolutionMethod, matchSignals and searchQuery where supplied. A domain-filter match, a brand-name heuristic and a keyword-derived row have different provenance. Do not silently merge them into a list of verified competitor-owned ads. Source previews/copy and placements are conditional fields, not a guaranteed schema-completeness promise.
daysRunning is derived from available source dates. It does not measure uninterrupted delivery, current budget, impressions purchased or return on ad spend. An old visible creative can be paused, retained by a library or associated with a test; the Actor cannot infer that it makes money. Use duration as an observation for creative research and verify performance through data you legitimately control.
Rehosting copies media into run storage subject to source availability, file limits, account access and retention. It does not create a permanent archive or a link that lives forever. Rehosting can add requests, time and storage cost. Copy approved files into your own managed storage if your workflow needs long-term retention; a media copy does not grant reuse rights.
Separate rows marked _status=true from paid creative records. A no-confirmed-match/source-error/unsupported-region diagnostic must not become another ad in a dashboard. Google SUMMARY.googleSources discloses pages, counts and stopReason for each selector. MAX_ITEMS is a deliberate cap, not source exhaustion; coverageComplete=false does not become true because the run status is green.
Ad Library API questions
Does a long-running ad identify a winning product? No. The source dates do not reveal profitability, sales or scaling decisions. They are a reference signal, not a financial-performance measurement.
Are media copies permanent? No. Download/rehosting success and retention are separate. Run storage follows its configured lifecycle, and source links can expire or become unavailable. This documentation makes no indefinite-hosting promise.
Are all platforms enabled by default? In the current schema, includeMeta and includeTikTok default false. Rehosting switches default true, but the media count cap can constrain saved files; set the flags explicitly for the desired workflow. The examples turn rehosting off for a smaller first check.
What does it cost? One delivered creative is $0.005 on FREE or $0.0018 on paid tiers, with no active start event. Two paid-tier creatives have $0.0036 in event fees before separately paid platform usage. Free status rows do not add creative events. The platform event cap does not cover all separate resource usage.
Does a platform selection guarantee source access? No. Access, geography, library coverage and available fields vary independently by path. A source restriction is not proof that an advertiser has no ads. Keep status rows and stop reasons with the export and avoid unchanged retries of known terminal failures.
Can an agent use the existing integrations? Yes, use the matched API/n8n/Python paths below, poll the returned run and read its actual Dataset and SUMMARY. Ask for observed creatives and limitations; do not ask it to invent missing performance, copy or ownership evidence.
n8n and developer integrations
Use this Actor in your automation or application with the existing community integrations below. An Apify account and API token are required; Actor and platform charges follow the current pricing.
- n8n community node: n8n-nodes-apivault-ad-library. Install package name
n8n-nodes-apivault-ad-libraryin a self-hosted n8n instance that permits community packages. - Python client and examples: GitHub.
- n8n source and usage: GitHub.
These are community packages. Publication on npm does not establish n8n verification or availability in n8n Cloud. Review the linked package README for supported inputs and setup.