Ad Library Scraper — Google, Meta & LinkedIn avatar

Ad Library Scraper — Google, Meta & LinkedIn

Pricing

from $12.00 / 1,000 results

Go to Apify Store
Ad Library Scraper — Google, Meta & LinkedIn

Ad Library Scraper — Google, Meta & LinkedIn

Scrape ads from the Google Ads Transparency Center, Meta Ad Library (Facebook and Instagram) and LinkedIn Ad Library in one run. Find competitor ads by keyword, brand or domain and get ad copy, creatives, images, video URLs, impressions and run dates. Export to JSON, CSV or Excel.

Pricing

from $12.00 / 1,000 results

Rating

0.0

(0)

Developer

Mediocre_Interest

Mediocre_Interest

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

a day ago

Last modified

Share

Ad Library Scraper lets you scrape ads from the Google Ads Transparency Center, the Meta Ad Library (Facebook and Instagram) and the LinkedIn Ad Library in a single run, and returns everything in one consistent dataset. Search competitor ads by keyword, brand name or domain, or paste ad library URLs directly, then export to JSON, CSV or Excel.

No login, no API keys and no ad account. Every ad in these three libraries is published by the platforms themselves for transparency — this Actor just makes all of it queryable in one place.

What does the Ad Library Scraper do?

Most ad scrapers cover one platform. This one covers three, and normalizes them into a single row shape so you can compare a brand's Facebook creative against its Google search ads and its LinkedIn campaigns without writing any glue code.

  • 🔍 Competitor ad research — see exactly what a brand is running today and how long each ad has been live
  • 🖼️ Ad creative extraction — ad copy, headlines, images, video URLs and destination links
  • 📊 Category monitoring — search one keyword across three ad libraries in one run
  • 🌍 Country comparison — filter by market and see where a campaign is actually delivering
  • 💡 Swipe files — export creative and copy for inspiration or analysis
  • 📈 Dashboards and alerts — schedule runs and push results into your own tooling

What ad data can you extract?

Google Ads Transparency CenterMeta Ad LibraryLinkedIn Ad Library
Search by keywordmatches advertisers/domains✅ searches ad copy✅ searches ad copy
Search by advertiser
Search by domain✅ native filterkeyword matchkeyword match
Ad copy & headline
Images✅ most ads
Video URLsbrowser preview link✅ direct URLs
Destination URL✅ most ads
First / last shown datessome ads
Impressionspolitical ads onlysome ads (as a range)
Country delivery splitsome ads

The table above is what these platforms actually publish, not what we wish they published. Google's Transparency Center is metadata-first: you get the advertiser, the dates, the archived creative image and a link to the ad, but Google does not publish ad text over the wire. Meta is the richest source for ad copy and media. LinkedIn is the only one of the three that publishes a per-country delivery split alongside an impressions range for ordinary commercial ads rather than just political ones — though only for a minority of them (roughly 10–20% in our sampling).

Who is it for?

  • Performance marketers running competitor teardowns before a launch.
  • Agencies building pitch decks that need real creative from a prospect's category.
  • Growth and SEO teams tracking which messages a rival is putting money behind.
  • Market researchers sizing how crowded a category is.
  • Developers who want ad library data behind a plain HTTP API instead of three different scraping projects.

How to scrape ads: step by step

  1. Click Try for free to open the Actor.
  2. Choose your platforms — Google, Meta, LinkedIn, or all three.
  3. Add what you want to search: search terms, advertisers, domains, or paste direct URLs from any of the three ad libraries.
  4. Set max ads per query to control the size of the run.
  5. Pick your countries (defaults to US).
  6. Click Start and watch results appear in the dataset tab.
  7. Export as JSON, CSV, Excel, or pull them through the Apify API.

To run it on a schedule, open the Schedules tab and pick a cadence — daily competitor monitoring is the most common setup.

How to scrape Google ads from the Ads Transparency Center

Google's Ads Transparency Center indexes ads by advertiser, not by ad text, so the way you ask matters more here than on the other two platforms.

