Competitor Ad Intel — All Platforms Ad Library (Google + Bing)
Pricing
from $4.00 / 1,000 results
Competitor Ad Intel — All Platforms Ad Library (Google + Bing)
One advertiser or domain in — every ad it runs on Google AND Microsoft/Bing back, in ONE normalized schema. Cross-platform competitor ad research / ad intelligence API: creative, format, first/last-shown, region. Filter by region & date, toggle platforms. Clean JSON/CSV, company-level only.
Pricing
from $4.00 / 1,000 results
Rating
0.0
(0)
Developer
mochi
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 hours ago
Last modified
Categories
Share
Competitor Ad Intel — All Platforms · Cross-Platform Ad Library & Ad Intelligence API
One advertiser in — every ad it runs on Google and Microsoft/Bing back, in ONE unified schema.
Give a brand or domain (e.g. nike.com) and get a single, flat, normalized table of its ads across
the Google Ads Transparency Center and the Microsoft / Bing Ads Library — no stitching three
tools together. Built for competitor ad research across all platforms, cross-platform ad
library pulls, ad intelligence API pipelines, and AI agents that want one tool, not many.
Keywords: competitor ads all platforms, cross-platform ad library, ad intelligence api, competitor ad research, multi-platform ad spy, Google ads transparency, Bing ads library, Microsoft ads transparency, competitor ad monitoring, ad library api.
Why this actor
- One tool, both platforms. Nobody on the shelf aggregates Google + Bing ad intel into a single
normalized output. Query once; pivot Google and Bing side by side by
advertiserNameandadFormat. - AI-agent-friendly. Flat schema, identical top-level keys on every row (only
platformand the nestedplatformDatadiffer), short input descriptions, and a fast small default so an agent can probe cheaply before a full pull. - Streams results live. Each ad is written to your dataset the moment it's normalized — an interrupted run keeps everything found so far; you never wait until the end.
- Never a silent gap. If one platform is down or errors, the run still returns the other's ads
plus a
warningsnote in the run summary — graceful partial results, not a whole-run failure. - Reuses two proven scrapers as in-process libraries (not sub-actor calls, so you're never double-charged): the Google Ads Transparency and Bing Ads Library actors.
Coverage — read this (honest scope)
| Platform | Geography | Notes |
|---|---|---|
| Google Ads Transparency | Global | Search/Shopping/Display/YouTube creatives; region filter supported. |
| Microsoft / Bing Ads Library | EEA only | Bing's Ad Library is an EU-compliance transparency tool, so it contains ads served in the European Economic Area — not the US. |
So: a US region returns Google-only results (Bing has no US data) — and the run tells you so
in warnings. For EEA markets you get both. We do not oversell Bing coverage.
Input
| Field | Type | Description |
|---|---|---|
queries | array | One advertiser per line — a brand name or domain (nike.com, Bosch). Searched on both platforms. |
searchMode | select | auto (brand/domain search, default) · keyword (words in ad copy / advertiser) · advertiserId (exact platform IDs; Google AR…, Bing numeric — mixed IDs are auto-routed). |
platforms | array | ["google","bing"] by default. Turn one off to run a single platform. |
region | string | Country name/code (US, DE, United Kingdom) or anywhere. Applied per platform (Bing = EEA only). |
dateFrom / dateTo | string | YYYY-MM-DD active-window bounds. |
includeBingAdDetails | boolean | Bing only: fetch per-ad impressions range / by-country / targeting (one extra request per Bing ad; off by default). |
maxResultsPerPlatform | integer | Stop after N ads per platform (default 20 for a fast preview; 0 = no limit). |
Example
{"queries": ["nike.com"],"searchMode": "auto","platforms": ["google", "bing"],"region": "DE","maxResultsPerPlatform": 50}
Output — one unified row per ad
Every row has the same top-level fields regardless of platform. A field a platform genuinely
does not expose is null (never invented). Platform-unique extras live under platformData.
{"platform": "google","advertiserName": "Nike, Inc.","advertiserDomain": "nike.com","advertiserId": "AR16735076323512287233","adId": "CR03002423070389436417","adFormat": "image","title": null,"bodyText": null,"destinationUrl": null,"displayUrl": null,"imageUrl": "https://s0.2mdn.net/…_300x250_EN.jpg","creativeUrl": "https://displayads-formats.googleusercontent.com/ads/preview/content.js?…","firstShown": "2021-10-26T07:00:00.000Z","lastShown": "2026-05-24T23:54:27.000Z","advertiserVerified": null,"region": "US","adLibraryUrl": "https://adstransparency.google.com/advertiser/AR…/creative/CR…","matchedQuery": "nike.com","searchMode": "domain","source": "adstransparency.google.com","scrapedAt": "2026-07-27T00:00:00.000Z","platformData": {"variantCount": 466,"advertiserAdCount": null,"advertiserCountry": null,"firstShownTs": 1635231600,"lastShownTs": 1779663267}}
A Bing row is the same shape — platform: "bing", title/bodyText/destinationUrl populated,
adFormat/creativeUrl/advertiserDomain = null, and Bing extras under platformData
(totalImpressionsRange, impressionsByCountry, targets, assetJson).
Normalization mapping (the contract)
How each platform's native field maps to the unified schema:
| Unified field | Google (Ads Transparency) | Bing (Ads Library) |
|---|---|---|
platform | "google" | "bing" |
advertiserName | advertiser name (org) | advertiser name (funding org) |
advertiserDomain | verified domain | — (null) |
advertiserId | AR… id | numeric id |
adId | creative id (CR…) | ad id |
adFormat | text / image / video | — (null, untyped) |
title | — (null) | ad title |
bodyText | — (null) | ad description |
destinationUrl | — (null, not exposed) | landing URL |
displayUrl | — (null) | display URL |
imageUrl | direct image (image creatives) | first image in AssetJson |
creativeUrl | rendered-creative preview URL | — (null) |
firstShown / lastShown | ISO datetime | ISO date (needs includeBingAdDetails) |
advertiserVerified | — (null) | verified flag |
region | region scoped to | advertiser country (EEA) |
adLibraryUrl | deep-link to Google | deep-link to Bing |
matchedQuery / searchMode / source / scrapedAt | carried from the run | carried from the run |
platformData | variantCount, advertiserAdCount, advertiserCountry, firstShownTs, lastShownTs | totalImpressionsRange, impressionsByCountry, targets, assetJson, displayUrl |
On platformData: these are the fields unique to one platform with no cross-platform twin, so
they'd be misleading as top-level columns. Keeping them nested means the aggregate loses nothing
versus the single-platform actors — Google's breadth/enrichment and Bing's impressions/targeting are
all still there.
Note on Google variantCount: a relative breadth proxy (served variants/placements Google
reports per creative), not impressions or spend — the public Center exposes neither. Bing's
totalImpressionsRange is a real (ranged) impressions figure Microsoft publishes.
Run summary
Each run writes a RUN_SUMMARY to the key-value store: adsReturned, a byPlatform breakdown
(pushed / pages / errors), resultCapReached + cappedPlatforms (raise maxResultsPerPlatform for
full coverage), complete (clean, exhaustive across the selected platforms), and warnings — so a
partial or capped result set is never silent.
Compliance
- Company / advertiser-level only. Both sources disclose the funding organisation, not a person — there is no personal-data field in the output. PDPA / GDPR-friendly by design.
- Reads only public, no-login ad-transparency data (Google's Ads Transparency Center and Microsoft's public Ad Library API). Use responsibly and in line with each platform's terms.
Pricing
Pay per result (per ad returned). No subscription — you only pay for the data you pull.