Google Ads Transparency & LinkedIn Ad Library Scraper avatar

Google Ads Transparency & LinkedIn Ad Library Scraper

Pricing

from $1.40 / 1,000 google ads

Go to Apify Store
Google Ads Transparency & LinkedIn Ad Library Scraper

Google Ads Transparency & LinkedIn Ad Library Scraper

Scrape Google Ads Transparency Center (Search, Display, YouTube) and LinkedIn Ad Library by domain or advertiser/company name. Get ad copy, creatives, landing pages, dates, regions, impressions. Monitor competitors with 'only new ads' alerts.

Pricing

from $1.40 / 1,000 google ads

Rating

0.0

(0)

Developer

LatentLark

LatentLark

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 hours ago

Last modified

Features

Limited permissions

Share

Scrape the Google Ads Transparency Center (Search, Display and YouTube ads) and the LinkedIn Ad Library by competitor domain or advertiser/company name. Each ad comes back as one clean row: copy, creative, landing page, first and last shown dates, regions and impressions.

Use it as a competitor ads monitor: schedule it with Only new ads and you get a short list of each competitor's new ads every day or week, ready for Slack, email, Sheets or your BI tool.

Google Ads Transparency & LinkedIn Ad Library Scraper results: one row per ad with advertiser, platform, format, headline, CTA, landing page, first and last shown dates and regions

Real output from a test run for hubspot.com (Google and LinkedIn). Built and maintained by LatentLark.

Quick start (first run in about 30 seconds)

  1. Click Try for free (or Start in Console). The form is prefilled with hubspot.com, Google only, and 5 ads.
  2. Click Start. You get 5 HubSpot ads in the Output tab for about $0.015.
  3. Replace hubspot.com with your competitors' domains (one per line). Raise Max ads per advertiser when you want more.
  4. For LinkedIn, add LinkedIn Ad Library under Platforms and add the company names in LinkedIn companies (e.g. HubSpot).
  5. For alerts, turn on Only new ads since last run, give it a Monitor key like crm-competitors, Save as task and add a daily Schedule.

How the first run looks (fill the form, click Start, get results):

Walkthrough: the prefilled form, click Start, then the ads table in the Output tab

Run it on a schedule

Get a short list of new competitor ads instead of the whole library every time:

  1. Add your competitors' domains, turn on Only new ads since last run (onlyNew) and set Monitor key (e.g. crm-competitors).
  2. Save as task → Schedule → weekly (e.g. Monday 0 8 * * 1) or daily.
  3. Optional: send each run to Slack/email via Integrations, or to a sheet with Google Sheets Export.
ExampleCadenceRough cost per month
5 competitors, Google only, about 10 new ads each per weekweekly≈ $0.42 (4 starts × $0.005 + 200 ads × $0.002)
Same 5 competitorsdaily≈ $0.55 (the same new ads, found sooner; mostly start fees)

The first run collects the current ads as the baseline (cap it with Max ads per advertiser). Free-tier prices; Bronze/Silver/Gold plans pay 10/20/30% less.

What you can do with it

  • Competitive intel: see the messaging, offers and landing pages a rival is testing right now.
  • New-ad alerts: schedule a daily run with onlyNew and get only the ads launched since the last run.
  • Creative research: collect headlines, CTAs, images and videos from a whole category for swipe files.
  • Agency reporting: monitor client competitors by region and date range.
  • Market mapping: find out who advertises on a domain, including partners and agencies.

Input

FieldWhat it does
domainsGoogle: competitor domains (hubspot.com) or advertiser names (Salesforce), plus advertiser IDs (AR…) or Transparency Center URLs
linkedinCompaniesLinkedIn: company name, linkedin.com/company/... URL or numeric company ID
platformsgoogle, linkedin or both
maxAdsPerAdvertiserNewest ads first; caps cost on big advertisers (0 = no limit)
regionsCountry codes like US, DE, GB (empty = all)
dateRangeAny time, the last 7, 30, 90 or 365 days, or a custom range
domainOwnerOnlyGoogle: keep only the advertiser that owns the domain and drop agencies or resellers that link to it (on by default)
includeDetailsAdds ad copy, landing page, video, regions and impressions (one extra lookup per ad)
onlyNew + monitorKeyOutput only ads not seen in earlier runs with the same key

