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

Bing Search Scraper pulls organic results, ads, and related searches from Bing for any keyword. Good for rank tracking, SERP research, and watching what shows up for your competitors.

- **URL**: https://apify.com/kawsar/bing-search-scraper.md
- **Developed by:** [Kawsar](https://apify.com/kawsar) (community)
- **Categories:** Developer tools, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.90 / 1,000 results

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.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.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/platform/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

## Bing Search Scraper

Bing Search Scraper fetches organic results, ads, and related searches from Bing for any keyword you give it. Pass in a list of queries; get back ranked results with real destination URLs, titles, snippets, and positions. It pages through results automatically, so pulling 50 results per query is the same input effort as pulling 10. Output goes into Apify's dataset and exports to JSON, CSV, or Excel.

Worth noting upfront: this scrapes Bing specifically, not Google. If you're tracking rankings on both, you'll need both.

### What it does

For each query, it loads the Bing results page and extracts:

- **Organic results** — title, real destination URL, display URL, snippet text, and rank position
- **Ads** — same fields as organic, labeled separately with `isAd: true`
- **Featured snippets** — the answer box Bing shows for definition, how-to, and fact queries
- **Related searches** — the suggestion links at the bottom of each page
- **Estimated result count** — the total results count Bing reports (e.g. "About 1,230,000,000 results")

When you ask for more than 10 results, it paginates automatically.

### Input

| Field | Required | Default | Description |
|-------|----------|---------|-------------|
| `queries` | Yes | — | One or more search keywords to scrape |
| `maxResults` | No | 10 | Max results per keyword (up to 50) |
| `market` | No | en-US | Bing regional index code |
| `safeSearch` | No | Moderate | Off, Moderate, or Strict |
| `freshness` | No | All time | Filter by Day, Week, or Month |
| `language` | No | en | Interface language code |
| `maxItems` | No | 100 | Total dataset cap across all queries |
| `requestTimeoutSecs` | No | 30 | Per-request timeout in seconds |

#### Market codes (common examples)

| Market | Code | Market | Code |
|--------|------|--------|------|
| United States | `en-US` | Germany | `de-DE` |
| United Kingdom | `en-GB` | France | `fr-FR` |
| Canada | `en-CA` | Spain | `es-ES` |
| Australia | `en-AU` | Italy | `it-IT` |
| India | `en-IN` | Japan | `ja-JP` |
| Brazil | `pt-BR` | Netherlands | `nl-NL` |
| Mexico | `es-MX` | Poland | `pl-PL` |

#### Language codes (common examples)

`en`, `de`, `fr`, `es`, `it`, `pt`, `nl`, `ja`, `ko`, `zh-Hans`, `ar`, `ru`

### Example inputs

**Basic keyword search:**
```json
{
  "queries": ["best laptops 2024", "restaurants in NYC"],
  "maxResults": 20,
  "market": "en-US",
  "safeSearch": "Moderate"
}
````

**Multi-market SEO comparison:**

```json
{
  "queries": ["buy running shoes"],
  "maxResults": 30,
  "market": "en-GB",
  "language": "en",
  "safeSearch": "Off"
}
```

**Recent news only:**

```json
{
  "queries": ["OpenAI news", "AI regulation update"],
  "maxResults": 10,
  "freshness": "Day",
  "market": "en-US"
}
```

**German-language results:**

```json
{
  "queries": ["beste Laptops 2024"],
  "maxResults": 20,
  "market": "de-DE",
  "language": "de"
}
```

### Output fields

Each row in the dataset represents one search result:

| Field | Type | Description |
|-------|------|-------------|
| `query` | string | The search query that produced this result |
| `position` | integer | Rank position (1 = top result). Null for ads |
| `resultType` | string | `organic` or `ad` |
| `pageTitle` | string | The result's page title |
| `url` | string | Real destination URL (decoded from Bing's redirect) |
| `displayUrl` | string | Short URL shown in the search result |
| `snippet` | string | Description text shown under the title |
| `isAd` | boolean | `true` if the result is a sponsored ad |
| `isFeaturedSnippet` | boolean | `true` if pulled from an answer box |
| `featuredSnippetText` | string | Answer box text (null if no featured snippet) |
| `relatedSearches` | array | List of related search queries from the page |
| `totalResultsEstimate` | string | Bing's estimated result count for the query |
| `market` | string | Market code used for this query |
| `language` | string | Language code used |
| `safeSearch` | string | Safe search level applied |
| `scrapedAt` | string | ISO 8601 timestamp of when the result was scraped |

### Example output

```json
{
  "query": "best laptops 2024",
  "position": 1,
  "resultType": "organic",
  "pageTitle": "Best Laptops 2024: Our Top Picks - PCMag",
  "url": "https://www.pcmag.com/picks/the-best-laptops",
  "displayUrl": "https://www.pcmag.com › picks › the-best-laptops",
  "snippet": "We test and review hundreds of laptops every year. Here are our top picks across all categories for every budget.",
  "isAd": false,
  "isFeaturedSnippet": false,
  "featuredSnippetText": null,
  "relatedSearches": [
    "best laptop 2024 under 1000",
    "best gaming laptop 2024",
    "best budget laptop 2024",
    "best MacBook 2024"
  ],
  "totalResultsEstimate": "About 4,120,000,000 results",
  "market": "en-US",
  "language": "en",
  "safeSearch": "Moderate",
  "scrapedAt": "2024-01-15T10:30:00.000000+00:00"
}
```

### What people use it for

**SEO rank tracking on Bing** — Bing holds a significant share of desktop and enterprise search traffic (especially in the US, Germany, and Japan). Track where your pages rank and how snippets change over time.

**Competitor SERP monitoring** — Pull the top 20 results for your target keywords weekly. See which competitors are entering or leaving the top positions and what their title/snippet changes look like.

**Keyword research** — Run a batch of candidate keywords and collect the related searches from each SERP. These are real user queries that Bing surfaces, useful for expanding keyword clusters.

**Multi-market research** — Run the same queries across different `market` codes (en-US, en-GB, de-DE, fr-FR) to see how Bing's index differs by country. Useful for international SEO and localization research.

**Content gap analysis** — Pull the top 10 results for your target keyword, collect the snippets, and analyze what topics and angles the ranking pages cover that yours might not.

**News and trend monitoring** — Use `freshness: "Day"` or `freshness: "Week"` to track what's ranking for trending topics in near-real time.

**Ad intelligence** — The actor captures sponsored results separately (`isAd: true`). Use this to monitor which advertisers are bidding on your target keywords and what their ad copy says.

### Scheduling and automation

To run this actor on a schedule:

1. Go to your actor's page on Apify and click **Schedules**
2. Set the interval (daily, weekly, etc.)
3. Save the same input configuration you're using for your keyword set
4. Results will accumulate in the dataset over time

For large keyword sets, consider splitting them across multiple runs with different `maxItems` caps to stay within your plan limits.

### Exporting data

From the Apify dataset view:

- **JSON** — full structured output, all fields
- **CSV** — flat table, good for Excel or Google Sheets
- **JSONL** — line-delimited JSON, useful for streaming pipelines
- **XML** — for legacy integrations

The `relatedSearches` field is an array and will be joined as a comma-separated string in CSV exports.

### Known limitations

Results are a snapshot. Run the same query again an hour later and you may get a slightly different set, since Bing personalizes results by location and session.

Bing changes its page structure occasionally. When that happens, snippet or URL extraction may stop working until the selectors are updated.

Large query batches take time. The actor waits between requests to avoid hitting rate limits, so 100 queries with 10 results each will take several minutes.

The `freshness` filter applies to the whole page, not individual results. Some results on a "Day" filtered page may still be older if Bing considers them highly relevant.

Featured snippets only appear for certain query types (definitions, how-to questions, fact queries). For most commercial or navigational queries, `featuredSnippetText` will be null.

# Actor input Schema

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

One or more keywords to search on Bing. Each query is scraped separately.

## `maxResults` (type: `integer`):

Maximum number of results to return per query. Bing returns up to 10 per page; the actor paginates automatically.

## `market` (type: `string`):

Bing market code that controls the regional index. Examples: en-US, en-GB, de-DE, fr-FR, ja-JP.

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

Safe search filter applied to results.

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

Filter results by recency. Leave empty to get all-time results.

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

Language code for the search interface. Examples: en, de, fr, es, ja.

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

Maximum total number of items to store in the dataset across all queries.

## `requestTimeoutSecs` (type: `integer`):

Per-request timeout in seconds.

## Actor input object example

```json
{
  "queries": [
    "restaurants in NYC",
    "best laptops 2024"
  ],
  "maxResults": 10,
  "market": "en-US",
  "safeSearch": "Moderate",
  "freshness": "",
  "language": "en",
  "maxItems": 100,
  "requestTimeoutSecs": 30
}
```

# 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 = {
    "queries": [
        "restaurants in NYC"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("kawsar/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 = { "queries": ["restaurants in NYC"] }

# Run the Actor and wait for it to finish
run = client.actor("kawsar/bing-search-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 '{
  "queries": [
    "restaurants in NYC"
  ]
}' |
apify call kawsar/bing-search-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Bing Search Scraper",
        "description": "Bing Search Scraper pulls organic results, ads, and related searches from Bing for any keyword. Good for rank tracking, SERP research, and watching what shows up for your competitors.",
        "version": "0.0",
        "x-build-id": "A18uBgaTfr2tvWwnt"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/kawsar~bing-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-kawsar-bing-search-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/kawsar~bing-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-kawsar-bing-search-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/kawsar~bing-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-kawsar-bing-search-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": [
                    "queries"
                ],
                "properties": {
                    "queries": {
                        "title": "Search queries",
                        "type": "array",
                        "description": "One or more keywords to search on Bing. Each query is scraped separately.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "Max results per query",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Maximum number of results to return per query. Bing returns up to 10 per page; the actor paginates automatically.",
                        "default": 10
                    },
                    "market": {
                        "title": "Market / region",
                        "type": "string",
                        "description": "Bing market code that controls the regional index. Examples: en-US, en-GB, de-DE, fr-FR, ja-JP.",
                        "default": "en-US"
                    },
                    "safeSearch": {
                        "title": "Safe search",
                        "enum": [
                            "Off",
                            "Moderate",
                            "Strict"
                        ],
                        "type": "string",
                        "description": "Safe search filter applied to results.",
                        "default": "Moderate"
                    },
                    "freshness": {
                        "title": "Date filter",
                        "enum": [
                            "",
                            "Day",
                            "Week",
                            "Month"
                        ],
                        "type": "string",
                        "description": "Filter results by recency. Leave empty to get all-time results.",
                        "default": ""
                    },
                    "language": {
                        "title": "Language",
                        "type": "string",
                        "description": "Language code for the search interface. Examples: en, de, fr, es, ja.",
                        "default": "en"
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum total number of items to store in the dataset across all queries.",
                        "default": 100
                    },
                    "requestTimeoutSecs": {
                        "title": "Request timeout (seconds)",
                        "minimum": 5,
                        "maximum": 120,
                        "type": "integer",
                        "description": "Per-request timeout in seconds.",
                        "default": 30
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
