# Microsoft Bing Ads Library Scraper (`trovevault/bing-ads-library-scraper`) Actor

Extract public Microsoft and Bing ad creatives with advertiser IDs, titles, descriptions, landing pages, display URLs, and image assets.

- **URL**: https://apify.com/trovevault/bing-ads-library-scraper.md
- **Developed by:** [Trove Vault](https://apify.com/trovevault) (community)
- **Categories:** E-commerce, SEO tools, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.85 / 1,000 ads

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Microsoft Bing Ads Library Scraper

Extract public Microsoft and Bing ad creatives from Microsoft Advertising's Ad Library for competitor monitoring, search ad research, and landing page tracking. The actor searches brands, keywords, domains, or advertiser IDs, then returns ad rows with advertiser details, ad IDs, titles, descriptions, display URLs, landing pages, image assets, and direct review links.

Use it when you want repeatable Microsoft/Bing ads data for brands such as Nike, Shopify, Temu, or a client competitor list without manually searching Microsoft Ad Library.

### Why use Microsoft Bing Ads Library Scraper?

- Monitor public Microsoft and Bing ads by advertiser, keyword, or domain.
- Build competitor search and display ad swipe files.
- Export landing pages, display URLs, ad copy, and image assets.
- Use stable advertiser IDs for scheduled tracking.
- Feed PPC dashboards, agency reports, or cross-platform ad monitoring workflows.

### What data does Microsoft Bing Ads Library Scraper extract?

| Field group | Fields |
|---|---|
| Search context | `target`, `country`, `countryName`, `runId` |
| Advertiser identity | `advertiserName`, `advertiserId`, `advertiserCountry`, `isVerifiedAdvertiser` |
| Creative identity | `adId`, `adDetailsUrl`, `advertiserAdsUrl` |
| Copy and URLs | `title`, `description`, `creativeText`, `displayUrl`, `landingPageUrl` |
| Assets | `imageUrl`, `imageUrls`, `assets` |

The actor uses the public Microsoft Ad Library API behind the web interface. It does not require a Microsoft Ads login for the tested public search path.

### Who uses Microsoft Bing Ads Library Scraper?

**PPC teams** can monitor competitor search copy and landing pages on Microsoft/Bing.

**Agencies** can run scheduled advertiser checks for EU/EEA client reports.

**E-commerce teams** can inspect product ad copy, display URLs, and image assets.

**Researchers** can collect public ad records with direct ad and advertiser review links.

### What input does Microsoft Bing Ads Library Scraper accept?

```json
{
  "targets": ["Nike", "4295000966"],
  "country": "FR",
  "maxAds": 40
}
````

| Input | Required | Description |
|---|---:|---|
| `targets` | Yes | Advertiser names, keywords, domains, or numeric Microsoft advertiser IDs. Examples: `Nike`, `nike.com`, `4295000966`. |
| `country` | Yes | Supported Microsoft Ad Library country. Examples: `FR`, `DE`, `ES`, `PT`. Default: `FR`. |
| `maxAds` | No | Maximum creatives to return per target. Default: `24`; maximum: `1000`. The actor paginates internally because Microsoft limits public requests to 24 ads per page. |
| `shownSince` | No | Request ads on or after this `YYYY-MM-DD` date when accepted by the source. |
| `datasetId` | No | Existing Apify dataset ID for pipeline runs. Rows are appended there in addition to the default run dataset. |
| `runId` | No | External workflow ID copied to output rows and `RUN_SUMMARY`. |

### What output does Microsoft Bing Ads Library Scraper return?

Example row:

```json
{
  "target": "4295000966",
  "country": "FR",
  "countryName": "France",
  "advertiserName": "Nike - EMEA",
  "advertiserId": "4295000966",
  "advertiserCountry": "Netherlands",
  "isVerifiedAdvertiser": true,
  "adId": "73530089637022",
  "title": "Chaussure Nike Air Max Plus pour homme - Noir",
  "description": "189.99 EUR",
  "creativeText": "Chaussure Nike Air Max Plus pour homme - Noir | 189.99 EUR",
  "displayUrl": "Nike Officiel",
  "landingPageUrl": "https://www.nike.com/fr/t/chaussure-air-max-plus-pour-ClrhI9Ce/604133-050",
  "imageUrl": "https://static.nike.com/a/images/c_limit%2Ch_2500%2Cw_2500%2Cf_png/...",
  "imageUrls": [
    "https://static.nike.com/a/images/c_limit%2Ch_2500%2Cw_2500%2Cf_png/..."
  ],
  "assets": [
    {
      "AssetType": "Image",
      "AssetUrl": "https://static.nike.com/a/images/c_limit%2Ch_2500%2Cw_2500%2Cf_png/..."
    }
  ],
  "adDetailsUrl": "https://adlibrary.ads.microsoft.com/ad/73530089637022",
  "advertiserAdsUrl": "https://adlibrary.ads.microsoft.com/advertiser/4295000966"
}
```

Image creatives often include `imageUrl`, `imageUrls`, and structured `assets`. Text-only search ads may only expose title, description, display URL, and landing page.

### How do I run Microsoft Bing Ads Library Scraper?

1. Add one or more advertiser names, keywords, domains, or advertiser IDs.
2. Choose a supported country.
3. Set `maxAds` based on how deep you want the run to go.
4. Optionally add date filters where the public source accepts them.
5. Run the actor and download the dataset as JSON, CSV, Excel, or through the Apify API.

### How can I use Microsoft Bing Ads Library Scraper through the API?

```bash
curl "https://api.apify.com/v2/acts/YOUR_USERNAME~bing-ads-library-scraper/runs" \
  -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -d '{
    "targets": ["4295000966"],
    "country": "FR",
    "maxAds": 40
  }'
```

Fetch dataset items:

```bash
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?clean=true" \
  -H "Authorization: Bearer $APIFY_TOKEN"
```

### How can I monitor advertisers over time?

Schedule the actor daily or weekly with the same advertiser IDs and country. Use `adId`, `advertiserId`, copy fields, and landing pages to detect new or changed ads.

### What are the limits of Microsoft Bing Ads Library Scraper?

- The public Microsoft Ad Library is focused on EU and EEA transparency coverage.
- It does not claim complete global Microsoft Ads coverage.
- Some rows are text-only and do not include image assets.
- The source may not expose first/last shown dates for every public record.
- Microsoft can change public API payloads. The actor records failures in `RUN_SUMMARY` rather than inventing rows.

### How do I troubleshoot Microsoft Bing Ads Library Scraper?

| Issue | Likely cause | Solution |
|---|---|---|
| No rows were returned | The advertiser has no public ads in that country, or the query is too narrow | Try a numeric advertiser ID, another supported country, or a broader keyword. |
| Search results include resellers | Keyword searches can match landing pages and ad copy from retailers | Use a verified advertiser ID for brand-owned ads. |
| Some rows do not have images | Microsoft returned a text-only ad record | Use title, description, display URL, and landing page fields. |
| A date filter returns fewer rows | The public API applied source-side date filtering | Remove `shownSince` or broaden the date range. |

### What changed in the current version?

#### 0.1

- Initial version with public search, advertiser ID support, ad copy, landing pages, image assets, direct links, and pipeline fields.

### How can I get support?

Open an issue on the actor page with the target, country, run ID, and a short description of what looked wrong. Include whether the problem was matching, missing rows, date filtering, or asset extraction.

# Actor input Schema

## `targets` (type: `array`):

Advertiser names, search phrases, domains, or numeric advertiser IDs. Examples: Nike, nike.com, running shoes, 4295000966. Numeric IDs are used directly for stable scheduled runs.

## `country` (type: `string`):

Country whose public Microsoft Ad Library results should be checked. The public library currently focuses on EU and EEA countries. Default: FR.

## `maxAds` (type: `integer`):

Maximum number of ad creatives to return per target. Use 5-24 for quick checks and higher values for deeper monitoring. Default: 24; maximum: 1000. The actor paginates internally because Microsoft limits each public request to 24 ads.

## `shownSince` (type: `string`):

Only request ads on or after this date when the source accepts date filtering. Use YYYY-MM-DD, for example 2026-07-01. Leave empty for the default source range.

## `datasetId` (type: `string`):

Optional existing Apify dataset ID for pipeline runs. Rows are appended there in addition to the default run dataset. Leave empty for normal one-off runs.

## `runId` (type: `string`):

Optional external run or workflow ID to include in output rows and RUN\_SUMMARY. Use it to join scheduled runs with your own monitoring jobs; leave empty when not needed.

## Actor input object example

```json
{
  "targets": [
    "Nike"
  ],
  "country": "FR",
  "maxAds": 24
}
```

# Actor output Schema

## `datasetUrl` (type: `string`):

No description

## `runSummaryUrl` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "targets": [
        "Nike"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("trovevault/bing-ads-library-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "targets": ["Nike"] }

# Run the Actor and wait for it to finish
run = client.actor("trovevault/bing-ads-library-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "targets": [
    "Nike"
  ]
}' |
apify call trovevault/bing-ads-library-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=trovevault/bing-ads-library-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Microsoft Bing Ads Library Scraper",
        "description": "Extract public Microsoft and Bing ad creatives with advertiser IDs, titles, descriptions, landing pages, display URLs, and image assets.",
        "version": "0.1",
        "x-build-id": "4BJTdXjn32Cd9hSZx"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/trovevault~bing-ads-library-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-trovevault-bing-ads-library-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/trovevault~bing-ads-library-scraper/runs": {
            "post": {
                "operationId": "runs-sync-trovevault-bing-ads-library-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/trovevault~bing-ads-library-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-trovevault-bing-ads-library-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "targets",
                    "country"
                ],
                "properties": {
                    "targets": {
                        "title": "Advertisers or Keywords",
                        "type": "array",
                        "description": "Advertiser names, search phrases, domains, or numeric advertiser IDs. Examples: Nike, nike.com, running shoes, 4295000966. Numeric IDs are used directly for stable scheduled runs.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "Nike"
                        ]
                    },
                    "country": {
                        "title": "Country",
                        "enum": [
                            "AT",
                            "BE",
                            "BG",
                            "HR",
                            "CY",
                            "CZ",
                            "DK",
                            "EE",
                            "FI",
                            "FR",
                            "DE",
                            "GR",
                            "HU",
                            "IS",
                            "IE",
                            "IT",
                            "LV",
                            "LI",
                            "LT",
                            "LU",
                            "MT",
                            "NL",
                            "NO",
                            "PL",
                            "PT",
                            "RO",
                            "SK",
                            "SI",
                            "ES",
                            "SE"
                        ],
                        "type": "string",
                        "description": "Country whose public Microsoft Ad Library results should be checked. The public library currently focuses on EU and EEA countries. Default: FR.",
                        "default": "FR"
                    },
                    "maxAds": {
                        "title": "Maximum Ads",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of ad creatives to return per target. Use 5-24 for quick checks and higher values for deeper monitoring. Default: 24; maximum: 1000. The actor paginates internally because Microsoft limits each public request to 24 ads.",
                        "default": 24
                    },
                    "shownSince": {
                        "title": "Shown Since",
                        "type": "string",
                        "description": "Only request ads on or after this date when the source accepts date filtering. Use YYYY-MM-DD, for example 2026-07-01. Leave empty for the default source range."
                    },
                    "datasetId": {
                        "title": "Dataset ID",
                        "type": "string",
                        "description": "Optional existing Apify dataset ID for pipeline runs. Rows are appended there in addition to the default run dataset. Leave empty for normal one-off runs."
                    },
                    "runId": {
                        "title": "Run ID",
                        "type": "string",
                        "description": "Optional external run or workflow ID to include in output rows and RUN_SUMMARY. Use it to join scheduled runs with your own monitoring jobs; leave empty when not needed."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
