---
name: apify-bing-scraper
description: Scrape Bing search results into structured JSON with the Apify Bing Search API Actor (johnvc/bing-search-api). One call per SERP page returns organic rows with page, position, title, snippet, the real destination url (not a tracking redirect) and displayedUrl, plus a date when Bing shows one, with optional ad rows at no extra page cost. City-level location, market and country targeting, safe search levels, and desktop, mobile or tablet device views. No proxies or captcha handling on your side. Use when the user wants a bing scraper, bing scraping, bing search results as JSON or CSV, a bing serp export, or the largest non-Google search feed from code. Pay per page, MCP-ready for Claude and other AI agents.
author: John Cole
author_url: https://github.com/johnisanerd
license: MIT
metadata:
  version: "1.0"
---

# Bing Scraper. SERP Results as Structured JSON

A Bing scraper billed per page: query in, the SERP out as ranked rows with real destination URLs, ads included when you want them.

## When to use this skill

- The user wants a "bing scraper" or asks about "bing scraping" from code.
- They want Bing search results as JSON or CSV for one query or a keyword list.
- They need the real destination URLs, not wrapped redirect links.
- They want the ad load for a query (`include_ads` true) alongside organic rows.

Not for: rank tracking over time (use the companion apify-bing-rank-tracking skill) or other engines (DuckDuckGo, Yandex, Baidu, Naver each have their own Actor, see `references/actor-index.md`).

## What you get

One dataset row per result. `resultType` separates organic rows from ad rows:

- `page` and `position` (position restarts per page; combine them for absolute rank)
- `title`, `snippet`, `url` (real destination), `displayedUrl` (the SERP breadcrumb)
- `date` when Bing shows one, `thumbnail` when the result carries an image
- `query` echo and `errorMessage` on the single row a failed run emits

## Prerequisites

- Apify account (sign up at https://apify.com?fpr=9n7kx3&fp_sid=skillrepo).
- Authentication via `apify login`, or an `APIFY_TOKEN` environment variable (Apify Console, Settings, Integrations).

## The Actor

- Store page: https://apify.com/johnvc/bing-search-api?fpr=9n7kx3&fp_sid=skillrepo
- Actor ID: `johnvc/bing-search-api`
- Pricing: pay per event; see the cost section below and `references/gotchas.md` for live-price commands.

## Run it with the Apify CLI

One page of results for a query:

```bash
apify actors call "johnvc/bing-search-api" -i '{"query":"web scraping tools","max_pages":1}' \
  --json \
  --user-agent apify-awesome-skills/apify-bing-scraper \
  2>/dev/null
```

Two pages with ads, geotargeted to a city:

```bash
apify actors call "johnvc/bing-search-api" -i '{"query":"best crm software","max_pages":2,"include_ads":true,"location":"Seattle, Washington"}' \
  --json \
  --user-agent apify-awesome-skills/apify-bing-scraper \
  2>/dev/null
```

Confirm live pricing and the input schema before a large batch:

```bash
apify actors info "johnvc/bing-search-api" --json \
  --user-agent apify-awesome-skills/apify-bing-scraper \
  2>/dev/null
```

Every call carries the three flags this repo expects: `--json`, `--user-agent apify-awesome-skills/apify-bing-scraper`, and `2>/dev/null`.

## Run it from Claude or another AI agent (MCP)

The Actor is MCP-ready. Add the hosted server URL:

`https://mcp.apify.com/?tools=actors,docs,johnvc/bing-search-api`

Then ask, for example: "Scrape one page of Bing results for "open source password manager" and list the organic links with their positions." MCP setup docs: https://docs.apify.com/platform/integrations/mcp

## Workflow

1. Build the query; `query` is the only required field.
2. Bound the spend with `max_pages` (default 1); the page count is the price.
3. Add `include_ads` true when the commercial layer matters; ad rows are free with the page.
4. Target with `location` ("City, State"), `market` (`en-US`), or `country`; `market` wins when both are set.
5. Read rows; compute absolute rank from `page` and `position`, and filter by `resultType`.

## Inputs

- `query` (string, required): the search term
- `max_pages` (integer, default 1): pages to fetch, the cost driver
- `include_ads` (boolean, default false): also emit ad rows
- `location` (string): city-level geotargeting, for example "Seattle, Washington"
- `country` (string): two-letter country code
- `market` (string): market code such as `en-US`, overrides country
- `safe_search` (enum `Moderate`, `Strict`, `Off`, default `Moderate`)
- `device` (enum `desktop`, `mobile`, `tablet`, default `desktop`)

## Cost

Billing is pay per event, plus a negligible platform fee per dataset row. Prices below are the BRONZE tier at the time of writing; confirm live prices with the info command above.

- About $0.015 per SERP page, regardless of how many rows the page returns.
- A 100-keyword sweep at 1 page each is about $1.50.

Suggested confirmation thresholds: warn the user over about $5; get explicit confirmation over about $20. Present cost as "around $X", never a guarantee.

## Honest limits

- Organic depth per page varies hard by query type; commercial queries can return 2 organic rows against a dozen ads, informational ones return 10. The page price does not change.
- Results reflect the SERP at crawl time for that location and device; reruns can differ.
- Occasional upstream soft blocks resolve on retry; failed pages are logged and not charged.

## Troubleshooting

- Fewer organic rows than expected: that is the query's real SERP; check the ad rows before assuming loss.
- Location seems ignored: use the plain "City, State" form, or pin `market` such as `en-US`.
- One `errorMessage` row: clean failure, stated plainly; retry once before investigating.

See `references/gotchas.md` for cost guardrails and error recovery, and `references/actor-index.md` for the Actor routing table.

## Related Actors

- DuckDuckGo Scraper: https://apify.com/johnvc/DuckDuckGo-Scraper-for-serp-rankings?fpr=9n7kx3&fp_sid=skillrepo
- Yandex Search Scraper: https://apify.com/johnvc/Scrape-Yandex?fpr=9n7kx3&fp_sid=skillrepo
- Baidu Search Scraper: https://apify.com/johnvc/Baidu-Search-Scraper?fpr=9n7kx3&fp_sid=skillrepo
- Naver Search API: https://apify.com/johnvc/naver-search-api?fpr=9n7kx3&fp_sid=skillrepo