Example (Google, US, last 30 days, alerts):

{ "domains": ["hubspot.com", "salesforce.com"], "platforms": ["google"], "regions": ["US"], "dateRange": "last30days", "maxAdsPerAdvertiser": 50, "onlyNew": true, "monitorKey": "crm-competitors" }

Example (Google + LinkedIn):

{ "domains": ["hubspot.com"], "linkedinCompanies": ["HubSpot"], "platforms": ["google", "linkedin"], "maxAdsPerAdvertiser": 20 }

Output

One dataset item per ad:

{
"platform": "google",
"advertiserName": "HubSpot",
"advertiserId": "AR13611357312189988865",
"domain": "hubspot.com",
"adId": "CR15298995467690442753",
"format": "text",
"headline": "HubSpot Customer Platform",
"bodyText": "See how HubSpot's AI-powered customer platform helps you grow better.",
"cta": null,
"landingUrl": "https://www.hubspot.com/",
"imageUrls": [],
"videoUrl": null,
"firstShown": "2023-03-01T00:00:00Z",
"lastShown": "2026-10-24T00:00:00Z",
"regions": ["NL", "DE"],
"impressionsRange": { "min": 30000, "max": 35000 },
"isNew": true,
"stoppedRunning": false,
"adLibraryUrl": "https://adstransparency.google.com/advertiser/AR…/creative/CR…?region=anywhere",
"scrapedAt": "2026-10-24T21:00:00Z"
}

Rows also include daysShown, regionStats (Google: first and last shown plus impressions per country; LinkedIn: impression share per country), paidBy and targeting (LinkedIn: language, location and targeting parameters), thumbnailUrl and sourceInput. A per-input SUMMARY record is written to the run's key-value store.

How monitoring works

The first run with a monitorKey stores every ad it finds as the baseline. Each later run with onlyNew: true outputs, and charges for, only ads that were not seen before. stoppedRunning is true when an ad hasn't been shown for stoppedAfterDays days (3 by default).

Pricing

Pay per event, no subscription: a small start fee per run plus each ad saved to the dataset.

EventPrice
Actor start (per run, at the default 256 MB memory)$0.005
Google ad saved$0.002 ($2 per 1,000 ads)
LinkedIn ad saved$0.004 ($4 per 1,000 ads)

Example: a daily onlyNew check on 5 competitors that finds 20 new Google ads costs about $0.045 per run. Residential proxy for LinkedIn is included. Set a maximum cost per run in Apify and the Actor stops cleanly when it reaches it. Ads skipped by onlyNew are not charged.

Limitations

  • Google text ads: Google often keeps older text ads only as an image snapshot. For those, headline and bodyText are empty and the creative is in imageUrls. Newer responsive search ads and YouTube ads include full copy.
  • Google doesn't publish impressions for every region. EU countries usually have them, the US often does not.
  • LinkedIn (beta): LinkedIn blocks cloud server IPs, so LinkedIn requests use Apify residential proxy (included in the price, about 15 KB of traffic per ad). It is slower than Google: expect a few seconds per ad. LinkedIn shows impressions as ranges and per-country shares only, and the Ad Library covers roughly the last 12 months.
  • The domain-owner filter matches advertiser names to the domain. Turn domainOwnerOnly off to see every advertiser.
  • This Actor reads public, official ad-transparency libraries only. It does not log in or collect personal data.

FAQ

Can I get alerts in Slack or email? Yes. Schedule the Actor with onlyNew and connect an Apify integration (Slack, email, Zapier, Make or a webhook). Can I export to Google Sheets? Yes. Use Apify's Google Sheets integration or LatentLark's Google Sheets Export & Import (no OAuth, so scheduled writes keep working). Why are headline and text empty for some Google ads? Google keeps many older text ads only as an image snapshot. The creative is in imageUrls. See Limitations. I got 0 ads for a domain. Why? The advertiser may not run Google ads in the selected regions or dates, or its advertiser name doesn't match the domain. Turn off domainOwnerOnly, clear regions, or paste the advertiser's Ads Transparency Center URL or AR… ID. The SUMMARY record shows what was found for each input.

Did this save you time? A rating on the Store page helps other people find it. Missing a field or found a bug? Open an issue on the Issues tab, we usually reply within a day.

More from LatentLark