Ad Library Scraper — Google & LinkedIn Ads Spy Tool
Pricing
$1.00 / 1,000 ads
Ad Library Scraper — Google & LinkedIn Ads Spy Tool
Scrape competitor ads from Google Ads Transparency Center and LinkedIn Ad Library. Get ad creatives, headlines, copy, and impressions for any advertiser — no login, no API key. $1 per 1,000 ads.
Pricing
$1.00 / 1,000 ads
Rating
0.0
(0)
Developer
John Vedovino II
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Competitor Ad Library Scraper — Google Ads Transparency + LinkedIn
Every ad your competitors run on Google (Search, Display, YouTube) and LinkedIn, pulled from the public ad-transparency libraries: advertiser, format, ad text, headline, image or video, first and last shown, days running, and the regions it ran in. Search by company name, domain or Google advertiser id. Plain HTTP: no browser, no login, no API key. $1 per 1,000 ads.
Sample output

Example: set competitors: ["hubspot.com"], sources: ["google"], googleRegion: "US" and sort the dataset by daysRunning — HubSpot's top text ad has run 1,832 days in 17 regions, and that one column tells you which competitor ads actually pay before you write a word of your own copy.
Why it is cheap
Google's Ads Transparency Center loads its results from its own JSON endpoints, and LinkedIn's Ad Library is server-rendered HTML. This Actor calls those directly, so it never starts a headless browser and never chains other Actors. One request returns up to 40 Google ads or about 24 LinkedIn ads.
What you get
| Field | Source | Notes |
|---|---|---|
competitor | both | The input line this row came from. |
source | both | google or linkedin. |
advertiser, advertiserId | both | Google's id looks like AR…. |
creativeId / adId | google / linkedin | Stable ad id. |
format | both | Google: text · image · video. LinkedIn: e.g. Single Image Ad, Video Ad. |
firstShown, lastShown, daysRunning | daysRunning is the quickest signal of a winning ad: advertisers stop paying for ads that lose. | |
regions[] | google, with details on | Each region the ad ran in and the last date it ran there. |
adText, headline, adTextTruncated | adTextFull adds the untruncated text when details are on. | |
imageUrl(s), previewUrl | both | Creative image, or the video preview. |
adUrl | both | The ad's own page in the public library. |
advertiserUrl, paidBy | linkedin, with details on | The advertiser's LinkedIn page and its "Paid for by" entity. |
A real record
From a live run on 2026-10-04 (input Salesforce, LinkedIn):
{"competitor": "Salesforce","source": "linkedin","adId": "1630842716","advertiser": "Salesforce","format": "Single Image Ad","creativeType": "SPONSORED_STATUS_UPDATE","headline": "「Salesforceの営業はチーム戦。だから成長できる」。IT未経験から常務執行役員になったリーダーのキャリア論","adTextTruncated": true,"adUrl": "https://www.linkedin.com/ad-library/detail/1630842716"}
And a Google row from the same day (input hubspot.com, region US, details on): format text, firstShown 2026-07-31, lastShown 2026-10-04, daysRunning 66, run in 6 regions.
How to use it
- Competitor swipe file: list 5–20 competitors, run weekly, sort by
daysRunning— the long-running ads are the ones that pay. - New-campaign alert: schedule daily and diff
creativeId/adIdagainst yesterday's dataset. - Agency pitch deck: one run per prospect's top three competitors, exported to CSV.
- n8n / Make / Zapier: call the run-sync endpoint and read the dataset.
Use cases
- Google Ads Transparency scraper: pull every ad a brand runs on Google Search, Display and YouTube — no login, no API key, no browser. The Google Ads Transparency Center is public; this Actor reads it directly.
- LinkedIn Ad Library scraper: scrape a competitor's sponsored content, video ads and single-image ads from the LinkedIn Ad Library without a browser.
- Competitor ad spy: see which creatives have been running the longest (
daysRunning) — those are the ones that convert, and they are visible in the Google Ads Transparency data. - Ad creative dataset for agencies: one run per client pitch, exported to CSV or JSON and ready to drop into a deck.
- Ad monitoring via n8n / Make / Zapier: schedule daily, diff new
creativeIdvalues against yesterday, get alerted when a competitor launches a campaign.
Inputs
| Input | Default | Notes |
|---|---|---|
competitors | ["hubspot.com"] | One per line: a domain (hubspot.com), a company name (Salesforce) or a Google advertiser id (AR…). Up to 50. |
sources | Add linkedin together with a RESIDENTIAL proxy (see Limits). | |
maxAdsPerSource | 40 | Caps rows and cost per competitor per library. |
googleRegion | anywhere | ISO country code such as US or GB. |
linkedinCountries, linkedinDateOption | all, any | LinkedIn's own filters. |
linkedinExactAdvertiser | true | Keeps only ads whose advertiser name contains the competitor's name. LinkedIn's search is loose without it. |
includeDetails | false | One extra request per ad: Google regions, full LinkedIn text, paid-by. Slower. |
proxyConfiguration | off | Needed for LinkedIn (RESIDENTIAL group); for Google only if the log says blocked. |
Pricing (pay per event)
| Event | Price |
|---|---|
| Ad pushed to the dataset | $0.001 each — $1 per 1,000 ads |
No start fee. Searches that fail, are blocked or find nothing are not charged. Example: 10 competitors × 40 Google ads = 400 ads = $0.40.
Limits, stated plainly
- Meta (Facebook/Instagram) is not covered. Meta's Ad Library API needs a token tied to an identity-verified Facebook account, and its web page is a JavaScript app. It is left out rather than done badly.
- LinkedIn refuses Apify's datacenter IPs. From the platform, LinkedIn answered HTTP 403 both with no proxy and with the datacenter proxy (tested 2026-10-04); from a home connection it answers normally. Use the RESIDENTIAL proxy group for LinkedIn; residential proxy traffic is billed by Apify on top of the per-ad price. A blocked LinkedIn search is logged and not charged.
- Google rate-limits by IP. Requests are paced at least 3 seconds apart per site and that cannot be changed, but Google still returns HTTP 429 to an address that has made many searches. When it does, that search is logged
blocked, is not charged, and the Actor moves on. Turn on the proxy input for big runs. - A domain search on Google returns ads that point at that domain, which can include resellers and affiliates. Search by company name or advertiser id to get only the brand's own ads.
- Both libraries can change their format without notice. Every field is read defensively (a change gives
null, not a crash) and the parsers are tested against pinned fixtures from the 2026-10-04 live responses. - These are public transparency libraries, but each platform has its own terms on reuse of the data. Check them before you resell it.
More Actors by johnveds15
Same pay-per-result pricing, same JSON/CSV output, no login needed: