Microsoft Ads Transparency Scraper avatar

Microsoft Ads Transparency Scraper

Pricing

Pay per event

Go to Apify Store
Microsoft Ads Transparency Scraper

Microsoft Ads Transparency Scraper

Extract public Microsoft and Bing ads, advertiser identities, creative copy, landing pages, and media assets by keyword, market, advertiser, or library URL.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Categories

Share

Collect public Microsoft and Bing advertising creatives as structured data. Search by keyword, advertiser ID, market, or a Microsoft Ads Transparency URL and export ad copy, advertiser identity, landing pages, media assets, and direct library links.

Use the Actor for repeatable competitor research instead of manually copying cards from the Microsoft advertising library. It runs through Microsoft's anonymous public transparency interface and needs no Microsoft account or API key.

What does Microsoft Ads Transparency Scraper do?

The Actor turns Microsoft Ads Transparency search results into export-ready dataset rows.

  • Searches ad headlines and descriptions by keyword
  • Collects ads belonging to a known advertiser ID
  • Accepts public /ad/{id} and /advertiser/{id} library URLs
  • Applies optional two-letter market filters
  • Retrieves image assets exposed by Microsoft
  • Normalizes landing-page domains
  • Deduplicates ads by Microsoft ad ID
  • Records the source query on every row
  • Supports optional per-ad detail retrieval
  • Paginates up to your chosen maximum

Who is it for?

PPC and paid-search agencies

Audit competitor messages, offers, and destination pages before campaign planning.

Competitive-intelligence teams

Track how brands position products across Microsoft Search and related inventory.

B2B marketing teams

Discover recurring calls to action, product language, and campaign landing domains.

Brand-safety researchers

Review advertiser identity alongside public creative and destination information.

Journalists and researchers

Build timestamped datasets from a public transparency source for further analysis.

Why use this Microsoft ads scraper?

Manual library research does not scale across many keywords or repeated checks.

  • Schedule searches daily or weekly
  • Export results to JSON, CSV, Excel, or XML
  • Connect results to databases and automation tools
  • Preserve stable IDs for change detection
  • Keep query provenance for multi-brand projects
  • Limit runs precisely with maxItems
  • Avoid account and credential management

What data can I extract?

FieldDescription
adIdStable Microsoft ad identifier
advertiserIdMicrosoft advertiser identifier
advertiserNamePublic advertiser name
titleAd headline
descriptionPublic ad copy
displayUrlURL shown in the creative
destinationUrlResolved campaign destination supplied by Microsoft
destinationDomainNormalized landing-page hostname
creativeTypeText, Image, or another disclosed asset type
mediaUrlsPublic creative asset URLs
assetsAsset dimensions, type, and URL
libraryUrlHuman-readable Microsoft library detail link
detailUrlAnonymous public JSON detail endpoint
countryRequested market filter
queryKeyword, advertiser, or URL that produced the row
scrapedAtISO timestamp of collection

Microsoft does not disclose every transparency metric for every ad. Fields such as spend, impressions, payer, beneficiary, and shown dates remain null when the public response does not provide them. The Actor never invents estimates.

How to scrape Microsoft ads step by step

  1. Open the Actor input page.
  2. Add one or more advertiser or product keywords.
  3. Optionally add advertiser IDs or public library URLs.
  4. Add country codes if you need specific markets.
  5. Choose the maximum number of unique ads.
  6. Enable detail retrieval when creative media is important.
  7. Start the run.
  8. Preview the Microsoft ads dataset.
  9. Export it or connect an integration.

Input

A simple keyword search:

{
"searchTerms": ["Copilot"],
"countries": ["US"],
"maxItems": 100
}

An advertiser monitor:

{
"advertiserIds": [4295212599],
"maxItems": 500,
"fetchDetails": true
}

A direct ad lookup:

{
"startUrls": [
{ "url": "https://adlibrary.ads.microsoft.com/ad/84250661497235" }
],
"maxItems": 1,
"fetchDetails": true
}

Input reference

searchTerms

An array of advertiser names, brands, products, or phrases. When omitted with all other sources, the low-cost default searches for Microsoft.

advertiserIds

Numeric or string IDs from Microsoft Ads Transparency advertiser pages.

startUrls

Public ad or advertiser URLs copied from adlibrary.ads.microsoft.com.

countries

Optional ISO two-letter country codes such as US, GB, DE, or FR.

startDate and endDate

Optional dates in YYYY-MM-DD format. Availability and interpretation depend on Microsoft's current public API behavior.

maxItems

Maximum unique ads saved across all input sources. The range is 1 to 10,000.

fetchDetails

When enabled, requests each ad's public detail endpoint. This improves asset completeness but makes one extra request per ad.

Output example

{
"adId": "84250661497235",
"advertiserId": "4295212599",
"advertiserName": "Microsoft",
"title": "Copilot+ PCs",
"description": "From to-do to done",
"displayUrl": "www.microsoft.com",
"destinationUrl": "https://www.microsoft.com/windows/copilot-plus-pcs",
"destinationDomain": "microsoft.com",
"creativeType": "Image",
"mediaUrls": ["https://www.bing.com/th?id=..."],
"country": "US",
"query": "Copilot",
"libraryUrl": "https://adlibrary.ads.microsoft.com/ad/84250661497235",
"scrapedAt": "2026-07-12T00:00:00.000Z"
}

How much does it cost to scrape Microsoft ads?

This Actor uses pay-per-event pricing: a small start charge plus a charge for each dataset item. Apify plan tiers receive the tiered item prices shown on the Actor page. You control the final run size with maxItems and can preview the low default before scaling.

HTTP-only extraction keeps compute use low. Enabling fetchDetails adds requests but does not create duplicate records.

Tips for better results

  • Use specific product or brand phrases rather than generic words.
  • Search a verified advertiser ID when name matching is too broad.
  • Split unrelated markets into separate scheduled tasks.
  • Keep fetchDetails off for fast text-only discovery.
  • Turn fetchDetails on when image URLs are required.
  • Deduplicate historical exports with adId.
  • Group results by destinationDomain to compare campaign funnels.
  • Keep query when combining several searches.

Scheduling a competitor monitor

Create an Apify Task with stable advertiser IDs or keywords. Schedule it daily or weekly. Send each completed dataset to a webhook, cloud table, or your own database. Compare adId, title, description, destination URL, and media URLs against the previous snapshot to identify launches and creative changes.

Integrations

Google Sheets

Send new rows to a shared creative-research sheet after each scheduled run.

Make

Trigger a scenario when a dataset contains a previously unseen ad ID.

Zapier

Route ads matching a priority landing domain to Slack or email.

Webhooks

Notify your data pipeline after a run succeeds and fetch the dataset through the API.

Cloud storage

Export JSON or CSV snapshots for long-term campaign history.

API usage

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/microsoft-ads-transparency-scraper').call({
searchTerms: ['Copilot'], countries: ['US'], maxItems: 100
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_APIFY_TOKEN')
run = client.actor('automation-lab/microsoft-ads-transparency-scraper').call(
run_input={'searchTerms': ['Copilot'], 'countries': ['US'], 'maxItems': 100}
)
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

cURL

curl -X POST 'https://api.apify.com/v2/acts/automation-lab~microsoft-ads-transparency-scraper/runs?token=YOUR_APIFY_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"searchTerms":["Copilot"],"countries":["US"],"maxItems":100}'

Use with MCP and AI agents

Connect Apify MCP at https://mcp.apify.com?tools=automation-lab/microsoft-ads-transparency-scraper.

For Claude Code:

$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/microsoft-ads-transparency-scraper"

For Claude Desktop, Cursor, or VS Code, add this HTTP server to the client's MCP JSON configuration (set APIFY_TOKEN in the client environment):

{
"mcpServers": {
"apify": {
"type": "http",
"url": "https://mcp.apify.com?tools=automation-lab/microsoft-ads-transparency-scraper"
}
}
}

Example prompts:

  • “Find 100 public Microsoft ads mentioning Copilot in the US.”
  • “Extract current creatives for Microsoft advertiser ID 4295212599.”
  • “Compare landing domains in this week's Microsoft advertising dataset.”

Reliability and responsible limits

The Actor retries temporary throttling and server errors with bounded backoff. It deduplicates records before charging and saving them. Concurrency is intentionally conservative because the official public endpoint is optimized for transparency lookup rather than bulk advertising delivery.

A run fails clearly when Microsoft returns a persistent error. Existing items remain available in the dataset.

Data quality notes

  • Asset availability varies by ad format.
  • Destination URLs may include campaign tracking parameters.
  • Country records the requested market, not inferred targeting.
  • Public responses can change as Microsoft updates the library.
  • Nullable disclosure fields mean “not provided,” not zero.
  • Ad text remains in the language supplied by Microsoft.

Legality

The Actor accesses public, anonymous transparency data. Laws and contractual requirements differ by jurisdiction and use case. Collect only data you have a lawful reason to process, respect intellectual-property rights, avoid harmful profiling, and follow Microsoft and Apify terms. This is not legal advice.

FAQ

Does it require a Microsoft Ads account?

No. It uses the public anonymous Ads Transparency interface.

Can I search by advertiser name?

Yes. Put the advertiser name in searchTerms. For precise recurring monitoring, use the advertiser ID.

Why are impression or spend fields null?

Microsoft's public response does not provide those fields for every record. The Actor preserves them as nullable rather than estimating values.

Why does an ad have no image?

Some records are text ads, and some public records do not expose assets. Enable fetchDetails to request the latest public detail representation.

How do I avoid duplicate ads?

The Actor deduplicates within each run by adId. Use the same key when merging datasets across runs.

My search returns too many unrelated results. What should I do?

Use a more specific phrase, add a country, or find the advertiser ID and search it directly.

Can I monitor several competitors?

Yes. Add several keywords or advertiser IDs and schedule the task. Every item retains its source query.

Can I scrape one known ad?

Yes. Add its public /ad/{id} URL to startUrls.

Build a broader paid-media view with other actors from automation-lab:

Support

If a valid public Microsoft Ads Transparency URL or search unexpectedly fails, open an issue from the Actor page. Include a redacted input, run ID, expected behavior, and whether the same query works in the public library. Do not post private credentials or proprietary campaign data.