# Bing Search Results Scraper (`parseforge/bing-search-scraper`) Actor

Scrapes Bing Search results for a list of queries and returns each result as a flat row with title, URL, description, and rank. Filter by country, language, freshness, and SafeSearch.

- **URL**: https://apify.com/parseforge/bing-search-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** SEO tools, Marketing, Business
- **Features:** Limited permissions
- **Stats:** 25 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.25 / 1,000 items

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner-v4.webp)](https://apify.com/parseforge?fpr=vmoqkp)

### Bing Search Results Scraper

**Scrape Bing Search results for any keyword, up to a million per run.** Every result comes with its title, URL, description, and rank. Filter by country, language, recency, and SafeSearch. Export to CSV, JSON, Excel, or XML.

Bing's official API requires an Azure account, a resource key, and per-transaction costs that add up fast. This scraper reads the public search results pages directly, letting you collect organic listings, ads, and related questions for any query. You control the region, language, freshness, and safety level, and the output is a clean, flat dataset ready for analysis.

| Who uses it | What they scrape Bing Search for |
|---|---|
| SEO specialists | Track keyword rankings and SERP feature presence on Bing for a set of target queries. |
| Content marketers | Analyze top-ranking content for a topic to understand what formats and angles win on Bing. |
| Market researchers | Monitor competitor ad copy and organic messaging for a product category across different regions. |
| Data scientists | Build a custom search index or train a model on raw Bing result snippets and ranking signals. |

### What it does

This Actor collects Bing Search results for a list of queries and returns each result as a flat row with its title, URL, description, and position.

- 🌍 **Country and language targeting:** Set a two-letter country code and language code to see results exactly as they appear in a local market.
- 🕒 **Recency filter:** Restrict results to the past Day, Week, or Month to track breaking news or recent content.
- 🔒 **SafeSearch control:** Choose off, moderate, or strict to filter adult content according to your project's requirements.
- 📊 **Structured output:** Every result is a flat row with a rank, title, URL, and description, ready for spreadsheets and databases.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

### What you can do with Bing Search data

**📈 Track keyword rankings on Bing.**

An SEO agency runs a weekly scrape of 500 target queries to monitor client positions on Bing and report on ranking changes.

**🌎 Compare SERPs across markets.**

A global brand scrapes the same product query with different country codes to see how its messaging and competitors differ by region.

**📰 Monitor news and trending topics.**

A journalist sets the freshness filter to 'Day' and scrapes a breaking-news query every hour to track how the story evolves on Bing.

**📊 Analyze competitor ad copy.**

A PPC manager scrapes commercial queries to collect competitor ad titles and descriptions appearing in Bing's paid results.

### Why choose this scraper

| | What you get |
|---|---|
| **No API key required** | Scrape Bing results without an Azure account, resource keys, or per-query costs. |
| **Localized results** | See the exact SERP for any of 50+ country codes and any language. |
| **High volume** | Collect up to 1,000,000 results per run for large-scale keyword tracking. |
| **Clean data** | Get a consistent schema with title, URL, description, and rank for every result. |

### How it compares

No other Store actor targets Bing Search the same way, so the honest comparison is with the alternatives teams actually weigh.

| | Bing Search Results Scraper | Build it in-house | By hand |
|---|---|---|---|
| Setup | Run it now, zero config | Days of engineering | None, but hours per pull |
| When Bing Search changes | Maintained for you | You fix it | You re-learn the page |
| Proxies, retries, anti-bot | Built in | Your problem | Browser only |
| Output | Fixed JSON schema, CSV/Excel export | Whatever you build | Copy-paste |
| Cost | Pay per result | Engineering time | Analyst hours |

### Configure the run

Drive the Actor with a list of search queries, and set optional country, language, freshness, and SafeSearch filters to narrow results before they reach your dataset. The Input tab lists every parameter.

A first run with the defaults:

```json
{
 "maxItems": 10,
 "queries": [
 "apify scraper"
 ],
 "country": "us",
 "language": "en",
 "safeSearch": "moderate"
}
```

A larger pull:

```json
{
 "maxItems": 200,
 "queries": [
 "apify scraper"
 ],
 "country": "us",
 "language": "en",
 "safeSearch": "moderate"
}
```

### Pricing

Pay-per-result: **$0.011 per result** collected. You pay only for the results written to your dataset.

| Results collected | Approximate cost |
|---|---|
| 100 results | $1.10 |
| 1,000 results | $11.00 |
| 10,000 results | $110.00 |

New Apify accounts start with $5 in free credit.

### Free users

Free-plan runs return up to 10 results as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to collect up to 1,000,000 results per run.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [Bing Search Results Scraper](https://apify.com/parseforge/bing-search-scraper?fpr=vmoqkp).
3. Set your inputs and any filters, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) (`run-sync-get-dataset-items`) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent live access to Bing Search through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/bing-search-scraper"
```

Then prompt it in plain language to run the scraper and read back the results.

### Troubleshooting

**Why am I getting no results for my query?**

Check that your query is not too restrictive with the freshness or SafeSearch filters. Try running the same query with freshness set to empty and SafeSearch set to 'moderate' to see if results appear.

**Why do my results look different from what I see in my browser?**

Bing personalizes results based on location, search history, and other signals. The scraper uses the country and language codes you provide, but results may still vary slightly from a logged-in browser session.

**The scraper is returning fewer results than my maxItems setting.**

Bing only shows a limited number of results per query, typically 10 to 15. The maxItems setting controls the total across all queries, not the number per query. Add more queries to collect more total results.

**I'm getting results in the wrong language.**

Make sure you have set both the country and language inputs. The language code tells Bing which language to prefer, and the country code sets the regional market. Using both together gives the most accurate localization.

**The scraper is timing out or running slowly.**

Large numbers of queries or a high maxItems value can increase run time. Try reducing the number of queries per run or lowering the maxItems limit. You can also increase the actor's memory in the run settings.

### FAQ

| Question | Answer |
|---|---|
| Do I need a Bing API key to use this scraper? | No. This scraper reads the public Bing search results pages directly. You do not need an Azure account, a Bing Web Search API key, or any other credentials. |
| How many search results can I get per query? | The scraper collects the standard results Bing displays for a query, which is typically the top 10 to 15 organic listings. You can set a higher total limit across multiple queries. |
| Can I scrape Bing results for a specific country? | Yes. Use the country input to set a two-letter code like 'de' for Germany or 'br' for Brazil. This shows the results Bing serves to users in that market. |
| Does this scraper collect paid ads from Bing? | Yes. The scraper captures the listings that appear on the Bing results page, which includes both organic results and paid advertisements. |
| Can I filter results by date? | Yes. The freshness input lets you restrict results to the past Day, Week, or Month. Leave it empty to get results from any time. |
| What format is the output data? | The scraper returns a flat dataset that you can export in CSV, JSON, Excel, or XML format from the Apify platform. |
| Can I run multiple search queries in one run? | Yes. The queries input accepts a list of keywords. Each query is processed as a separate search, and all results are combined into one dataset. |
| Is it legal to scrape Bing Search results? | Scraping public data from Bing is generally permissible, but you should review Microsoft's terms of service and ensure your use case complies with applicable laws and regulations. |
| How do I scrape Bing results in a language other than English? | Set the language input to a two-letter code like 'es' for Spanish or 'fr' for French. Combine it with a matching country code for the most accurate local results. |
| Does this scraper handle Bing's SafeSearch settings? | Yes. You can set SafeSearch to 'off', 'moderate', or 'strict' to control the level of adult content filtering in the results. |

### Related actors

- [google-search-scraper](https://apify.com/parseforge/google-search-scraper?fpr=vmoqkp): Use this instead if you need to scrape Google Search results with the same country, language, and freshness controls.

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

🆘 **Need help?** Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ **Disclaimer.** This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Microsoft Corporation. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

# Actor input Schema

## `maxItems` (type: `integer`):

How many search results to collect per run.

## `queries` (type: `array`):

List of keywords to search on Bing. Each query is a separate search and produces multiple result rows.

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

Two-letter country code that controls Bing's regional results. Examples: `us`, `gb`, `de`, `es`, `mx`, `br`.

## `language` (type: `string`):

Two-letter language code. Examples: `en`, `es`, `de`, `fr`.

## `safeSearch` (type: `string`):

Bing SafeSearch level: `off`, `moderate`, or `strict`.

## `freshness` (type: `string`):

Restrict results by recency: `Day`, `Week`, `Month`, or empty for any time.

## Actor input object example

```json
{
  "maxItems": 10,
  "queries": [
    "apify scraper"
  ],
  "country": "us",
  "language": "en",
  "safeSearch": "moderate",
  "freshness": ""
}
```

# Actor output Schema

## `overview` (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 = {
    "maxItems": 10,
    "queries": [
        "apify scraper"
    ],
    "country": "us",
    "language": "en",
    "safeSearch": "moderate",
    "freshness": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/bing-search-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 = {
    "maxItems": 10,
    "queries": ["apify scraper"],
    "country": "us",
    "language": "en",
    "safeSearch": "moderate",
    "freshness": "",
}

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

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

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

```

## CLI example

```bash
echo '{
  "maxItems": 10,
  "queries": [
    "apify scraper"
  ],
  "country": "us",
  "language": "en",
  "safeSearch": "moderate",
  "freshness": ""
}' |
apify call parseforge/bing-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/bing-search-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/TxSkq9FeAfTnwLxHf/builds/PLEGPPUdxZ4xH9GFq/openapi.json
