Blog/Search & RAG
5 min read

Bing SERP Tracker API: Track Bing Positions per Call

Track Bing rankings for a list of keywords with one call per keyword: numbered organic results, total results and the parameters, billed per call.

Bing SERP Tracker API: Track Bing Positions per Call

Get today's Bing positions for a list of keywords, with the parameters that produced them. Paste this into your agent:

Set up https://monid.ai/SKILL.md, and then use Monid to check where example.com ranks on Bing in the US for "bing serp tracker" and "bing rank checker", and give me a table with the keyword, the position, the title and the total result count.

One prompt reads a Bing page per keyword. 1 min setup · 12-26 hrs saved.

You have keywords, and you want to know where a site sits on Bing for each of them today, then again tomorrow. Most answers to that are dashboards built for a person to look at. This guide shows the data route: one call per keyword from your agent, numbered organic results back as JSON, and the traps in that output. We ran two Bing endpoints and two look-alikes live on 2026-10-16, so the fields below are what came back. It runs through Monid, the OpenRouter for agent tools: one key, one balance, every tool priced per call.

What is the easiest way to track Bing positions with an API?

Monid. Microsoft retired the Bing Search API, so there is no first-party endpoint to call any more; through Monid your agent calls a Bing search endpoint with a keyword and gets the numbered results back, with no platform contract and no vendor account to set up. The retirement and what replaced it are covered in Bing Search API retired: what actually replaces it.

  • Pay per call. One Bing results page costs $0.00015 on one endpoint and $0.002 on another (Verified 2026-10-16 on the web search tools page). Buy calls as you need them: no monthly plan and no minimum top-up. Discovery and inspection are free; only a run bills.
  • One install, every API. The same key and balance call the Bing endpoints and every other tool on Monid. Reading a competitor page that moved is another call on the same balance, not another vendor.
  • Lives inside your agent. Install the CLI, add your key, run the prompt above, and the tool is there whenever your agent needs a position, with nothing to keep running. Your agent reads SKILL.md and learns the rest, so setup is about a minute.

At the lower price, checking 50 keywords costs about $0.0075 (Verified 2026-10-16).

How do you check Bing positions for a list of keywords?

Run one search call per keyword and loop it over your list. There are two Bing endpoints on Monid, and both return organic results with a numbered position for a keyword and a country.

RouteWhat you getCost shapeFits
Bing Webmaster ToolsYour own site's performance on BingFreeDomains you can verify
Rank tracker dashboardCharts, reports, schedulingSubscriptionA person who opens it on Monday
Build your own scraperWhatever your parser coversYour hoursOne fixed page you will maintain
Monid Bing endpointsA live Bing page per keyword, as JSONPay per call, buy flexiblyKeyword lists, scheduled jobs, agents

Monid fits a list because the work is the same call repeated, and you pay for the keywords you check and nothing between runs.

For agents

Grab an API key at app.monid.ai, then paste this to your agent and hand it the key:

set up https://monid.ai/SKILL.md

It learns the whole discover, inspect, run workflow itself. More in the agent quickstart.

For humans

npm install -g @monid-ai/cli
monid keys add -k <your-api-key> -l main

Inspect, then run one

Find the Bing endpoints, read the schema, then check one keyword:

monid discover -q "bing search results"
monid inspect -p litescrape -e /bing/search
monid run -p litescrape -e /bing/search --query '{"q":"bing serp tracker","cc":"US"}' -w

The second endpoint takes a body instead of a query string:

monid inspect -p dataforseo -e /serp/bing-organic
monid run -p dataforseo -e /serp/bing-organic -i '{"keyword":"bing serp tracker","location_code":2840,"language_code":"en","depth":10}' -w

Loop it over your list

Put one keyword per line in keywords.txt, and write one file per keyword:

mkdir -p out
while read -r k; do
  monid run -p litescrape -e /bing/search --query "{\"q\":\"$k\",\"cc\":\"US\"}" -w > "out/$(echo "$k" | tr ' ' '-').json"
done < keywords.txt

Each keyword bills one call. For the general case of keeping a position series, the argument and the arithmetic are in Rank Tracking API: The Hard Part Is Not the Fetch.

Or hand the whole job to an agent

Give this to your agent

$Set up https://monid.ai/SKILL.md, and then use Monid to check where my domain sits on Bing for these 20 keywords, store the position plus the country and device it ran under, and flag any keyword where the page returned fewer results than usual.

Can you scrape Bing yourself with Python?

Yes, and for one query it is an afternoon. You request the results page with requests, parse the result list, and read the position from the order of the items.

The cost is everything around the parser. You need proxies and retries because a rank checker sends the same kind of request thousands of times, a way to set country, language and device so that today's number is comparable with last week's, and a parser you repair every time the page layout changes. The first working version takes hours and the upkeep does not end.

