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

10 hours 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 onlyBing'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

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 (Bing = EEA only).
dateFrom / dateTostringYYYY-MM-DD active-window bounds.
includeBingAdDetailsbooleanBing only: fetch per-ad impressions range / by-country / targeting (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, impressionsByCountry, targets, 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, 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.