Ad Library Scraper — Advertisers, Creatives & Ad Links avatar

Ad Library Scraper — Advertisers, Creatives & Ad Links

Pricing

from $1.80 / 1,000 ad creatives

Go to Apify Store
Ad Library Scraper — Advertisers, Creatives & Ad Links

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

Apivault Labs

Maintained by Community

Actor stats

0

Bookmarked

11

Total users

1

Monthly active users

15 days ago

Last modified

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.

WorkflowStart withReview in the export
Inspect a known websitedomains in competitor modeSource domain match, actual advertiser and resolution method
Review an exact Google identityadvertiserIdsCreative/advertiser IDs and source links
Explore a niche samplediscovery mode and small limitsKeyword-derived provenance, not verified brand ownership
Add Meta or TikTok pathsExplicit includeMeta/includeTikTokSource/region availability and free status rows
Keep a creative worksheetIDs, source dates, copy/media when availableExpiring 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 ActorTypical ad scrapers
Platforms in one runMeta + Google + YouTube + TikTokOne platform
Search modesExact competitor + keyword/product discoveryUsually one input type
InputDomain, brand, keyword, advertiser ID or FB Page IDAdvertiser ID only
MediaPlayable videos & images, optional copies in run storageExpiring raw links
Winning signaldaysRunning when source dates support itNot available
Empty resultsFree status row explains why (no ads / no match / error)Silent zero
You're chargedOnly for ads actually deliveredOften 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, matchSignals and searchQuery so 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 daysRunning where available; duration does not establish sales or scaling.
  • Fresh-launch alerts — set startedWithinDays: 7 to 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

FieldTypeDescription
modestringcompetitor for exact-brand matching; discovery for niche/product keyword search
domainsarrayCompetitor domains (e.g. nike.com)
searchQueryarrayBrand names or discovery keywords
advertiserIdsarrayExact Google advertiser IDs (AR…)
metaPageIdsarrayExact Facebook Page IDs
regionstringCountry code (US, GB, DE…) or empty for anywhere
startedWithinDaysintOnly ads launched in the last N days (0 = all)
maxAdvertisersintGoogle advertisers per discovery keyword (default 5)
maxItemsintMax ads per advertiser/source query (default 1000; set an explicit small cap)
includeMetaboolFacebook & Instagram ads (default false)
includeTikTokboolOptional TikTok transparency path (default false); current source region coverage varies
includeAdvertiserInfoboolVerified advertiser name + country
rehostGoogleVideos / rehostMetaMedia / rehostTikTokMediaboolOptional run-storage media copies; switches default true, set false explicitly for small first runs
maxRehostVideosintMax media files to save per run (default 0)
maxConcurrencyintParallel 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" with maxAdvertisers: 3–5.
  • US-only request → set region: "US"; TikTok returns a free region_unsupported status 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: true are free diagnostics, not ads. Inspect status and detail; retry only fetch_failed. Do not retry no_ads, no_advertiser_found, no_confirmed_match or region_unsupported unchanged.

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-library in 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.