The trickiest part is that the page numbers things that are not organic results. On 2026-10-16 we scraped the Bing page for "bing serp tracker" and the numbered list ran from 1 to 14: item 4 was a block of videos, item 12 was a People also ask block and item 14 was a notice that some results had been removed. The organic results in that list were not numbered 1 to 10. A parser that trusts the visible numbers will give your pages the wrong position.

The Monid route is the choice for anything you will run more than once. The fetch, the locale handling and the parsing are maintained for you, the output is JSON with a position field, and a page is $0.00015 on the lighter endpoint (Verified 2026-10-16).

What does Bing SERP data look like, and what can you build with it?

Bing SERP data is the ordered list of results for a keyword, and both endpoints return it as typed JSON. We ran each on 2026-10-16 for the keyword "bing serp tracker" in the US, so the fields below are what came back.

The response from the lighter endpoint

{ "search_metadata": { "status": "Success", "total_time_taken": 0.551,
                       "bing_url": "https://www.bing.com/search?q=bing+serp+tracker&cc=US" },
  "search_parameters": { "q": "bing serp tracker", "cc": "US", "device": "desktop", "engine": "bing" },
  "search_information": { "total_results": 9340 },
  "organic_results": [
    { "position": 1, "title": "Free Bing Rank Checker — Live SERP Positions - SEOmator",
      "link": "https://seomator.com/bing-serp-rank-checker",
      "displayed_link": "https://seomator.com › bing-serp-rank-checker",
      "snippet": "Oct 1, 2026 · See where your site ranks in Bing for any keyword ..." } ],
  "pagination": { "current": 1, "next": "https://www.bing.com/search?q=bing+serp+tracker&cc=US&first=11" } }

Each organic result carries a position, a title, a link, a displayed_link, a snippet and a tracking_link that goes through Bing. search_parameters echoes your query back with the device and engine, search_information holds the total result count, and pagination names the next pages, including a ready-made request for the next one. The call returned nine results on page one.

The response from the fuller endpoint

The second endpoint returns a list with one task: the keyword, se_domain (bing.com), the location_code and language_code, the check_url, a datetime, se_results_count (9,340), pages_count and items_count. Each item has rank_group and rank_absolute, the page, a domain, title, url, breadcrumb, description and flags such as is_featured_snippet. It returned ten items, and item_types listed only organic for this keyword. The domain field makes the lookup you actually need a one-liner: find the first item whose domain is yours.

What you can build with it

  • A position series for your own keywords. Run the loop on a schedule and keep one row per keyword per day, as in automating SERP tracking with a structured search API.
  • A competitor watch. Pull the top ten for the keywords you care about and list the domains that appear most, which Webmaster Tools cannot show you for sites you do not own.
  • A change alert. Compare today's domain list with yesterday's and flag any keyword where a new domain entered the top ten or yours dropped out.

What goes wrong when you track Bing positions at scale?

Five things show up when you read the output of more than one call. All five are from the 2026-10-16 runs.

Why is a Google endpoint not a Bing tracker?

Because it answers a different search engine. The search endpoint api.strale.io/x402/google-search returns a numbered position per result, which looks like what a rank tracker needs, but it searches Google. It costs $0.1188 a call (Verified 2026-10-16). Inspect it for free:

monid discover -q "search engine results with positions"
monid inspect -p api.strale.io -e /x402/google-search
monid run -p api.strale.io -e /x402/google-search -w \
  --query '{"query": "your keyword", "country": "us"}'

That run is the right call for a Google series, kept in its own table next to the Bing one. A number from it never goes in a column labelled Bing.

Why is a relevance-ranked index not Bing?

Because it orders results by its own rules. We ran context.dev/web/search for "bing serp tracker" with country us. It returned ten results with a relevance label of high (six), medium (three) or low (one) and no position field. The first result was sitechecker.pro, which is not on Bing's first page for that keyword at all. seomator.com was the top Bing result and was fifth here, and the list held two near-identical forbes.com pages. It is a good search product for an agent that needs documents to read, which the three kinds of SERP API explains, and a position from it is not a Bing position. Check the schema before you build: a numbered position means a results page, a relevance label means an index.

Why does the same page give a different position in different sources?

Because sources count differently. The two Bing endpoints agreed on the first nine results in the same order, and both reported 9,340 total results. The fuller endpoint returned a tenth, a Bing Webmaster Tools help page, which the lighter one did not, and the raw page numbered that same page as item 11 because a video block sat in the list. So position 10, position 11 and a missing tenth row are all the same page. Pick one source for a series, never mix two, and write down which one.

Why must you store the parameters with the position?

Because a position without its parameters cannot be compared. The response echoes the query, country, device and engine in search_parameters, so keep them in the row:

row = {
    "engine": "bing", "keyword": kw, "checked_at": now_utc(),
    "position": my_position_or_none(res),
    "total_results": res["search_information"]["total_results"],
    "params": res["search_parameters"],
    "source": "litescrape:/bing/search",
}

