~ / guides / How to Scrape Bing Video Search Results (2026)

How to Scrape Bing Video Search Results (2026)

GL
Greta Lind
Bing data engineer · about the author
the short version
  • The official Bing Video Search API is gone: Microsoft retired the whole Bing Search family, video included, on August 11, 2025 (Microsoft). Every route in 2026 reads the live /videos/search page or uses a scraper API.
  • A plain requests + BeautifulSoup parse of Bing's .mc_vtvc video cards returned about 10 results for me. Bing lazy-loads the rest on scroll, so the full set needs Selenium or an API.
  • Bing packs the duration, thumbnail, and real source URL into a JSON payload on each card and wraps the card link in a Bing redirect, so a naive .get_text() parse gets the title and channel and misses everything else.
  • The no-block route is a scraper API: one GET to ChocoData returns video title, thumbnail, duration, channel, and source URL as JSON, with the redirect resolved and the market pinned to en-US.

The fastest way to scrape Bing videos used to be the official Video Search API. That endpoint is gone in 2026, so this guide covers the routes that still return data: a Python parse of the live bing.com/videos/search page, and a scraper API that hands back clean JSON.

I ran every method below against live Bing video pages in July 2026. I show you the exact Python, the CSS selectors that actually match Bing’s video cards, the fields Bing hides inside the markup, and the managed route that skips the blocking entirely.

Can you still scrape Bing video search results in 2026?

You can still scrape Bing video search results in 2026, but only by reading the live /videos/search page, because the official API that used to serve this data no longer exists. Microsoft retired the entire Bing Search API family, Video Search included, on August 11, 2025. The lifecycle notice states that existing instances “will be decommissioned completely, and the product will no longer be available to be used or new customer signup,” so the video endpoint stopped serving on that date.

The migration path Microsoft recommends is Grounding with Bing Search inside Azure AI Foundry, and it does not replace a video scraper. It is built to feed live web data into an LLM agent, it is priced at $14 per 1,000 transactions on Microsoft’s Grounding pricing page, and it returns a grounded answer with citations rather than a ranked list of video cards. For a dataset of Bing videos with their titles, thumbnails, and source URLs, that leaves two working routes: parse the public results page yourself, or send the query to a scraper API.

RouteStatus in 2026OutputCost basis
Bing Video Search APIRetired Aug 11, 2025n/a (endpoint dead)n/a
Grounding with Bing SearchLive, agent-onlyGrounded answer, no raw cards$14 / 1,000 transactions
Raw /videos/search scrapeWorks intermittentlyHTML you parse and unblockYour proxy + dev time
Bing scraper APIWorksParsed video JSONPer-request pricing

Before you pick one, it helps to know exactly which fields a Bing video result carries.

What data can you pull from a Bing video result?

A Bing video result carries more than a link: each card holds the video title, thumbnail, duration, channel, and the source URL where the video actually plays. Those five fields are what most video datasets are built around, and Bing pulls them from across the web, so a single query returns clips hosted on YouTube, Dailymotion, and publisher sites side by side.

Two of these fields fight back. The duration and thumbnail are not sitting in readable tags, and the source URL is hidden behind a Bing redirect, which is the parsing trap I hit in Python below. First, the rule that governs whether you should be pulling this page at all.

Bing’s robots.txt disallows the main /search path and several /videos/ subpaths, but it does not name the /videos/search results path itself. I fetched bing.com/robots.txt live in July 2026, and under the catch-all User-agent: * block the video-related lines are these:

User-agent: *
Disallow: /search
Disallow: /Search
Disallow: /videos/browsing
Disallow: /videos/explore
Disallow: /videos/feed
Disallow: /videos/music
Disallow: /videos/trending
Disallow: /videos/favorites

Read those carefully. The Disallow: /search rule matches paths that begin with /search, and the Bing video results page lives at /videos/search, a different prefix, so the catch-all does not reach it. Bing blocks specific video surfaces by name, including the feed, the trending shelf, and explore, but the /videos/search results path is not in the list. That is a narrow technical fact about path matching, not a green light.

robots.txt is a crawling convention, and it does not carry the force of law on its own. The US picture for public data leans toward scrapers after hiQ Labs v. LinkedIn, where the Ninth Circuit found that accessing publicly available data is unlikely to be unauthorized access under the CFAA. Microsoft’s Services Agreement still restricts automated use, and the videos themselves stay under their own copyright, so the sane pattern is to store titles, links, and metadata rather than rehost files. I go deeper on the rules in is scraping Bing legal. With the policy noted, here is the Python.

How do you scrape Bing videos with Python?

You scrape Bing videos with Python by requesting the results page and parsing the video cards out of the HTML with BeautifulSoup. Bing renders the first page of cards server side, so a plain requests call plus a CSS-selector parse gets you the titles and channels without a browser:

import requests
from bs4 import BeautifulSoup

url = "https://www.bing.com/videos/search?q=web+scraping"
r = requests.get(url, timeout=25)
soup = BeautifulSoup(r.text, "html.parser")

cards = soup.select("div.mc_vtvc.b_canvas")
print(len(cards))          # ~10 on the first response; the rest load on scroll

for card in cards[:5]:
    title = card.select_one(".b_promtxt")
    link = card.select_one("a.mc_vtvc_link")
    channel = card.select_one(".mc_vtvc_meta_row_channel")
    print(title.get_text(strip=True) if title else None)
    print(channel.get_text(strip=True) if channel else None)
    print(link["href"] if link else None)   # a Bing /videos/search detail URL, not the source

Two limits show up immediately. The first is count: that parse returned about ten cards for me, because Bing lazy-loads the rest of the video grid with JavaScript as you scroll, and requests never runs that JavaScript. To collect the full result set you drive a headless browser like Selenium, scroll to the bottom repeatedly with send_keys(Keys.END), and re-read the DOM after each batch loads:

from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys
import time

driver = Chrome()
driver.get("https://www.bing.com/videos/search?q=web+scraping")

body = driver.find_element("tag name", "body")
for _ in range(8):                 # each pass loads another batch of cards
    body.send_keys(Keys.END)
    time.sleep(1.5)

cards = driver.find_elements("css selector", "div.mc_vtvc.b_canvas")
print(len(cards))                  # now well past the initial ~10

The second limit is the fields. The .get_text() calls above recover the title and channel cleanly, but the href on a.mc_vtvc_link is an internal Bing detail URL that opens the in-Bing player, not the video’s real home on YouTube or a publisher site. The duration, the thumbnail, and that true source URL are packed into a JSON payload embedded on each card rather than sitting in plain tags, so recovering them means locating and parsing that blob per result. So the honest summary of scraping Bing videos with raw Python: a few lines get you titles and channels for the first ten clips, and a real project gets you every field for every result across the lazy-loaded grid, a redirect layer, and Bing’s blocking.

How do you keep Bing from blocking your video scraper?

Bing blocks video scrapers the same way it blocks search scrapers: on IP reputation and request rate, and it does it quietly by swapping the results for a challenge page inside an HTTP 200 response. A status-code check passes while the video cards are simply gone, so you have to assert on the parsed card count, not the status line. These are the levers that moved the result in my testing:

The full detail of Bing’s anti-bot behavior, including what the challenge markup looks like, is in my guide on scraping Bing without getting blocked. Doing all of this yourself is a maintenance project once you pass a few thousand queries, which is why most teams hand the blocking problem to an API.

How do you scrape Bing videos at scale without managing proxies?

You scrape Bing videos at scale without managing proxies by sending the query to a scraper API that returns the parsed video fields as JSON, with the proxy rotation, the rendering, and the redirect decoding handled on the server side. You get title, thumbnail, duration, channel, and source URL back directly, with no lazy-load scrolling and no embedded JSON to unpack.

I use ChocoData for this. ChocoData exposes a dedicated Bing videos endpoint, and the call shape is the same one-line REST request used across every Bing vertical:

curl "https://chocodata.com/api/v1/bing/search?q=web+scraping&api_key=$CHOCO_API_KEY"

Point it at any video query and you get parsed results back. The same call from Python, which is the version I run in pipelines:

import os, requests

resp = requests.get(
    "https://chocodata.com/api/v1/bing/search",
    params={"q": "web scraping", "api_key": os.environ["CHOCO_API_KEY"]},
    timeout=30,
)
for v in resp.json()["video_results"]:
    print(v["title"], "-", v["channel"], "-", v["duration"])
    print(v["source_url"])     # real destination, redirect already resolved
    print(v["thumbnail"])

That is the whole job. No headless browser to scroll the grid, no .mc_vtvc markup to parse, no redirect to follow, and the market is pinned so the ranking is reproducible across runs. Because the anti-bot work is server side, the same request works from PHP, Node, or Go with a one-line HTTP call. For a one-off pull of a few hundred videos, the raw Python route is fine if you have a clean IP. For continuous collection across many queries, the API is the cheaper path once you price in your own time, and I compare the managed options on coverage and price in best Bing scrapers and APIs in 2026.

What I would do

If I needed Bing video data tomorrow, I would not wait for the retired official API to come back, because it will not. For a quick experiment I would run the raw Python parse from a residential IP, accept that I only get the first ten cards, and parse the embedded JSON for duration and source. For anything ongoing I would send the query to a scraper API so my time goes to the data while the blocking, the scrolling, and the redirect decoding are handled for me. Start with the ChocoData free tier and the single-request example above, then scale the query list once the JSON shape matches what you need.

FAQ

Does Bing have a video search API in 2026?

No. Microsoft retired the entire Bing Search API family, including Video Search, on August 11, 2025, and decommissioned the existing instances, so there is no first-party Bing Videos endpoint left to call. Microsoft points developers to Grounding with Bing Search inside Azure AI Foundry, which is priced at $14 per 1,000 transactions and returns grounded answers for an LLM agent, not a ranked list of video results as JSON.

How many Bing video results can I scrape with requests and BeautifulSoup?

About ten. Bing renders the first page of video cards server-side, so a single requests.get plus a BeautifulSoup parse of div.mc_vtvc returns roughly ten videos. The rest of the results load with JavaScript as you scroll, which is why collecting the full set needs a headless browser like Selenium or a scraper API that renders the page for you.

How do I get the duration and thumbnail for each Bing video?

The duration, thumbnail, and true source URL are stored in a JSON payload embedded on each video card, not in plain text, so .get_text() only recovers the title and channel. You either parse that embedded JSON yourself or send the query to an API that returns those fields already extracted.

Is scraping Bing video results legal?

Scraping publicly visible Bing pages is generally treated as lower risk in the US after hiQ Labs v. LinkedIn, where the Ninth Circuit held that accessing public data is unlikely to violate the CFAA. This is general information, not legal advice: Microsoft's Services Agreement restricts automated use, the videos stay under their own copyright, and you remain responsible for your jurisdiction. Most teams store metadata and links rather than republishing files.

Can I scrape Bing videos in a language other than Python?

Yes. Bing's anti-bot runs server side, so any language works once the request comes from a clean IP. A scraper API is the simplest cross-language route: a single cURL or HTTP GET to the endpoint returns JSON you can decode in PHP, Node, Go, or anything else, with no proxy pool or headless browser on your side.

GL
Greta Lind
I've built Bing data pipelines for years. On bingscraperapi.com I run Bing scraping methods against live pages and publish what actually holds up.