# Bing Search Scraper — Web Results & Organic Rankings (`sian.agency/bing-search-scraper`) Actor

Search Bing web results and export organic titles, links, snippets, positions and the estimated match count. One completed-search record includes every returned organic result. JSON preserves the full result list.

- **URL**: https://apify.com/sian.agency/bing-search-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** SEO tools, Business, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $94.28 / 1,000 completed bing search records

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

## Bing Search Scraper — Web Results & Organic Rankings 🔎

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Google Search](https://img.shields.io/badge/Store-Google%20Search-4285F4)](https://apify.com/sian.agency/google-serp-scraper?fpr=sian) [![Bing Jobs](https://img.shields.io/badge/Store-Bing%20Jobs-008373)](https://apify.com/sian.agency/bing-jobs-scraper?fpr=sian) [![Google News](https://img.shields.io/badge/Store-Google%20News-4285F4)](https://apify.com/sian.agency/google-news-scraper?fpr=sian)

#### 🔎 One Bing web search, every returned organic listing included

##### For SEO analysts, market researchers and teams collecting public web sources

### 🔎 What is the Bing Search Scraper — and when should you use it?

The **Bing Search Scraper** turns Bing web search records with organic titles, links, snippets and positions into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.

**Use it when you need:** you need Bing organic web results for a query.

**Use something else when:** you need Bing job listings. Use [Bing Jobs Scraper](https://apify.com/sian.agency/bing-jobs-scraper?fpr=sian) for job listings from Bing Jobs. This actor returns web search listings, not full source pages.

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/bing-search-scraper

**Your agent can pay for its own runs.** This Actor is eligible for [agentic payments](https://docs.apify.com/platform/actors/publishing/monetize), so an agent can discover it, run it and settle the bill over [x402](https://www.x402.org/) (USDC on Base) or [Skyfire](https://www.skyfire.xyz/) — without an Apify account or API token of its own. One completed search is charged, including a valid empty observation. All returned organic listings are included. Failed retrievals have no search-event charge; a separate run-start fee applies.

Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

```text
I want Bing organic web results for research using the Apify Actor `sian.agency/bing-search-scraper`.

Use it when I need: you need Bing organic web results for a query.

Don't use it when: you need Bing job listings — use bing-jobs-scraper instead.

How to call it: set operation to search and provide query. Read organicResults inside the single completed-search record. This version uses US English.

Start with this input:
{
  "operation": "search",
  "query": "coffee shops in Seattle"
}

Ask me which search phrase they want to research, then run the Actor and summarise the results as a table.
```

**Things you can ask your agent for:**

- *Search Bing for coffee shops in Seattle and list the returned sources.*
- *Research a company and export titles, snippets and organic positions.*
- *Save a timestamped Bing search observation for later comparison.*

Machine-readable API, MCP config and OpenAPI definition for this Actor are published at [apify.com/sian.agency/bing-search-scraper.md](https://apify.com/sian.agency/bing-search-scraper.md).

### 📋 Overview

Bing Search Scraper turns a web query into a structured search record. It contains the organic result list, titles, links, snippets, positions and Bing's estimated total matches.

Use it to find sources or save an organic search snapshot. It does not fetch source-page text. Check relevance before using the results: Bing can broaden a query, including quoted phrases.

- ✅ **One billing unit:** One completed search is one event, regardless of its result count.
- 📚 **Complete returned list:** All organic listings from that request are included.
- 🏆 **Organic positions:** Keep the order returned for that search.
- 📊 **Separate counts:** Distinguish actual returned listings from the estimated total matches.
- 📄 **Run report:** Review results, accepted charges and replay input.

The recorded US-English example returned ten organic listings for coffee shops in Seattle. Results vary by query and can change between runs. This version ships US-English web search only.

### ✨ Features

- 🔎 **One query per run:** Enter the phrase you want to research.
- 📰 **Titles and snippets:** Review search summaries before visiting a page.
- 🔗 **Source links:** Export listing URLs and available domains.
- 🏆 **Result positions:** Retain the order returned by Bing.
- 📊 **Estimated match count:** Keep Bing's estimate separately from the returned list length.
- 📦 **Nested JSON:** Preserve every returned organic listing inside one search record.
- 🔍 **Explicit empty shape:** If a valid search returns no organic listings, the row has `empty=true` and an empty list.
- 📄 **Exports and report:** Download JSON, CSV or Excel and open the processing report.

### 🎬 Quick Start

Run the supplied coffee-shops example in the Input tab. Replace the query with your own topic. One completed run produces one search record.

```bash
curl --request POST \
  'https://api.apify.com/v2/acts/sian.agency~bing-search-scraper/runs?token=YOUR_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{"operation":"search","query":"coffee shops in Seattle"}'
```

The response contains run metadata. Wait for completion, then retrieve the default dataset. An empty API input does not run the Console example.

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Enter a web query

Describe the topic, company or place you want to research. The query must contain 1–300 characters.

#### Step 2: Check the budget

Allow for one completed-search event and the separate run-start fee. The actor checks that a search fits before retrieval begins.

#### Step 3: Review the listings

Open the Dataset tab and inspect `organicResults`. Open the run's Output tab for its processing report. Use JSON to retain nested result records.

### 📥 Input Configuration

| Field | Type | Required | Description |
|---|---|---|---|
| `operation` | string | No | `search`, the only operation. |
| `query` | string | Yes | Web search phrase, 1–300 characters. |

```json
{
  "operation": "search",
  "query": "coffee shops in Seattle"
}
```

The query has a Console prefill and no API default. API callers must supply their own query. This version uses the US market and English interface.

Free-plan users can run this actor from Apify Console or MCP. Direct API access requires a paid Apify plan. A blocked API run returns an explanatory rejected record and report with no completed-search charge; the platform run-start fee still applies.

One query is processed per run. There is no query-list input, pagination, market selector, source-page fetch or separate news, image, video, shopping or Maps operation. Free and paid Apify plans receive the same search contents; paid plans have discounted rates.

### 📤 Output

One completed-search row includes the full organic result list. Individual listings do not add charges.

| Field | Type | Description |
|---|---|---|
| `query` | string | Requested search phrase. |
| `resultCount` | integer | Number of organic listings actually returned. |
| `totalOrganicResults` | integer or null | Bing's estimated total matches. |
| `topTitle` | string or null | First organic result title. |
| `topUrl` | string or null | First organic result URL. |
| `organicResults` | array | Complete returned organic listing records. |
| `empty` | boolean | Whether the completed search returned no organic listings. |
| `country` / `language` | string | Fixed `us` and `en` in this version. |
| `status` / `errorMessage` | string / string or null | Outcome and failure explanation. |
| `_operation` / `_fetchedAt` | string | Operation and retrieval timestamp. |

**Recorded example, shortened to the first listing:**

```json
{
  "query": "coffee shops in Seattle",
  "resultCount": 10,
  "totalOrganicResults": 9340,
  "topTitle": "28 Best Coffee Shops in Seattle, WA (2026)",
  "topUrl": "https://mycoffeeexplorer.com/guides/seattle",
  "organicResults": [{
    "title": "28 Best Coffee Shops in Seattle, WA (2026)",
    "link": "https://mycoffeeexplorer.com/guides/seattle",
    "domain": "mycoffeeexplorer.com",
    "snippet": "Discover 28 coffee shops in Seattle, WA. Lighthouse Roasters rated 4.8★. 16 local roasters across 15 neighborhoods. …",
    "position": 1
  }],
  "empty": false,
  "country": "us",
  "language": "en",
  "status": "success"
}
```

The actual record contains all ten listings. A listing can also contain `displayed_link`, `source` and a date label. Dates and snippets may be absent. The estimated total is not a count of rows the actor can retrieve.

A valid empty observation is a successful, billable search record with `organicResults=[]`. Retrieval failures produce an error record and no completed-search charge. JSON preserves nested data; CSV and Excel may encode nested values as text.

### 💼 Use Cases & Examples

#### 1. SEO analysts reviewing organic positions

**Input:** A keyword relevant to a business.
**Output:** Ordered organic titles and URLs.
**Use:** Save a Bing snapshot for comparison in your own reporting.

#### 2. Market researchers collecting sources

**Input:** A market or product query.
**Output:** Source links, domains and snippets.
**Use:** Build a reading list and check each source before drawing conclusions.

#### 3. Content researchers planning an article

**Input:** A subject or question.
**Output:** Relevant-looking titles and summaries.
**Use:** Identify pages to read; the actor does not retrieve full articles.

#### 4. Brand teams checking search listings

**Input:** A company or product phrase.
**Output:** Returned organic results and positions.
**Use:** Review current listings and keep timestamped observations.

#### 5. Data engineers maintaining a search dataset

**Input:** A saved query on a schedule.
**Output:** One structured search observation per run.
**Use:** Store complete result arrays without per-listing charges.

#### 6. AI tool builders finding public references

**Input:** A research query.
**Output:** Titles, snippets and source URLs.
**Use:** Select references for further checking before an agent cites them.

### 🔗 Integration Examples

#### JavaScript / Node.js

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('sian.agency/bing-search-scraper').call({
  operation: 'search', query: 'coffee shops in Seattle',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0].organicResults);
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')
run = client.actor('sian.agency/bing-search-scraper').call(
    run_input={'operation': 'search', 'query': 'coffee shops in Seattle'}
)
for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item.get('organicResults', []))
```

#### cURL: retrieve a completed dataset

```bash
curl 'https://api.apify.com/v2/datasets/YOUR_DATASET_ID/items?format=json&clean=true&token=YOUR_TOKEN'
```

Start a run with the Quick Start request, wait for completion, then use that run's dataset ID.

#### Automation Workflows (N8N / Zapier / Make)

1. **Trigger:** Schedule a web query.
2. **HTTP Request:** Start the actor with your input.
3. **Process:** Wait for completion and retrieve the dataset.
4. **Action:** Save organic results to a spreadsheet or database for review.

### 📊 Performance & Pricing

One **completed-search** event pays for one completed Bing web search. Every returned organic listing is included. A valid empty search is billed because it delivers an explicit observation for that query.

Failed retrievals have no completed-search charge. A separate run-start fee applies to every run, including invalid or billing-limited runs. The actor checks the remaining search budget before retrieval.

| Apify plan | Completed search | Run-start fee | One completed run |
|---|---:|---:|---:|
| FREE | $0.42856 | $0.02 | $0.44856 |
| BRONZE | $0.10714 | $0.005 | $0.11214 |
| SILVER | $0.10071 | $0.005 | $0.10571 |
| GOLD | $0.09428 | $0.005 | $0.09928 |

Enterprise plans use the live price displayed by Apify before the run. These are per-search prices, not per-listing prices. FREE refers to the Apify account plan; it does not mean actor searches cost zero.

There is no guaranteed completion time. Review [current pricing](https://apify.com/sian.agency/bing-search-scraper?fpr=sian) before starting a run.

### ❓ Frequently Asked Questions

**How many dataset rows will I get?**

One completed-search row, containing all organic results returned for the query. Result count varies.

**Does quoted text guarantee exact matches?**

No. Bing can broaden queries or return related listings. Check titles and snippets for relevance.

**What is the difference between resultCount and totalOrganicResults?**

The first is the number of actual returned listings. The second is Bing's estimate of total matches and does not promise that many accessible results.

**Are empty results charged?**

A valid empty search is charged once. Failed retrievals have no completed-search charge. The separate run-start fee still applies.

**Can I select another country, paginate or use Bing Images?**

This focused version supports one US-English web search only. Those controls and other verticals are not exposed.

**Does it retrieve complete source pages?**

No. It returns search listings and links. Visit or retrieve source pages separately if you need their full content.

**Can I automate searches?**

Yes. Save an input and use Apify Schedules. Each run creates a new observation and incurs its own charges.

### 🐛 Troubleshooting

**Results seem unrelated**

Bing may broaden a query. Inspect the returned titles and snippets, then revise the phrase if needed. Do not assume quote marks enforce exact matching.

**Fewer listings than the estimated total**

The estimate and returned list length are different measurements. This version does not paginate through the estimated total.

**No listings returned**

A valid empty observation is billable. Check the phrase and consider a broader query before starting another run.

**The run stops before retrieval**

Read the processing report. Check the maximum charge and account allowance. No completed-search event is charged when retrieval does not start.

**Temporarily unavailable**

Wait before retrying. Data searches are not automatically retried, and failed retrievals do not incur a completed-search event.

### ⚖️ Legal Disclaimer

Search listings describe public web pages and can contain names or contact information that identify people. Use results for a legitimate purpose and follow privacy rules, including GDPR, and applicable service terms.

For background, read [Apify's explanation of web scraping legality](https://blog.apify.com/is-web-scraping-legal/). Consult qualified counsel when you need advice for your use case.

Bing and Microsoft are trademarks of Microsoft Corporation. SIÁN Agency is independent and is not affiliated with or endorsed by Microsoft.

### 🤝 Support

Use the actor's [Issues tab](https://apify.com/sian.agency/bing-search-scraper/issues) for reproducible problems. Include the input and run URL, with sensitive information removed.

- 🛠️ [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian)
- 📧 <apify@sian-agency.online>

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Changelog

This Actor's version history is a separate document: https://apify.com/sian.agency/bing-search-scraper/changelog.md

# Actor input Schema

## `operation` (type: `string`):

Search Bing web results for one query. One completed-search record includes all returned organic listings. Valid empty observations are billed; failed retrievals have no search-event charge.

## `query` (type: `string`):

Web search phrase of 1–300 characters. Required at runtime. The Console example is prefilled; API callers must supply their own query. This focused version uses the US market and English interface.

## Actor input object example

```json
{
  "operation": "search",
  "query": "coffee shops in Seattle"
}
```

# Actor output Schema

## `bingBingSearches` (type: `string`):

Bing web search records with organic titles, links, snippets, positions and estimated total matches. JSON retains every nested result.

## `scrapingSummary` (type: `string`):

HTML summary showing successful and failed results with key metrics

# 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 = {
    "operation": "search",
    "query": "coffee shops in Seattle"
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/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 = {
    "operation": "search",
    "query": "coffee shops in Seattle",
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/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 '{
  "operation": "search",
  "query": "coffee shops in Seattle"
}' |
apify call sian.agency/bing-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sian.agency/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/wQtdV9lEizGzb2uVZ/builds/jk8w7euqOoPartOwt/openapi.json