Record a missing position as absent rather than as 100: "not on the page" and "position 100" are different facts, and averaging them produces nonsense. If the series should reach beyond ten, ask for it explicitly: the fuller endpoint bills per page of 10 results, so a depth of 100 is ten pages, and the lighter one takes a first offset for the next page.

What does a list cost, and how long does it take?

Each call is one billed page. Our four runs billed $0.00253, $0.002533, $0.00015 and $0.002, $0.007213 in total (Verified 2026-10-16). A keyword costs $0.00015 on the lighter endpoint and $0.002 on the fuller one, so 50 keywords checked daily for 30 days is about $0.225 on the first and $3.00 on the second. The lighter call took about two seconds on the wall clock and the fuller one about five and a half.

Which endpoint should I use for which job?

EndpointWhat it doesInputBillingPrice (Verified 2026-10-16)
litescrape/bing/searchBing page as JSON: numbered organic results, total results, pagingq, cc or mkt, first, devicePer call$0.00015
dataforseo/serp/bing-organicBing page with rank, domain, breadcrumb, flags, up to 200 deepkeyword, location_code, language_code, depthPer page of 10$0.002
context.dev/web/searchRelevance-ranked index results, no positionquery, numResults, countryPer result$0.000253
context.dev/web/scrape/markdownReads one page as Markdown, such as a competitor page that movedurlPer call$0.002533
api.strale.io/x402/google-searchNumbered Google results, for a Google seriesquery, country, languagePer call$0.1188

Prices Verified 2026-10-16 with monid inspect. The first two rows are the Bing trackers. Use the lighter one for a daily list where the position and the total count are enough, and the fuller one when you want the domain and the rank group on every row or a depth beyond one page. The last three rows answer different questions.

When is another route a better fit?

You only care about sites you own. Bing Webmaster Tools has a Search Performance report for your own site's performance on Bing. It is free, it is first-party, and it measures real impressions rather than one snapshot of one query, so for a verified property it is the better data. It cannot show a competitor.

You want a dashboard rather than data. Ahrefs, Semrush, SE Ranking and the dedicated rank trackers cover Bing, ship the charts and handle client reporting. If somebody needs to look at this on a Monday, buy the thing that looks at it.

You need history. A call is a snapshot of the page when you call it. It cannot tell you where you ranked last year; the series starts the day you start storing.

And the disclosure: we resell these endpoints. The most useful thing in this post is the habit that costs nothing whoever you buy from: keep the engine, the country and the source next to the position, and never put a Google or index number in a Bing column.

Conclusion

The quickest way to track Bing positions for a list of keywords is one search call per keyword through Monid: $0.00015 a call on the lighter endpoint (Verified 2026-10-16), one key for this and every other tool, about a minute to set up and ready inside your agent whenever you need a number. Building your own scraper works for one query and costs hours of proxies, parsing and upkeep; Monid keeps the fetch and the parsing maintained.

Two things matter more than the endpoint you pick. A position is only as good as the source it came from: a Google endpoint and a relevance-ranked index both return numbers that look like Bing's, and neither is. And a series needs its parameters beside every row, because the same keyword under a different country or device is a different measurement.

How we estimated the time saved: building and running your own Bing position tracker is roughly 8 to 16 hours for the fetch layer, locale handling and the result parser, plus 4 to 10 hours for the first month of upkeep as the page changes. That is 12 to 26 hours. The 1 minute is the install, key and first call once you already have a Monid key.

Free next step: run monid inspect -p litescrape -e /bing/search, then make one call for a keyword whose Bing result you can see in a browser and compare the first page with the organic_results. Start at monid.ai.

FAQ

Is there a Bing SERP tracker API?

Yes, two of them are available on Monid. litescrape/bing/search returns the numbered organic results for a keyword at $0.00015 a call (Verified 2026-10-16), and dataforseo/serp/bing-organic returns a fuller record per page of 10 results at $0.002.

How do I check my Bing ranking for free?

Verify your site in Bing Webmaster Tools and open the Search Performance report, which is free and covers your own site. For a competitor or a long keyword list, Monid bills per call, with no monthly plan and no minimum top-up.

Can I track Google, Yahoo and Bing in one tracker?

Yes, as separate series. Each engine needs its own endpoint, its own stored parameters and its own column, because a Google position and a Bing position for the same keyword are different measurements. Never average across them.

What should a Bing SERP report contain?

The position, the total result count, the title and URL, and the parameters the check ran under: country, device and the endpoint it came from. The two Bing endpoints both return the country or location and a total result count (9,340 for our test keyword), so the report can show them without extra work.

Why does my Bing position differ between tools?

Because tools count and sample differently. On 2026-10-16 two Bing endpoints agreed on the first nine results but one returned a tenth that the other did not, and the raw Bing page numbered that same result 11. Choose one source for a series and keep it.

Published August 2026.

bing serp trackerbing rank trackingserp apibing webmaster toolsrank tracking