# Bing Search Scraper — Organic, Ads, Copilot AI Answer (`khadinakbar/bing-search-scraper`) Actor

Scrape Bing.com SERP — organic results, ads, Copilot AI answer, featured snippet, PAA, related searches, sitelinks. Multi-market, MCP-ready.

- **URL**: https://apify.com/khadinakbar/bing-search-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** SEO tools, MCP servers, AI
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 result extracted (direct or byok serpapi)s

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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 — Organic, Ads, Copilot AI Answer & PAA

Scrape Bing.com search results at scale with a single query or a list of Bing URLs. Returns flat, agent-ready JSON records covering **organic results, sponsored ads, the Microsoft Copilot AI answer, featured snippets, People Also Ask (PAA) questions, related searches, and sitelinks** — all with a unified schema you can drop straight into a dashboard, RAG pipeline, or AI agent.

### What you get

| Field | Description |
|---|---|
| `query` | Original search query string |
| `position` | 1-based rank within its type group (organic #1, ad #1, …) |
| `type` | `organic`, `ad`, `copilot_answer`, `featured_snippet`, `paa`, `related`, `sitelink` |
| `title` | Result title / question / heading |
| `url` | Destination URL (Bing redirect tracking decoded when possible) |
| `displayUrl` | Breadcrumb URL Bing shows above snippet |
| `snippet` | Snippet / description / answer text |
| `date` | Posted/updated date when Bing surfaces one |
| `sitelinks[]` | Sub-links shown under organic results |
| `sources[]` | Citation URLs (Copilot AI answer only) |
| `marketCode` | Bing market used (e.g. `en-US`) |
| `scrapedAt` | ISO timestamp |

### When to use it

- **SEO research** — track Bing rank for any keyword across 33 countries.
- **Brand monitoring** — see how your brand surfaces on Bing + Copilot AI answers (Microsoft's grounding model now powers Copilot in Windows, Edge, and ChatGPT search).
- **AI grounding pipelines** — diversify beyond Google with a second SERP source for LLM retrieval.
- **Competitive intel** — capture sponsored ads, featured snippets, and related search demand signals.

**Not for:** Bing Maps (use `bing-maps-scraper`) · Google SERP (use `scrape-google-serp`) · Google AI Overviews (use `google-ai-overviews-scraper`).

### Pricing — Pay Per Event

| Event | Price | When |
|---|---|---|
| Actor start | $0.00005 | Once per run |
| Result extracted | **$0.003** per record | Direct Bing scrape, OR SerpApi fallback when you provide your own SerpApi key (BYOK) |
| SerpApi managed fallback result | **$0.005** per record | When the managed SerpApi fallback runs (no BYOK key) |

A typical 30-results-per-query run across 10 queries costs ~$0.90 max on the direct path; managed-fallback runs are ~$1.50 max. The actor stops as soon as `maxResultsPerQuery` is reached — you never pay for results past the cap.

### Reliability — built-in SerpApi fallback

When direct Bing scraping blocks or returns zero records, the actor automatically falls back to SerpApi (`engine=bing`). Three modes via `fallbackMode`:

- `auto` (default) — direct Bing first; SerpApi only fills in zero-result queries.
- `always` — SerpApi for every query (skip direct scrape entirely; highest reliability).
- `never` — direct only (no fallback).

Two key sources:
- **Managed (default)** — the actor uses the owner's SerpApi account. Premium $0.005/result covers SerpApi cost + margin.
- **BYOK** — pass `serpApiKey` (your SerpApi key from serpapi.com) and the actor uses YOUR account at the standard $0.003/result rate.

Each output record has a `source` field: `bing-direct` or `serpapi`, so you always know where the data came from.

### Input

```json
{
  "queries": [
    "best crm software 2026",
    "apify web scraping"
  ],
  "country": "US",
  "language": "en",
  "safeSearch": "moderate",
  "maxResultsPerQuery": 30,
  "includeAds": true,
  "includeCopilotAnswer": true,
  "includeRelatedSearches": true
}
````

Required: `queries[]` — free-text strings or full `https://www.bing.com/search?q=...` URLs.

Optional fallback control:

```json
{
  "fallbackMode": "auto",
  "serpApiKey": "your-serpapi-key-here-optional"
}
```

All other fields default to sensible values. Country and language combine into a Bing market code (`en-US`, `de-DE`, `es-ES`, …). Country list covers 33 ISO codes. SafeSearch maps directly to Bing's `adlt` parameter (`OFF`, `MODERATE`, `STRICT`).

### Example output (organic record)

```json
{
  "query": "best crm software 2026",
  "position": 1,
  "type": "organic",
  "title": "10 Best CRM Software in 2026 — Forbes Advisor",
  "url": "https://www.forbes.com/advisor/business/software/best-crm-software/",
  "displayUrl": "www.forbes.com › advisor › business › software",
  "snippet": "Our editors evaluated dozens of CRMs and picked the top 10 for 2026 based on pricing, features, ease of use, and customer support quality...",
  "date": null,
  "sitelinks": [
    { "title": "Pricing", "url": "https://www.forbes.com/advisor/business/software/best-crm-software/#pricing" }
  ],
  "sources": [],
  "marketCode": "en-US",
  "scrapedAt": "2026-06-13T14:22:31.812Z",
  "source": "bing-direct"
}
```

### Use via Apify MCP (for Claude, ChatGPT, Cursor)

The actor is automatically exposed as `apify--bing-search-scraper` in the Apify MCP server. Any MCP-capable LLM can call it directly:

```text
Use the Bing Search Scraper to get the top 10 organic results
plus any Copilot AI answer for "best crm software 2026" in the US.
```

The agent will call the actor, receive a flat dataset, and reason over it without any glue code.

### Use via JavaScript

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('khadinakbar/bing-search-scraper').call({
    queries: ['best crm software 2026'],
    country: 'US',
    maxResultsPerQuery: 30,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Use via Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("khadinakbar/bing-search-scraper").call(run_input={
    "queries": ["best crm software 2026"],
    "country": "US",
    "maxResultsPerQuery": 30,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

### Use via cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~bing-search-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"queries":["best crm software 2026"],"country":"US","maxResultsPerQuery":30}'
```

### How it works

- **CheerioCrawler** for static HTML extraction — fast, low memory.
- **Apify residential proxy** with country-targeted IPs and session pool (30 sessions, 20 uses each).
- **Multi-selector fallbacks** for every block (organic, ads, Copilot, PAA, related) — robust against Bing's frequent class-name rotation.
- **Bing redirect decoding** (`/ck/a?…u=a1<base64>`) so the URLs you get are real destinations.
- **Automatic pagination** until `maxResultsPerQuery` is reached, capped at 20 pages per query.
- **Honest-fail** — if Bing blocks all requests, the run fails clearly with an actionable error. Partial success is preserved.

### Supported markets

US, GB, CA, AU, DE, FR, ES, IT, NL, BR, MX, IN, JP, CN, KR, RU, TR, AE, SG, ZA, SE, NO, DK, FI, PL, PT, ID, TH, VN, PH, MY, AR, CL — combined with 22 language codes for any Bing market combination.

### Related actors in this portfolio

- [scrape-google-serp](https://apify.com/khadinakbar/scrape-google-serp) — Google SERP equivalent.
- [google-ai-overviews-scraper](https://apify.com/khadinakbar/google-ai-overviews-scraper) — Google AI Overview answers.
- [google-news-scraper](https://apify.com/khadinakbar/google-news-scraper) — Google News articles.
- [ai-search-brand-monitor](https://apify.com/khadinakbar/ai-search-brand-monitor) — track brand mentions across AI search engines.

### FAQ

**How often does Bing block the actor?**
Bing's anti-bot is lighter than Google's. Combined with residential proxies and session consistency, success rate sits around 97-99%. The actor retires sessions on captcha or block detection and rotates automatically.

**Does it scrape Copilot's full chat?**
No — only the Copilot AI answer block that appears at the top of regular Bing SERP results. For full Copilot conversations, Microsoft restricts access and that's outside this actor's scope.

**Can I scrape Bing Images or Bing News?**
This actor focuses on Bing Web Search. Pass any `https://www.bing.com/search?q=...` URL with custom filters (e.g. `&filters=ex1:"ez1"` for date filters) and the actor will respect them.

**Pagination — how many pages does it hit?**
Up to 20 pages per query, capped earlier when `maxResultsPerQuery` is reached.

### Legal & ethical use

This actor scrapes publicly accessible Bing.com search results — the same data anyone can see in a browser. You are responsible for:

- complying with Microsoft's Bing Terms of Use and `robots.txt`;
- respecting copyright on extracted content;
- not using the data for spam, malicious automation, or to circumvent paid Microsoft Bing Search API agreements where they apply;
- complying with GDPR, CCPA, and other applicable data-protection laws when processing any personal data surfaced in results.

The author is not affiliated with or endorsed by Microsoft or Bing. Bing™ and Microsoft Copilot™ are trademarks of Microsoft Corporation.

# Actor input Schema

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

List of free-text search queries (e.g., 'best crm software 2026') or full Bing search URLs (https://www.bing.com/search?q=...). Each query produces one or more result records. Defaults to a sample marketing query. NOT for Bing Maps URLs — use the bing-maps-scraper actor instead.

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

Two-letter ISO country code (e.g., 'US', 'GB', 'DE') used for IP geo-targeting via Apify residential proxy and Bing market hint. Defaults to 'US'. NOT a city name or 3-letter code.

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

Two-letter ISO language code for Bing UI/results filter (e.g., 'en', 'es', 'de'). Combines with country to form the Bing market parameter (e.g., en + US = en-US). Defaults to 'en'. NOT a locale string like 'en-US'.

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

Bing SafeSearch level: 'off' = no filter, 'moderate' = blur explicit images only, 'strict' = filter all adult content. Defaults to 'moderate'. NOT a content quality filter.

## `maxResultsPerQuery` (type: `integer`):

Hard cap on result records emitted per query, including organic, ads, Copilot answer, PAA, and related searches. Defaults to 50. Range 1-200. NOT the number of Bing result pages — pagination is automatic until this cap is reached.

## `includeAds` (type: `boolean`):

When true, paid ads at top/bottom of SERP are extracted as records with type='ad'. Defaults to true. NOT a setting for Microsoft Advertising API.

## `includeCopilotAnswer` (type: `boolean`):

When true, the Copilot/AI Overview answer block above results is extracted as one record with type='copilot\_answer'. Defaults to true. NOT a separate Copilot Chat API call.

## `includeRelatedSearches` (type: `boolean`):

When true, 'People also ask' (PAA) questions and 'Related searches' suggestions are emitted as records with type='paa' or 'related'. Defaults to true. NOT scraping of PAA expanded answers — only the questions and related queries are returned.

## `fallbackMode` (type: `string`):

Controls when the SerpApi (engine=bing) fallback runs. 'auto' (default) — Bing direct first; SerpApi only for queries the direct scrape returned zero records for. 'always' — skip Bing direct, use SerpApi for every query (most reliable, higher cost). 'never' — direct Bing only, no fallback. NOT a setting for the Microsoft Bing Search API.

## `serpApiKey` (type: `string`):

Your own SerpApi key from serpapi.com. When provided, the actor uses YOUR account for SerpApi fallback calls and you pay the standard $0.003/result price (no premium). When empty, fallback uses the actor owner's managed SerpApi account at the premium $0.005/result rate. NOT a Bing or Microsoft Azure key.

## `proxyConfiguration` (type: `object`):

Apify Proxy configuration. Defaults to residential proxy with country-targeted IP for reliable Bing access. Override only if you have a specific proxy strategy.

## Actor input object example

```json
{
  "queries": [
    "https://www.bing.com/search?q=ai+coding+assistants"
  ],
  "country": "US",
  "language": "en",
  "safeSearch": "moderate",
  "maxResultsPerQuery": 30,
  "includeAds": true,
  "includeCopilotAnswer": true,
  "includeRelatedSearches": true,
  "fallbackMode": "auto",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

One record per result. Fields follow dataset\_schema.json (query, position, type, title, url, displayUrl, snippet, date, sitelinks, sources, marketCode, scrapedAt).

## `datasetId` (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 = {
    "queries": [
        "best crm software 2026",
        "apify web scraping"
    ],
    "country": "US",
    "language": "en",
    "safeSearch": "moderate",
    "maxResultsPerQuery": 30,
    "includeAds": true,
    "includeCopilotAnswer": true,
    "includeRelatedSearches": true,
    "fallbackMode": "auto",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/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": [
        "best crm software 2026",
        "apify web scraping",
    ],
    "country": "US",
    "language": "en",
    "safeSearch": "moderate",
    "maxResultsPerQuery": 30,
    "includeAds": True,
    "includeCopilotAnswer": True,
    "includeRelatedSearches": True,
    "fallbackMode": "auto",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/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": [
    "best crm software 2026",
    "apify web scraping"
  ],
  "country": "US",
  "language": "en",
  "safeSearch": "moderate",
  "maxResultsPerQuery": 30,
  "includeAds": true,
  "includeCopilotAnswer": true,
  "includeRelatedSearches": true,
  "fallbackMode": "auto",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call khadinakbar/bing-search-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Bing Search Scraper — Organic, Ads, Copilot AI Answer",
        "description": "Scrape Bing.com SERP — organic results, ads, Copilot AI answer, featured snippet, PAA, related searches, sitelinks. Multi-market, MCP-ready.",
        "version": "0.2",
        "x-build-id": "LPXX2JfIBNNtHhEov"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/khadinakbar~bing-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-khadinakbar-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/khadinakbar~bing-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-khadinakbar-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/khadinakbar~bing-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-khadinakbar-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 or Bing URLs",
                        "type": "array",
                        "description": "List of free-text search queries (e.g., 'best crm software 2026') or full Bing search URLs (https://www.bing.com/search?q=...). Each query produces one or more result records. Defaults to a sample marketing query. NOT for Bing Maps URLs — use the bing-maps-scraper actor instead.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "country": {
                        "title": "Country code",
                        "enum": [
                            "US",
                            "GB",
                            "CA",
                            "AU",
                            "DE",
                            "FR",
                            "ES",
                            "IT",
                            "NL",
                            "BR",
                            "MX",
                            "IN",
                            "JP",
                            "CN",
                            "KR",
                            "RU",
                            "TR",
                            "AE",
                            "SG",
                            "ZA",
                            "SE",
                            "NO",
                            "DK",
                            "FI",
                            "PL",
                            "PT",
                            "ID",
                            "TH",
                            "VN",
                            "PH",
                            "MY",
                            "AR",
                            "CL"
                        ],
                        "type": "string",
                        "description": "Two-letter ISO country code (e.g., 'US', 'GB', 'DE') used for IP geo-targeting via Apify residential proxy and Bing market hint. Defaults to 'US'. NOT a city name or 3-letter code.",
                        "default": "US"
                    },
                    "language": {
                        "title": "Language code",
                        "enum": [
                            "en",
                            "es",
                            "de",
                            "fr",
                            "it",
                            "pt",
                            "nl",
                            "ru",
                            "ja",
                            "ko",
                            "zh",
                            "ar",
                            "tr",
                            "pl",
                            "sv",
                            "no",
                            "da",
                            "fi",
                            "id",
                            "th",
                            "vi",
                            "hi"
                        ],
                        "type": "string",
                        "description": "Two-letter ISO language code for Bing UI/results filter (e.g., 'en', 'es', 'de'). Combines with country to form the Bing market parameter (e.g., en + US = en-US). Defaults to 'en'. NOT a locale string like 'en-US'.",
                        "default": "en"
                    },
                    "safeSearch": {
                        "title": "SafeSearch filter",
                        "enum": [
                            "off",
                            "moderate",
                            "strict"
                        ],
                        "type": "string",
                        "description": "Bing SafeSearch level: 'off' = no filter, 'moderate' = blur explicit images only, 'strict' = filter all adult content. Defaults to 'moderate'. NOT a content quality filter.",
                        "default": "moderate"
                    },
                    "maxResultsPerQuery": {
                        "title": "Max results per query",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Hard cap on result records emitted per query, including organic, ads, Copilot answer, PAA, and related searches. Defaults to 50. Range 1-200. NOT the number of Bing result pages — pagination is automatic until this cap is reached.",
                        "default": 50
                    },
                    "includeAds": {
                        "title": "Include sponsored ads",
                        "type": "boolean",
                        "description": "When true, paid ads at top/bottom of SERP are extracted as records with type='ad'. Defaults to true. NOT a setting for Microsoft Advertising API.",
                        "default": true
                    },
                    "includeCopilotAnswer": {
                        "title": "Include Microsoft Copilot AI answer",
                        "type": "boolean",
                        "description": "When true, the Copilot/AI Overview answer block above results is extracted as one record with type='copilot_answer'. Defaults to true. NOT a separate Copilot Chat API call.",
                        "default": true
                    },
                    "includeRelatedSearches": {
                        "title": "Include related searches & PAA",
                        "type": "boolean",
                        "description": "When true, 'People also ask' (PAA) questions and 'Related searches' suggestions are emitted as records with type='paa' or 'related'. Defaults to true. NOT scraping of PAA expanded answers — only the questions and related queries are returned.",
                        "default": true
                    },
                    "fallbackMode": {
                        "title": "SerpApi fallback mode",
                        "enum": [
                            "auto",
                            "always",
                            "never"
                        ],
                        "type": "string",
                        "description": "Controls when the SerpApi (engine=bing) fallback runs. 'auto' (default) — Bing direct first; SerpApi only for queries the direct scrape returned zero records for. 'always' — skip Bing direct, use SerpApi for every query (most reliable, higher cost). 'never' — direct Bing only, no fallback. NOT a setting for the Microsoft Bing Search API.",
                        "default": "auto"
                    },
                    "serpApiKey": {
                        "title": "SerpApi API key (BYOK — bring your own key, optional)",
                        "type": "string",
                        "description": "Your own SerpApi key from serpapi.com. When provided, the actor uses YOUR account for SerpApi fallback calls and you pay the standard $0.003/result price (no premium). When empty, fallback uses the actor owner's managed SerpApi account at the premium $0.005/result rate. NOT a Bing or Microsoft Azure key."
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify Proxy configuration. Defaults to residential proxy with country-targeted IP for reliable Bing access. Override only if you have a specific proxy strategy.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
