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
3 days 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-served ads | Bing's Ad Library is an EU-compliance tool, so the ADS it holds were served in the European Economic Area. But the only country it exposes is the advertiser's registered country, which is frequently outside the EEA (US, UK, …). |
So region means different things per platform: for Google it's the ad's serving region (global);
for Bing it's the advertiser's home country. A region: "US" therefore returns Google's
US-served ads plus Bing ads from US-registered advertisers (whose ads are still EEA-served) —
not "Google-only". We don't oversell Bing coverage: its ads remain EEA-served; only the advertiser
can be non-EEA.
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: Google = ad serving region; Bing = advertiser's registered country. |
dateFrom / dateTo | string | YYYY-MM-DD active-window bounds. |
includeBingAdDetails | boolean | Bing only: fetch per-ad total impressions range, ad start/end dates, and funding entity (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, paidForByName, rejectionJson, 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, paidForByName, rejectionJson, 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 range /
funding entity 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 — $0.004 per ad returned, plus a $0.00005 actor-start event. No subscription, no monthly minimum; you pay only for the rows actually returned, on either platform.
The default run returns up to 20 results per platform (~$0.16 for both), so you can see the unified
schema before scaling up. Use maxResultsPerPlatform to cap spend, and platforms to bill for one
network only.
Use with AI agents (MCP)
Available to any MCP-compatible agent (Claude, ChatGPT, Cursor, LangChain) through the hosted
Apify MCP server — connect once, then ask the agent to run
mochiboo/competitor-ad-intel-all-platforms.
Want only this actor as a tool, with no store search in the way? Point the agent at
https://mcp.apify.com/?actors=mochiboo/competitor-ad-intel-all-platforms and it loads as a single named tool —
the agent calls it directly instead of searching for it and possibly picking someone else.
Why an agent should pick this one over calling two separate scrapers:
- One call, two ad libraries — the agent does not have to orchestrate Google and Bing separately or reconcile two schemas.
- Already normalized — identical field names across platforms, so no mapping step in the agent's context.
- Small default run (20 results per platform) for a cheap first probe.
- Flat output plus a run summary, so completeness is checkable without reading every row.
Related ad-intelligence actors
Use this bundle for breadth; use the single-platform actors when you want depth or a lower price:
- Google Ads Transparency Scraper — Google only, with keyword mode and full advertiser-history pulls.
- Bing Ads Library Scraper — Bing/Microsoft only, with optional impression bands (EEA scope).
- YouTube Ads Scraper — video ads resolved to real YouTube video IDs, watch URLs, thumbnails and durations.
- Competitor Ad Monitor — scheduled change-feed: only what is new or changed since last run.
- Winning Ad Creatives — ranks a competitor's ads by how long they have survived, so you get the proven creatives instead of the full list.
FAQ
Do I need any account or login for Google or Bing? No. Both sources are public transparency libraries — no accounts, no cookies.
Why do I get far fewer Bing rows than Google rows? Because Microsoft's Ads Library is an EEA transparency obligation and only covers ads served in the EEA, while Google's Transparency Center is global. A US-only advertiser will legitimately return zero Bing ads. See Coverage — read this (honest scope) above.
Can I run just one platform?
Yes — set platforms to ["google"] or ["bing"]. You are billed only for the rows actually returned.
Can I see competitor ad spend? No. Neither public library publishes spend, and no tool built on them can. You get creatives, formats, and first/last-shown dates.
Can I export to CSV or Excel? Yes — every Apify dataset exports to JSON, CSV, Excel, XML, or RSS from the UI or the API.
Does this collect personal data? No. Output is advertiser/company-level only (PDPA / GDPR-friendly by design).
Support & feedback
Found a bug, a missing field, or a normalization mismatch? Open an issue on the actor's Issues tab — this actor is actively maintained. If it saved you time, an honest review on the Apify Store helps other people find it.