Competitor Ad Intel — All Platforms Ad Library (Google + Bing) avatar

Competitor Ad Intel — All Platforms Ad Library (Google + Bing)

Pricing

from $4.00 / 1,000 results

Go to Apify Store
Competitor Ad Intel — All Platforms Ad Library (Google + Bing)

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

mochi

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

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 advertiserName and adFormat.
  • AI-agent-friendly. Flat schema, identical top-level keys on every row (only platform and the nested platformData differ), 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 warnings note 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)

PlatformGeographyNotes
Google Ads TransparencyGlobalSearch/Shopping/Display/YouTube creatives; region filter supported.
Microsoft / Bing Ads LibraryEEA-served adsBing'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

FieldTypeDescription
queriesarrayOne advertiser per line — a brand name or domain (nike.com, Bosch). Searched on both platforms.
searchModeselectauto (brand/domain search, default) · keyword (words in ad copy / advertiser) · advertiserId (exact platform IDs; Google AR…, Bing numeric — mixed IDs are auto-routed).
platformsarray["google","bing"] by default. Turn one off to run a single platform.
regionstringCountry name/code (US, DE, United Kingdom) or anywhere. Applied per platform: Google = ad serving region; Bing = advertiser's registered country.
dateFrom / dateTostringYYYY-MM-DD active-window bounds.
includeBingAdDetailsbooleanBing only: fetch per-ad total impressions range, ad start/end dates, and funding entity (one extra request per Bing ad; off by default).
maxResultsPerPlatformintegerStop 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 fieldGoogle (Ads Transparency)Bing (Ads Library)
platform"google""bing"
advertiserNameadvertiser name (org)advertiser name (funding org)
advertiserDomainverified domain— (null)
advertiserIdAR… idnumeric id
adIdcreative id (CR…)ad id
adFormattext / image / video— (null, untyped)
title— (null)ad title
bodyText— (null)ad description
destinationUrl— (null, not exposed)landing URL
displayUrl— (null)display URL
imageUrldirect image (image creatives)first image in AssetJson
creativeUrlrendered-creative preview URL— (null)
firstShown / lastShownISO datetimeISO date (needs includeBingAdDetails)
advertiserVerified— (null)verified flag
regionregion scoped toadvertiser country (EEA)
adLibraryUrldeep-link to Googledeep-link to Bing
matchedQuery / searchMode / source / scrapedAtcarried from the runcarried from the run
platformDatavariantCount, advertiserAdCount, advertiserCountry, firstShownTs, lastShownTstotalImpressionsRange, 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.

Use this bundle for breadth; use the single-platform actors when you want depth or a lower price:

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.