The most reliable route is a domain. Put nike.com in domains and the Actor queries Google's native domain filter and goes straight to the verified advertiser. Searching the brand name instead goes through Google's suggestion endpoint, which ranks by spelling similarity — a search for Nike can surface nikey and Nikesh above Nike, Inc. The Actor re-ranks whole-word matches to the top to compensate, but a domain is still the sharper tool.

You can also paste a Transparency Center advertiser URL (https://adstransparency.google.com/advertiser/AR…) into startUrls, or pass the bare AR… advertiser ID in advertisers for an exact match.

Each Google row carries the advertiser, first and last shown dates, the archived creative image and a direct link to view the ad. Google's own region filter applies, so an advertiser with no ads in your selected countries returns nothing even if it advertises heavily elsewhere — the run log tells you when that happens.

How to scrape Facebook and Instagram ads from the Meta Ad Library

Meta is the richest of the three for creative work. Its Ad Library searches actual ad copy, so keyword searches behave the way you would expect, and each row comes back with the headline, body copy, call-to-action text, the destination URL, image URLs and direct video URLs — plus which surfaces the ad ran on (FACEBOOK, INSTAGRAM, AUDIENCE_NETWORK, MESSENGER).

Search a brand with advertisers, a topic with searchTerms, or a numeric Facebook page ID for an exact page match. Meta has no domain filter, so a domain is searched as a keyword there.

Meta runs need residential proxies — see the proxy section below. Meta blocks datacenter IP ranges outright.

How to scrape LinkedIn ads from the LinkedIn Ad Library

LinkedIn is the best source for B2B ad research, and the only platform here that publishes a per-country delivery breakdown for ordinary commercial ads.

The Actor searches by keyword, by LinkedIn company ID, or by account owner name, then opens each ad's detail page to collect the full untruncated ad copy, the creative images, the destination URL, the run dates, an impressions range like 1k-5k and the country percentage split. That detail pass is what makes LinkedIn rows rich, and it costs roughly one request per ad — set linkedinFetchDetails to false for a faster, cheaper, shallower pass that reads the search cards only.

LinkedIn matches multi-word phrases loosely, so single specific keywords work far better here: cybersecurity returns much sharper results than enterprise cybersecurity software.

Input example

{
"platforms": ["google", "meta", "linkedin"],
"domains": ["nike.com"],
"searchTerms": ["running shoes"],
"countries": ["US"],
"maxAdsPerQuery": 100,
"matchMode": "phrase",
"filterIrrelevant": true
}

Input options

What to scrape

FieldDescription
platformsWhich ad libraries to search: google, meta, linkedin
searchTermsKeywords to search for
advertisersBrand names, Google advertiser IDs, Meta page IDs or LinkedIn company IDs
domainsAdvertiser websites, e.g. nike.com — the most reliable way to find a specific brand
startUrlsPaste ad library URLs to scrape directly

Relevance and filters

FieldDescription
matchModephrase (default, precise) or broad (more results, noisier)
filterIrrelevantDrop ads that don't actually mention your search terms. On by default
countriesISO-2 country codes, e.g. ["US", "GB"]
dateFrom / dateToLimit to ads delivered in a date range

Per-platform settings

FieldDescription
googleMaxAdvertisersPerTermHow many matching advertisers a Google keyword fans out to
metaActiveStatusall, active or inactive
metaMediaTypeall, image, video or meme
metaAdTypeRestrict to a category such as political_and_issue_ads
linkedinFetchDetailsFull detail per ad (default), or a faster, lighter pass

Limits and output

FieldDescription
maxAdsPerQueryCap per search term, advertiser or domain
maxRequestsPerCrawlOverall safety limit
includeRawKeep each platform's original payload alongside the clean fields
proxyConfigurationProxy settings — see below

Output example

Every ad comes back in the same shape, whichever ad library it came from. Here is a real Meta result:

{
"platform": "meta",
"adId": "1520310666349109",
"adUrl": "https://www.facebook.com/ads/library/?id=1520310666349109",
"advertiser": {
"id": "15087023444",
"name": "Nike",
"url": "https://www.facebook.com/nike/",
"domain": "nike.com"
},
"creative": {
"title": "Find Nike Near You",
"body": "Add a retro touch to any fit.",
"caption": "nike.com",
"ctaText": "Shop now",
"linkUrl": "https://www.nike.com/w/womens-summer-essentials-lifestyle...",
"format": "image",
"imageUrls": ["https://scontent.fbom12-2.fna.fbcdn.net/v/t39.35426-6/680632406_..."],
"videoUrls": []
},
"publisherPlatforms": ["FACEBOOK", "INSTAGRAM"],
"firstShown": "2026-04-29T07:00:00.000Z",
"lastShown": "2026-05-25T07:00:00.000Z",
"isActive": false,
"regions": [],
"metrics": null,
"query": { "type": "domain", "value": "nike.com" },
"scrapedAt": "2026-08-26T06:08:29.194Z"
}

A Google result carries the advertiser, both dates, the archived creative image and a link to the ad in the Transparency Center:

{
"platform": "google",
"adId": "CR09978845720385421313",
"adUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR09978845720385421313",
"advertiser": { "name": "Nike, Inc.", "domain": "nike.com" },
"creative": {
"format": "text",
"imageUrls": ["https://tpc.googlesyndication.com/archive/simgad/430467805130317951"]
},
"firstShown": "2022-11-30T14:49:50.000Z",
"lastShown": "2026-08-26T05:37:14.000Z"
}

And where LinkedIn publishes delivery data, you get an impressions range plus the country split:

{
"platform": "linkedin",
"advertiser": { "name": "Profound", "url": "https://www.linkedin.com/company/104065246" },
"firstShown": "2026-08-21T00:00:00.000Z",
"lastShown": "2026-08-26T00:00:00.000Z",
"metrics": { "impressions": "1k-5k" },
"regionBreakdown": [
{ "region": "United Kingdom", "sharePct": 27 },
{ "region": "Germany", "sharePct": 14 },
{ "region": "France", "sharePct": 12 },
{ "region": "Netherlands", "sharePct": 7 },
{ "region": "Spain", "sharePct": 6 }
]
}

Two things to keep an eye on: maxAdsPerQuery is per query, so three search terms and two domains at 100 each is up to 500 ads, not 100. And maxRequestsPerCrawl (default 1000) is the overall brake — multi-platform LinkedIn runs reach it faster than you would expect.

Tips for better results

Search a brand by domain, not by name. Google ranks its advertiser suggestions by spelling similarity, so nike.com in domains beats Nike in advertisers every time. This is the single biggest quality win in the Actor.

Use single, specific keywords on LinkedIn. Multi-word phrases match loosely there and most results get filtered out.

Leave filterIrrelevant on. Ad library keyword search is broad by nature and will happily return a long advertorial that happens to contain your words in unrelated sentences. The filter checks each ad's own text, drops the ones that don't genuinely match, and reports how many it removed.

Start small. Run with maxAdsPerQuery: 20 to confirm you're getting the right advertiser before spending a full run.

Proxy configuration

Use Apify Proxy with the RESIDENTIAL group. Meta blocks datacenter and platform IP ranges outright, so residential proxies are required for Meta runs. The Actor handles session management and rotation for you — it keeps one sticky IP per Meta session (Meta ties its anti-bot cookie to the IP) and rotates automatically when an IP gets blocked. Google and LinkedIn are more forgiving but benefit from the same setting.

Integrations and API

Results can be piped anywhere Apify integrates: Google Sheets, Slack, Zapier, Make, GitHub, Google Drive, AWS S3, or any webhook. Combine that with the Schedules tab for hands-off daily competitor monitoring.

You can also start runs programmatically. The Apify API exposes a Run Actor endpoint, and official clients exist for Python and JavaScript, so the Actor works as an ad library API behind your own code. The API tab on this page has copy-paste snippets with your token filled in, and results can be fetched as JSON, JSONL, CSV, Excel, XML or HTML.

FAQ

Support

Found a bug or need a field the Actor doesn't return yet? Open an issue on the Actor's Issues tab with your input configuration and the run ID.

Ad libraries change their layouts from time to time. If results suddenly look wrong, please report it — that's the fastest way to get it fixed for everyone.