Google Ads Transparency Scraper + LinkedIn Ad Library API
Under maintenancePricing
$1.00 / 1,000 ads
Google Ads Transparency Scraper + LinkedIn Ad Library API
Under maintenanceScrape any competitor's ads from the Google Ads Transparency Center (Search, Display, YouTube) and the LinkedIn Ad Library: advertiser, format, ad text, image/video, first and last shown, days running, regions. Search by name, domain or advertiser ID. No login, no browser. $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
4 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.
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.
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: