Bing Ads Library Scraper - Microsoft Ads Transparency avatar

Bing Ads Library Scraper - Microsoft Ads Transparency

Pricing

from $3.00 / 1,000 ad scrapeds

Go to Apify Store
Bing Ads Library Scraper - Microsoft Ads Transparency

Bing Ads Library Scraper - Microsoft Ads Transparency

See every Bing ad any advertiser runs. Scrape the Microsoft Ad Library by keyword or advertiser: ad copy, landing pages, images, verified advertiser identity & new-ad monitoring. The Bing side of your Google/Meta ads transparency stack.

Pricing

from $3.00 / 1,000 ad scrapeds

Rating

0.0

(0)

Developer

Scrape Sage

Scrape Sage

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Bing Ads Library Scraper — Competitor Ads, Advertisers & New-Ad Monitoring (Microsoft Advertising Transparency)

See every ad any advertiser runs on Bing. This actor scrapes the official Microsoft Ad Library — Microsoft Advertising's transparency register of ads served on Bing across the EU/EEA — and turns it into clean, structured competitor intelligence: full ad copy (headlines + descriptions), display URLs, real landing-page URLs, image assets, verified advertiser identity, and per-advertiser ad counts. Search by keyword, company name, advertiser ID, or library URL — and flip on monitor mode to get only the new ads a competitor launches between runs.

No login, no API key, no browser — fast JSON extraction straight from Microsoft's own library API, with 99%+ reliability.

Why this Bing Ads Library scraper?

Google and Meta ad-spy tools are everywhere — but Bing is the blind spot: a ~$12B/yr ad platform with high-value insurance/finance/B2B/e-commerce advertisers and almost zero competitive-intel coverage. This actor closes that gap and ships the richest dataset in the category:

DataTypical scrapersThis actor
Full headline + ad copypartial✅ complete
Real destination/landing URL + landing domain
Display URL (the path shown in the ad)
Image assets (URL + dimensions) for image formats
Advertiser registered country
Advertiser identity verified status
Per-advertiser total ads count + sample titles
All ads of one advertiser (by name or ID)
Advertiser register search (directory mode)
Country + date-range filters
Monitor mode — only new/changed ads per run
Deep links back to every ad & advertiser in the library

Use cases

  • Competitor PPC intelligence — see every search ad a competitor runs on Bing, the exact copy angles they test, and the landing pages behind them. Bing CPCs run 30–60% below Google; the advertisers there are the ones quietly printing margin.
  • Ad copy research & swipe files — harvest proven headlines/descriptions for any keyword ("car insurance", "crm software", "running shoes") to feed your own ad testing — or an LLM that writes variants.
  • New-ad alerts — schedule a daily run with monitorMode on a competitor's advertiser ID and get only their newly launched ads, straight to Slack/CRM via integrations.
  • Lead generation — advertiser-directory mode turns the library's register into a list of companies actively spending on Bing ads (name, country, verified identity, ad volume) — pre-qualified, budget-proven prospects for agencies and martech sales.
  • Landing-page & funnel analysisdestinationUrl exposes the full tracking-parameter-laden final URL: see which pages, offers, and UTM structures competitors send paid traffic to.
  • Brand protection — search your own brand name and find affiliates, resellers, or impostors bidding on it in any EU/EEA market.

How to use

  1. Sign up for Apify — the free plan is enough to try this actor.
  2. Open the Bing Ads Library Scraper, enter keywords or advertiser names (or paste library URLs), and click Start.
  3. Watch results stream into the dataset table.
  4. Export as JSON, CSV, Excel, XML, or RSS — or pull results programmatically via the Apify API.

Input

{
"searchQueries": ["car insurance"],
"advertiserNames": ["Booking.com"],
"countries": ["DE", "France"],
"dateFrom": "2026-01-01",
"maxResults": 100,
"includeAdvertiserDetails": true,
"monitorMode": false
}
  • searchQueries — keywords matched against ad copy; each returns up to ~1,000 ads.
  • advertiserNames — company names, resolved in the advertiser register (up to 5 matches each), then all their ads are scraped.
  • advertiserIds — exact advertiser IDs (the number in adlibrary.ads.microsoft.com/advertiser/… URLs).
  • advertiserSearchQueries — search the advertiser register instead: one record per advertiser (country, verified, adsCount, sample titles). Directory mode for lead lists.
  • startUrls — any Microsoft Ad Library URL (/ad/…, /advertiser/…, or /?searchText=…), auto-detected.
  • countries / dateFrom / dateTo — server-side filters (EU/EEA countries, ISO codes or names; dates as YYYY-MM-DD).
  • adFormatall, text (classic search ads), or image (formats with image assets).
  • includeAdvertiserDetails (default true) — adds registered country + verified status to every ad (one cached lookup per unique advertiser).
  • emitAdvertiserRecords (default false) — also output one advertiser summary record per advertiser you scrape by name/ID.
  • maxResults (default 100) — total record cap; 0 = no limit (explicit opt-in).
  • monitorMode / monitorStoreName — cross-run new-ad detection (see below).

Output

One record per ad (type: "ad"), plus optional advertiser records (type: "advertiser"):

{
"type": "ad",
"adId": "71056166831708",
"title": "Nike Dunk - Retrait en Magasin - Nike Dunk à partir de €39.99",
"description": "Commande dès maintenant les Nike Dunk chez Foot Locker. Sois au-devant des tendances.",
"displayUrl": "www.footlocker.fr/nike-dunk/foot-locker",
"destinationUrl": "https://www.footlocker.fr/fr/category/chaussures.html?query=%3Arelevance%3Abrand%3ANike",
"destinationDomain": "footlocker.fr",
"displayDomain": "footlocker.fr",
"adFormat": "text",
"images": [],
"imageCount": 0,
"firstImageUrl": null,
"advertiserId": "4295010202",
"advertiserName": "Footlocker Europe.com B.V.",
"advertiserCountry": "Netherlands",
"advertiserVerified": true,
"adLibraryUrl": "https://adlibrary.ads.microsoft.com/ad/71056166831708",
"advertiserLibraryUrl": "https://adlibrary.ads.microsoft.com/advertiser/4295010202",
"discoverySource": "q:nike",
"filters": { "countries": null, "dateFrom": null, "dateTo": null },
"queryTotalCount": 1000,
"queryTotalIsCapped": true,
"platform": "bing",
"adLibrary": "Microsoft Ad Library (EU/EEA — DSA transparency)",
"scrapedAt": "2026-07-02T09:00:00.000Z"
}

What to expect (field coverage)

  • title, description, displayUrl, destinationUrl, advertiserName, advertiserId, library links — populated on ~100% of ads.
  • advertiserCountry, advertiserVerified — populated whenever includeAdvertiserDetails is on (default).
  • images / firstImageUrl — only for image-format ads; classic Bing search ads are text-only, so these are empty for most records (that's the source, not a scraping gap). Filter with adFormat: "image" if you only want creatives.
  • queryTotalCount — the library reports at most 1,000 per query; queryTotalIsCapped: true means "1,000 or more".

Monitor mode — only new ads, run after run

Set monitorMode: true and every scraped ad's fingerprint is remembered in a named key-value store. The next run outputs only ads that are new or changed, each tagged monitorStatus: "new" or "updated". Pair it with an Apify Schedule (they complement each other — the Schedule triggers runs, monitor mode dedupes the output):

  1. Input: { "advertiserIds": ["4295010202"], "monitorMode": true, "maxResults": 0 }
  2. Schedule: daily.
  3. Add a webhook or Zapier/Make step → new competitor ads land in Slack, email, or your CRM within a day of launch.

Running several monitors? Give each schedule its own monitorStoreName.

Tip: monitor advertiser-scoped inputs (advertiserIds / advertiserNames) with maxResults: 0 so the full ad set is compared every run. A broad keyword query capped at a fraction of its ~1,000 results samples a different slice each run — those ads aren't really "new", you just hadn't seen them yet.

Automate & schedule

Run this actor on autopilot and pull results into your own stack:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });
const run = await client.actor('scrapesage/bing-ads-library-scraper').call({
advertiserNames: ['Zalando'],
countries: ['Germany'],
maxResults: 500,
monitorMode: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} Bing ads`);

Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

  • Make — multi-step automation scenarios.
  • Zapier — push new competitor ads straight into your CRM or ad-ops board.
  • Slack — get pinged when a monitored advertiser launches new ads.
  • Google Drive / Sheets — auto-export every run to a spreadsheet.
  • Airbyte — pipe results into your data warehouse.
  • GitHub — trigger runs from commits or releases.

Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. You can call this actor from Claude, ChatGPT, or any agent framework through the Apify MCP server — ask your assistant to "pull every Bing ad Zalando is running in Germany and summarize their copy angles" and let it run this scraper for you.

Agent-ready: autonomous payments (x402 & Skyfire)

This actor is agent-ready — AI agents can discover it, run it, and pay for it autonomously, with no Apify account and no human in the loop. It uses pay-per-event pricing and limited permissions, so it qualifies for Apify's agentic-payment standards:

  • x402 — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the Apify MCP server — no account, no API key.
  • Skyfire — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

More scrapers from scrapesage

Build a complete ads-transparency intelligence stack — every major ad platform, one dataset shape:

Tips

  • Go deep on one advertiser: the library caps any single query at ~1,000 ads. For mega-advertisers, split by countries and/or dateFrom/dateTo windows to pull far more.
  • Cheap daily monitors: advertiserIds + monitorMode + a daily Schedule is the highest-signal, lowest-cost setup — you pay only for genuinely new ads.
  • Lead lists: advertiserSearchQueries: ["dentist"] returns advertisers with "dentist" in their registered name — every one of them is actively buying Bing ads.
  • Keyword coverage: searches match ad text, so try both brand ("nike") and category ("running shoes") terms — the ad sets differ.

FAQ

Where does the data come from? From Microsoft's official Microsoft Ad Library (adlibrary.ads.microsoft.com), the transparency register Microsoft publishes under the EU Digital Services Act. This actor reads the same public API the library website uses — no login, no private data.

Why EU/EEA only? Microsoft's library publishes ads served in the EU/EEA — that's what the DSA mandates. Global brands (Nike, Booking.com, Amazon, insurance and SaaS advertisers…) all appear because they advertise in Europe; what you won't find is an ad shown only outside the EU/EEA.

Does it include Microsoft Audience Network / image ads? Yes — ads with image assets return images (URL + dimensions) and adFormat: "image". Classic Bing search ads are text-only.

Does it show ad spend or impressions? Microsoft's library doesn't publish per-ad spend or impression counts (neither does Google's for non-political ads). You get the complete creative, targeting country availability via filters, advertiser identity, and ad volume per advertiser.

How do I find an advertiser's ID? Run their name through advertiserNames (the actor resolves it), use advertiserSearchQueries to list candidates, or copy the number from an adlibrary.ads.microsoft.com/advertiser/… URL.

Can I monitor a competitor automatically? Yes — that's the flagship use case. monitorMode: true + an Apify Schedule + a webhook = new-ad alerts. Monitor mode stores fingerprints in a key-value store and outputs only new/changed ads each run.

Is scraping the Microsoft Ad Library legal? The library is a public transparency register that exists precisely so ads can be inspected. The actor collects no personal data. You're responsible for complying with applicable laws and terms in your use of the data.

A field is null — why? Text ads genuinely have no images; advertisers you scrape without includeAdvertiserDetails won't carry country/verified. Fields are null only when the source doesn't expose the data, never because the scraper skipped it.

Need help?

Open an issue on the actor's Issues tab, or visit the Apify help center. Feature requests are welcome — this actor is actively maintained.