Competitor Ads Monitor — Google & LinkedIn Ad Library
Pricing
from $2.00 / 1,000 google ads
Competitor Ads Monitor — Google & LinkedIn Ad Library
Track competitor ads from Google Ads Transparency Center and LinkedIn Ad Library. Enter domains, get ad copy, creatives, landing pages, dates, regions and impressions. Schedule with 'only new ads' for alerts.
Pricing
from $2.00 / 1,000 google ads
Rating
0.0
(0)
Developer
LatentLark
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
13 hours ago
Last modified
Categories
Share
See which ads your competitors are running. Give it domains or company names and it pulls every ad from the Google Ads Transparency Center (Search, Display, YouTube) and the LinkedIn Ad Library. Each ad comes back as one clean row: copy, creative, landing page, first and last shown dates, regions and impressions.
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.
Built and maintained by LatentLark. Also see the Career Page Jobs API for competitor hiring signals.
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
onlyNewand 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
| Field | What it does |
|---|---|
domains | Google: competitor domains (hubspot.com), advertiser IDs (AR…), Transparency Center URLs or advertiser names |
linkedinCompanies | LinkedIn: company name, linkedin.com/company/... URL or numeric company ID |
platforms | google, linkedin or both |
maxAdsPerAdvertiser | Newest ads first; caps cost on big advertisers (0 = no limit) |
regions | Country codes like US, DE, GB (empty = all) |
dateRange | Any time, the last 7, 30, 90 or 365 days, or a custom range |
domainOwnerOnly | Google: keep only the advertiser that owns the domain and drop agencies or resellers that link to it (on by default) |
includeDetails | Adds ad copy, landing page, video, regions and impressions (one extra lookup per ad) |
onlyNew + monitorKey | Output only ads not seen in earlier runs with the same key |
Example:
{ "domains": ["hubspot.com", "salesforce.com"], "platforms": ["google"], "regions": ["US"], "dateRange": "last30days", "maxAdsPerAdvertiser": 50, "onlyNew": true, "monitorKey": "crm-competitors" }
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.
| Event | Price |
|---|---|
| Actor start (per run) | $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,
headlineandbodyTextare empty and the creative is inimageUrls. 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
domainOwnerOnlyoff 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).
Found a problem? Open an issue on the Actor's Issues tab.