# Bing Search Rank Tracker — Rankings, Rank Changes & Domains (`northbell/bing-search-rank-tracker`) Actor

Track where pages rank on Bing (US market) for your keywords: rank, rank change since the last run, new entries, title, URL, domain and snippet. Add your own or competitors' domains to get their best rank per keyword in a summary row. No login.

- **URL**: https://apify.com/northbell/bing-search-rank-tracker.md
- **Developed by:** [Northbell](https://apify.com/northbell) (community)
- **Categories:** SEO tools, Marketing
- **Stats:** 2 total users, 1 monthly users, 75.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 ranked 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/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 Rank Tracker

See where pages rank on **Bing** for your keywords in the **US market**. Each row is one organic result in Bing's order with its **rank, title, URL, domain and snippet**, plus how it moved since your last run. **$1 per 1,000 ranked results**, no login, no API key.

Run it again (or schedule it) and every result also shows its **previous rank, the rank change and whether it is new in the results**. Add your own domain, a client's or a competitor's to **Watch**, and every keyword also gets a **summary row with their best rank and how it moved** — a daily Bing SEO report from one scheduled run.

### What you get

| Field | What it is |
|---|---|
| `keyword`, `market`, `rank` | the keyword, the market you asked for and the position among organic results (ads, videos, news boxes and Bing's own links are not counted; a URL counts once) |
| `previousRank`, `rankChange`, `isNewInResults` | compared with your previous run of the same keyword and market (`null` on the first run; positive `rankChange` = moved up) |
| `title`, `url`, `displayedUrl`, `domain`, `siteName` | the result as Bing shows it; `url` is the real address, not Bing's redirect, and Bing's own tracking parameters are removed |
| `snippet`, `snippetDate` | the text under the title; `snippetDate` is the date Bing prints before it when there is one ("Sep 12, 2026", "3 days ago") |
| `isWatched` | `true` for results on your watched domains, `false` for the others (`null` when you give no Watch list) |
| `adsCount`, `serpFeatures` | ads on the keyword's first page and which extra blocks it had (`videos`, `news`, `people-also-ask`, `related-searches`, `images`). `null` when the page Bing sent contained none: that means "not seen", not "Bing shows no ads" (see Notes) |

One extra **free** row per keyword (`type: "related"`): `resultsRead`, `pagesRead`, a `note` when Bing stopped early, and `relatedSearches` and `peopleAlsoAsk` when the page had them (`null` otherwise).

With **Watch**, one more free row per keyword (`type: "watch-summary"`): `watchedFound`, `bestRank`, `bestRankBefore`, `bestRankChange` and the list of watched results with their ranks.

### Use it for

- **Bing SEO** — track your pages' rank for the keywords that bring visitors, per country
- **Competitor watch** — who took the top spots this week, which new pages entered the results
- **Content research** — what ranks for a topic, with titles, snippets and domains

### Input

```json
{ "keywords": ["project management software", "task tracker app"], "market": "en-US", "maxResultsPerKeyword": 30, "watch": ["example.com"] }
```

`market` is a language-country code (`en-US`, `en-GB`, `de-DE`, `fr-FR`, `ja-JP` …); `watch` takes domains or page URLs (`example.com`, `https://www.example.com/blog`).

Rankings are remembered per keyword and market in a named key-value store in your Apify account, so the second run already shows rank changes. Schedule it (Apify → Schedules) for a daily history. Keep `maxResultsPerKeyword` the same between runs: a page that was below your depth last time shows up as new.

### Pricing

**$1 per 1,000 ranked results**, plus $0.01 per run. Related, summary and error rows are free. The $0.01 run-start fee is the one charge every run pays, even one that returns nothing.

### Notes

- **Bing does not always answer automated requests honestly.** For many keywords it may return ten results that have nothing to do with the keyword, the results of a *similar* search (a word dropped), or a "no results" page. The Actor checks every first page against the keyword: such a keyword becomes a free **error row** and nothing is charged for it. **Measured on Apify's servers (which are in the US) on 8 October 2026, 15 everyday keywords each: `en-US` 14 of 15 answered correctly, `en-GB` 6 of 15, `de-DE` 2 of 15.** So use it for the US market; other markets work for some keywords only. Retrying a refused keyword straight away rarely changes the answer. The check is a safeguard, not a guarantee: skim the titles of a new keyword before you rely on its ranks. If a keyword is a misspelling or a code that Bing rewrites, turn off **Check that results match the keyword** (then wrong pages are not caught).
- **Paging.** In our checks Bing answered every request for a later page with the first page again, so expect about 10 results per keyword even if you ask for more. The Actor then stops and says so in the free `related` row (`resultsRead`, `note`). You pay only for the results you receive.
- Results are what a signed-out visitor sees in that market, in that language. The market is sent to Bing as the country (`cc`) and language (`setlang`). Bing personalises results for signed-in users, so your own screen can differ.
- `adsCount`, `serpFeatures`, `relatedSearches` and `peopleAlsoAsk` are filled only when Bing puts those blocks into the page it returns. Bing sends them to real browsers, and in our checks never to a plain request, so expect `null` in all four. `snippetDate` is filled when Bing prints a date before the snippet (on many results, not all). `siteName` and `displayedUrl` are Bing's own labels.
- A domain in Watch matches its subdomains too (`example.com` matches `blog.example.com`).
- Titles and snippets are quoted from the pages as Bing shows them. Email addresses and phone numbers in them are removed; the rest of a page's own text (a byline, for example) is left as it is. Stray HTML a site wrote into its own description is removed.

For **keyword ideas** to track, see [Keyword Suggestions — Google, YouTube & Amazon Autocomplete](https://apify.com/northbell/keyword-suggestions-autocomplete). For the same kind of ranking on video, see [YouTube Search Rank Tracker](https://apify.com/northbell/youtube-search-rank-tracker).

### For AI agents

`{"keywords": ["python tutorial"], "maxResultsPerKeyword": 10}` returns Bing's top 10 organic results with rank, title, URL, domain and snippet. Rows have `type`: `result`, `related`, `watch-summary` or `error`. A keyword whose results look unrelated to it comes back as an `error` row instead of ranks (a heuristic check; see Notes).

# Actor input Schema

## `keywords` (type: `array`):

What you would type in the Bing search box. Each keyword returns Bing's organic results in order, with their rank.

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

Language and country as a code. en-US works best: from Apify's servers (in the US) Bing answered 14 of 15 test keywords for en-US, but only 6 of 15 for en-GB and 2 of 15 for de-DE. Other markets are allowed; refused keywords become free error rows. Sent to Bing as the country (cc) and language (setlang).

## `maxResultsPerKeyword` (type: `integer`):

How many organic results to read for each keyword, in Bing's order (10 per page). Ads, videos, news boxes and Bing's own links are not counted. In our checks Bing gave only the first page (about 10 results) to scripted requests; the free related row says how many were read and why it stopped.

## `watch` (type: `array`):

Your own or your competitors' domains, such as example.com or https://www.example.com/blog (subdomains count). Each keyword then gets a summary row with their best rank and how it moved since the last run.

## `checkRelevance` (type: `boolean`):

Bing sometimes answers automated requests with results that have nothing to do with the keyword. With this on (recommended), such a keyword becomes a free error row instead of wrong ranks. Turn it off only for misspellings or codes that Bing rewrites.

## Actor input object example

```json
{
  "keywords": [
    "project management software"
  ],
  "market": "en-US",
  "maxResultsPerKeyword": 30,
  "checkRelevance": true
}
```

# Actor output Schema

## `results` (type: `string`):

Bing's organic results for each keyword, in order, with rank change, domain and snippet.

# 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 = {
    "keywords": [
        "project management software"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("northbell/bing-search-rank-tracker").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 = { "keywords": ["project management software"] }

# Run the Actor and wait for it to finish
run = client.actor("northbell/bing-search-rank-tracker").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 '{
  "keywords": [
    "project management software"
  ]
}' |
apify call northbell/bing-search-rank-tracker --silent --output-dataset

```

## MCP server setup

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

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/B1EUbMyyLjWiLVDMw/builds/VeGCnv1IJrHEBqMlc/openapi.json
