<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Tony Wang</title>
    <description>The latest articles on DEV Community by Tony Wang (@tonywangca).</description>
    <link>https://dev.to/tonywangca</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F148876%2F2c831bd8-52c8-44be-bf32-6653835db6b9.jpeg</url>
      <title>DEV Community: Tony Wang</title>
      <link>https://dev.to/tonywangca</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tonywangca"/>
    <language>en</language>
    <item>
      <title>How Much of the Web Runs Anti-Bot? We Scanned the Top 1,000,000 Sites</title>
      <dc:creator>Tony Wang</dc:creator>
      <pubDate>Tue, 11 Aug 2026 08:51:49 +0000</pubDate>
      <link>https://dev.to/tonywangca/how-much-of-the-web-runs-anti-bot-we-scanned-the-top-1000000-sites-426</link>
      <guid>https://dev.to/tonywangca/how-much-of-the-web-runs-anti-bot-we-scanned-the-top-1000000-sites-426</guid>
      <description>&lt;p&gt;&lt;strong&gt;Key takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We scanned all ~1,000,000 sites on the Tranco research ranking. Of the 818,614 we reached, 53.5% run a detectable managed anti-bot, WAF, or access-control vendor — and it is overwhelmingly Cloudflare (45% of reachable sites, 84% of every protected site).&lt;/li&gt;
&lt;li&gt;The web's busiest sites run the LEAST anti-bot. By Tranco rank, protection rises as rank falls (top-1,000 44% → long-tail 54%) and Cloudflare rises with it (23% → 46%) — its dominance is a long-tail story — while enterprise bot-management (DataDome, PerimeterX, Akamai) drops the other way (7.6% → 0.6%). The head and the tail are guarded by different vendors.&lt;/li&gt;
&lt;li&gt;Independently corroborated: W3Techs puts Cloudflare on ~48.7% of the top 1M and 23.2% of all websites; our scan finds its active anti-bot posture on 45% of the reachable top 1M. Imperva reports bots are now 51% of all web traffic — the demand behind the walls.&lt;/li&gt;
&lt;li&gt;Difficulty is lower than the fear suggests. Among the sites people actually scrape, 85% need no browser at all — a plain HTTP client or a matched TLS fingerprint reaches them — once you escalate properly; only ~15% need a real browser, and four sign every request with a closed JS VM.&lt;/li&gt;
&lt;li&gt;Protection tracks money: crypto (86%), marketplaces (81%) and AI tools (78%) are the most defended; search (18%), social (25%) and sports (33%) homepages are the most open — but the homepage is a lower bound for the deep pages you actually scrape.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most "I'll just scrape it" projects do not die on parsing the HTML. They die when the page turns out to sit behind Cloudflare or DataDome and needs a completely different approach than the one you built. So we measured how common that actually is — twice. We scanned the whole &lt;a href="https://tranco-list.eu/" rel="noopener noreferrer"&gt;Tranco&lt;/a&gt; &lt;strong&gt;top 1,000,000&lt;/strong&gt; to get the web-scale picture, and then hand-picked &lt;strong&gt;1,005 real, public sites&lt;/strong&gt; across 28 categories — the kinds of sites people actually scrape — and ran the full transport fleet against them. The short version: just over half of the reachable web runs managed bot defense, it is concentrated in one vendor, the busiest sites run the &lt;em&gt;least&lt;/em&gt; of it, and the difficulty is wildly uneven.&lt;/p&gt;

&lt;p&gt;The full, searchable dataset — every site, filterable by vendor, difficulty and category — lives in the &lt;a href="https://crawlora.net/anti-bot-index?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Anti-Bot Adoption Index&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How much of the web runs an anti-bot or WAF?
&lt;/h2&gt;

&lt;p&gt;Across the full top 1,000,000, we reached 818,614 sites (the rest were unresolvable, timed out, or blocked our datacenter vantage outright — about 18%, excluded from the percentages). Of the ones we reached, &lt;strong&gt;53.5% expose a managed WAF, bot-management, or access-control vendor&lt;/strong&gt; — not counting a CAPTCHA widget or rate-limiting alone:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Protection type&lt;/th&gt;
&lt;th&gt;Share of reachable&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Managed WAF&lt;/td&gt;
&lt;td&gt;47.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CAPTCHA widget (reCAPTCHA, hCaptcha, Turnstile…)&lt;/td&gt;
&lt;td&gt;12.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Access control&lt;/td&gt;
&lt;td&gt;2.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dedicated bot management&lt;/td&gt;
&lt;td&gt;0.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Any managed anti-bot / WAF&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;53.5%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This is not a fragmented market. &lt;strong&gt;Cloudflare alone covers 45% of every reachable site&lt;/strong&gt; — 84% of all protected sites — and the next-largest &lt;em&gt;named&lt;/em&gt; layer is consumer CAPTCHA widgets. The pure-play bot-management vendors barely register at web scale: Akamai Bot Manager 0.6%, DataDome 0.16%, PerimeterX/HUMAN 0.09%.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl0kd341j1ei1y46mq94l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl0kd341j1ei1y46mq94l.png" alt="Anti-bot layer share of the reachable top-1M: Cloudflare 45%, consumer CAPTCHA widgets 12.7%, Akamai Bot Manager 0.6%, DataDome 0.16%, PerimeterX 0.09%." width="799" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These numbers line up with independent measurements. &lt;a href="https://w3techs.com/technologies/details/cn-cloudflare" rel="noopener noreferrer"&gt;W3Techs&lt;/a&gt; (June 2026) puts Cloudflare on &lt;strong&gt;23.2% of all websites&lt;/strong&gt; and roughly &lt;strong&gt;48.7% of the top 1M&lt;/strong&gt; — we find its &lt;em&gt;active&lt;/em&gt; anti-bot posture on 45% of the reachable top 1M, the same ballpark from a different method. And the &lt;a href="https://www.imperva.com/resources/resource-library/reports/2025-bad-bot-report/" rel="noopener noreferrer"&gt;Imperva 2025 Bad Bot Report&lt;/a&gt; finds automated traffic is now &lt;strong&gt;51% of all web traffic&lt;/strong&gt; (bad bots 37%) — the demand pressure that explains why so many sites have a wall at all. (For a peer methodology on web-scale measurement, see the &lt;a href="https://almanac.httparchive.org/en/2024/security" rel="noopener noreferrer"&gt;HTTP Archive Web Almanac&lt;/a&gt;.)&lt;/p&gt;

&lt;h2&gt;
  
  
  The busiest sites run the least anti-bot
&lt;/h2&gt;

&lt;p&gt;The web-scale number hides the most useful finding. Split the million by traffic rank and three curves all move together — protection, Cloudflare and the specialist vendors:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flz3kp963690pl8rp4qdn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flz3kp963690pl8rp4qdn.png" alt="Protection by Tranco rank band across the top 1,000,000. From the top-1,000 to the 100k–1M tail, overall protection rises 44.2% to 53.6% and Cloudflare rises 23.4% to 45.6%, while enterprise bot-management falls 7.6% to 0.6%." width="800" height="565"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tranco rank band&lt;/th&gt;
&lt;th&gt;Protected&lt;/th&gt;
&lt;th&gt;Cloudflare&lt;/th&gt;
&lt;th&gt;Enterprise bot-mgmt¹&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Top 1,000&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;44.2%&lt;/td&gt;
&lt;td&gt;23.4%&lt;/td&gt;
&lt;td&gt;7.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1k–10k&lt;/td&gt;
&lt;td&gt;50.7%&lt;/td&gt;
&lt;td&gt;34.0%&lt;/td&gt;
&lt;td&gt;5.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10k–100k&lt;/td&gt;
&lt;td&gt;52.3%&lt;/td&gt;
&lt;td&gt;40.2%&lt;/td&gt;
&lt;td&gt;2.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;100k–1M&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;53.6%&lt;/td&gt;
&lt;td&gt;45.6%&lt;/td&gt;
&lt;td&gt;0.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;¹ Akamai Bot Manager + DataDome + PerimeterX, as a share of reachable sites in the band.&lt;/p&gt;

&lt;p&gt;Two things flip as you go down-rank. &lt;strong&gt;Cloudflare climbs&lt;/strong&gt; (23% of the top-1,000 to 46% of the long tail): its web-scale dominance is a &lt;em&gt;long-tail&lt;/em&gt; story — the giants run their own or enterprise infrastructure and keep homepages open for SEO, while the millions of smaller sites reach for turnkey Cloudflare. Meanwhile &lt;strong&gt;enterprise bot-management falls&lt;/strong&gt; (7.6% to 0.6%): DataDome, PerimeterX and Akamai Bot Manager are a &lt;em&gt;head&lt;/em&gt; phenomenon, bought by the high-value sites where automated data has a direct dollar cost. So the head and the tail aren't just protected at different rates — they're guarded by &lt;strong&gt;different vendors&lt;/strong&gt;. (W3Techs sees the same direction: Cloudflare is lower in the very top-1,000 than across the broader top-1M.)&lt;/p&gt;

&lt;p&gt;Set Cloudflare aside (it climbs across the board) and the &lt;em&gt;specialist&lt;/em&gt; gatekeepers swap places by rank — &lt;strong&gt;Akamai guards the very top&lt;/strong&gt;, while the long tail reaches for turnkey CAPTCHA:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb2cm06bbkic8efmtgq5l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb2cm06bbkic8efmtgq5l.png" alt="Vendor share by Tranco rank band: Akamai falls from 11.2% of the top 1k to 0.9% of the long tail, while Google reCAPTCHA rises 4.1% to 7.8% and hCaptcha 0.7% to 3.7%." width="800" height="565"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Zoom into the ~1,005 high-value sites people actually scrape and the head's profile sharpens further: there, enterprise bot-management sits on &lt;strong&gt;15.5%&lt;/strong&gt; of sites, and the tail's cheap CAPTCHA-widget layer nearly vanishes. Adoption and sophistication are different axes: more of the web is "protected" than you'd think, but far less of it is &lt;em&gt;hard&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Most of those walls are asleep
&lt;/h2&gt;

&lt;p&gt;Here's the part that surprised us most. "53.5% protected" counts every site that &lt;em&gt;exposes&lt;/em&gt; a managed vendor — but exposing one isn't the same as &lt;em&gt;using&lt;/em&gt; it. Of the 818,614 reachable sites, only &lt;strong&gt;79,835 (9.8%) actually challenged&lt;/strong&gt; our homepage request; the other 358,022 walled sites ran the vendor passively, returning a clean &lt;code&gt;200&lt;/code&gt; to a matched request. Follow the million all the way down to the few that actually fight back:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxg1psekyg8um4bz71gjc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxg1psekyg8um4bz71gjc.png" alt="Funnel of the top 1,000,000: 998,497 scanned; 818,614 reachable (179,883 unreachable); of reachable, 437,857 have a managed wall and 380,757 do not; of the walled, 79,835 actively challenged and 358,022 stayed passive." width="799" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Which wall is "awake" depends heavily on the vendor. Cloudflare sits in front of 45% of the reachable web but actively challenged only ~16% of those homepages; Google reCAPTCHA almost never fires on a homepage (3%); the small unidentified-WAF group is the opposite — present rarely, but challenging 76% of the time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj48ie0iye0ikye1swgz0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj48ie0iye0ikye1swgz0.png" alt="Per vendor, share of reachable sites detected on versus where it actively challenged: Cloudflare 45% vs 7.4%, reCAPTCHA 7.5% vs 0.3%, hCaptcha 3.5% vs 0.2%, unidentified WAF 2.1% vs 1.6%, Turnstile 1.3% vs 0.1%, Imperva 0.6% vs 0.1%, Akamai Bot Manager 0.6% vs 0.04%." width="800" height="556"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The practical takeaway: a vendor &lt;em&gt;fingerprint&lt;/em&gt; tells you what you'd face &lt;strong&gt;if&lt;/strong&gt; the wall fires — but most homepages won't fire at all, which is exactly why reaching for a full browser by default wastes time and budget. Check the page, not the logo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Zoom in: the ~1,005 sites people actually scrape
&lt;/h2&gt;

&lt;p&gt;For the sites that matter to a scraper, we go beyond headers: any site that blocks a datacenter GET is re-probed through the &lt;strong&gt;full transport fleet&lt;/strong&gt; (browser-impersonation HTTP → headless browser → stealth browser + residential IP), so the tier reflects what actually reaches the page, not a header guess. By that bar, &lt;strong&gt;575 of the 1,005 (57.2%)&lt;/strong&gt; run managed bot defense, and two vendors dominate it:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Vendor&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Sites&lt;/th&gt;
&lt;th&gt;Share&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare&lt;/td&gt;
&lt;td&gt;WAF + challenge&lt;/td&gt;
&lt;td&gt;333&lt;/td&gt;
&lt;td&gt;33.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Akamai Bot Manager&lt;/td&gt;
&lt;td&gt;Bot management&lt;/td&gt;
&lt;td&gt;111&lt;/td&gt;
&lt;td&gt;11.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Akamai (edge)&lt;/td&gt;
&lt;td&gt;CDN/WAF&lt;/td&gt;
&lt;td&gt;53&lt;/td&gt;
&lt;td&gt;5.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DataDome&lt;/td&gt;
&lt;td&gt;Bot management&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;3.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Imperva (Incapsula)&lt;/td&gt;
&lt;td&gt;WAF&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;1.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PerimeterX (HUMAN)&lt;/td&gt;
&lt;td&gt;Bot management&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;1.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare Turnstile&lt;/td&gt;
&lt;td&gt;CAPTCHA&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;1.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Cloudflare and Akamai together account for 77% of every protected site&lt;/strong&gt; in this set. What separates the vendors is &lt;em&gt;what they inspect&lt;/em&gt;: Akamai and open Cloudflare paths lean hardest on &lt;strong&gt;TLS/JA3-JA4 fingerprinting&lt;/strong&gt; — a matched HTTP client often reaches them — while DataDome and PerimeterX add &lt;strong&gt;real-time behavioral ML&lt;/strong&gt;, so a clean fingerprint alone isn't enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  Difficulty is wildly uneven — most of it is &lt;em&gt;not&lt;/em&gt; a browser job
&lt;/h2&gt;

&lt;p&gt;The more useful question isn't "is it protected" — it's "what does it take to get the public page reliably?" Running the real fleet against the curated set:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tier&lt;/th&gt;
&lt;th&gt;What it takes&lt;/th&gt;
&lt;th&gt;Sites&lt;/th&gt;
&lt;th&gt;Share&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;T1&lt;/td&gt;
&lt;td&gt;Plain HTTP client&lt;/td&gt;
&lt;td&gt;608&lt;/td&gt;
&lt;td&gt;60.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;T2&lt;/td&gt;
&lt;td&gt;Browser-impersonation HTTP (matched TLS)&lt;/td&gt;
&lt;td&gt;246&lt;/td&gt;
&lt;td&gt;24.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;T3&lt;/td&gt;
&lt;td&gt;Headless browser that runs JavaScript&lt;/td&gt;
&lt;td&gt;148&lt;/td&gt;
&lt;td&gt;14.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;T4&lt;/td&gt;
&lt;td&gt;Stealth browser + residential IP + behavior&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;0.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9rdb92n7u61pl2symp7d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9rdb92n7u61pl2symp7d.png" alt="Scraping difficulty of the 1,005 curated sites: T1 plain HTTP 60.5%, T2 TLS match 24.5%, T3 JS browser 14.7%, T4 stealth+residential 0.3%." width="800" height="199"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;85% of these sites need no browser at all&lt;/strong&gt; — a plain HTTP GET or a matched TLS fingerprint reaches them. Only ~15% genuinely need a headless browser or more. Reaching for a browser by default is the most common (and most expensive) scraping mistake; the data says escalate only when a site forces you to.&lt;/p&gt;

&lt;p&gt;This is also why "57% protected" and "85% need no browser" are both true: detecting a vendor is binary, but &lt;strong&gt;a vendor being &lt;em&gt;present&lt;/em&gt; isn't the same as it actively challenging.&lt;/strong&gt; Of the 575 protected sites, only &lt;strong&gt;74 actively challenged&lt;/strong&gt; our request — the rest run their vendor in passive CDN/WAF mode (a matched fingerprint returns &lt;code&gt;200&lt;/code&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  The hard end: a few sites sign every request with a closed VM
&lt;/h2&gt;

&lt;p&gt;The toughest class isn't a CAPTCHA — it's a proprietary in-browser &lt;strong&gt;bytecode VM&lt;/strong&gt; that signs every request, so generic transport tooling can't mint a valid token. &lt;strong&gt;Four sites&lt;/strong&gt; in the curated set ship one: TikTok's &lt;code&gt;webmssdk&lt;/code&gt; VM (the &lt;code&gt;X-Bogus&lt;/code&gt; / &lt;code&gt;X-Gnarly&lt;/code&gt; signatures, on top of Akamai) and Kasada's proof-of-work VM (the &lt;code&gt;x-kpsdk-ct&lt;/code&gt; token, on real-estate marketplaces). For these, "send a cleverer request" doesn't apply; you need a genuine browser execution context. They're rare, but they're the sites people most often ask "why can't I scrape this?" about. (We deliberately &lt;em&gt;don't&lt;/em&gt; count an &lt;code&gt;F5 BIG-IP&lt;/code&gt; load-balancer cookie as a VM — that's server load balancing, not bot defense.)&lt;/p&gt;

&lt;h2&gt;
  
  
  A block isn't a block — read &lt;em&gt;why&lt;/em&gt; you were stopped
&lt;/h2&gt;

&lt;p&gt;When a request doesn't pass, the reason tells you the fix — and the fix is completely different each time. After escalating through the fleet, only &lt;strong&gt;74 of the 1,005 (7.4%)&lt;/strong&gt; still didn't pass cleanly, and they break down as:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Why it stopped&lt;/th&gt;
&lt;th&gt;Sites&lt;/th&gt;
&lt;th&gt;What it means&lt;/th&gt;
&lt;th&gt;The fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bot challenge (JS interstitial)&lt;/td&gt;
&lt;td&gt;55&lt;/td&gt;
&lt;td&gt;Cloudflare "Just a moment", a JS challenge&lt;/td&gt;
&lt;td&gt;Run it in a real browser&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CAPTCHA&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;An interactive puzzle was served&lt;/td&gt;
&lt;td&gt;A browser (+ CAPTCHA service)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Geo-blocked&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Gated by country/region&lt;/td&gt;
&lt;td&gt;An IP in an allowed region&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The headline is what the failures are &lt;em&gt;not&lt;/em&gt;. Once you bring the right transport, genuine rate limits and outright IP bans are vanishingly rare at the front door — the wall is almost always a &lt;strong&gt;fingerprint/JS&lt;/strong&gt; problem, not a proxy one. We were deliberately conservative on labels: a &lt;code&gt;401&lt;/code&gt; only counts as a login wall if it carries &lt;code&gt;WWW-Authenticate&lt;/code&gt; (WSJ and Reuters return &lt;code&gt;401&lt;/code&gt; as a DataDome bot block, not authentication), and a generic &lt;code&gt;403&lt;/code&gt; is "blocked," not "IP banned," unless the page says so.&lt;/p&gt;

&lt;h2&gt;
  
  
  The homepage is a poor proxy — protection moves per page
&lt;/h2&gt;

&lt;p&gt;The biggest caveat in any study like this: &lt;strong&gt;a domain protects different page types completely differently.&lt;/strong&gt; On LinkedIn, the homepage is light, a &lt;code&gt;/company/&lt;/code&gt; page is largely open, but a &lt;code&gt;/in/&lt;/code&gt; profile and search are login-walled. On Amazon, the homepage is open while search readily serves a "Robot Check." So every site page in the &lt;a href="https://crawlora.net/anti-bot-index?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;index&lt;/a&gt; ships an advisory &lt;strong&gt;deep-page test plan&lt;/strong&gt; — which page types to check and what to expect on each — so you test the page you actually want, not the front door.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Difficulty is per-URL, not per-site.&lt;/strong&gt; A site's homepage is frequently left wide open for SEO and link previews, while the profile, listing, or search page right next to it is bot-managed. Because this study probed homepages, the real adoption rate on the pages people actually scrape is &lt;em&gt;higher&lt;/em&gt; than these numbers — so always check the exact URL you intend to scrape, not the domain. You can do that on any URL with the free &lt;a href="https://crawlora.net/tools/can-i-scrape-this-site?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;anti-bot checker&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The defense gradient: crypto and commerce are fortresses, search is open
&lt;/h2&gt;

&lt;p&gt;Split the curated set by category and a clear money gradient appears — the closer a page is to a transaction, the harder it's defended:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;% managed anti-bot / WAF&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Crypto&lt;/td&gt;
&lt;td&gt;86%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Marketplaces&lt;/td&gt;
&lt;td&gt;81%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI tools&lt;/td&gt;
&lt;td&gt;78%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Finance &amp;amp; markets&lt;/td&gt;
&lt;td&gt;75%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Forums &amp;amp; community&lt;/td&gt;
&lt;td&gt;75%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E-commerce&lt;/td&gt;
&lt;td&gt;72%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Real estate&lt;/td&gt;
&lt;td&gt;72%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Travel &amp;amp; hospitality&lt;/td&gt;
&lt;td&gt;72%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;…&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News &amp;amp; media&lt;/td&gt;
&lt;td&gt;39%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sports&lt;/td&gt;
&lt;td&gt;33%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Social media&lt;/td&gt;
&lt;td&gt;25%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Search engines&lt;/td&gt;
&lt;td&gt;18%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7z5xv3k78f7rn3071jzo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7z5xv3k78f7rn3071jzo.png" alt="Managed anti-bot / WAF rate by category: crypto 86%, marketplaces 81%, AI tools 78%, finance 75%, forums 75%, e-commerce 72%, real estate 72%, travel 72%, news 39%, sports 33%, social 25%, search engines 18%." width="800" height="745"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Crypto and marketplaces fight hardest — prices, inventory and order books are the most-scraped data on the web. The low numbers for social, news and search are partly a method artifact: those homepages are deliberately open, but the &lt;em&gt;deep&lt;/em&gt; pages (a profile, an article archive, a result page) flip to protected the moment you navigate in.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means if you're building a scraper
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Check before you build.&lt;/strong&gt; Knowing a page is behind Cloudflare versus DataDome versus a closed VM versus nothing changes the entire approach — and it changes per URL. A 30-second check saves an afternoon of wondering why your requests &lt;code&gt;403&lt;/code&gt;. See the companion guide on &lt;a href="https://crawlora.net/blog/scraping-sites-that-block-bots?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;scraping sites that block bots&lt;/a&gt; for what each vendor actually does.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Escalate only as far as the site demands, and pay only when it works.&lt;/strong&gt; 85% of the sites people scrape don't need a browser at all. The cost-efficient pattern is to try the lightest transport first and escalate, which is exactly how Crawlora's &lt;a href="https://crawlora.net/use-cases/ai-web-scraping?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;web scraping for AI and data pipelines&lt;/a&gt; is billed — &lt;a href="https://crawlora.net/pricing?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;pay-on-success&lt;/a&gt;, not per attempt.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this is about defeating a CAPTCHA or getting past a login. It is about knowing, before you commit engineering time, which public pages need which approach.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it yourself
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Check any URL right now with the free &lt;a href="https://crawlora.net/tools/can-i-scrape-this-site?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;anti-bot checker&lt;/a&gt; — paste a profile or listing page, not just the homepage, and see the vendor and the lightest transport that works.&lt;/li&gt;
&lt;li&gt;Explore the full dataset — search every site, filter by difficulty, vendor or category — in the &lt;a href="https://crawlora.net/anti-bot-index?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Anti-Bot Adoption Index&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Read exactly &lt;a href="https://crawlora.net/anti-bot-index/methodology?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;how we measured it&lt;/a&gt;, including the signatures and the difficulty heuristic.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How the check actually works (full transparency)
&lt;/h2&gt;

&lt;p&gt;No magic — this is a deliberately simple, passive, reproducible check, run at two scales.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The samples.&lt;/strong&gt; The web-scale figures come from the full &lt;a href="https://tranco-list.eu/" rel="noopener noreferrer"&gt;Tranco&lt;/a&gt; &lt;strong&gt;top 1,000,000&lt;/strong&gt; (an aggregated, citable top-sites list with a permanent ID), of which 818,614 were reachable. The deep-dive figures come from &lt;strong&gt;1,005 domains&lt;/strong&gt; walked from the top of the same ranking into real, public, content-bearing sites across 28 categories, with pure infrastructure/CDN, ad/tracking and adult domains skipped.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The request.&lt;/strong&gt; Each site's homepage is fetched with a real Chrome User-Agent, following redirects, from a &lt;strong&gt;datacenter IP&lt;/strong&gt; — the honest "what a basic cloud scraper sees" vantage. We never submit a form, run a CAPTCHA, log in, or fetch anything behind a wall. The top-1M scan is this single datacenter GET. For the curated set we go further: any site that blocks the datacenter GET is &lt;strong&gt;re-probed through the full transport fleet&lt;/strong&gt; (browser-impersonation → headless → stealth + residential), so its difficulty tier reflects what actually reaches the page rather than a header guess.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What we capture (and what we don't).&lt;/strong&gt; From the response we keep the &lt;strong&gt;status code&lt;/strong&gt;, the &lt;strong&gt;response headers&lt;/strong&gt;, the &lt;strong&gt;names&lt;/strong&gt; of any &lt;code&gt;Set-Cookie&lt;/code&gt; cookies — &lt;em&gt;names only, never values&lt;/em&gt;, so no session tokens or PII are stored — and a capped slice of the body. Nothing else is retained.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Naming the vendor.&lt;/strong&gt; The vendor is identified by matching that evidence against a database of public, documented fingerprints — header names (&lt;code&gt;cf-ray&lt;/code&gt;, &lt;code&gt;x-datadome&lt;/code&gt;, &lt;code&gt;x-iinfo&lt;/code&gt;, &lt;code&gt;akamai-grn&lt;/code&gt;), &lt;code&gt;Set-Cookie&lt;/code&gt; name prefixes (&lt;code&gt;__cf_bm&lt;/code&gt;/&lt;code&gt;cf_clearance&lt;/code&gt;, &lt;code&gt;_abck&lt;/code&gt;/&lt;code&gt;bm_sz&lt;/code&gt;, &lt;code&gt;datadome&lt;/code&gt;, &lt;code&gt;_px*&lt;/code&gt;, &lt;code&gt;incap_ses_&lt;/code&gt;), and body markers that are only trusted on a challenge-shaped response. Header and cookie matches are high-confidence; body markers medium.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limits.&lt;/strong&gt; Every result is a &lt;strong&gt;lower bound&lt;/strong&gt; — homepages are more open than the deep pages people actually scrape, and a datacenter IP sees more challenges than a residential one. The top-1M scan is headers-only and does not grade difficulty (a site that blocks a datacenter GET there may well open for a browser); the graded tiers and the category gradient come from the full-fleet curated run. Anti-bot deployments change continuously, so treat every result as a directional signal, not a guarantee. Snapshot: June 2026.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open &amp;amp; reproducible.&lt;/strong&gt; The classifier and the methodology are published in full — read the &lt;a href="https://crawlora.net/anti-bot-index/methodology?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;full methodology&lt;/a&gt;, or explore the &lt;a href="https://crawlora.net/anti-bot-index?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;searchable index&lt;/a&gt;. Cite it as "Crawlora Anti-Bot Adoption Index" with a link.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sources&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://crawlora.net/anti-bot-index?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Anti-Bot Adoption Index — the full dataset&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://crawlora.net/anti-bot-index/methodology?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Methodology &amp;amp; difficulty scoring&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://crawlora.net/tools/can-i-scrape-this-site?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Free anti-bot checker (check any URL)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://crawlora.net/blog/what-powers-the-web-techstack-2026?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Cross-check: CAPTCHA prevalence in the Tech Stack dataset (978K sites)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tranco-list.eu/" rel="noopener noreferrer"&gt;Tranco research ranking&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://w3techs.com/technologies/details/cn-cloudflare" rel="noopener noreferrer"&gt;W3Techs — Cloudflare usage &amp;amp; market share&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.imperva.com/resources/resource-library/reports/2025-bad-bot-report/" rel="noopener noreferrer"&gt;Imperva 2025 Bad Bot Report&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://almanac.httparchive.org/en/2024/security" rel="noopener noreferrer"&gt;HTTP Archive Web Almanac 2024 — Security&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How much of the web is protected by anti-bot?
&lt;/h3&gt;

&lt;p&gt;We measured it twice. Across the full Tranco top 1,000,000 (818,614 reachable), 53.5% expose a managed anti-bot, WAF or access-control vendor — overwhelmingly Cloudflare (45% of reachable sites). On 1,005 hand-picked high-value sites run through the full transport fleet, 57.2% are protected. Both are lower bounds: deep pages (profiles, listings, search) are more defended than the homepages we probed, and protection is heaviest on crypto (86%) and marketplaces (81%), lightest on search, social and news.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do you actually need a browser to scrape most sites?
&lt;/h3&gt;

&lt;p&gt;No — and that's the most expensive misconception. Of the curated sites, 85% need no browser at all: about 60% answer a plain HTTP GET and another 25% only want a matched TLS fingerprint. Only ~15% genuinely need a headless browser or more. The cost-efficient pattern is to escalate only as far as a site forces you to, not to reach for a headless browser by default.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which anti-bot vendor is the most common?
&lt;/h3&gt;

&lt;p&gt;Cloudflare, by a wide margin — across the top 1,000,000 it covers 45% of reachable sites and 84% of every protected site. In the curated set it leads at 33%, followed by Akamai (Bot Manager 11% plus its edge CDN 5%). The specialist bot-management vendors DataDome (3%) and PerimeterX/HUMAN (1.5%) cluster on high-value verticals like marketplaces, travel and real estate, where automated data has a direct cost.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the hardest type of anti-bot to deal with?
&lt;/h3&gt;

&lt;p&gt;A proprietary, closed in-browser JavaScript VM that signs every request — like TikTok's webmssdk (the X-Bogus/X-Gnarly signatures) or Kasada (the x-kpsdk-ct token); four sites in the curated set ship one. Unlike a CAPTCHA, generic transport tooling can't mint a valid token, so these need a genuine browser execution context rather than a cleverer request. They're rare but they're the sites people most often ask why they can't scrape.&lt;/p&gt;

&lt;h3&gt;
  
  
  How did you measure each site's anti-bot?
&lt;/h3&gt;

&lt;p&gt;Two ways. The top-1,000,000 scan is a single passive homepage GET from a datacenter IP — matching response headers (cf-ray, x-datadome), Set-Cookie names (_abck, datadome, _px) and challenge markers against documented vendor fingerprints, the same signatures as Crawlora's anti-bot checker. For the curated set we go further: any site that blocks the datacenter GET is re-probed through the full transport fleet (browser-impersonation → headless → stealth + residential), so its difficulty tier reflects what actually reaches the page, not a header guess. Every result is a lower bound.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://crawlora.net/blog/anti-bot-adoption-index-2026?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;crawlora.net&lt;/a&gt;. &lt;a href="https://crawlora.net/?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Crawlora&lt;/a&gt; is a structured web-data, search, and anti-bot API — dozens of platforms as normalized JSON, plus a hosted MCP server, with a free tier (no card).&lt;/em&gt;&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>webscraping</category>
      <category>security</category>
    </item>
    <item>
      <title>India, Not the US, Has the Most AI Developers on GitHub</title>
      <dc:creator>Tony Wang</dc:creator>
      <pubDate>Tue, 11 Aug 2026 08:51:28 +0000</pubDate>
      <link>https://dev.to/tonywangca/india-not-the-us-has-the-most-ai-developers-on-github-1b5g</link>
      <guid>https://dev.to/tonywangca/india-not-the-us-has-the-most-ai-developers-on-github-1b5g</guid>
      <description>&lt;p&gt;&lt;strong&gt;Key takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;India has more geo-resolved GitHub developers tagged ml-ai than the United States — 4,810 versus 3,536 — a reversal of the overall GitHub population, where the US leads India 43,996 to 32,915.&lt;/li&gt;
&lt;li&gt;28,603 of the 972,576 profiles in Crawlora's GitHub Users census (2.9%) carry the ml-ai interest-domain tag, inferred from repo topics and bio text.&lt;/li&gt;
&lt;li&gt;ML/AI-tagged developers are dramatically more reachable than the general GitHub population: 56.5% expose a public contact channel versus 21.2% overall, and 21.1% mark themselves open to hire versus 7.5% overall.&lt;/li&gt;
&lt;li&gt;Academic institutions crack the top employer/affiliation mentions for this group in a way they don't for GitHub overall — Northeastern University, Stanford, CMU, Tsinghua and Peking University all appear in the top ranks, alongside Microsoft, NVIDIA, Red Hat and Google.&lt;/li&gt;
&lt;li&gt;Follower counts skew higher too: 90.5% of ML/AI-tagged developers sit in the lowest (nano, &amp;lt;100) follower tier, versus 95.3% for GitHub overall — the whole distribution shifts up a notch, though the single most-followed ml-ai account (38,746 followers) still falls short of GitHub's overall top accounts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Our &lt;a href="https://crawlora.net/blog/where-developers-live-github-2026?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;census of 972,576 GitHub developer profiles&lt;/a&gt; found the US narrowly ahead of India in raw developer count. Filter that same dataset down to the 28,603 profiles tagged &lt;code&gt;ml-ai&lt;/code&gt; — Crawlora's inferred interest-domain label for AI/ML-focused developers — and the ranking flips: &lt;strong&gt;India has more geo-resolved AI/ML developers than the United States.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Method at a glance&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Same census, one filter:&lt;/strong&gt; the same 972,576-profile GitHub Users dataset behind our earlier study, filtered to &lt;code&gt;domain=ml-ai&lt;/code&gt; — an interest-domain tag inferred from a developer's repo topics and bio text, not a self-declared label.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;28,603 profiles&lt;/strong&gt; carry the tag (2.9% of the full census). Geography figures below are over the subset of those that geo-resolve to a country/city, same caveat as the parent study: most developers don't publish a location at all.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Total vs. queryable:&lt;/strong&gt; 972,576 total indexed profiles; a default search returns &lt;strong&gt;970,617&lt;/strong&gt; — the 1,959 accounts flagged as suspected automation (mass-repo commit farms) are excluded by default. Baseline percentages compared against "GitHub overall" below use that 970,617 queryable base, the same denominator as the parent study.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reachability and hireability&lt;/strong&gt; are computed the same way as the parent study — a public contact channel (email, Twitter/X, blog, or social account) and GitHub's own "available for hire" flag, respectively.&lt;/li&gt;
&lt;li&gt;Snapshot dated July 2026, pulled live from Crawlora's GitHub Users API.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The geography flips: India leads AI/ML, not the US
&lt;/h2&gt;

&lt;p&gt;Across the whole GitHub census, the US leads India in raw developer count. Filtered to &lt;code&gt;ml-ai&lt;/code&gt;, India pulls ahead:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuktkhuckql6lkr8n8l5d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuktkhuckql6lkr8n8l5d.png" alt="Geo-resolved GitHub developers tagged ml-ai by country: India 4,810, United States 3,536, Germany 721, United Kingdom 705, China 701, Pakistan 618, Brazil 589, Canada 503, France 468, Spain 304." width="800" height="637"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By city, Bengaluru tops the list at 518 — consistent with it also leading the overall GitHub census — but the rest of the top cities show the same India-heavy pattern the country totals do: Hyderabad (289), New Delhi (254), Pune (235) and Chennai (218) all place in the global top 10, alongside San Francisco (337), New York (305) and London (304).&lt;/p&gt;

&lt;p&gt;Show the top 25 cities by ml-ai-tagged developer count&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Top cities by geo-resolved GitHub developers tagged ml-ai&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;City&lt;/th&gt;
&lt;th&gt;Developers&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bengaluru&lt;/td&gt;
&lt;td&gt;518&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;San Francisco&lt;/td&gt;
&lt;td&gt;337&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;New York&lt;/td&gt;
&lt;td&gt;305&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;London&lt;/td&gt;
&lt;td&gt;304&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hyderabad&lt;/td&gt;
&lt;td&gt;289&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;New Delhi&lt;/td&gt;
&lt;td&gt;254&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pune&lt;/td&gt;
&lt;td&gt;235&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chennai&lt;/td&gt;
&lt;td&gt;218&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Paris&lt;/td&gt;
&lt;td&gt;192&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seoul&lt;/td&gt;
&lt;td&gt;178&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dhaka&lt;/td&gt;
&lt;td&gt;164&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mumbai&lt;/td&gt;
&lt;td&gt;161&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Toronto&lt;/td&gt;
&lt;td&gt;155&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Berlin&lt;/td&gt;
&lt;td&gt;148&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Beijing&lt;/td&gt;
&lt;td&gt;143&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kolkata&lt;/td&gt;
&lt;td&gt;138&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seattle&lt;/td&gt;
&lt;td&gt;128&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lahore&lt;/td&gt;
&lt;td&gt;127&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Karachi&lt;/td&gt;
&lt;td&gt;104&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Boston&lt;/td&gt;
&lt;td&gt;101&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Noida&lt;/td&gt;
&lt;td&gt;99&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coimbatore&lt;/td&gt;
&lt;td&gt;97&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Los Angeles&lt;/td&gt;
&lt;td&gt;95&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nairobi&lt;/td&gt;
&lt;td&gt;91&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Islamabad&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Top 25 cities by geo-resolved ml-ai-tagged GitHub developers, July 2026. Source: Crawlora GitHub Users dataset, domain=ml-ai filter.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Academia shows up here in a way it doesn't for GitHub overall
&lt;/h2&gt;

&lt;p&gt;Our earlier study found Red Hat and Microsoft topping the employer mentions for GitHub overall, with zero universities in the top 10. Filtered to &lt;code&gt;ml-ai&lt;/code&gt;, universities crack the list outright:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F29ap5vw7npljvi02gjl8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F29ap5vw7npljvi02gjl8.png" alt="Top named companies and universities in ml-ai developer bios: Microsoft 131, NVIDIA 81, Red Hat 73, Google 47, Amazon 44, Intel 39, IBM 36, AMD 26, Meta 26, Hugging Face 35 combined, Northeastern University 16, Carnegie Mellon 13, Stanford 12, Tsinghua 12." width="800" height="853"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Microsoft, NVIDIA and Red Hat lead — the same pattern of open-source-forward companies from our earlier study — but Northeastern University (16 mentions) alone outranks SAP, Deloitte, ByteDance and Huawei among named affiliations, and Stanford, CMU, Tsinghua, Peking and Zhejiang all appear further down the list. AI/ML research still runs substantially through universities, and their researchers' GitHub bios reflect it in a way the general developer population's don't.&lt;/p&gt;

&lt;h2&gt;
  
  
  This population is dramatically easier to reach and recruit from
&lt;/h2&gt;

&lt;p&gt;The starkest difference between ml-ai-tagged developers and the general GitHub population isn't geography — it's reachability:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbqdc23hwpyd4kqgab39f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbqdc23hwpyd4kqgab39f.png" alt="Reachability comparison: 56.5% of ml-ai-tagged developers expose a contact channel versus 21.2% of GitHub overall; 21.1% mark themselves open to hire versus 7.5% overall." width="799" height="313"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;56.5% of ml-ai-tagged developers expose some public contact channel, versus 21.2% of the general population — and 21.1% mark themselves open to hire, versus 7.5% overall. Both figures run roughly 2.7-2.8x higher than the GitHub-wide baseline. Activity levels don't explain the gap (93.9% of ml-ai-tagged developers pushed, opened a PR, or reviewed one in the last 90 days, essentially matching the overall population's 93.6%) — this looks like a hiring-market effect: developers building visibly in a hot field have more reason to make themselves findable.&lt;/p&gt;

&lt;p&gt;Follower distribution shifts too, though more modestly. 90.5% of ml-ai-tagged developers sit in the nano tier (under 100 followers), versus 95.3% of GitHub overall; the micro tier (100-999) holds 8.3% versus 4.2% overall. The single most-followed developer carrying the ml-ai tag in this dataset — Sebastian Raschka (&lt;a href="https://github.com/rasbt" rel="noopener noreferrer"&gt;@rasbt&lt;/a&gt;, author of several ML textbooks) at 38,746 followers — doesn't reach GitHub's overall macro-tier leaders, a reminder that broad platform fame and deep specialist reputation are correlated but distinct.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means if you're hiring, sponsoring, or building AI tooling
&lt;/h2&gt;

&lt;p&gt;For &lt;strong&gt;technical recruiting in AI/ML specifically&lt;/strong&gt;, India isn't a secondary sourcing market — by this measure it's the largest single geography, ahead of the US. For &lt;strong&gt;OSS sponsorship and DevRel&lt;/strong&gt; aimed at the AI/ML community, the 2.7x reachability gap means outreach lists built from this population will convert on contactability far better than a generic GitHub-wide list would. And for &lt;strong&gt;academic partnership or research-collaboration tooling&lt;/strong&gt;, university affiliations are a real, measurable signal in this specific population in a way they simply aren't for GitHub developers generally.&lt;/p&gt;

&lt;p&gt;For a look at how a different specialist population compares, see &lt;a href="https://crawlora.net/blog/where-security-researchers-live-github-2026?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;GitHub's security researchers&lt;/a&gt; — the US leads there instead of India, and the follower-tier skew is even steeper than what we found here.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sources&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://crawlora.net/datasets/github-users?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Crawlora — GitHub Users dataset&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://crawlora.net/blog/where-developers-live-github-2026?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Crawlora — Where the World's Developers Actually Live (parent study)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://crawlora.net/docs/github?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Crawlora — GitHub API docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Does India or the US have more AI/ML developers on GitHub?
&lt;/h3&gt;

&lt;p&gt;India, by this measure. Filtering Crawlora's 972,576-profile GitHub Users census to the 28,603 profiles tagged ml-ai (an interest-domain tag inferred from repo topics and bio text), India has 4,810 geo-resolved developers versus 3,536 for the United States - a reversal of the overall GitHub census, where the US leads India 43,996 to 32,915.&lt;/p&gt;

&lt;h3&gt;
  
  
  How many GitHub developers work in AI/ML?
&lt;/h3&gt;

&lt;p&gt;28,603 of the 972,576 profiles in Crawlora's GitHub Users dataset (2.9%) carry the ml-ai interest-domain tag. This is inferred from repo topics and bio text, not a self-declared label, so it should be read as a lower-bound signal rather than an exact headcount.&lt;/p&gt;

&lt;h3&gt;
  
  
  Are AI/ML developers easier to reach and recruit than other GitHub developers?
&lt;/h3&gt;

&lt;p&gt;Yes, substantially. 56.5% of ml-ai-tagged developers expose a public contact channel, versus 21.2% of GitHub overall - and 21.1% mark themselves open to hire, versus 7.5% overall. Both figures run roughly 2.7-2.8x higher than the GitHub-wide baseline, while activity levels (93.9% active in the last 90 days) barely differ from the overall population's 93.6%.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do universities show up in AI/ML developers' GitHub profiles?
&lt;/h3&gt;

&lt;p&gt;Yes, in a way they don't for GitHub overall. Northeastern University, Stanford, Carnegie Mellon, Tsinghua and Peking University all appear among the top named affiliations for ml-ai-tagged developers, alongside companies like Microsoft, NVIDIA, Red Hat and Google. The overall GitHub census's top 10 employer mentions include zero universities.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://crawlora.net/blog/where-ai-developers-live-github-2026?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;crawlora.net&lt;/a&gt;. &lt;a href="https://crawlora.net/?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Crawlora&lt;/a&gt; is a structured web-data, search, and anti-bot API — dozens of platforms as normalized JSON, plus a hosted MCP server, with a free tier (no card).&lt;/em&gt;&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>github</category>
      <category>ai</category>
    </item>
    <item>
      <title>The Official FIFA World Cup App Scores 2.65 Stars. Its Ticket App Scores 1.79.</title>
      <dc:creator>Tony Wang</dc:creator>
      <pubDate>Sun, 09 Aug 2026 01:00:00 +0000</pubDate>
      <link>https://dev.to/tonywangca/the-official-fifa-world-cup-app-scores-265-stars-its-ticket-app-scores-179-3jgp</link>
      <guid>https://dev.to/tonywangca/the-official-fifa-world-cup-app-scores-265-stars-its-ticket-app-scores-179-3jgp</guid>
      <description>&lt;p&gt;&lt;strong&gt;Key takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;FIFA runs three separate apps for this World Cup, and its own users rate them nothing alike: the tournament companion app averages 2.65★ on the App Store (712 ratings) and 2.97★ on Google Play; the dedicated ticket-delivery app averages 1.79★ (390 ratings) and 2.21★ on Google Play; FIFA's separate, year-round football app holds 4.62★ (2,163 ratings) and 4.52★ on Google Play.&lt;/li&gt;
&lt;li&gt;It got worse as the stakes went up, not better. In the 100 most recent Google Play reviews on each app, the tournament app's 1-star share rose to 58% (from 43.7% lifetime) and the ticket app's rose to 84% (from 76.9% lifetime) — covering exactly the knockout-round and final window.&lt;/li&gt;
&lt;li&gt;The ticket-app complaints aren't cosmetic: 41% of the negative reviews we sampled describe being unable to access or transfer a ticket already paid for, and 27% describe being locked out by login or verification failures — on the one app that determines whether you get into the stadium.&lt;/li&gt;
&lt;li&gt;Real, dated reviews: one reviewer describes losing $2,100 and being unable to enter a Brazil match; another paid $2,600 and spent 90 minutes and four password resets the night before a flight to the game, still with no tickets. A third's own account of a SeatGeek ticket getting pulled back by the seller five days before delivery matches, almost beat for beat, the 'ghost ticket' pattern NPR reported on this same tournament.&lt;/li&gt;
&lt;li&gt;Pulled live via Crawlora's App Store and Google Play endpoints on July 21, 2026, two days after the final. The star histograms are each app's lifetime cumulative distribution; the 'getting worse' read and the complaint themes come from the 100 most recent reviews on each app — a sample, not a full census.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;FIFA runs three separate apps for this World Cup, and its own users rate them nothing alike. The tournament companion app averages 2.65 stars. Its dedicated ticket-delivery app — the one that determines whether you actually get into the stadium — averages 1.79, with more than three out of every four ratings at the lowest possible score. FIFA's separate, year-round football app, unrelated to this specific tournament, holds 4.62. Same organization, the same six weeks, a 2.8-star spread. We pulled the App Store and Google Play histograms directly, plus the most recent reviews on each app, to see exactly what's driving it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fopnil3c915iq1o6s0ahe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fopnil3c915iq1o6s0ahe.png" alt="App Store rating average for three FIFA apps: FWC2026 Mobile Tickets 1.79 stars, FIFA World Cup 2026 tournament app 2.65 stars, FIFA Official App year-round 4.62 stars." width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What this post draws on&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;All three star histograms and every review quoted below came from a live pull through Crawlora's App Store (&lt;code&gt;appstore-ratings&lt;/code&gt;, &lt;code&gt;appstore-reviews&lt;/code&gt;) and Google Play (&lt;code&gt;googleplay-reviews&lt;/code&gt;) endpoints on July 21, 2026 — two days after the July 19 final. Histograms are each app's full lifetime rating distribution; the "100 most recent reviews" samples used for the trend and complaint-theme reads are dated snapshots, not a full census. See the methodology section below for exactly how the theme percentages were counted.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Three apps, one World Cup, one 2.8-star spread
&lt;/h2&gt;

&lt;p&gt;FIFA didn't build one World Cup app — it built (or commissioned) three, and split entirely different jobs across them:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;App&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;th&gt;App Store rating&lt;/th&gt;
&lt;th&gt;App Store ratings (n)&lt;/th&gt;
&lt;th&gt;Google Play rating&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;FWC2026 Mobile Tickets&lt;/td&gt;
&lt;td&gt;Ticket delivery &amp;amp; stadium entry — the only way in with a purchased ticket&lt;/td&gt;
&lt;td&gt;1.79★&lt;/td&gt;
&lt;td&gt;390&lt;/td&gt;
&lt;td&gt;2.21★&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FIFA World Cup 2026&lt;/td&gt;
&lt;td&gt;Tournament companion — scores, fixtures, fantasy football&lt;/td&gt;
&lt;td&gt;2.65★&lt;/td&gt;
&lt;td&gt;712&lt;/td&gt;
&lt;td&gt;2.97★&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FIFA Official App&lt;/td&gt;
&lt;td&gt;Year-round football app — clubs, transfers, unrelated to this tournament&lt;/td&gt;
&lt;td&gt;4.62★&lt;/td&gt;
&lt;td&gt;2,163&lt;/td&gt;
&lt;td&gt;4.52★&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The tickets app carries a bundle id of &lt;code&gt;io.tixngo.app.fifatickets&lt;/code&gt; — it's a white-labeled product built by a third-party ticketing vendor, TixNgo, not FIFA's in-house app team. That's context, not an excuse: it's still the one app every ticket-holder is forced to use to get through the gate.&lt;/p&gt;

&lt;p&gt;The full 1–5 star breakdown makes the gap even clearer than the averages:&lt;/p&gt;

&lt;p&gt;Show the full star-by-star breakdown (App Store)&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;App&lt;/th&gt;
&lt;th&gt;1★&lt;/th&gt;
&lt;th&gt;2★&lt;/th&gt;
&lt;th&gt;3★&lt;/th&gt;
&lt;th&gt;4★&lt;/th&gt;
&lt;th&gt;5★&lt;/th&gt;
&lt;th&gt;Total ratings&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;FWC2026 Mobile Tickets&lt;/td&gt;
&lt;td&gt;300 (76.9%)&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;67 (17.2%)&lt;/td&gt;
&lt;td&gt;390&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FIFA World Cup 2026&lt;/td&gt;
&lt;td&gt;311 (43.7%)&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;212 (29.8%)&lt;/td&gt;
&lt;td&gt;712&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FIFA Official App&lt;/td&gt;
&lt;td&gt;130 (6.0%)&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;33&lt;/td&gt;
&lt;td&gt;184&lt;/td&gt;
&lt;td&gt;1,800 (83.2%)&lt;/td&gt;
&lt;td&gt;2,163&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  It got worse as the stakes went up, not better
&lt;/h2&gt;

&lt;p&gt;If the low ratings were mostly early-tournament teething problems, the most recent reviews should look better than the lifetime average. They look worse:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;App&lt;/th&gt;
&lt;th&gt;Lifetime 1★ share&lt;/th&gt;
&lt;th&gt;1★ share, 100 most recent reviews&lt;/th&gt;
&lt;th&gt;Window covered&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;FWC2026 Mobile Tickets&lt;/td&gt;
&lt;td&gt;76.9%&lt;/td&gt;
&lt;td&gt;84%&lt;/td&gt;
&lt;td&gt;May 20 – Jul 17, 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FIFA World Cup 2026&lt;/td&gt;
&lt;td&gt;43.7%&lt;/td&gt;
&lt;td&gt;58%&lt;/td&gt;
&lt;td&gt;Jul 12 – Jul 20, 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The tournament app's most recent 100 Google Play reviews land almost entirely inside the knockout rounds and the final itself — exactly the window when usage, and the cost of the app failing, is highest. The tickets app's recent window runs from late May through five days before the final, covering the exact stretch NPR and other outlets were reporting ticket-delivery problems across the tournament.&lt;/p&gt;

&lt;h2&gt;
  
  
  What people are actually angry about
&lt;/h2&gt;

&lt;p&gt;For the ticket app, the complaints aren't cosmetic — they're about whether the ticket you paid for actually gets you into the building:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What the negative review describes&lt;/th&gt;
&lt;th&gt;Share of sampled 1–2★ reviews&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Can't access or transfer a ticket already paid for&lt;/td&gt;
&lt;td&gt;41.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Locked out by login or verification failures&lt;/td&gt;
&lt;td&gt;27.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Confusing navigation or design&lt;/td&gt;
&lt;td&gt;18.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slow to load or freezes&lt;/td&gt;
&lt;td&gt;12.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The reviews are specific and dated. One App Store review from June 19 reads simply: "Lost 2100 Dollars worth of tickets, CANNOT GET INTO BRAZIL GAME." Another, from July 1, describes paying $2,600 for tickets, then spending 90 minutes and four password resets trying to retrieve them the night before a flight to the match — "still no tickets so I will try again tomorrow. #Fail." A June 28 review: "total failure doesn't work on Samsung Galaxy S24 Ultra. Can not even verify login. Timeout error." A July 6 Google Play review: "day of match, app won't work — can't access the tickets I purchased."&lt;/p&gt;

&lt;p&gt;One July 2 App Store review is essentially a first-person case study of the "ghost ticket" pattern NPR reported on this same tournament: the reviewer bought Senegal-vs-Belgium tickets through SeatGeek on June 12 as a birthday present for their son, was told the tickets would be available June 30, and found nothing on either the FIFA app or website that day or the next. At the stadium box office on match day, they learned the reseller had taken the seats back on June 25 — five days before FIFA had told them delivery would happen.&lt;/p&gt;

&lt;p&gt;The tournament app's complaints run a different pattern — less about access, more about the app simply working:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What the negative review describes&lt;/th&gt;
&lt;th&gt;Share of sampled 1–2★ reviews&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Confusing navigation or design&lt;/td&gt;
&lt;td&gt;23.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slow to load&lt;/td&gt;
&lt;td&gt;11.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Crashes or freezes&lt;/td&gt;
&lt;td&gt;8.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;"The app functions like it's been rushed through development," reads one July 3 review. "I've had to update the app twice in the past two days. For an app that only needs to be used for three weeks. It's inexcusable." A July 19 review, the day after the final: "here all is messed up nothing can be done by this app. no live match video no score post nothing." Others describe the app draining 60% of their phone's battery running in the background during a match, and one reviewer flags that ticket access is buried inside a separate app entirely — "it's also mysteriously buried so far down into the app without proper navigation."&lt;/p&gt;

&lt;p&gt;It isn't unanimous complaint — both apps have five-star reviews too, including a couple of workaround tips from users who found the login loop by turning off their VPN, or by transferring tickets to a second account when the app claimed they were "already logged in elsewhere." But those are the exceptions in the sample, not the rule.&lt;/p&gt;

&lt;h2&gt;
  
  
  This isn't the first sign of ticketing trouble this tournament
&lt;/h2&gt;

&lt;p&gt;Crawlora &lt;a href="https://crawlora.net/blog/world-cup-final-ticket-bots-2026?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;already covered&lt;/a&gt; the pricing side of this story: final tickets that reached $2.3 million on FIFA's own resale marketplace, a first-time dynamic-pricing system, and the "slow ticketing" pattern of metering out inventory in batches. That post used anti-bot scanning and contemporaneous reporting — Al Jazeera, Newsweek, NPR — as its evidence. This one uses a completely different data source, structured app-review mining, and lands on the same underlying story from the other side: real people, with real money on the line, unable to get a purchased ticket to actually work.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we measured this
&lt;/h2&gt;

&lt;p&gt;Pulled live via Crawlora's App Store (&lt;code&gt;appstore-ratings&lt;/code&gt; for the full histogram, &lt;code&gt;appstore-reviews&lt;/code&gt; for individual review text) and Google Play (&lt;code&gt;googleplay-reviews&lt;/code&gt;) endpoints on July 21, 2026, US storefront. The three apps: FIFA World Cup 2026 (App Store id 6476561442 / Google Play &lt;code&gt;com.fifa.tournament&lt;/code&gt;), FWC2026 Mobile Tickets (App Store id 6532603739 / Google Play &lt;code&gt;io.tixngo.app.fifatickets&lt;/code&gt;), and FIFA Official App (App Store id 756904853 / Google Play &lt;code&gt;com.fifa.fifaapp.android&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Star histograms are each app's full lifetime rating distribution as Apple reports it — a complete population, not a sample. The "100 most recent reviews" figures are exactly that: the newest 100 Google Play reviews returned per app at pull time, sorted newest-first, which is why the two apps' windows cover different date ranges (the tickets app's most recent 100 reviews stretch back to late May; the tournament app's only back to July 12 — a sign the tournament app is simply getting reviewed far more often right now). Complaint-theme percentages are keyword-matched counts over the 1–2 star reviews with review text in that same 100-review sample, not the full lifetime population — treat them as directional, not exhaustive, and expect some reviews to touch more than one theme.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sources&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://crawlora.net/blog/world-cup-final-ticket-bots-2026?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Crawlora — World Cup Final Tickets Hit $2.3M: The Anti-Bot Data Behind Ticketing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.npr.org/2026/06/26/nx-s1-5871397/world-cup-tickets-stubhub-resale-controversy" rel="noopener noreferrer"&gt;NPR — StubHub blames FIFA after World Cup resale tickets go missing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apps.apple.com/us/app/fifa-world-cup-2026/id6476561442" rel="noopener noreferrer"&gt;FIFA World Cup 2026 — App Store&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apps.apple.com/us/app/fwc2026-mobile-tickets/id6532603739" rel="noopener noreferrer"&gt;FWC2026 Mobile Tickets — App Store&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apps.apple.com/us/app/fifa-official-app/id756904853" rel="noopener noreferrer"&gt;FIFA Official App — App Store&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Related reading:&lt;/strong&gt; &lt;a href="https://crawlora.net/blog/world-cup-final-ticket-bots-2026?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;World Cup Final Tickets Hit $2.3M — The Anti-Bot Data Behind Ticketing&lt;/a&gt; · &lt;a href="https://crawlora.net/blog/more-apps-fewer-hits-2026?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;More Apps, Fewer Hits: 18,000 App-Store Winners, by Birth Year&lt;/a&gt; · &lt;a href="https://crawlora.net/blog/world-cup-2026-final-search-trends?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;What America Searched For After the 2026 World Cup Final&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How bad are the ratings for FIFA's official World Cup 2026 app?
&lt;/h3&gt;

&lt;p&gt;Bad, and getting worse. The tournament companion app ("FIFA World Cup 2026," with scores, fixtures and fantasy football) averages 2.65 stars on the App Store across 712 ratings and 2.97 on Google Play. In the 100 most recent Google Play reviews (July 12–20, 2026), 58% were 1-star — worse than its 43.7% lifetime rate, meaning the app got worse, not better, as the stakes rose through the knockout rounds.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's FIFA's worst-rated World Cup app?
&lt;/h3&gt;

&lt;p&gt;FWC2026 Mobile Tickets — the separate app that's the only way to access and enter with a purchased ticket. It averages 1.79 stars on the App Store (390 ratings, 76.9% of them 1-star) and 2.21 on Google Play. In its 100 most recent Google Play reviews, 84% were 1-star.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why is FIFA's ticket app rated so much worse than its tournament app?
&lt;/h3&gt;

&lt;p&gt;The complaints are functional, not cosmetic. Of the negative reviews sampled, 41.2% specifically describe being unable to access or transfer tickets already paid for, and 27.1% describe being locked out by login or verification failures — both on the one app that determines whether you get into the stadium. Real examples: one reviewer describes losing $2,100 and being unable to enter a Brazil match; another paid $2,600 and spent 90 minutes and four password resets still without tickets the night before a flight to the game.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does FIFA have any well-rated apps?
&lt;/h3&gt;

&lt;p&gt;Yes — its separate, year-round "FIFA Official App" (club football, transfers, fantasy, unrelated to this specific tournament) holds 4.62 stars on the App Store across 2,163 ratings and 4.52 on Google Play, with only 6.0% of ratings at 1-star. The contrast shows the problem is specific to the two tournament-built apps, not FIFA's app-development capability generally.&lt;/p&gt;

&lt;h3&gt;
  
  
  What are people actually complaining about in the World Cup tournament app?
&lt;/h3&gt;

&lt;p&gt;Mostly navigation and performance, not access. In the sample of negative reviews, 23.7% describe confusing navigation or UI, 11.9% describe slow loading, and 8.5% describe crashes or freezes. Several reviewers also flag heavy battery drain from background activity and delayed live-score notifications.&lt;/p&gt;

&lt;h3&gt;
  
  
  How was this measured?
&lt;/h3&gt;

&lt;p&gt;Pulled live via Crawlora's App Store ratings/reviews and Google Play reviews endpoints on July 21, 2026, two days after the July 19 final. The star histograms are each app's lifetime cumulative rating distribution. The "getting worse over time" reads come from the 100 most recent reviews on each app at pull time — a recent sample, not a full census — and the complaint-theme percentages are keyword-tagged counts over the negative (1–2 star) reviews with review text in that same sample.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://crawlora.net/blog/world-cup-2026-official-app-reviews?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;crawlora.net&lt;/a&gt;. &lt;a href="https://crawlora.net/tools/app-review-analyzer?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;App Review Analyzer&lt;/a&gt; is Crawlora's free tool for pulling and summarizing App Store reviews for any app.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>appstore</category>
      <category>reviews</category>
    </item>
    <item>
      <title>YouTube's Top Comment on the World Cup Final Cites a Stat. TikTok's Top Comment Is About Trump.</title>
      <dc:creator>Tony Wang</dc:creator>
      <pubDate>Sat, 08 Aug 2026 01:00:00 +0000</pubDate>
      <link>https://dev.to/tonywangca/youtubes-top-comment-on-the-world-cup-final-cites-a-stat-tiktoks-top-comment-is-about-trump-47gn</link>
      <guid>https://dev.to/tonywangca/youtubes-top-comment-on-the-world-cup-final-cites-a-stat-tiktoks-top-comment-is-about-trump-47gn</guid>
      <description>&lt;p&gt;&lt;strong&gt;Key takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We sampled the top comments on the World Cup final's two highest-view YouTube highlight videos (FIFA's own, 12.6M views, and Fox Sports', 2.9M) and three of the highest-view TikTok clips about the match. The two platforms argue about completely different things.&lt;/li&gt;
&lt;li&gt;On YouTube, 16.7% of the 60 comments sampled independently cite the same fact — that Argentina had zero shots on target — and 26.7% use flat dominance/deserved-it framing. The single most-liked comment (14,000 likes), on FIFA's own highlights video: "The most deserved win at the whole tournament. Absolute domination."&lt;/li&gt;
&lt;li&gt;On TikTok, it depends entirely on which clip you land on. On Fox Sports' trophy-ceremony clip (996K plays, 1,701 comments), the two most-liked comments by a wide margin — 7,430 and 4,247 likes, versus 625 for the next-highest — are both about Donald Trump's presence at the ceremony, not the football. A third of the top comments we sampled there mention him by name.&lt;/li&gt;
&lt;li&gt;The stat that dominates YouTube shows up on TikTok too — contested. One long-form comment argues Argentina "let the match go," citing the same zero-shots-on-target fact as evidence of a conspiracy rather than dominance.&lt;/li&gt;
&lt;li&gt;A different TikTok video — an account posting under the name "Christiano Ronaldo" (the misspelling suggests it isn't the real player) congratulating Spain — pulled 1.9M plays, and its comments are dominated by a Messi-vs-Ronaldo-vs-Yamal generational debate, plus at least one commenter asking outright whether the account is "AI or it's real."&lt;/li&gt;
&lt;li&gt;Pulled live via Crawlora's YouTube and TikTok comment endpoints on July 21, 2026, two days after the final. Samples are each platform's top-ranked comments (by relevance/likes), not a full census — see the methodology section for exact counts and a pagination-overlap dedup we had to apply.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ask what people actually said about the World Cup final, and the answer depends entirely on which app you open. We pulled the real comment threads under the final's biggest videos — not hashtag totals, not post counts, the actual top comments people are reading — on YouTube and TikTok. YouTube argues the result with a stat. TikTok, on one of its biggest clips, barely mentions the result at all.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiokav5znvh930sqzwq5j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiokav5znvh930sqzwq5j.png" alt="Share of 60 sampled YouTube comments on the World Cup final's top two highlight videos, by theme: general dominance 26.7%, cites a shots-on-target stat 16.7%, credits or blames the goalkeeper 13.3%, saved-football moralizing 10.0%, Argentina framed as dirty or violent 11.7%." width="800" height="538"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What this post draws on&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;All comments and view/like counts came from a live pull through Crawlora's YouTube (&lt;code&gt;youtube_search&lt;/code&gt;, &lt;code&gt;youtube_comments&lt;/code&gt;) and TikTok (&lt;code&gt;tiktok_search&lt;/code&gt;, &lt;code&gt;tiktok_comments&lt;/code&gt;) endpoints on July 21, 2026, two days after the July 19 final. Every theme percentage below is counted over the specific sample described in that section — see "How we measured this" for exact video IDs, sample sizes, and a real gotcha (paginated comment calls returning duplicate rows) we had to filter out before counting anything.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  YouTube: the same stat, independently, over and over
&lt;/h2&gt;

&lt;p&gt;Search YouTube for the final and the highest-view results are exactly what you'd expect: FIFA's own highlights reel (12.6M views) and Fox Sports' (2.9M). What's less expected is how uniform the top comments are. Commenters on both videos, independently, keep reaching for the same piece of evidence:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What the comment argues&lt;/th&gt;
&lt;th&gt;Share of 60 sampled comments&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;General dominance / "deserved it"&lt;/td&gt;
&lt;td&gt;26.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cites a shots-on-target stat&lt;/td&gt;
&lt;td&gt;16.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Credits or blames the goalkeeper&lt;/td&gt;
&lt;td&gt;13.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Argentina framed as dirty/violent&lt;/td&gt;
&lt;td&gt;11.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"Saved football" / moralizing&lt;/td&gt;
&lt;td&gt;10.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The single fact commenters keep independently reaching for: Argentina didn't register a shot on target. It shows up phrased at least four different ways — "Argentina made history by failing to register a single shot on target in a World Cup final" (4,200 likes), "Argentina having 0 shots on target until the last 5 minutes is insane" (9,200 likes), "Reminder that Argentina had 0 shots on target in 120 min" (2,600 likes), and as a joke — "Spain's goalie could have worked remotely" (3,900 likes). Nobody is quoting each other; these are independent top-level comments on two different videos, converging on the same number.&lt;/p&gt;

&lt;p&gt;Layered on top of the stat is a moral framing that goes well past "Spain played better": "Argentina did not deserve to play in the World Cup final because they relied on excessive physicality, dirty play, and gamesmanship rather than fair competition" pulled 7,100 likes and 249 replies — one of the most-discussed comments in the sample. And the single most-liked comment on FIFA's own video isn't about a player at all: "I've never been so satisfied in a long time, thank you Spain for saving football" (12,000 likes). A near-identical line — "thank you Spain for saving football" — shows up independently on the Fox Sports video too, at lower volume. It isn't one viral phrase copy-pasted; it's the same sentiment arrived at separately, twice.&lt;/p&gt;

&lt;h2&gt;
  
  
  TikTok: it depends which clip you land on
&lt;/h2&gt;

&lt;p&gt;TikTok doesn't converge the way YouTube does — the dominant topic changes entirely depending on which specific video you open, even for the same match:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Video (plays)&lt;/th&gt;
&lt;th&gt;What the top comments are actually about&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fox Sports trophy-ceremony clip (996K)&lt;/td&gt;
&lt;td&gt;Trump's presence at the ceremony&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"Christiano Ronaldo"-named account, congratulating Spain (1.9M)&lt;/td&gt;
&lt;td&gt;Messi vs. Ronaldo vs. Yamal — and whether the account itself is real&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yamal-focused edit (2.3M)&lt;/td&gt;
&lt;td&gt;Generational awe that Yamal is 19&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Fox Sports' own trophy-lift clip is the sharpest case. It has 1,701 comments total; we sampled the top 21. The two most-liked by a wide margin — "bro i'm crying, yall saw Trump tryna be involved in the trophy lift" (7,430 likes) and "why is trump there" (4,247 likes) — are both about the former US president standing near the trophy, not the match. The next-highest comment on any topic has 625 likes. A third of the sample (7 of 21) mentions Trump by name at all: "Who invited Donald trump," "The way they zoom in so you can't see Trump standing there," "trump WANTED TO BE Invited into their Celebration.... But NO." This is the same moment &lt;a href="https://crawlora.net/blog/world-cup-2026-final-social-listening?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Crawlora's social-listening study&lt;/a&gt; already traced spreading across Reddit and dedicated TikTok reaction videos within four minutes of the live broadcast — what this comment sample adds is that the reaction wasn't confined to purpose-made reaction content. It's the top comment under a neutral, official trophy-lift highlight clip that isn't about Trump at all.&lt;/p&gt;

&lt;p&gt;The other two videos show TikTok can converge too, just on something else entirely. The account posting as "Christiano Ronaldo" — a misspelling that suggests it isn't the real Cristiano Ronaldo — racked up 1.9M plays on a simple congratulations post, and its comments are almost entirely a Messi-vs-Ronaldo-vs-Yamal generational argument: "messi❌ c.Ronaldo✅ yamal✅," "yamal is better than ronaldo," "I don't like Argentina and Messi." One commenter cuts through it directly: "AI or it's real" — a real, live question about whether a viral World Cup account is even who it claims to be.&lt;/p&gt;

&lt;h2&gt;
  
  
  The contested stat
&lt;/h2&gt;

&lt;p&gt;The "zero shots on target" fact that YouTube treats as settled evidence of dominance gets argued with on TikTok. One reply on the Fox Sports clip, unprompted and at length:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I genuinely believe Argentina let that match go... What I find hard to believe is that a team with Argentina's quality finished with 0 shots on target and 0 real attacking threat. That just doesn't add up to me. [...] maybe Messi wanted Lamine Yamal to lift the trophy, maybe something else happened I don't know."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Another, shorter one on the same video: "it was rigged because the referee did not foul the Spain players." Neither comment disputes the underlying number — both treat it as suspicious rather than as proof, which is the opposite read from every high-vote YouTube comment citing the same fact. Same statistic, opposite conclusion, different platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we measured this
&lt;/h2&gt;

&lt;p&gt;Pulled live via Crawlora's &lt;code&gt;youtube_search&lt;/code&gt; (sorted by view count, query "world cup 2026 final Spain Argentina highlights") and &lt;code&gt;youtube_comments&lt;/code&gt;, plus &lt;code&gt;tiktok_search&lt;/code&gt; (keyword "world cup 2026 final") and &lt;code&gt;tiktok_comments&lt;/code&gt;, on July 21, 2026, US/English locale.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;YouTube sample (n=60):&lt;/strong&gt; the full top-comment set returned for two videos — FIFA's "Highlights | Spain 1-0 Argentina | FIFA World Cup 2026™ FINAL" (12,598,306 views, video id &lt;code&gt;6HaHNYjnghE&lt;/code&gt;) and Fox Sports' "Spain vs Argentina Highlights" (2,899,950 views, video id &lt;code&gt;x-cpRHf4xd4&lt;/code&gt;). Both videos' comment streams were exhausted (the API returned an empty continuation token), so this is each video's complete top-ranked comment set at pull time, not an arbitrary cutoff. Theme percentages are keyword/pattern-matched over the full text of all 60; categories overlap by design (a single comment can cite the shots-on-target stat and call Argentina dirty in the same sentence), so the five shares don't sum to 100%.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TikTok sample:&lt;/strong&gt; three videos identified from a view-sorted search — Fox Sports' trophy-ceremony clip (996,100 plays, aweme id &lt;code&gt;7664376797336751391&lt;/code&gt;, 1,701 total comments, top 21 unique comments sampled after dedup), the "Christiano Ronaldo"-named account's congratulations post (1.9M plays, aweme id &lt;code&gt;7664437295822540046&lt;/code&gt;), and a Yamal-focused edit from account "Conditinho" (2.3M plays, aweme id &lt;code&gt;7664394784974376224&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A real gotcha, worth flagging:&lt;/strong&gt; paginating TikTok's comments endpoint two pages deep on the same video returned two comments that were exact duplicates of ones already seen on page one — same author, same text, same like count. This is the same overlapping-pagination behavior &lt;a href="https://crawlora.net/blog/world-cup-2026-final-social-listening?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Crawlora's social-listening study&lt;/a&gt; already documented for TikTok's search and hashtag endpoints; it applies to the comments endpoint too. We deduped by comment text before counting anything, and the 21-comment TikTok sample and the Trump percentage above are both post-dedup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sources&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://crawlora.net/blog/world-cup-2026-final-social-listening?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Crawlora — The World Cup Final Boo: How It Spread Across Reddit and TikTok, Hour by Hour&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=6HaHNYjnghE" rel="noopener noreferrer"&gt;FIFA — Highlights | Spain 1-0 Argentina | FIFA World Cup 2026™ FINAL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=x-cpRHf4xd4" rel="noopener noreferrer"&gt;Fox Sports — Spain vs Argentina Highlights | 2026 FIFA World Cup™ | Final&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Related reading:&lt;/strong&gt; &lt;a href="https://crawlora.net/blog/world-cup-2026-final-social-listening?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;The World Cup Final Boo: How It Spread Across Reddit and TikTok, Hour by Hour&lt;/a&gt; · &lt;a href="https://crawlora.net/blog/world-cup-2026-official-app-reviews?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;The Official FIFA World Cup App Scores 2.65 Stars. Its Ticket App Scores 1.79.&lt;/a&gt; · &lt;a href="https://crawlora.net/blog/world-cup-2026-final-search-trends?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;What America Searched For After the 2026 World Cup Final&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What do YouTube commenters say about the World Cup final?
&lt;/h3&gt;

&lt;p&gt;They build a stats-driven moral case for Spain. Of 60 top comments sampled across FIFA's official highlights video (12.6M views) and Fox Sports' (2.9M), 26.7% use general dominance/"deserved it" framing, 16.7% independently cite that Argentina had zero shots on target, and 11.7% frame Argentina as dirty or violent. The single most-liked comment (14,000 likes): "I've never been so satisfied in a long time, thank you Spain for saving football."&lt;/p&gt;

&lt;h3&gt;
  
  
  What's the most common fact cited in the World Cup final's YouTube comments?
&lt;/h3&gt;

&lt;p&gt;That Argentina registered zero shots on target. It shows up phrased at least four different ways across two different videos — as a stat ("Argentina made history by failing to register a single shot on target," 4,200 likes), as a joke ("Spain's goalie could have worked remotely," 3,900 likes), and combined with other stats ("more red cards than attempts at goal," 963 likes) — commenters reaching the same number independently, not copying one viral phrase.&lt;/p&gt;

&lt;h3&gt;
  
  
  What are TikTok commenters saying about the World Cup final?
&lt;/h3&gt;

&lt;p&gt;It depends entirely on which clip. On Fox Sports' trophy-ceremony highlight (996K plays), the two most-liked comments by a wide margin (7,430 and 4,247 likes, versus 625 for the next-highest) are both about Donald Trump's presence at the ceremony, not the match. On a different clip — an account posting as "Christiano Ronaldo" congratulating Spain (1.9M plays) — the comments are a Messi-vs-Ronaldo-vs-Yamal generational debate instead.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is the Trump reaction to the World Cup final trophy ceremony really that dominant on TikTok?
&lt;/h3&gt;

&lt;p&gt;On the specific clip we sampled, yes — a third of the top 21 comments (post-dedup) mention him by name, and critically, the top two comments by likes are both about him. This is the same trophy-ceremony reaction Crawlora's social-listening study traced spreading across Reddit and dedicated TikTok reaction videos within four minutes of the live broadcast; this sample shows it also dominates the comment section of a neutral, official highlight clip that isn't about Trump at all.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who is the "Christiano Ronaldo" TikTok account posting about the World Cup?
&lt;/h3&gt;

&lt;p&gt;Unconfirmed — the misspelling (the real player's name is "Cristiano") suggests it is not Cristiano Ronaldo's real account, though we did not independently verify its identity. Its congratulations-to-Spain post pulled 1.9M plays, and at least one commenter directly asked "AI or it's real," questioning the account's authenticity in the comments themselves.&lt;/p&gt;

&lt;h3&gt;
  
  
  How was this measured?
&lt;/h3&gt;

&lt;p&gt;Pulled live via Crawlora's YouTube (search + comments) and TikTok (search + comments) endpoints on July 21, 2026, two days after the July 19 final. The YouTube sample (n=60) is each of two videos' complete top-ranked comment set at pull time (the API's continuation token was exhausted, not an arbitrary cutoff). The TikTok sample is the top comments on three view-sorted videos, deduped after paginating turned up exact-duplicate comments on a repeat page — the same overlapping-pagination behavior already documented for TikTok's search endpoint, confirmed here to also affect comments.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://crawlora.net/blog/world-cup-2026-final-video-comments?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;crawlora.net&lt;/a&gt;. &lt;a href="https://crawlora.net/platforms/youtube?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;YouTube API&lt;/a&gt; returns video metadata, comments, and transcripts as structured JSON — no scraping required.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>youtube</category>
      <category>tiktok</category>
    </item>
    <item>
      <title>Every World Cup Since 2014, Visa's SEC Filings Call It Out By Name — Marketing Spend Swings From -9% to +44%</title>
      <dc:creator>Tony Wang</dc:creator>
      <pubDate>Fri, 07 Aug 2026 01:00:00 +0000</pubDate>
      <link>https://dev.to/tonywangca/every-world-cup-since-2014-visas-sec-filings-call-it-out-by-name-marketing-spend-swings-from-2ma4</link>
      <guid>https://dev.to/tonywangca/every-world-cup-since-2014-visas-sec-filings-call-it-out-by-name-marketing-spend-swings-from-2ma4</guid>
      <description>&lt;p&gt;&lt;strong&gt;Key takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visa's SEC filings have named the FIFA World Cup as a driver of marketing-expense growth in every tournament cycle since at least 2014 — four World Cups running, always inside the "Marketing expenses" discussion of a 10-Q or 10-K.&lt;/li&gt;
&lt;li&gt;The size of that swing is not a clean escalation. Marketing expense fell 9% year-over-year in the quarter tied to Brazil 2014 (a tough comp against the prior year's Sochi Olympics spend), then rose 8% for Russia 2018, 18% for Qatar 2022, and 44% for the 2026 tournament — its biggest jump of the four, and the only quarter that isn't final yet.&lt;/li&gt;
&lt;li&gt;Every single cycle credits the World Cup jointly with that year's Winter Olympics, never alone. Visa sponsors both, and since 1994 the Winter Games and World Cup have always shared a calendar year — no filing isolates a World-Cup-only dollar figure.&lt;/li&gt;
&lt;li&gt;Qatar 2022 is the only cycle where the reporting quarter fully contains the tournament dates (Nov 20 – Dec 18, 2022 sits entirely inside Visa's fiscal Q1 2023). The other three cycles' figures come from quarters that only partly overlap, or precede, kickoff.&lt;/li&gt;
&lt;li&gt;The 44% figure for 2026 is a leading indicator, not a final result — it's from the quarter before the tournament (January–March 2026). The quarter that actually contains the June 11–July 19 tournament isn't due until early August 2026.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Visa's SEC filings have named the FIFA World Cup as a reason its marketing spend moved — every tournament cycle since at least 2014. We pulled the exact sentence from Visa's 10-Q or 10-K for Brazil 2014, Russia 2018, Qatar 2022, and the ongoing 2026 tournament, along with the dollar figures behind each one. The naming pattern holds for over a decade. The dollar swing behind it does not: marketing expense fell 9% year-over-year the quarter tied to 2014, then rose 8%, 18%, and 44% in the three cycles since.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What this post draws on&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;All filing text below is quoted directly from Visa Inc.'s (SEC CIK 1403161) own EDGAR filings — one 10-Q or 10-K per World Cup cycle since 2014 — pulled live via Crawlora's SEC filing-sections endpoint. Two caveats up front: the comparison windows aren't perfectly uniform, since each row uses whichever filing actually contains Visa's World Cup sentence, and that sentence lands in a different position relative to kickoff every cycle (exact dates in the table below); and every quote credits the World Cup jointly with that year's Winter Olympics, never in isolation — see "The World Cup never travels alone" below for why.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The pattern, cycle by cycle
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Cycle&lt;/th&gt;
&lt;th&gt;Host&lt;/th&gt;
&lt;th&gt;Tournament dates&lt;/th&gt;
&lt;th&gt;Filing&lt;/th&gt;
&lt;th&gt;Period covered&lt;/th&gt;
&lt;th&gt;Marketing expense&lt;/th&gt;
&lt;th&gt;Prior year&lt;/th&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2014&lt;/td&gt;
&lt;td&gt;Brazil&lt;/td&gt;
&lt;td&gt;Jun 12 – Jul 13, 2014&lt;/td&gt;
&lt;td&gt;10-Q, filed Jul 24, 2014&lt;/td&gt;
&lt;td&gt;Q3 FY2014 (3 mo. to Jun 30)&lt;/td&gt;
&lt;td&gt;$228M&lt;/td&gt;
&lt;td&gt;$252M&lt;/td&gt;
&lt;td&gt;−9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2018&lt;/td&gt;
&lt;td&gt;Russia&lt;/td&gt;
&lt;td&gt;Jun 14 – Jul 15, 2018&lt;/td&gt;
&lt;td&gt;10-Q, filed Jul 27, 2018&lt;/td&gt;
&lt;td&gt;Q3 FY2018 (3 mo. to Jun 30)&lt;/td&gt;
&lt;td&gt;$240M&lt;/td&gt;
&lt;td&gt;$221M&lt;/td&gt;
&lt;td&gt;+8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2022&lt;/td&gt;
&lt;td&gt;Qatar&lt;/td&gt;
&lt;td&gt;Nov 20 – Dec 18, 2022&lt;/td&gt;
&lt;td&gt;10-Q, filed Jan 27, 2023&lt;/td&gt;
&lt;td&gt;Q1 FY2023 (3 mo. to Dec 31)&lt;/td&gt;
&lt;td&gt;$332M&lt;/td&gt;
&lt;td&gt;$280M&lt;/td&gt;
&lt;td&gt;+18%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2026&lt;/td&gt;
&lt;td&gt;USA / Mexico / Canada&lt;/td&gt;
&lt;td&gt;Jun 11 – Jul 19, 2026&lt;/td&gt;
&lt;td&gt;10-Q, filed Apr 29, 2026&lt;/td&gt;
&lt;td&gt;Q2 FY2026 (3 mo. to Mar 31)*&lt;/td&gt;
&lt;td&gt;$545M&lt;/td&gt;
&lt;td&gt;$381M&lt;/td&gt;
&lt;td&gt;+44%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;*Pre-tournament quarter — the quarter that actually contains the 2026 tournament hasn't been filed yet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg60svsd2bo00525jff0o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg60svsd2bo00525jff0o.png" alt="Visa marketing expense year-over-year change by World Cup cycle: 2014 minus 9%, 2018 plus 8%, 2022 plus 18%, 2026 plus 44%." width="800" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What each filing actually says
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;2014 (Brazil) — 10-Q for the quarter ended June 30, 2014, filed July 24, 2014:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Marketing decreased during the three month comparable period and increased over the nine month comparable period primarily due to elevated spend supporting the 2014 Sochi Winter Olympics campaign beginning in the third quarter of fiscal 2013 through the first half of fiscal 2014. &lt;strong&gt;The nine month comparable period also increased due to spend supporting the 2014 FIFA World Cup campaign.&lt;/strong&gt;"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;2018 (Russia) — 10-Q for the quarter ended June 30, 2018, filed July 27, 2018:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Marketing expenses increased primarily due to the higher level of spending to support a number of campaigns, &lt;strong&gt;including the PyeongChang 2018 Olympic Winter Games and 2018 FIFA World Cup.&lt;/strong&gt;"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;2022 (Qatar) — 10-Q for the quarter ended December 31, 2022, filed January 27, 2023:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Marketing expenses increased primarily due to increased spending in various campaigns, &lt;strong&gt;including the FIFA World Cup 2022™&lt;/strong&gt; and client marketing."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;2026 (USA/Mexico/Canada) — 10-Q for the quarter ended March 31, 2026, filed April 29, 2026:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Marketing expenses increased over the three and six-month prior-year comparable periods primarily due to higher spending for client marketing and various campaigns, &lt;strong&gt;both driven in part by the Olympic and Paralympic Winter Games Milano Cortina 2026 and the FIFA World Cup 2026™.&lt;/strong&gt;"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Four filings, four different fiscal quarters, one recurring sentence.&lt;/p&gt;

&lt;h2&gt;
  
  
  The World Cup never travels alone
&lt;/h2&gt;

&lt;p&gt;Notice what's in every quote above: the World Cup is never the only event named. It's always paired with that year's Winter Olympics.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;World Cup cycle&lt;/th&gt;
&lt;th&gt;Same-fiscal-year Winter Olympics&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2014 (Brazil)&lt;/td&gt;
&lt;td&gt;Sochi 2014 (February)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2018 (Russia)&lt;/td&gt;
&lt;td&gt;PyeongChang 2018 (February)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2022 (Qatar)&lt;/td&gt;
&lt;td&gt;Beijing 2022 (February)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2026 (USA/Mexico/Canada)&lt;/td&gt;
&lt;td&gt;Milano Cortina 2026 (February)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That's not a coincidence specific to Visa — since 1994, the Winter Olympics and the World Cup have shared the same calendar year every time, both running on their own four-year cycles offset from the Summer Olympics. Visa sponsors both events, and its October–September fiscal year always contains both in the same reporting window. The practical result: no Visa filing anywhere in this dataset isolates a World-Cup-only marketing figure. Every dollar change above is a joint attribution, and there's no clean way to split it from the filing text alone.&lt;/p&gt;

&lt;h2&gt;
  
  
  2026 is still a leading indicator
&lt;/h2&gt;

&lt;p&gt;The 44% figure is the biggest of the four cycles, but it's also the least finished. It comes from Visa's fiscal Q2 2026 (January–March) — the quarter &lt;em&gt;before&lt;/em&gt; the tournament's June 11 opening match. By contrast, 2014's and 2018's quarters ran through most of their tournaments, and 2022's quarter (October–December) fully contained Qatar's entire November 20 – December 18 window.&lt;/p&gt;

&lt;p&gt;Visa's fiscal Q3 2026 10-Q — the filing that will actually cover the June 11–July 19 tournament window — is due in late July or early August 2026, roughly following the same ~30-day filing lag as its Q1 FY2023 report after Qatar. Until then, 44% is what Visa's pre-tournament ramp-up looked like, not what the World Cup itself did to its books.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we measured this
&lt;/h2&gt;

&lt;p&gt;Pulled directly from Visa Inc.'s (CIK 1403161) 10-Q and 10-K filings via Crawlora's SEC filing-sections endpoint, one filing per World Cup cycle — specifically, the fiscal quarter (or year, checked for 2022) in which Visa's own Management's Discussion and Analysis names the FIFA World Cup as a driver of marketing-expense growth. Accession numbers for the two oldest filings (2014, 2018) were located via SEC's company-submissions filing index rather than EDGAR's full-text search, which is tuned to surface recent filings first. Every figure is the as-reported GAAP marketing-expense line item — not adjusted or non-GAAP — read directly from each filing's Operating Expenses table.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sources&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.sec.gov/Archives/edgar/data/1403161/000140316114000012/v63014form10q.htm" rel="noopener noreferrer"&gt;Visa Inc. — Form 10-Q for the quarter ended June 30, 2014&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.sec.gov/Archives/edgar/data/1403161/000140316118000034/v63018form10q.htm" rel="noopener noreferrer"&gt;Visa Inc. — Form 10-Q for the quarter ended June 30, 2018&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.sec.gov/Archives/edgar/data/1403161/000140316123000013/v-20221231.htm" rel="noopener noreferrer"&gt;Visa Inc. — Form 10-Q for the quarter ended December 31, 2022&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.sec.gov/Archives/edgar/data/1403161/000140316126000079/v-20260331.htm" rel="noopener noreferrer"&gt;Visa Inc. — Form 10-Q for the quarter ended March 31, 2026&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Related reading:&lt;/strong&gt; &lt;a href="https://crawlora.net/blog/world-cup-2026-sec-filings?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;105 SEC Filings Mention the World Cup in 2026 — Visa's Explains a 44% Marketing Jump&lt;/a&gt; · &lt;a href="https://crawlora.net/blog/world-cup-2026-official-app-reviews?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;The Official FIFA World Cup App Scores 2.65 Stars. Its Ticket App Scores 1.79.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Has Visa mentioned the World Cup in its SEC filings before 2026?
&lt;/h3&gt;

&lt;p&gt;Yes. Visa's own 10-Q and 10-K filings have named the FIFA World Cup as a driver of marketing-expense growth in at least four consecutive cycles: 2014 (Brazil), 2018 (Russia), 2022 (Qatar), and 2026 — always inside the "Marketing expenses" discussion of its Management's Discussion and Analysis.&lt;/p&gt;

&lt;h3&gt;
  
  
  How much did Visa's marketing spend change in each World Cup cycle?
&lt;/h3&gt;

&lt;p&gt;Comparing the same fiscal quarter year-over-year: -9% in 2014 ($228M vs $252M), +8% in 2018 ($240M vs $221M), +18% in 2022 ($332M vs $280M), and +44% in 2026 ($545M vs $381M, though the 2026 figure is from a pre-tournament quarter).&lt;/p&gt;

&lt;h3&gt;
  
  
  Why did Visa's marketing spend fall during the 2014 World Cup quarter?
&lt;/h3&gt;

&lt;p&gt;Because the year-over-year comparison quarter (fiscal Q3 2013) had unusually high marketing spend of its own, tied to the build-up for the 2014 Sochi Winter Olympics. Visa's own filing says marketing spend fell for the quarter but rose over the nine-month period, "due to spend supporting the 2014 FIFA World Cup campaign."&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Visa break out how much it spends on the World Cup specifically?
&lt;/h3&gt;

&lt;p&gt;No. Every filing credits the World Cup jointly with that year's Winter Olympics — Visa sponsors both, and because the Winter Olympics and World Cup have shared the same calendar year since 1994, they always land in the same fiscal-year reporting window. No filing isolates a World-Cup-only dollar figure.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is the 2026 44% marketing jump the final number for this World Cup?
&lt;/h3&gt;

&lt;p&gt;No. It's from the quarter ended March 31, 2026 — before the tournament started on June 11. Visa's next 10-Q, covering the quarter that actually contains the tournament, is due around late July or early August 2026.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where does this data come from?
&lt;/h3&gt;

&lt;p&gt;Directly from Visa Inc.'s (SEC CIK 1403161) 10-Q and 10-K filings, pulled via Crawlora's SEC filing-sections API — the same "Marketing expenses" line item and MD&amp;amp;A narrative Visa reports to the SEC every quarter. Accession numbers for the 2014 and 2018 filings were located via SEC's company-submissions filing index rather than full-text search.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://crawlora.net/blog/visa-world-cup-marketing-spend-2014-2026?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;crawlora.net&lt;/a&gt;. &lt;a href="https://crawlora.net/platforms/google-finance?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Google Finance API&lt;/a&gt; returns structured company financials, market data, and news as JSON for sponsorship and market research.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>finance</category>
      <category>worldcup</category>
    </item>
    <item>
      <title>The Job Market Runs on Workday: 63% of Open Reqs</title>
      <dc:creator>Tony Wang</dc:creator>
      <pubDate>Thu, 06 Aug 2026 01:00:00 +0000</pubDate>
      <link>https://dev.to/tonywangca/the-job-market-runs-on-workday-63-of-open-reqs-1an4</link>
      <guid>https://dev.to/tonywangca/the-job-market-runs-on-workday-63-of-open-reqs-1an4</guid>
      <description>&lt;p&gt;&lt;strong&gt;Key takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1,128,909 open job postings, crawled from 11,703 company career boards across the 12 hosted applicant-tracking systems we cover. One vendor — Workday — carries 713,606 of them: 63.2% of every posting, by volume.&lt;/li&gt;
&lt;li&gt;That is not the same as market share. The State of ATS 2026 report puts Workday at ~39% of large employers by company count. It runs 63% of the reqs because the companies on it are the giant hirers — CVS Health alone posts ~17,400 open roles from a single Workday board.&lt;/li&gt;
&lt;li&gt;The startup-ATS world developers picture as 'the job market' is a rounding error by volume. All 1,063 Ashby boards — OpenAI, Notion, Ramp and every other high-growth startup on it — hold 24,844 postings between them. Domino's Pizza's single SmartRecruiters board holds 24,427. One pizza franchise ≈ the entire Ashby ecosystem.&lt;/li&gt;
&lt;li&gt;The ATS a company runs is a size signal. Enterprise HCM boards (Workday, Oracle, SmartRecruiters) average 150–260 open reqs each; startup and SMB boards (Ashby, Personio, Rippling, Recruitee) average 11–23 — a ~10× gap.&lt;/li&gt;
&lt;li&gt;It is not a tech job market. The largest boards are healthcare, retail and field services — CVS Health, BAYADA Home Health, Domino's, EōS Fitness, Carvana. Engineering is the single largest named department (13,626 roles) but a thin slice of 1.13M.&lt;/li&gt;
&lt;li&gt;ATS-sourced and Common-Crawl-discovered: this is a large sample of companies that post through these 12 boards, not all hiring. Giants on internal systems (Amazon, Google, Meta) and vendors we don't crawl (iCIMS, SuccessFactors, Taleo) are absent. Aggregate/structural only.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most writing about "the ATS market" counts &lt;em&gt;companies&lt;/em&gt;: which applicant-tracking system each employer runs. That view is genuinely fragmented — the &lt;a href="https://withresumeai.com/reports/state-of-ats-2026" rel="noopener noreferrer"&gt;State of ATS 2026 report&lt;/a&gt; puts Workday at 38.6% of large employers, Greenhouse at 13.3%, and a long tail behind them.&lt;/p&gt;

&lt;p&gt;Count &lt;em&gt;open requisitions&lt;/em&gt; instead — the jobs themselves — and the market collapses into one vendor. We crawled &lt;strong&gt;1,128,909 open postings&lt;/strong&gt; from &lt;strong&gt;11,703 company career boards&lt;/strong&gt;, and &lt;strong&gt;63.2% of them run through Workday&lt;/strong&gt;. The gap between those two numbers is the whole story.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Method at a glance&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Source:&lt;/strong&gt; Crawlora's Jobs dataset — live postings crawled directly from companies' own applicant-tracking boards across &lt;strong&gt;12 hosted ATS providers&lt;/strong&gt; (Workday, SmartRecruiters, Greenhouse, Ashby, Oracle, UKG, Teamtailor, Personio, Rippling, Recruitee, Workable, Lever). Query it yourself via the free &lt;a href="https://crawlora.net/tools/job-search?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;job search tool&lt;/a&gt; or the &lt;a href="https://crawlora.net/platforms/jobs?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Jobs API&lt;/a&gt;. Snapshot observed mid-July 2026.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Coverage caveat, up front.&lt;/strong&gt; Boards are discovered from Common Crawl, so this census is &lt;em&gt;companies that run a public, hosted ATS board on one of these 12 providers&lt;/em&gt; — a real, large sample, but &lt;strong&gt;not all hiring&lt;/strong&gt;. It structurally under-counts (a) the tech giants on &lt;strong&gt;internal systems&lt;/strong&gt; — Amazon, Google, Meta, Apple all run proprietary boards; (b) ATS vendors we don't crawl — &lt;strong&gt;iCIMS, SAP SuccessFactors, Taleo, Avature, Eightfold&lt;/strong&gt;, which the State of ATS report shows are common among large employers; and (c) postings that live only on LinkedIn, Indeed or a company's hand-rolled page. Every provider share below is &lt;strong&gt;share within these 12 hosted ATSs&lt;/strong&gt;, not share of all hiring.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Boards, not unique companies.&lt;/strong&gt; Some employers appear as more than one board — the same tenant gets crawled under case-variant slugs (CVS Health's Workday board shows up twice, as &lt;code&gt;cvs_health_careers&lt;/code&gt; and &lt;code&gt;CVS_Health_Careers&lt;/code&gt;). So the 11,703 board count is an &lt;strong&gt;upper bound&lt;/strong&gt; on distinct companies. Posting-level counts (the provider volumes) are unaffected by this; the top-board table below is de-duplicated by hand.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What we don't measure:&lt;/strong&gt; salary (rarely populated in the source postings), resolved legal-entity identity, or application outcomes. We report structure — how postings distribute across providers, boards and functions — not individual applicants.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Third-party context&lt;/strong&gt; (the ATS-by-company-count figures) comes from the State of ATS 2026 report by ResumeAI, which verified 713 large employers against their live careers portals. Everything else here is first-party from the Crawlora dataset.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The job market, by volume, is a Workday market
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faepfzszl9xqbq5k6x9zs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faepfzszl9xqbq5k6x9zs.png" alt="Share of 1,128,909 open postings by ATS provider: Workday 63.2%, SmartRecruiters 17.9%, Greenhouse 10.3%, Ashby 2.2%, Oracle HCM 1.8%, UKG 1.3%, Teamtailor 1.2%, all others 2.0%." width="800" height="529"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Workday carries 713,606 of the 1,128,909 postings — 63.2%.&lt;/strong&gt; Add SmartRecruiters (202,448) and the two enterprise HR-suite vendors alone hold &lt;strong&gt;81%&lt;/strong&gt; of everything we crawl. The three "startup" ATSs that dominate developer mindshare — Greenhouse, Ashby and Lever — hold &lt;strong&gt;12.5%&lt;/strong&gt; combined, and most of that is Greenhouse serving mid-to-large tech.&lt;/p&gt;

&lt;p&gt;This is a supply-side census, so read it the way you'd read any supply map: it tells you where the &lt;em&gt;open reqs&lt;/em&gt; are, not where the good jobs are. And the open reqs are overwhelmingly at large enterprises running Workday.&lt;/p&gt;

&lt;h2&gt;
  
  
  Volume is not the same as vendor share
&lt;/h2&gt;

&lt;p&gt;Here is the trap. If you rank ATSs by how many &lt;em&gt;companies&lt;/em&gt; use them, you get a fragmented, competitive market. If you rank them by how many &lt;em&gt;jobs&lt;/em&gt; are actually posted, you get near-monopoly. Both are true at once, and the difference is company size:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ATS share by company count vs. by posting volume&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ATS vendor&lt;/th&gt;
&lt;th&gt;Share by company count&lt;/th&gt;
&lt;th&gt;Share by posting volume&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Workday&lt;/td&gt;
&lt;td&gt;38.6%&lt;/td&gt;
&lt;td&gt;63.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Greenhouse&lt;/td&gt;
&lt;td&gt;13.3%&lt;/td&gt;
&lt;td&gt;10.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SmartRecruiters&lt;/td&gt;
&lt;td&gt;3.3%&lt;/td&gt;
&lt;td&gt;17.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Oracle Cloud HCM&lt;/td&gt;
&lt;td&gt;6.3%&lt;/td&gt;
&lt;td&gt;1.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ashby&lt;/td&gt;
&lt;td&gt;2.1%&lt;/td&gt;
&lt;td&gt;2.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lever&lt;/td&gt;
&lt;td&gt;2.1%&lt;/td&gt;
&lt;td&gt;0.01%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Company-count share = State of ATS 2026 (ResumeAI), 713 portal-verified large employers. Posting-volume share = Crawlora Jobs dataset, 1,128,909 postings on the 12 hosted ATSs we crawl. The two universes differ — ResumeAI includes iCIMS, SuccessFactors and internal systems we don't, and our board pool skews smaller and more numerous — so this is a directional contrast, not a like-for-like restatement.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The comparison isn't apples-to-apples — the two datasets cover different universes, and I've flagged that in the caption rather than pretend they line up. But the &lt;em&gt;direction&lt;/em&gt; is unmistakable and it holds within the overlapping vendors: &lt;strong&gt;Workday's grip on the req market (63%) is far tighter than its grip on the employer market (~39%)&lt;/strong&gt;, and &lt;strong&gt;SmartRecruiters&lt;/strong&gt; is the mirror image — a small slice of companies (3.3%) but a huge slice of postings (17.9%), because the companies it serves are massive, high-churn hourly-hiring operations (Domino's, Accor, Bosch, Greene King).&lt;/p&gt;

&lt;p&gt;Why the skew? Because a Workday customer is, on average, an enterprise with tens of thousands of employees and constant backfill. &lt;strong&gt;CVS Health posts ~17,400 open roles from one board. PwC's boards run to ~4,600 apiece. Northrop Grumman, Thermo Fisher, DaVita, Micron — each carries thousands.&lt;/strong&gt; A typical Ashby customer is a startup with 15 open roles. Counting companies, they're one-to-one. Counting jobs, one CVS erases hundreds of startups.&lt;/p&gt;

&lt;h2&gt;
  
  
  The ATS you run reveals your size
&lt;/h2&gt;

&lt;p&gt;That size effect shows up cleanly as &lt;strong&gt;average open reqs per board&lt;/strong&gt;. It splits the 12 providers into two tiers with almost no overlap:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hosted ATS providers — boards, open postings, share, and average reqs per board&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Boards&lt;/th&gt;
&lt;th&gt;Open postings&lt;/th&gt;
&lt;th&gt;Share&lt;/th&gt;
&lt;th&gt;Avg reqs / board&lt;/th&gt;
&lt;th&gt;Typical customer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Workday&lt;/td&gt;
&lt;td&gt;3,931&lt;/td&gt;
&lt;td&gt;713,606&lt;/td&gt;
&lt;td&gt;63.2%&lt;/td&gt;
&lt;td&gt;182&lt;/td&gt;
&lt;td&gt;Enterprise HCM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SmartRecruiters&lt;/td&gt;
&lt;td&gt;777&lt;/td&gt;
&lt;td&gt;202,448&lt;/td&gt;
&lt;td&gt;17.9%&lt;/td&gt;
&lt;td&gt;261&lt;/td&gt;
&lt;td&gt;Enterprise / high-volume&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Greenhouse&lt;/td&gt;
&lt;td&gt;2,567&lt;/td&gt;
&lt;td&gt;116,001&lt;/td&gt;
&lt;td&gt;10.3%&lt;/td&gt;
&lt;td&gt;45&lt;/td&gt;
&lt;td&gt;Scale-up / tech&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ashby&lt;/td&gt;
&lt;td&gt;1,063&lt;/td&gt;
&lt;td&gt;24,844&lt;/td&gt;
&lt;td&gt;2.2%&lt;/td&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;td&gt;High-growth startup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Oracle Cloud HCM&lt;/td&gt;
&lt;td&gt;136&lt;/td&gt;
&lt;td&gt;20,497&lt;/td&gt;
&lt;td&gt;1.8%&lt;/td&gt;
&lt;td&gt;151&lt;/td&gt;
&lt;td&gt;Enterprise HCM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UKG&lt;/td&gt;
&lt;td&gt;371&lt;/td&gt;
&lt;td&gt;15,205&lt;/td&gt;
&lt;td&gt;1.3%&lt;/td&gt;
&lt;td&gt;41&lt;/td&gt;
&lt;td&gt;Hourly / workforce mgmt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Teamtailor&lt;/td&gt;
&lt;td&gt;872&lt;/td&gt;
&lt;td&gt;13,500&lt;/td&gt;
&lt;td&gt;1.2%&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;SMB (Europe)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Personio&lt;/td&gt;
&lt;td&gt;883&lt;/td&gt;
&lt;td&gt;9,931&lt;/td&gt;
&lt;td&gt;0.9%&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;SMB (Europe)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rippling&lt;/td&gt;
&lt;td&gt;732&lt;/td&gt;
&lt;td&gt;8,034&lt;/td&gt;
&lt;td&gt;0.7%&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;SMB / startup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recruitee&lt;/td&gt;
&lt;td&gt;296&lt;/td&gt;
&lt;td&gt;3,380&lt;/td&gt;
&lt;td&gt;0.3%&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;SMB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Workable&lt;/td&gt;
&lt;td&gt;73&lt;/td&gt;
&lt;td&gt;1,352&lt;/td&gt;
&lt;td&gt;0.1%&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;SMB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lever&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;111&lt;/td&gt;
&lt;td&gt;0.01%&lt;/td&gt;
&lt;td&gt;56&lt;/td&gt;
&lt;td&gt;Startup (under-crawled)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Crawlora Jobs dataset, July 2026. 'Boards' counts discovered career boards, an upper bound on distinct companies (case-variant duplicates inflate it slightly). Lever's near-absence is a discovery artifact — only two Lever boards surfaced in this crawl, so read its row as coverage, not a market verdict.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The enterprise HR suites — &lt;strong&gt;Workday (182), SmartRecruiters (261), Oracle (151)&lt;/strong&gt; — carry 150–260 open reqs per board. The startup and SMB tools — &lt;strong&gt;Ashby (23), Personio (11), Rippling (11), Recruitee (11), Teamtailor (15)&lt;/strong&gt; — carry a tenth of that. If you can see the ATS behind a careers page (the apply-URL host gives it away: &lt;code&gt;myworkdayjobs.com&lt;/code&gt;, &lt;code&gt;boards.greenhouse.io&lt;/code&gt;, &lt;code&gt;jobs.ashbyhq.com&lt;/code&gt;), you can guess the company's stage before you read a word of the posting.&lt;/p&gt;

&lt;p&gt;One honest caveat on this table: &lt;strong&gt;Lever shows just two boards and 111 postings&lt;/strong&gt;, which is not evidence Lever is dead — it's a Common Crawl discovery gap for Lever's board structure in this pass. Lever is a real, actively-used ATS; we simply didn't enumerate its boards here, and I'd rather show that hole than paper over it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Domino's Pizza ≈ every Ashby startup, combined
&lt;/h2&gt;

&lt;p&gt;Concentration inside the census is extreme. A handful of enormous single-employer boards dwarf whole ecosystems:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Largest single career boards by open reqs&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Company (board)&lt;/th&gt;
&lt;th&gt;ATS&lt;/th&gt;
&lt;th&gt;Open reqs&lt;/th&gt;
&lt;th&gt;Sector&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Domino's&lt;/td&gt;
&lt;td&gt;SmartRecruiters&lt;/td&gt;
&lt;td&gt;24,427&lt;/td&gt;
&lt;td&gt;Food / franchise&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CVS Health&lt;/td&gt;
&lt;td&gt;Workday&lt;/td&gt;
&lt;td&gt;~17,400&lt;/td&gt;
&lt;td&gt;Healthcare / retail&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Groupement Mousquetaires&lt;/td&gt;
&lt;td&gt;SmartRecruiters&lt;/td&gt;
&lt;td&gt;9,416&lt;/td&gt;
&lt;td&gt;Retail (France)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Accor&lt;/td&gt;
&lt;td&gt;SmartRecruiters&lt;/td&gt;
&lt;td&gt;6,002&lt;/td&gt;
&lt;td&gt;Hospitality&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PwC&lt;/td&gt;
&lt;td&gt;Workday&lt;/td&gt;
&lt;td&gt;~4,600&lt;/td&gt;
&lt;td&gt;Professional services&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AECOM&lt;/td&gt;
&lt;td&gt;SmartRecruiters&lt;/td&gt;
&lt;td&gt;4,861&lt;/td&gt;
&lt;td&gt;Engineering / infra&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bosch&lt;/td&gt;
&lt;td&gt;SmartRecruiters&lt;/td&gt;
&lt;td&gt;4,741&lt;/td&gt;
&lt;td&gt;Industrial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SGS&lt;/td&gt;
&lt;td&gt;SmartRecruiters&lt;/td&gt;
&lt;td&gt;4,203&lt;/td&gt;
&lt;td&gt;Testing / inspection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Northrop Grumman&lt;/td&gt;
&lt;td&gt;Workday&lt;/td&gt;
&lt;td&gt;~3,450&lt;/td&gt;
&lt;td&gt;Aerospace / defense&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Thermo Fisher&lt;/td&gt;
&lt;td&gt;Workday&lt;/td&gt;
&lt;td&gt;~3,240&lt;/td&gt;
&lt;td&gt;Life sciences&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Crawlora Jobs dataset, July 2026, de-duplicated across case-variant boards (CVS, PwC, Northrop and Thermo Fisher each surfaced as two near-identical boards; shown once, ~-prefixed). These are careers-board totals, not resolved corporate headcounts.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The number that reframes the whole dataset: &lt;strong&gt;Domino's Pizza's one board holds 24,427 open reqs. Every Ashby-powered company on the internet — all 1,063 boards, OpenAI and Notion and Ramp included — holds 24,844.&lt;/strong&gt; A single pizza franchise's hourly hiring is the size of the entire high-growth-startup ATS ecosystem. The "job market" that gets written about (hot startups, competitive tech roles) and the job market that actually exists by volume (enterprise backfill, hourly, field services) are barely the same market.&lt;/p&gt;

&lt;h2&gt;
  
  
  It isn't a tech job market
&lt;/h2&gt;

&lt;p&gt;Because Engineering is the largest single &lt;em&gt;named&lt;/em&gt; department (13,626 roles), it's tempting to read this as a tech dataset. It isn't. Look at what the biggest boards actually are:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxxxbjkwpglpol1rd5xn2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxxxbjkwpglpol1rd5xn2.png" alt="Top named departments by open roles: Engineering 13,626, Sales 8,456, Operations 5,879, Marketing 3,624, Finance 2,521, Product 2,298." width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The department field is messy — most postings don't carry a clean one, and the raw facet is full of company-specific labels — so the honest read is the top &lt;em&gt;employers&lt;/em&gt;, not the top departments. The biggest boards in this census are &lt;strong&gt;CVS Health&lt;/strong&gt; (pharmacy, retail, care), &lt;strong&gt;BAYADA Home Health&lt;/strong&gt; (2,599), &lt;strong&gt;Pulse Healthcare&lt;/strong&gt; (2,591), &lt;strong&gt;EōS Fitness&lt;/strong&gt; (2,622), &lt;strong&gt;Domino's&lt;/strong&gt;, &lt;strong&gt;Carvana&lt;/strong&gt; (1,849) and &lt;strong&gt;Centria Autism&lt;/strong&gt; (1,185). Healthcare, retail, fitness, field services and hourly operations — the roles a labor economist would call the actual US job market, and the ones tech coverage never mentions. Explicitly-remote postings are a thin 2.6% of the census (29,330 flagged remote), and even that is a floor, since the remote field is unevenly populated.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means, depending on who you are
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;If you're a job seeker or engineer:&lt;/strong&gt; the boards you browse (Ashby, Greenhouse, Lever) are a curated 12% corner of the posted-req market. If you're optimizing a résumé, optimize it for the parser you'll actually hit — and by volume that's overwhelmingly Workday. The counterintuitive move for reach is to search &lt;em&gt;by ATS provider&lt;/em&gt;, not just by title: the &lt;a href="https://crawlora.net/tools/job-search?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;free job search tool&lt;/a&gt; lets you filter to a provider and see the enterprise reqs that never trend on tech Twitter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you're a recruiter or founder:&lt;/strong&gt; the ATS you pick is read by everyone downstream as a size tell. Standing up an Ashby board signals a 15-role startup; standing up Workday signals an enterprise. That's not a reason to over-buy — it's a reason to know what your careers-page host communicates before you choose it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you're a researcher or journalist:&lt;/strong&gt; the transferable warning is &lt;em&gt;count the right unit&lt;/em&gt;. "ATS market share" by company count and by posting volume are different by nearly 25 points for Workday, and reporting one as the other is how "Workday runs the job market" becomes either obviously true or obviously false depending on which you meant. And whatever you're measuring off an ATS census, name what it excludes — internal-system giants and un-crawled vendors are not a rounding error.&lt;/p&gt;

&lt;p&gt;Everything here is queryable — by provider, company, department, location or remote flag — over one REST API, with no modelling in between. If you think the coverage gaps change the conclusion, the query that would show it is one call away.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sources&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://crawlora.net/tools/job-search?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Crawlora — Jobs dataset (free job search tool)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://crawlora.net/platforms/jobs?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Crawlora — Jobs API (ATS boards across 12 providers)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://crawlora.net/blog/what-powers-the-web-techstack-2026?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Crawlora — What Powers the Web: a tech-stack census&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://crawlora.net/blog/where-developers-live-github-2026?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Crawlora — Where the World's Developers Actually Live&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://withresumeai.com/reports/state-of-ats-2026" rel="noopener noreferrer"&gt;State of ATS 2026 — ATS by 743 large employers, ResumeAI (Kayvan Zahiri)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is the most common ATS by job posting volume?
&lt;/h3&gt;

&lt;p&gt;Workday, by a wide margin. In Crawlora's July 2026 census of 1,128,909 open postings across the 12 hosted applicant-tracking systems it crawls, Workday carries 713,606 — 63.2% of every posting. SmartRecruiters is second at 17.9% and Greenhouse third at 10.3%. This is share of postings on those 12 hosted providers, not share of all hiring.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Workday really have 63% of the ATS market?
&lt;/h3&gt;

&lt;p&gt;Only by posting volume, not by company count. The State of ATS 2026 report (ResumeAI) puts Workday at ~38.6% of large employers by company count. Workday runs a far larger share of the actual open requisitions (63%) because its customers are the giant hirers — CVS Health alone posts around 17,400 open roles from a single Workday board, whereas a typical startup ATS customer has a dozen. Counting companies, they look one-to-one; counting jobs, one enterprise erases hundreds of startups.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which ATS do startups use, and how big is that segment?
&lt;/h3&gt;

&lt;p&gt;High-growth startups cluster on Ashby and Greenhouse (Lever historically too). But by volume the startup-ATS segment is tiny: all 1,063 Ashby boards combined — OpenAI, Notion, Ramp and every other startup on it — hold 24,844 open postings. Domino's Pizza's single SmartRecruiters board holds 24,427. One franchise's hourly hiring is the size of the entire Ashby ecosystem.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is the online job market mostly tech jobs?
&lt;/h3&gt;

&lt;p&gt;No. Engineering is the single largest named department (13,626 roles) but that's roughly 1% of 1.13M postings. The largest career boards are healthcare, retail, fitness and field services — CVS Health, BAYADA Home Health, Pulse Healthcare, EōS Fitness, Domino's and Carvana — not tech companies. Explicitly-remote roles are just 2.6% of the census.&lt;/p&gt;

&lt;h3&gt;
  
  
  What does the ATS a company uses tell you about it?
&lt;/h3&gt;

&lt;p&gt;Its size and stage. Enterprise HR suites (Workday, Oracle, SmartRecruiters) average 150–260 open reqs per career board; startup and SMB tools (Ashby, Personio, Rippling, Recruitee, Teamtailor) average 11–23 — about a 10× gap. The apply-URL host gives the ATS away (myworkdayjobs.com, boards.greenhouse.io, jobs.ashbyhq.com), so you can often infer a company's stage before reading a single posting.&lt;/p&gt;

&lt;h3&gt;
  
  
  What does this jobs dataset not cover?
&lt;/h3&gt;

&lt;p&gt;It is ATS-sourced and Common-Crawl-discovered: a large sample of companies that run a public, hosted ATS board on one of 12 providers — not all hiring. It under-counts tech giants on internal systems (Amazon, Google, Meta, Apple), ATS vendors Crawlora doesn't crawl (iCIMS, SAP SuccessFactors, Taleo, Avature, Eightfold), and jobs posted only to LinkedIn, Indeed or hand-rolled pages. Board counts are an upper bound on distinct companies because some employers surface as multiple case-variant boards. It is aggregate and structural — no salaries or applicant-level data.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://crawlora.net/blog/job-market-runs-on-workday-2026?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;crawlora.net&lt;/a&gt;. &lt;a href="https://crawlora.net/platforms/jobs?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Jobs API&lt;/a&gt; aggregates listings across Workday, Greenhouse, Lever, and other ATS platforms as structured JSON.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>jobs</category>
      <category>api</category>
    </item>
    <item>
      <title>How to Scrape Zillow in 2026 (API &amp; Python)</title>
      <dc:creator>Tony Wang</dc:creator>
      <pubDate>Wed, 05 Aug 2026 01:00:00 +0000</pubDate>
      <link>https://dev.to/tonywangca/how-to-scrape-zillow-in-2026-api-python-526h</link>
      <guid>https://dev.to/tonywangca/how-to-scrape-zillow-in-2026-api-python-526h</guid>
      <description>&lt;p&gt;&lt;strong&gt;Key takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The fastest way to scrape Zillow is a structured API that returns search results and listing details (price, beds, baths, address) as normalized JSON — no headless browser.&lt;/li&gt;
&lt;li&gt;Zillow defends aggressively (CAPTCHAs, IP bans, shifting embedded JSON), so DIY needs proxies, fingerprinting, and a browser cluster at scale.&lt;/li&gt;
&lt;li&gt;Public listing facts (price, address, beds/baths) are lower-risk to collect; listing photos and descriptions can be copyrighted — avoid republishing them.&lt;/li&gt;
&lt;li&gt;Resolve locations with the autocomplete endpoint, then search by location or fetch a property by ZPID.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The fastest way to scrape Zillow in 2026 is to call a structured Zillow API that returns normalized JSON — search results, listing details, price, beds, baths, and address — instead of parsing Zillow's JavaScript-heavy pages and fighting its anti-bot defenses. You can build a DIY scraper, but Zillow actively blocks automation. This guide covers all three approaches, what each returns, where each breaks, and the legal basics.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is it legal to scrape Zillow?
&lt;/h2&gt;

&lt;p&gt;Scraping &lt;strong&gt;public&lt;/strong&gt; Zillow listing data (price, address, beds/baths, status) is generally lower-risk public-web scraping — in the US, &lt;em&gt;hiQ v. LinkedIn&lt;/em&gt; held that accessing public data isn't a CFAA violation, and facts like prices aren't copyrightable. But Zillow's Terms of Service prohibit automated access, and listing photos and descriptions can be copyrighted, so avoid republishing them. Use public, factual data; respect rate limits; review Zillow's terms. See &lt;a href="https://crawlora.net/blog/is-web-scraping-legal-2026?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;is web scraping legal&lt;/a&gt;. Not legal advice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 1: DIY in Python (and why it breaks)
&lt;/h2&gt;

&lt;p&gt;Zillow renders with heavy JavaScript and defends aggressively, so you reach for a headless browser:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;playwright.sync_api&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;sync_playwright&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;sync_playwright&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chromium&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;launch&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;new_page&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;goto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://www.zillow.com/austin-tx/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;# then parse the embedded __NEXT_DATA__ JSON, page by map region, and clear the press-and-hold CAPTCHA...
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It demos and then breaks — Zillow is rated one of the hardest targets on the web:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PerimeterX (HUMAN) bot detection&lt;/strong&gt; — behavioral analysis (mouse, keystrokes), browser fingerprinting, HTTP/2 and header-order checks, and a press-and-hold CAPTCHA; you need residential proxies and fingerprint spoofing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Low safe rate&lt;/strong&gt; — practitioners cap around 20–50 property-detail pages per day per IP, so scale means many rotating residential IPs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shifting embedded JSON&lt;/strong&gt; — Zillow's client data (a &lt;code&gt;__NEXT_DATA__&lt;/code&gt;-style blob) changes shape and breaks parsers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bypass rot&lt;/strong&gt; — open-source PerimeterX bypasses typically last only a couple of months before they're patched.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Option 2: No-code tools
&lt;/h2&gt;

&lt;p&gt;Visual extractors export CSV/JSON and suit one-off pulls, but are less convenient for in-product pipelines with predictable fields.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 3: A structured Zillow API
&lt;/h2&gt;

&lt;p&gt;For repeatable workflows, a &lt;a href="https://crawlora.net/platforms/zillow?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Zillow scraping API&lt;/a&gt; returns normalized JSON with no browser to run. Search by location:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s2"&gt;"https://api.crawlora.net/api/v1/zillow/search?location=Austin,%20TX"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"x-api-key: &lt;/span&gt;&lt;span class="nv"&gt;$CRAWLORA_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fetch a single listing by ZPID in Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;prop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.crawlora.net/api/v1/zillow/property/12345678&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;x-api-key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;address&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bedrooms&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A response is normalized JSON you can store directly (fields are illustrative — check the &lt;a href="https://crawlora.net/docs/zillow/zillow-search?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;docs&lt;/a&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"msg"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"OK"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"zpid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"12345678"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"address"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"123 Example St, Austin, TX"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;625000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"bedrooms"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"bathrooms"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"living_area"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1850&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"FOR_SALE"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Resolve a location with autocomplete first, then search — or fetch one listing by ZPID:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;x-api-key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;base&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.crawlora.net/api/v1/zillow&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;place&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/autocomplete&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;query&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Austin, TX&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;location&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Austin, TX&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Autocomplete returns a &lt;code&gt;region_id&lt;/code&gt; and map bounds (&lt;code&gt;west&lt;/code&gt;/&lt;code&gt;east&lt;/code&gt;/&lt;code&gt;south&lt;/code&gt;/&lt;code&gt;north&lt;/code&gt;); passing those to search is the most stable request shape, so you don't have to guess Zillow's URL slugs.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you can collect
&lt;/h2&gt;

&lt;p&gt;Where the public listing exposes them: ZPID, address, price, beds, baths, living area, lot size, home type, status, broker, description, media, and estimates — plus the search or ZPID context you requested.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitations and common challenges
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No open public API.&lt;/strong&gt; Zillow's official API access is restricted to partners (Bridge / MLS programs), so collecting arbitrary public listings means scraping.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PerimeterX, Very-Hard rating.&lt;/strong&gt; Zillow runs PerimeterX (HUMAN) with behavioral analysis and fingerprinting; DIY needs residential proxies, fingerprint spoofing, and low per-IP rates, and open-source bypasses rot in months — a structured API absorbs this behind one key.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Listing media is copyrighted.&lt;/strong&gt; Price, address, beds/baths, and status are facts you can collect; listing photos and agent descriptions carry copyright — don't republish them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Status changes fast and estimates are models.&lt;/strong&gt; For-sale/sold/pending flips quickly, so re-scrape on a schedule, and treat Zestimate-style values as Zillow's model output, not ground truth.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where this gets used
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Property market intelligence&lt;/strong&gt; — track listings, prices, and inventory by market. See the &lt;a href="https://crawlora.net/use-cases/property-market-intelligence?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;property market intelligence&lt;/a&gt; use case.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comparables &amp;amp; valuation research&lt;/strong&gt; — pull comparable listings for an area.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lead and territory mapping&lt;/strong&gt; — combine with local data for real-estate workflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Sources&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.zillow.com/z/corp/terms/" rel="noopener noreferrer"&gt;Zillow — Terms of Use&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/HiQ_Labs_v._LinkedIn" rel="noopener noreferrer"&gt;hiQ Labs v. LinkedIn — accessing public data and the CFAA&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Start collecting
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Try it first, free:&lt;/strong&gt; run any public URL through the &lt;a href="https://crawlora.net/tools/free-web-scraper?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Free Web Scraper&lt;/a&gt;, or check whether a site blocks bots with the &lt;a href="https://crawlora.net/tools/can-i-scrape-this-site?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Anti-Bot Checker&lt;/a&gt; — no signup.&lt;/p&gt;

&lt;p&gt;Test the search endpoint in the &lt;a href="https://crawlora.net/playground?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Playground&lt;/a&gt;, check the schema in the &lt;a href="https://crawlora.net/docs/zillow/zillow-search?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;API docs&lt;/a&gt;, and review &lt;a href="https://crawlora.net/pricing?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;pricing&lt;/a&gt;. For a full comparison against other Zillow data APIs, see &lt;a href="https://crawlora.net/blog/best-zillow-scraper-api?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;best Zillow scraper APIs in 2026&lt;/a&gt;. To cover Redfin, Realtor.com, and Trulia alongside Zillow, see &lt;a href="https://crawlora.net/blog/how-to-scrape-real-estate-listings?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;how to scrape real estate listings&lt;/a&gt;, or go straight to &lt;a href="https://crawlora.net/blog/how-to-scrape-redfin?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;how to scrape Redfin&lt;/a&gt; to cross-check Zestimate against Redfin's own estimate; for the short-term-rental side, &lt;a href="https://crawlora.net/blog/how-to-scrape-airbnb?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;how to scrape Airbnb&lt;/a&gt;; also &lt;a href="https://crawlora.net/blog/best-web-scraping-apis-2026?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;how to choose a web scraping API&lt;/a&gt; and &lt;a href="https://crawlora.net/blog/is-web-scraping-legal-2026?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;is web scraping legal&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Part of our &lt;a href="https://crawlora.net/how-to-scrape?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;how-to-scrape guide series&lt;/a&gt; — every platform we cover, in one index.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Can I scrape Zillow without getting blocked?
&lt;/h3&gt;

&lt;p&gt;Zillow is one of the hardest targets on the web — it runs PerimeterX (HUMAN) with behavioral analysis, browser fingerprinting, and a press-and-hold CAPTCHA, so DIY needs residential proxies, fingerprint spoofing, and low per-IP rates (practitioners cap around 20–50 detail pages/day/IP). A structured API handles proxies and browser execution behind the endpoint.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Zillow have an official API?
&lt;/h3&gt;

&lt;p&gt;Not an open one. Zillow's API access is restricted to partners (Bridge / MLS programs), so collecting arbitrary public listings means scraping. Crawlora's Zillow endpoints return public search and property data as normalized JSON from one API key.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Zillow data can I get?
&lt;/h3&gt;

&lt;p&gt;Public listing fields: ZPID, address, price, beds/baths, living area, lot size, home type, status, broker, description, media, and estimates, where available. Facts like price and address carry the least risk; photos and descriptions can be copyrighted.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I search a location?
&lt;/h3&gt;

&lt;p&gt;Resolve it with the autocomplete endpoint (query, with status for_sale/for_rent/sold), then pass the returned region_id or map bounds to /zillow/search — the most stable shape — or fetch one listing with /zillow/property/{zpid}.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I store listing photos and descriptions?
&lt;/h3&gt;

&lt;p&gt;Those can be copyrighted — treat them carefully and avoid republishing. Factual fields like price and address carry the least risk.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://crawlora.net/blog/how-to-scrape-zillow?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;crawlora.net&lt;/a&gt;. &lt;a href="https://crawlora.net/platforms/zillow?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Zillow API&lt;/a&gt; returns structured property, price, and estimate data as JSON — no scraping infrastructure required.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>webscraping</category>
    </item>
    <item>
      <title>Google vs Bing vs Brave: Do Results Match?</title>
      <dc:creator>Tony Wang</dc:creator>
      <pubDate>Tue, 04 Aug 2026 01:00:00 +0000</pubDate>
      <link>https://dev.to/tonywangca/google-vs-bing-vs-brave-do-results-match-3ob6</link>
      <guid>https://dev.to/tonywangca/google-vs-bing-vs-brave-do-results-match-3ob6</guid>
      <description>&lt;p&gt;&lt;strong&gt;Key takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Three engines, three internets: across the searches where all three answered, Google, Bing, and Brave agreed on the #1 result only 29% of the time, and Google and Bing shared just 3 of the top 10 on average.&lt;/li&gt;
&lt;li&gt;Each engine has a personality. Bing rewards traditional publishers (Forbes appeared in 9 of 15 top-10s, PCMag in 8). Google leans on its own properties and forums (Reddit and YouTube each showed up in 57% of Google SERPs, Wikipedia in 43%). Brave is a blend of both.&lt;/li&gt;
&lt;li&gt;The platforms Google loves, Bing ignores: Reddit, YouTube, and Wikipedia appeared in 0% of the Bing top-10s we checked.&lt;/li&gt;
&lt;li&gt;If you track rankings on one engine, you are blind on the others. Cross-engine divergence is the case for multi-engine SERP monitoring — not a single Google rank check.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everyone talks about "ranking on Google." But Google is not the only place your customers search, and the other engines do not agree with it — or with each other. We ran the same 15 searches through Google, Bing, and Brave using &lt;a href="https://crawlora.net/platforms/google-search?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Crawlora's search APIs&lt;/a&gt; and compared the top 10 results. The short version: the three engines return strikingly different pages, reward different kinds of sites, and rarely even agree on what belongs at #1.&lt;/p&gt;

&lt;h2&gt;
  
  
  How much do the engines overlap?
&lt;/h2&gt;

&lt;p&gt;For each search we took the top 10 result domains from each engine and counted how many they shared. No pair shares even half its results on average, and all three engines agree on fewer than 3 of 10:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Engine pair&lt;/th&gt;
&lt;th&gt;Avg shared (of 10)&lt;/th&gt;
&lt;th&gt;Overlap&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Google ∩ Bing&lt;/td&gt;
&lt;td&gt;3.0&lt;/td&gt;
&lt;td&gt;30%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google ∩ Brave&lt;/td&gt;
&lt;td&gt;5.1&lt;/td&gt;
&lt;td&gt;51%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bing ∩ Brave&lt;/td&gt;
&lt;td&gt;4.0&lt;/td&gt;
&lt;td&gt;40%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;All three&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2.7&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;27%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A page ranking #3 on Bing might be nowhere on Google. If your rank tracker only watches one engine, most of this picture is invisible to you.&lt;/p&gt;

&lt;h2&gt;
  
  
  They rarely agree on #1
&lt;/h2&gt;

&lt;p&gt;The single most valuable position — the #1 organic result — matched across all three engines for only &lt;strong&gt;2 of the 7&lt;/strong&gt; searches where every engine answered (29%). Here is the real head-to-head:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Search&lt;/th&gt;
&lt;th&gt;Google #1&lt;/th&gt;
&lt;th&gt;Bing #1&lt;/th&gt;
&lt;th&gt;Brave #1&lt;/th&gt;
&lt;th&gt;Agree?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;best running shoes&lt;/td&gt;
&lt;td&gt;runrepeat.com&lt;/td&gt;
&lt;td&gt;wired.com&lt;/td&gt;
&lt;td&gt;runnersworld.com&lt;/td&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;crm software&lt;/td&gt;
&lt;td&gt;google.com&lt;/td&gt;
&lt;td&gt;forbes.com&lt;/td&gt;
&lt;td&gt;salesforce.com&lt;/td&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;electric cars&lt;/td&gt;
&lt;td&gt;toyota.com&lt;/td&gt;
&lt;td&gt;edmunds.com&lt;/td&gt;
&lt;td&gt;caranddriver.com&lt;/td&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;web hosting&lt;/td&gt;
&lt;td&gt;namecheap.com&lt;/td&gt;
&lt;td&gt;pcmag.com&lt;/td&gt;
&lt;td&gt;godaddy.com&lt;/td&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;email marketing software&lt;/td&gt;
&lt;td&gt;emailvendorselection.com&lt;/td&gt;
&lt;td&gt;pcmag.com&lt;/td&gt;
&lt;td&gt;emailvendorselection.com&lt;/td&gt;
&lt;td&gt;Google + Brave&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;best credit cards&lt;/td&gt;
&lt;td&gt;nerdwallet.com&lt;/td&gt;
&lt;td&gt;nerdwallet.com&lt;/td&gt;
&lt;td&gt;nerdwallet.com&lt;/td&gt;
&lt;td&gt;✅ all three&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;password manager&lt;/td&gt;
&lt;td&gt;google.com&lt;/td&gt;
&lt;td&gt;google.com&lt;/td&gt;
&lt;td&gt;google.com&lt;/td&gt;
&lt;td&gt;✅ all three&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;When the engines do agree (credit cards → NerdWallet, password manager → Google's own page), they agree completely. The rest of the time they each pick a different winner.&lt;/p&gt;

&lt;h2&gt;
  
  
  Each engine is a different internet
&lt;/h2&gt;

&lt;p&gt;Aggregate the top 10s and each engine's taste is obvious. Bing leans on big editorial publishers. Google fills the page with its own properties (YouTube, its answer boxes) plus community content. Brave sits in between:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Engine&lt;/th&gt;
&lt;th&gt;Most common top-10 domains&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Google (7 searches)&lt;/td&gt;
&lt;td&gt;google.com ×6 · youtube.com ×5 · reddit.com ×4 · wikipedia.org ×3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bing (15 searches)&lt;/td&gt;
&lt;td&gt;forbes.com ×9 · pcmag.com ×8 · wired.com ×4 · nytimes.com ×3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Brave (14 searches)&lt;/td&gt;
&lt;td&gt;pcmag.com ×9 · nytimes.com ×6 · reddit.com ×6 · cnet.com ×5&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The Reddit, YouTube &amp;amp; Wikipedia split
&lt;/h2&gt;

&lt;p&gt;The starkest difference is how the engines treat the big community and reference platforms. We measured the share of each engine's top-10 SERPs that contained Reddit, YouTube, or Wikipedia at all:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Google&lt;/th&gt;
&lt;th&gt;Bing&lt;/th&gt;
&lt;th&gt;Brave&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Reddit&lt;/td&gt;
&lt;td&gt;57%&lt;/td&gt;
&lt;td&gt;0%&lt;/td&gt;
&lt;td&gt;36%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YouTube&lt;/td&gt;
&lt;td&gt;57%&lt;/td&gt;
&lt;td&gt;0%&lt;/td&gt;
&lt;td&gt;0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wikipedia&lt;/td&gt;
&lt;td&gt;43%&lt;/td&gt;
&lt;td&gt;0%&lt;/td&gt;
&lt;td&gt;29%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Google has clearly tilted toward forums, video, and reference pages — the "Reddit on every result" experience people complain about is real in our data. Bing, on the same queries, surfaced none of them and stuck with publisher round-ups. If your strategy assumes "search results look like Google," Bing users are seeing something completely different.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This is why rank tracking and &lt;a href="https://crawlora.net/use-cases/serp-monitoring?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;SERP monitoring&lt;/a&gt; have to be multi-engine. A single Google rank check tells you nothing about where you stand on Bing (which feeds Microsoft Copilot and, indirectly, ChatGPT) or Brave. The gap between engines &lt;em&gt;is&lt;/em&gt; the opportunity.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Why this matters for SEO and AI search
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One engine is not the market.&lt;/strong&gt; Bing powers Microsoft Copilot and a large share of ChatGPT's web citations; Brave runs its own independent index. Pages that rank there earn traffic and AI citations Google-only tracking never sees.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A win on one engine is not a win everywhere.&lt;/strong&gt; Because the top 10s barely overlap, you have to measure each engine separately to know your real visibility.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The cheapest wins are off-Google.&lt;/strong&gt; Bing and Brave have far less competition for the same commercial terms, and our data shows they reward different content — so a page that struggles on Google may already rank on Bing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The practical takeaway: track keywords on Google, Bing, &lt;strong&gt;and&lt;/strong&gt; Brave, on a schedule, and watch the deltas. That is exactly what a &lt;a href="https://crawlora.net/use-cases/serp-rank-checker-api?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;SERP tracker / rank checker API&lt;/a&gt; is for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it yourself
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Check any keyword across engines right now with the free &lt;a href="https://crawlora.net/tools/serp-checker?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;SERP checker&lt;/a&gt; — enter your domain and see where you rank on each.&lt;/li&gt;
&lt;li&gt;Build ongoing, multi-engine rank tracking with the &lt;a href="https://crawlora.net/use-cases/serp-monitoring?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;SERP monitoring API&lt;/a&gt; on &lt;a href="https://crawlora.net/platforms/google-search?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Google&lt;/a&gt;, &lt;a href="https://crawlora.net/platforms/bing?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Bing&lt;/a&gt;, and &lt;a href="https://crawlora.net/platforms/brave?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Brave&lt;/a&gt; — normalized JSON, one API key.&lt;/li&gt;
&lt;li&gt;Before you commit tracking budget to a keyword, check whether anyone is actually searching it — &lt;a href="https://crawlora.net/blog/how-to-scrape-google-trends?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;how to scrape Google Trends&lt;/a&gt; shows how to pull that query-demand data alongside the rankings.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Methodology
&lt;/h2&gt;

&lt;p&gt;We searched 15 popular commercial and informational queries — &lt;em&gt;best running shoes, crm software, project management software, best vpn, electric cars, web hosting, standing desk, best credit cards, password manager, email marketing software, noise cancelling headphones, accounting software, best laptops, web scraping api, ai writing tools&lt;/em&gt; — on 2026-06-10, US region / English, and recorded the top 10 organic result domains per engine via Crawlora's Google, Bing, and Brave search endpoints. Domains were reduced to their registrable form (so &lt;code&gt;www.reddit.com&lt;/code&gt; and &lt;code&gt;old.reddit.com&lt;/code&gt; both count as &lt;code&gt;reddit.com&lt;/code&gt;). Bing returned for all 15 searches and Brave for 14; &lt;strong&gt;Google's browser-rendered results returned within our timeout for 7 of 15&lt;/strong&gt; — its SERP is by far the slowest and hardest to fetch, which is its own argument for a managed API. Cross-engine and #1 statistics are computed only over the searches where the relevant engines both answered (Google pairs n=7; Bing∩Brave n=14). It is a snapshot, not a longitudinal study — search results shift constantly, which is the whole reason to monitor them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sources&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://crawlora.net/use-cases/serp-monitoring?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Crawlora SERP monitoring use case&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://crawlora.net/tools/serp-checker?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Free SERP checker tool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://crawlora.net/platforms/google-search?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Google Search API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://crawlora.net/platforms/bing?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Bing Search API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://crawlora.net/platforms/brave?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Brave Search API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Do Google, Bing, and Brave return the same search results?
&lt;/h3&gt;

&lt;p&gt;No. In our 15-search test, the engines agreed on the #1 result only 29% of the time, and Google and Bing shared just 3 of the top 10 on average. No pair of engines shared even half their top 10 results.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why does Bing show different results than Google?
&lt;/h3&gt;

&lt;p&gt;The engines weight sources differently. In our data Bing leaned on traditional publishers (Forbes appeared in 9 of 15 top-10s, PCMag in 8), while Google surfaced its own properties and community sites — Reddit and YouTube each appeared in 57% of Google SERPs and Wikipedia in 43%, versus 0% for all three on Bing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Should I track rankings on more than one search engine?
&lt;/h3&gt;

&lt;p&gt;Yes. Because the top 10 results barely overlap between engines, a single Google rank check misses where you stand on Bing (which feeds Microsoft Copilot and many ChatGPT citations) and Brave. Multi-engine SERP monitoring is the only way to see your real visibility.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://crawlora.net/blog/google-vs-bing-vs-brave-serp-study-2026?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;crawlora.net&lt;/a&gt;. &lt;a href="https://crawlora.net/tools/serp-checker?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;SERP Checker&lt;/a&gt; is Crawlora's free tool for comparing live Google, Bing, and Brave rankings side by side.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>seo</category>
      <category>datascience</category>
    </item>
    <item>
      <title>Best Bing Search API Alternatives in 2026 (After the Retirement)</title>
      <dc:creator>Tony Wang</dc:creator>
      <pubDate>Mon, 03 Aug 2026 01:00:00 +0000</pubDate>
      <link>https://dev.to/tonywangca/best-bing-search-api-alternatives-in-2026-after-the-retirement-kdi</link>
      <guid>https://dev.to/tonywangca/best-bing-search-api-alternatives-in-2026-after-the-retirement-kdi</guid>
      <description>&lt;p&gt;&lt;strong&gt;Key takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Microsoft retired the Bing Search APIs on August 11, 2025 — existing keys return HTTP 410 Gone, new signups are closed, and there is no first-party 'query in, JSON out' Bing Search API anymore.&lt;/li&gt;
&lt;li&gt;Microsoft's official path, Grounding with Bing Search in Azure AI Foundry, returns LLM-grounded chunks (not raw results), needs an Azure AI Agent project, and lists at $35 per 1,000 calls — a 40–483% jump over the old tiers.&lt;/li&gt;
&lt;li&gt;For a drop-in JSON replacement with one API key and no Azure project, use Crawlora's Bing Search API; for an independent index, Brave; for multi-engine SERPs, SerpApi or DataForSEO; for RAG/agents, Tavily or Exa.&lt;/li&gt;
&lt;li&gt;Migrating is mostly mechanical: swap the endpoint, map mkt/count/offset to country, lang, count, and page, change the auth header, and re-point your parser at the normalized JSON.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you landed here because your Bing Search API key suddenly returns &lt;code&gt;410 Gone&lt;/code&gt;, you are not alone. Microsoft &lt;strong&gt;retired the Bing Search APIs on August 11, 2025&lt;/strong&gt;, and there is no longer a first-party "send a query, get ranked results as JSON" endpoint to sign up for. Whether Bing fed a rank tracker, a competitive-intelligence pipeline, an internal search box, or an AI agent, you need a replacement — and the replacement that fits depends on whether you want raw structured results or an AI-grounded answer.&lt;/p&gt;

&lt;p&gt;This guide covers what happened, what Microsoft offers instead, what to look for in a replacement, and the best Bing Search API alternatives in 2026 — what each one does well, where it falls short, and when to choose it — plus a step-by-step migration.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happened to the Bing Search API
&lt;/h2&gt;

&lt;p&gt;Microsoft announced the retirement in &lt;strong&gt;May 2025&lt;/strong&gt;, roughly 90 days before the shutdown, and decommissioned the v7 "Bing Web Search" and "Bing Custom Search" families on &lt;strong&gt;August 11, 2025&lt;/strong&gt;. In Microsoft's words, the APIs "will be decommissioned completely, and the product will no longer be available for usage or new customer signup." (&lt;a href="https://learn.microsoft.com/en-us/lifecycle/announcements/bing-search-api-retirement" rel="noopener noreferrer"&gt;Microsoft Learn&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;The retirement was total, not a tier trim:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It applied to &lt;strong&gt;every paid and free tier&lt;/strong&gt; — the F1 and S1–S9 resources of Bing Search, and the F0 and S1–S4 resources of Bing Custom Search.&lt;/li&gt;
&lt;li&gt;Existing keys stopped returning data; the endpoints now respond with &lt;strong&gt;HTTP &lt;code&gt;410 Gone&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;New deployments were disabled&lt;/strong&gt; ahead of the date, so you cannot spin up a fresh instance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is why search is full of queries like "bing search api deprecated", "bing search api key free", and "bing search api alternative" — they all trace back to the same event. The move reflects Microsoft's strategic shift from exposing search as a raw data endpoint to embedding it inside AI agents.&lt;/p&gt;

&lt;h2&gt;
  
  
  What people used the Bing Search API for
&lt;/h2&gt;

&lt;p&gt;Before picking a replacement, it helps to name what you actually relied on. The v7 family was really a bundle of endpoints, and a good replacement only needs to cover the ones you used:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Bing v7 capability&lt;/th&gt;
&lt;th&gt;Typical job&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Web Search&lt;/td&gt;
&lt;td&gt;Organic results for rank tracking, monitoring, search boxes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News Search&lt;/td&gt;
&lt;td&gt;Headlines, sources, timestamps for media monitoring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Image Search&lt;/td&gt;
&lt;td&gt;Image results and thumbnails&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Video Search&lt;/td&gt;
&lt;td&gt;Video results and metadata&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Autosuggest&lt;/td&gt;
&lt;td&gt;Query completions / typeahead&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Spell Check&lt;/td&gt;
&lt;td&gt;Query correction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entity Search&lt;/td&gt;
&lt;td&gt;Knowledge-panel style entities&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Visual Search&lt;/td&gt;
&lt;td&gt;Reverse-image and visual lookups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom Search&lt;/td&gt;
&lt;td&gt;Scoped search over a curated set of sites&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Local Business Search&lt;/td&gt;
&lt;td&gt;Place and business results&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Most teams used &lt;strong&gt;Web Search&lt;/strong&gt; (and often &lt;strong&gt;News/Image/Video&lt;/strong&gt;) as a data source. That "structured results, on demand" job is the one with the cleanest third-party replacements. Knowledge-panel and visual-search use cases are nicher and may need a different tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Microsoft's official replacement: Grounding with Bing Search
&lt;/h2&gt;

&lt;p&gt;Microsoft points customers to &lt;strong&gt;Grounding with Bing Search&lt;/strong&gt;, part of &lt;strong&gt;Azure AI Agents&lt;/strong&gt; inside Azure AI Foundry. It lets an Azure-hosted agent pull real-time public web results into an LLM's answer. That is genuinely useful for agent grounding — but it is &lt;strong&gt;not a drop-in search API&lt;/strong&gt;, and the differences matter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You get answers, not results.&lt;/strong&gt; "Developers and end users don't have access to raw content returned from Grounding with Bing Search." The model response includes citations and a link to the Bing query, but not a clean ranked list you can parse. (&lt;a href="https://ppc.land/microsoft-ends-bing-search-apis-on-august-11-alternative-costs-40-483-more/" rel="noopener noreferrer"&gt;PPC Land&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It is a platform commitment.&lt;/strong&gt; You stand up an Azure AI Foundry project, an Agent Service, model deployments, and role assignments — not a single key you call from a cron job.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data leaves the compliance boundary.&lt;/strong&gt; Each grounding query "is transferred, along with the resource key, outside of the Azure compliance boundary to the Grounding with Bing Search service."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;There are display and model rules.&lt;/strong&gt; You must display both the website URLs and the Bing search-query URL in your interface, and the tool works with the supported Azure OpenAI models (with documented exceptions).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And it is more expensive. Grounding with Bing Search lists at &lt;strong&gt;$35 per 1,000 transactions&lt;/strong&gt;, on top of the Azure AI Agent Service usage it requires. Against the old Bing tiers — roughly $6 (S3), $15 (S2), and $25 (S1) per 1,000 — that is a &lt;strong&gt;40–483% increase&lt;/strong&gt; depending on which tier you were on. (&lt;a href="https://ppc.land/microsoft-ends-bing-search-apis-on-august-11-alternative-costs-40-483-more/" rel="noopener noreferrer"&gt;PPC Land&lt;/a&gt;)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;When Grounding is still the right call&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If your goal is an agent that reasons over fresh web context inside Azure — and you do not need the raw ranked results — Grounding with Bing Search is the most "official" path and keeps you in the Microsoft ecosystem. If you wanted "query in, ranked JSON out," read on.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What to look for in a Bing Search API alternative
&lt;/h2&gt;

&lt;p&gt;If you used Bing as a &lt;strong&gt;data source&lt;/strong&gt;, a good replacement should:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Return structured JSON — organic results with positions, titles, URLs, and snippets — not an LLM summary you have to re-parse.&lt;/li&gt;
&lt;li&gt;Accept the basics you already used: query, country, language, and paging.&lt;/li&gt;
&lt;li&gt;Authenticate with a single API key you can call directly, with no Azure project or resource-group setup.&lt;/li&gt;
&lt;li&gt;Offer predictable, usage-based pricing (ideally billed on successful responses), with a free tier to test.&lt;/li&gt;
&lt;li&gt;Cover the modules you need — web plus news, video, and image where relevant.&lt;/li&gt;
&lt;li&gt;Add engine breadth (Google and Brave alongside Bing) so one disruption doesn't stall your product.&lt;/li&gt;
&lt;li&gt;Handle the unglamorous parts — proxies, anti-bot challenges, retries — and return documented errors instead of broken HTML.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The best Bing Search API alternatives in 2026
&lt;/h2&gt;

&lt;p&gt;There is no single winner — the right pick depends on whether you need raw results, an AI-grounded answer, an independent index, or multi-engine SERPs. Here is the landscape at a glance, then a closer look at each.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Alternative&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Output&lt;/th&gt;
&lt;th&gt;Setup&lt;/th&gt;
&lt;th&gt;Free tier&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Crawlora Bing API&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Structured search API&lt;/td&gt;
&lt;td&gt;Normalized JSON (web + news/video/image)&lt;/td&gt;
&lt;td&gt;One API key&lt;/td&gt;
&lt;td&gt;2,000 credits/mo&lt;/td&gt;
&lt;td&gt;Drop-in JSON replacement, rank tracking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Azure Grounding&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agent grounding&lt;/td&gt;
&lt;td&gt;LLM answer + citations&lt;/td&gt;
&lt;td&gt;Azure AI Foundry project&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Agents inside Azure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Brave Search API&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Independent search API&lt;/td&gt;
&lt;td&gt;JSON from a self-crawled index&lt;/td&gt;
&lt;td&gt;One API key&lt;/td&gt;
&lt;td&gt;Yes (limited)&lt;/td&gt;
&lt;td&gt;Non-Google, non-Bing coverage, privacy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SerpApi&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multi-engine SERP scraper&lt;/td&gt;
&lt;td&gt;Rich SERP JSON, 25+ engines&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;100 searches/mo&lt;/td&gt;
&lt;td&gt;SERP-feature depth across engines&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tavily&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AI search API&lt;/td&gt;
&lt;td&gt;LLM-optimized snippets&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;1,000 credits/mo&lt;/td&gt;
&lt;td&gt;RAG pipelines and agents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Exa&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Neural/semantic search&lt;/td&gt;
&lt;td&gt;Semantic results + contents&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Free credits&lt;/td&gt;
&lt;td&gt;Meaning-based discovery, research&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google Custom Search&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;First-party JSON API&lt;/td&gt;
&lt;td&gt;Google results JSON&lt;/td&gt;
&lt;td&gt;API key + engine ID&lt;/td&gt;
&lt;td&gt;100 queries/day&lt;/td&gt;
&lt;td&gt;First-party Google data, small volume&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DataForSEO&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;SERP + SEO datasets&lt;/td&gt;
&lt;td&gt;SERP JSON + keyword/backlink data&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Pay-as-you-go&lt;/td&gt;
&lt;td&gt;SEO platforms needing bundled datasets&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  1. Crawlora Bing Search API — the drop-in JSON replacement
&lt;/h3&gt;

&lt;p&gt;If your only question is "how do I send a query and get Bing results back as JSON, today, without standing up Azure?", &lt;a href="https://crawlora.net/platforms/bing?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Crawlora's Bing Search API&lt;/a&gt; is the closest drop-in. It wraps the request handling, proxy routing, anti-bot work, parsing, and normalization behind one documented endpoint, authenticated with a single &lt;code&gt;x-api-key&lt;/code&gt;. You send &lt;code&gt;q&lt;/code&gt;, &lt;code&gt;country&lt;/code&gt;, &lt;code&gt;lang&lt;/code&gt;, &lt;code&gt;page&lt;/code&gt;, and &lt;code&gt;count&lt;/code&gt;, and you get normalized organic results back — plus context-panel data, related queries, people-also-ask, and news/video modules when Bing surfaces them.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-G&lt;/span&gt; &lt;span class="s2"&gt;"https://api.crawlora.net/api/v1/bing/search"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"x-api-key: &lt;/span&gt;&lt;span class="nv"&gt;$CRAWLORA_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--data-urlencode&lt;/span&gt; &lt;span class="s2"&gt;"q=web scraping api"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--data-urlencode&lt;/span&gt; &lt;span class="s2"&gt;"country=us"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--data-urlencode&lt;/span&gt; &lt;span class="s2"&gt;"lang=en-us"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--data-urlencode&lt;/span&gt; &lt;span class="s2"&gt;"page=1"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--data-urlencode&lt;/span&gt; &lt;span class="s2"&gt;"count=10"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.crawlora.net/api/v1/bing/search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;x-api-key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CRAWLORA_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
    &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;q&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;web scraping api&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;country&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;us&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;lang&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;en-us&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;page&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;count&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;results&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;position&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or, with the official SDK, the call is one line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;crawlora&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;CrawloraClient&lt;/span&gt;

&lt;span class="n"&gt;crawlora&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;CrawloraClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CRAWLORA_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;crawlora&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bing&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;web scraping api&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The response is normalized JSON you can store directly (check the &lt;a href="https://crawlora.net/docs/bing/bing-search?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;API docs&lt;/a&gt; for the current schema):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"msg"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"OK"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"results"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"position"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Example result title"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"hostname"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"example.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"display_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Snippet text shown under the result."&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"pagination"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"page"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"count"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"next_page"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Retired Bing v7&lt;/th&gt;
&lt;th&gt;Crawlora Bing API&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Output&lt;/td&gt;
&lt;td&gt;Structured JSON&lt;/td&gt;
&lt;td&gt;Structured JSON&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auth&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Ocp-Apim-Subscription-Key&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;x-api-key&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Setup&lt;/td&gt;
&lt;td&gt;Azure resource&lt;/td&gt;
&lt;td&gt;One API key&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Web results&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes (with positions)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News / video / image&lt;/td&gt;
&lt;td&gt;Separate endpoints&lt;/td&gt;
&lt;td&gt;Separate endpoints (&lt;code&gt;/bing/news&lt;/code&gt;, &lt;code&gt;/bing/videos&lt;/code&gt;, &lt;code&gt;/bing/images&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Paging&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;count&lt;/code&gt; + &lt;code&gt;offset&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;count&lt;/code&gt; (1–50) + &lt;code&gt;page&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Other engines&lt;/td&gt;
&lt;td&gt;Bing only&lt;/td&gt;
&lt;td&gt;Google and Brave share the same shape&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Availability&lt;/td&gt;
&lt;td&gt;Retired&lt;/td&gt;
&lt;td&gt;Active&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;When to choose it:&lt;/strong&gt; you want Bing results as structured JSON with the least migration work, especially for &lt;a href="https://crawlora.net/blog/bing-search-api-rank-tracking?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;rank tracking&lt;/a&gt; and &lt;a href="https://crawlora.net/use-cases/serp-monitoring?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;SERP monitoring&lt;/a&gt;. The bonus is engine breadth — the &lt;a href="https://crawlora.net/platforms/google-search?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Google Search&lt;/a&gt; and &lt;a href="https://crawlora.net/platforms/brave?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Brave Search&lt;/a&gt; endpoints return the &lt;strong&gt;same normalized shape&lt;/strong&gt;, so the same code snapshots all three and you are no longer single-sourced on one engine.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Grounding with Bing Search (Azure AI Foundry) — the official path
&lt;/h3&gt;

&lt;p&gt;Covered in depth above. As an &lt;em&gt;alternative&lt;/em&gt;, it earns its place when you are building &lt;strong&gt;inside Azure&lt;/strong&gt; and want an agent to reason over fresh web context with Microsoft-blessed grounding and citations. Pick it for agent answers; skip it if you need raw ranked results, predictable per-query pricing, or a setup lighter than an Azure AI Agent project. For an agent that needs &lt;em&gt;structured&lt;/em&gt; web data (not summarized answers), a tool-based approach over &lt;a href="https://crawlora.net/blog/ai-agent-web-data-mcp?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;MCP&lt;/a&gt; is often a better fit.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Brave Search API — an independent index
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://crawlora.net/platforms/brave?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Brave Search API&lt;/a&gt; is built on Brave's &lt;strong&gt;own independent index&lt;/strong&gt; — not a Bing or Google reseller. That independence is the reason to choose it: if you specifically want non-Google, non-Bing coverage (for source diversity, rank tracking, or AI grounding), Brave adds a genuinely different result set rather than a re-skin of the same SERP. It returns web results plus news and video modules as JSON, runs privacy-first with no user tracking, and offers a free tier to evaluate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to choose it:&lt;/strong&gt; you want a second or third engine with a truly independent crawl, or you care about the privacy posture. See &lt;a href="https://crawlora.net/blog/how-to-scrape-brave-search?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;how to scrape Brave Search&lt;/a&gt; for the request/response shape, and pair it with Bing and Google for cross-engine comparison.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. SerpApi — multi-engine SERP depth
&lt;/h3&gt;

&lt;p&gt;SerpApi scrapes and parses SERPs across &lt;strong&gt;25+ engines&lt;/strong&gt; — Google, Bing, DuckDuckGo, Yahoo, Baidu, and more — and returns rich structured JSON (organic results, ads, featured snippets, knowledge panels, "people also ask"). If your migration is really about replacing Bing &lt;em&gt;and&lt;/em&gt; deepening SERP-feature coverage across engines, it is a mature specialist.&lt;/p&gt;

&lt;p&gt;Two caveats. First, it is SERP-only — if you also need non-search platform data, you will run a second vendor. Second, in &lt;strong&gt;December 2025 Google filed a lawsuit against SerpApi&lt;/strong&gt; over scraping Google results; the case is unresolved, and the practical takeaway for buyers is to avoid single-sourcing any one Google-SERP reseller. (&lt;a href="https://blog.google/technology/safety-security/serpapi-lawsuit/" rel="noopener noreferrer"&gt;Google&lt;/a&gt;) See &lt;a href="https://crawlora.net/blog/serpapi-alternatives?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;SerpApi alternatives&lt;/a&gt; and &lt;a href="https://crawlora.net/compare/serpapi?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Crawlora vs SerpApi&lt;/a&gt; for the full comparison.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to choose it:&lt;/strong&gt; you want broad SERP-feature breadth across many engines and are comfortable managing SERP-supply-chain risk.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Tavily — search built for RAG and agents
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://tavily.com" rel="noopener noreferrer"&gt;Tavily&lt;/a&gt; is a search API designed for &lt;strong&gt;AI agents and LLMs&lt;/strong&gt;, optimized for retrieval-augmented generation. It returns LLM-ready snippets with fast response times, has native LangChain support, and ships search, extract, crawl, and map endpoints, with a free tier (1,000 credits/month) and transparent per-credit pricing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to choose it:&lt;/strong&gt; you are prototyping or running a RAG pipeline and want AI-optimized search output rather than a raw SERP. It is less suited to precise rank tracking, where you want exact organic positions. For a side-by-side on the two output models — LLM-ready snippets and synthesized answers vs normalized, position-accurate SERP JSON — see &lt;a href="https://crawlora.net/compare/tavily?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Crawlora vs Tavily&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Exa — neural, meaning-based search
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://exa.ai" rel="noopener noreferrer"&gt;Exa&lt;/a&gt; is an embeddings-based search engine "built for machines": instead of keyword matching, it ranks by semantic similarity, and its standout &lt;em&gt;Find Similar&lt;/em&gt; endpoint takes a URL and returns semantically related pages. It also offers contents, answer, and research endpoints, with free credits to start.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to choose it:&lt;/strong&gt; discovery and research where &lt;em&gt;meaning&lt;/em&gt; beats keyword precision — finding related content, building recommendation or research tools. It is the wrong tool when you need the literal, position-accurate SERP a user would see. For a side-by-side on neural search vs normalized SERP JSON, see &lt;a href="https://crawlora.net/compare/exa?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Crawlora vs Exa&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Google Custom Search JSON API — the other first-party option
&lt;/h3&gt;

&lt;p&gt;If you want &lt;strong&gt;first-party Google results&lt;/strong&gt; as JSON, the &lt;a href="https://developers.google.com/custom-search/v1/overview" rel="noopener noreferrer"&gt;Google Programmable Search Engine / Custom Search JSON API&lt;/a&gt; is the sanctioned route. It is free for &lt;strong&gt;100 queries/day&lt;/strong&gt;, then $5 per 1,000 queries up to a daily cap. The catch is volume and scope: the daily limit makes it impractical for serious rank tracking, and it is built around a configured search engine rather than open-web SERP parity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to choose it:&lt;/strong&gt; low-volume, first-party Google data where staying inside Google's terms matters more than throughput.&lt;/p&gt;

&lt;h3&gt;
  
  
  8. DataForSEO — SERP plus SEO datasets
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://crawlora.net/compare/dataforseo?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;DataForSEO&lt;/a&gt; pairs a SERP API with bundled SEO datasets — keyword search volume, difficulty, and backlinks — on pay-as-you-go pricing. If you are building an SEO platform and want search results &lt;em&gt;and&lt;/em&gt; the supporting datasets from one vendor, it consolidates that stack. Compare it with focused options like &lt;a href="https://crawlora.net/compare/serpstack?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Serpstack&lt;/a&gt; and &lt;a href="https://crawlora.net/compare/serpdog?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Serpdog&lt;/a&gt; if you only need SERPs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to choose it:&lt;/strong&gt; you are building SEO tooling and want SERP data alongside keyword and backlink datasets.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bing Search API vs. Crawlora: feature by feature
&lt;/h2&gt;

&lt;p&gt;For the most common migration — "I used Bing Web Search as a data source" — here is the head-to-head against the closest drop-in:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Retired Bing Search API&lt;/th&gt;
&lt;th&gt;Crawlora Bing Search API&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Status&lt;/td&gt;
&lt;td&gt;Retired Aug 11, 2025 (&lt;code&gt;410 Gone&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Active&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output format&lt;/td&gt;
&lt;td&gt;Structured JSON&lt;/td&gt;
&lt;td&gt;Structured JSON (normalized)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Setup&lt;/td&gt;
&lt;td&gt;Azure resource + key&lt;/td&gt;
&lt;td&gt;Single API key&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auth header&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Ocp-Apim-Subscription-Key&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;x-api-key&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Query params&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;q&lt;/code&gt;, &lt;code&gt;mkt&lt;/code&gt;, &lt;code&gt;count&lt;/code&gt;, &lt;code&gt;offset&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;q&lt;/code&gt;, &lt;code&gt;country&lt;/code&gt;, &lt;code&gt;lang&lt;/code&gt;, &lt;code&gt;count&lt;/code&gt;, &lt;code&gt;page&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Result modules&lt;/td&gt;
&lt;td&gt;Web, news, image, video, etc.&lt;/td&gt;
&lt;td&gt;Web + &lt;code&gt;news&lt;/code&gt; / &lt;code&gt;videos&lt;/code&gt; / &lt;code&gt;images&lt;/code&gt; endpoints&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Positions in results&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-engine&lt;/td&gt;
&lt;td&gt;Bing only&lt;/td&gt;
&lt;td&gt;Google, Bing, Brave (same shape)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pricing model&lt;/td&gt;
&lt;td&gt;Per-transaction tiers&lt;/td&gt;
&lt;td&gt;Credit-based, billed on success&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Free tier&lt;/td&gt;
&lt;td&gt;(was tiered)&lt;/td&gt;
&lt;td&gt;2,000 credits/month, no card&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How to migrate from the Bing Search API
&lt;/h2&gt;

&lt;p&gt;The mental model maps over cleanly. Most of the work is renaming parameters and re-pointing your parser.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Swap the endpoint.&lt;/strong&gt; Point requests at &lt;code&gt;https://api.crawlora.net/api/v1/bing/search&lt;/code&gt; instead of the retired Bing endpoint. Use the dedicated &lt;code&gt;/bing/news&lt;/code&gt;, &lt;code&gt;/bing/videos&lt;/code&gt;, and &lt;code&gt;/bing/images&lt;/code&gt; routes for those modules.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Map the parameters.&lt;/strong&gt; Bing's market and paging become Crawlora's locale and page:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Retired Bing v7&lt;/th&gt;
&lt;th&gt;Crawlora Bing API&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;q&lt;/code&gt; / &lt;code&gt;query&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;q&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The search query (required)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;mkt&lt;/code&gt; (e.g. &lt;code&gt;en-US&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;country&lt;/code&gt; + &lt;code&gt;lang&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;e.g. &lt;code&gt;country=us&lt;/code&gt;, &lt;code&gt;lang=en-us&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;count&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;count&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Results per page, 1–50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;offset&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;page&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Page-based, 1-indexed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;responseFilter=news&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;call &lt;code&gt;/bing/news&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Per-module endpoints&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ocp-Apim-Subscription-Key&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;x-api-key&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Auth header&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;3. Replace the key.&lt;/strong&gt; Swap the Azure/Bing subscription key for your Crawlora API key, sent as the &lt;code&gt;x-api-key&lt;/code&gt; header.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Re-point the parser.&lt;/strong&gt; Read the normalized JSON fields (&lt;code&gt;data.results[].position&lt;/code&gt;, &lt;code&gt;title&lt;/code&gt;, &lt;code&gt;url&lt;/code&gt;, &lt;code&gt;hostname&lt;/code&gt;, &lt;code&gt;description&lt;/code&gt;) and handle documented errors and retries — for example, &lt;code&gt;503&lt;/code&gt; when Bing serves a challenge page.&lt;/p&gt;

&lt;p&gt;A before/after for a typical web-search call:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="gd"&gt;- GET https://api.bing.microsoft.com/v7.0/search?q=web+scraping+api&amp;amp;mkt=en-US&amp;amp;count=10
- Header: Ocp-Apim-Subscription-Key: &amp;lt;azure-key&amp;gt;
&lt;/span&gt;&lt;span class="gi"&gt;+ GET https://api.crawlora.net/api/v1/bing/search?q=web+scraping+api&amp;amp;country=us&amp;amp;lang=en-us&amp;amp;count=10
+ Header: x-api-key: &amp;lt;crawlora-key&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Scrape public results responsibly&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A replacement returns public search results, but "public" is not blanket permission. Collect only public result pages, respect rate limits, and handle anything that could be personal data lawfully. See &lt;a href="https://crawlora.net/blog/is-web-scraping-legal-2026?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Is web scraping legal in 2026?&lt;/a&gt; for the longer version.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How to choose
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You want Bing results as JSON with the least work →&lt;/strong&gt; Crawlora's &lt;a href="https://crawlora.net/platforms/bing?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Bing Search API&lt;/a&gt; — one key, normalized output, news/video/image modules.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You are building an agent inside Azure →&lt;/strong&gt; Grounding with Bing Search, for AI-grounded answers with citations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You want an independent (non-Bing, non-Google) index →&lt;/strong&gt; the &lt;a href="https://crawlora.net/platforms/brave?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Brave Search API&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You want deep SERP features across many engines →&lt;/strong&gt; SerpApi (mind the SERP-supply-chain risk).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You are feeding a RAG pipeline →&lt;/strong&gt; Tavily for AI-optimized snippets, or Exa for semantic discovery.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You want first-party Google data at low volume →&lt;/strong&gt; Google Custom Search JSON API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You are building SEO tooling →&lt;/strong&gt; DataForSEO for SERPs plus keyword and backlink datasets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bing was one engine in a rank tracker →&lt;/strong&gt; run Bing, &lt;a href="https://crawlora.net/platforms/google-search?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Google&lt;/a&gt;, and &lt;a href="https://crawlora.net/platforms/brave?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Brave&lt;/a&gt; through one &lt;a href="https://crawlora.net/use-cases/serp-monitoring?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;SERP monitoring&lt;/a&gt; workflow so no single engine is a single point of failure.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Next steps
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Try it first, free:&lt;/strong&gt; turn any URL into clean Markdown with the &lt;a href="https://crawlora.net/tools/free-web-scraper?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Free Web Scraper&lt;/a&gt; — no signup, no API key. To check where a domain currently ranks on Bing (or Google and Brave) without writing any code, try the free &lt;a href="https://crawlora.net/tools/serp-checker?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;SERP checker&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Test &lt;code&gt;/bing/search&lt;/code&gt; in the &lt;a href="https://crawlora.net/playground/bing-search?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Playground&lt;/a&gt;, check the request and response schema in the &lt;a href="https://crawlora.net/docs/bing/bing-search?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;API docs&lt;/a&gt;, and review credit costs on the &lt;a href="https://crawlora.net/pricing?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;pricing page&lt;/a&gt;. Start from the &lt;a href="https://crawlora.net/platforms/bing?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Bing Search API&lt;/a&gt; page for the full workflow, or wire it into an agent with the &lt;a href="https://crawlora.net/blog/ai-agent-web-data-mcp?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;hosted MCP server&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Sources&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/lifecycle/announcements/bing-search-api-retirement" rel="noopener noreferrer"&gt;Microsoft Learn — Bing Search APIs retiring on August 11, 2025&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ppc.land/microsoft-ends-bing-search-apis-on-august-11-alternative-costs-40-483-more/" rel="noopener noreferrer"&gt;PPC Land — Bing Search APIs end August 11; Grounding alternative costs 40–483% more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.theregister.com/2025/05/15/bing_search_apis_retired/" rel="noopener noreferrer"&gt;The Register — Microsoft to pull the plug on Bing Search APIs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.google/technology/safety-security/serpapi-lawsuit/" rel="noopener noreferrer"&gt;Google — legal action against SerpApi's unlawful scraping (Dec 2025)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://brave.com/search/api/" rel="noopener noreferrer"&gt;Brave Search API — official documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/custom-search/v1/overview" rel="noopener noreferrer"&gt;Google Programmable Search Engine — Custom Search JSON API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Related reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://crawlora.net/blog/bing-search-api-rank-tracking?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Using the Bing Search API for Rank Tracking&lt;/a&gt; — turn Bing results into a rank tracker once you have migrated.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://crawlora.net/blog/how-serp-monitoring-apis-work?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;How SERP Monitoring APIs Work (and How to Build a Rank Tracker)&lt;/a&gt; — the snapshot-and-compare pattern across engines.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://crawlora.net/blog/best-serp-api?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Best SERP APIs in 2026&lt;/a&gt; — where a Bing endpoint fits among search APIs.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://crawlora.net/blog/serpapi-alternatives?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;SerpApi Alternatives in 2026&lt;/a&gt; — what the Google–SerpApi case means for SERP-data buyers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why is my Bing Search API key returning errors?
&lt;/h3&gt;

&lt;p&gt;Microsoft retired the Bing Search APIs on August 11, 2025. Keys issued before then stopped returning data and the endpoints now respond with HTTP 410 Gone; new signups are closed and the product was decommissioned completely.&lt;/p&gt;

&lt;h3&gt;
  
  
  When was the Bing Search API retired?
&lt;/h3&gt;

&lt;p&gt;Microsoft announced the retirement in May 2025 and shut the v7 Bing Search and Bing Custom Search APIs down on August 11, 2025, across every free and paid tier (F1/S1-S9 and F0/S1-S4).&lt;/p&gt;

&lt;h3&gt;
  
  
  What replaced the Bing Search API?
&lt;/h3&gt;

&lt;p&gt;Microsoft points customers to Grounding with Bing Search in Azure AI Agents, which returns LLM-grounded answers with citations rather than raw results. For a data-source replacement, third-party JSON search APIs (Crawlora's Bing API, Brave, SerpApi, Tavily, Exa, and others) stepped in.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is there a drop-in Bing Search API alternative?
&lt;/h3&gt;

&lt;p&gt;Crawlora's Bing Search API is the closest drop-in for the data-source use case: send q, country, lang, page, and count and get normalized organic results plus news, video, and image modules — with one API key and no Azure project.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is there a free Bing Search API now?
&lt;/h3&gt;

&lt;p&gt;There is no free first-party Bing Search API anymore. Crawlora includes 2,000 free credits per month (no card) covering Bing, Google, and Brave search endpoints, and Google's Custom Search JSON API allows 100 free queries per day.&lt;/p&gt;

&lt;h3&gt;
  
  
  How much does Grounding with Bing Search cost?
&lt;/h3&gt;

&lt;p&gt;Grounding with Bing Search lists at about $35 per 1,000 transactions, on top of the Azure AI Agent Service it requires. Against the old Bing S3/S2/S1 tiers (roughly $6/$15/$25 per 1,000), that is a 40-483% increase depending on your prior tier.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the best Bing Search API alternative?
&lt;/h3&gt;

&lt;p&gt;It depends on the job: Crawlora's Bing API for a drop-in JSON replacement and rank tracking, Azure Grounding for agents inside Azure, Brave for an independent index, SerpApi or DataForSEO for multi-engine SERPs and SEO datasets, and Tavily or Exa for RAG and semantic search.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I migrate off the Bing Search API?
&lt;/h3&gt;

&lt;p&gt;Swap the endpoint to /bing/search, map your old q/mkt/count/offset parameters to q, country, lang, count, and page, replace the key with your Crawlora x-api-key, and re-point your parser at the normalized JSON.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://crawlora.net/blog/bing-search-api-alternatives?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;crawlora.net&lt;/a&gt;. &lt;a href="https://crawlora.net/platforms/bing?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Bing Search API&lt;/a&gt; returns Bing search, news, image, and video results as structured JSON — a drop-in replacement since Microsoft retired its own API.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>seo</category>
    </item>
    <item>
      <title>Web Scraping for AI Training Data: A Compliant Guide</title>
      <dc:creator>Tony Wang</dc:creator>
      <pubDate>Sun, 02 Aug 2026 01:00:00 +0000</pubDate>
      <link>https://dev.to/tonywangca/web-scraping-for-ai-training-data-a-compliant-guide-2f29</link>
      <guid>https://dev.to/tonywangca/web-scraping-for-ai-training-data-a-compliant-guide-2f29</guid>
      <description>&lt;p&gt;&lt;strong&gt;Key takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Most AI teams don't need to crawl the whole web — they need clean, well-sourced records from specific platforms, with provenance kept for every row.&lt;/li&gt;
&lt;li&gt;The legal risk isn't one thing: reading public facts is the most defensible, but training on copyrighted works, circumventing anti-bot controls (DMCA §1201), and collecting personal data each add distinct exposure.&lt;/li&gt;
&lt;li&gt;Terms of Service alone are weak against scraping public data (X Corp. v. Bright Data), and robots.txt is a request, not a lock — but ignoring machine-readable opt-outs erodes any good-faith story.&lt;/li&gt;
&lt;li&gt;Governance is the real work: provenance on every row (source, timestamp, license, opt-out), a datasheet, and retention limits — treat the dataset as something you may have to defend.&lt;/li&gt;
&lt;li&gt;Structured APIs make all of this easier: documented JSON, source context built in, a public-data focus, and no per-site parser.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Web scraping for AI training data and RAG is less about brute-force crawling and more about sourcing clean, well-governed records you can defend. The fetching is the easy part; licensing, provenance, copyright, and personal data are where projects get into trouble. This guide covers what the courts actually say in 2026, a practical compliance checklist, how to govern the dataset, and how a structured API makes all of it easier. (None of this is legal advice — get counsel for your use.)&lt;/p&gt;

&lt;h2&gt;
  
  
  What "training data" usually means here
&lt;/h2&gt;

&lt;p&gt;Two adjacent needs get lumped together:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;RAG / retrieval&lt;/strong&gt; — current, structured records you index so an assistant can ground its answers. Freshness and provenance matter most. See the &lt;a href="https://crawlora.net/use-cases/web-data-for-rag?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;web data for RAG&lt;/a&gt; use case.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Training / fine-tuning / evaluation&lt;/strong&gt; — curated datasets used to train or measure a model. Licensing, dedupe, and documentation matter most.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For both, the win is the same: &lt;strong&gt;clean records with source context&lt;/strong&gt;, not a pile of raw HTML.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the courts actually say (2026)
&lt;/h2&gt;

&lt;p&gt;This is the most actively litigated corner of tech law right now, and courts are splitting — but a few threads are clearer than the headlines suggest.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Terms of Service alone are weak against scraping public data.&lt;/strong&gt; In &lt;em&gt;X Corp. v. Bright Data Ltd.&lt;/em&gt; (N.D. Cal., 2024), the court dismissed X’s breach-of-contract claims, reasoning that X’s &lt;em&gt;users&lt;/em&gt; — not the platform — own their posts, so a platform can’t use its ToS to build a "private copyright system" over public content. How far public data may be copied, the court said, is governed by the Copyright Act, not the ToS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;But bypassing anti-bot controls is a different, riskier act.&lt;/strong&gt; Newer suits target &lt;em&gt;circumvention&lt;/em&gt; rather than reading public pages: &lt;em&gt;Reddit v. Perplexity AI&lt;/em&gt; (filed late 2025, pending in 2026) alleges DMCA §1201 violations for evading rate limits and anti-bot systems — the same enforcement push behind &lt;a href="https://crawlora.net/blog/reddit-json-api-blocked-2026?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Reddit shutting down unauthenticated &lt;code&gt;.json&lt;/code&gt; access in 2026&lt;/a&gt;. Quietly defeating CAPTCHAs and rate limits is legally distinct from reading a public page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;robots.txt is a request, not a lock.&lt;/strong&gt; In litigation involving OpenAI, a court found robots.txt does not "effectively control" access for DMCA purposes — it signals a preference, it doesn’t create a technical barrier. Ignoring it isn’t automatically "circumvention," but it can still breach terms and erode any good-faith story.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Training on copyrighted works still implicates copyright.&lt;/strong&gt; The U.S. Copyright Office’s 2025 report on generative AI concluded that assembling a training set from copyrighted works "clearly implicates the right of reproduction" — so fair use is a &lt;em&gt;defense to argue&lt;/em&gt;, not a guarantee, and the outcome is unsettled across courts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Personal data is a separate track.&lt;/strong&gt; The &lt;em&gt;Bright Data&lt;/em&gt; court noted that privacy claims are &lt;em&gt;not&lt;/em&gt; preempted by copyright. So even where copyright is defensible, GDPR and CCPA independently constrain scraping names, emails, and profiles.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The takeaway: reading public, factual data is the most defensible position; &lt;strong&gt;training on copyrighted works, circumventing anti-bot controls, and collecting personal data&lt;/strong&gt; each add their own distinct risk.&lt;/p&gt;

&lt;h2&gt;
  
  
  The compliance checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Licensing &amp;amp; terms — check each source's terms and any dataset license before use, especially for training or redistribution.&lt;/li&gt;
&lt;li&gt;Don't circumvent — bypassing rate limits, CAPTCHAs, or anti-bot systems is a distinct legal risk (DMCA §1201), separate from reading a public page.&lt;/li&gt;
&lt;li&gt;Opt-out signals — respect robots.txt, ai.txt, and machine-readable TDM/‘noai’ reservations; treat a block as a no.&lt;/li&gt;
&lt;li&gt;Copyright — facts (prices, stats) aren't copyrightable, but articles, photos, and descriptions are; using copyrighted works for training implicates reproduction, and fair use is unsettled.&lt;/li&gt;
&lt;li&gt;Personal data — names, emails, and profiles are PII under GDPR/CCPA and aren't shielded by the copyright rulings; avoid them without a lawful basis.&lt;/li&gt;
&lt;li&gt;Provenance — record source URL, fetch time, license basis, and opt-out status for every record, in an auditable store.&lt;/li&gt;
&lt;li&gt;Dedupe &amp;amp; document — remove duplicates and write a datasheet (sources, dates, fields, licensing, known gaps).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a practical summary, not legal advice — see &lt;a href="https://crawlora.net/blog/is-web-scraping-legal-2026?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;is web scraping legal in 2026&lt;/a&gt; and get counsel for training or redistribution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dataset governance: provenance, datasheets, and roles
&lt;/h2&gt;

&lt;p&gt;Whether you’re building a RAG index or a training set, treat the dataset as something you may have to defend later. Best practice converges on a handful of habits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Provenance on every row.&lt;/strong&gt; Record the source URL or identifier, fetch timestamp, request parameters, the license/terms basis, and any opt-out status — ideally in an append-only (immutable) store with an audit trail, so you can prove where any row came from.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A datasheet for the dataset.&lt;/strong&gt; Document sources, dates, fields, collection method, known gaps, and licensing notes — the "Datasheets for Datasets" pattern — &lt;em&gt;before&lt;/em&gt; anyone trains on it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Honor machine-readable opt-outs.&lt;/strong&gt; Under the EU DSM Directive’s text-and-data-mining exception (Article 4), commercial TDM is permitted only where the rightsholder hasn’t reserved rights "by machine-readable means" — so a machine-readable opt-out (robots.txt, ai.txt, metadata) is legally meaningful, not just polite.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clear roles.&lt;/strong&gt; Even a small team benefits from naming who owns data sourcing, rights/privacy review, dataset stewardship, and audit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retention limits.&lt;/strong&gt; Keep only what the workflow needs, for only as long as it needs it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why structured data beats raw HTML for datasets
&lt;/h2&gt;

&lt;p&gt;A structured API returns documented JSON for supported platforms, which makes a dataset far easier to govern than scraped pages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Provenance is built in.&lt;/strong&gt; Each response carries the source and the request context, so you can keep a column for where every row came from.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistent schema.&lt;/strong&gt; Fields are documented and stable, so cleaning and dedupe are deterministic instead of per-site guesswork.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No parser rot.&lt;/strong&gt; You don’t maintain selectors that silently break and corrupt the dataset.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Public-data focus.&lt;/strong&gt; Platform endpoints return public records, which keeps you on the more defensible side of the line above.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Collect a structured record with source context, ready to store as a dataset row&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"https://api.crawlora.net/api/v1/google-search/search?keyword=web%20scraping%20api&amp;amp;country=us"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"x-api-key: &lt;/span&gt;&lt;span class="nv"&gt;$CRAWLORA_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;rows&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.crawlora.net/api/v1/google-search/search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;x-api-key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;keyword&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;web scraping api&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;country&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;us&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="n"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;source&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;google-search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;collected_at&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2026-06-06&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;  &lt;span class="c1"&gt;# keep provenance
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Store the &lt;code&gt;source&lt;/code&gt; and &lt;code&gt;collected_at&lt;/code&gt; fields alongside the data so the dataset stays auditable.&lt;/p&gt;

&lt;h2&gt;
  
  
  A compliant workflow in five steps
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Scope to sources you can defend&lt;/strong&gt; — specific platforms with terms you’ve reviewed, not an indiscriminate crawl, and skip anything with a machine-readable opt-out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collect structured records&lt;/strong&gt; — call documented endpoints (or a &lt;a href="https://crawlora.net/mcp?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;hosted MCP server&lt;/a&gt;) and keep the JSON. Don’t build circumvention into the pipeline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Attach provenance&lt;/strong&gt; — source, URL/identifier, timestamp, license basis, and request parameters on every row.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clean &amp;amp; dedupe&lt;/strong&gt; — normalize, remove duplicates, and drop or mask PII you don’t need.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Document&lt;/strong&gt; — write a short datasheet (sources, dates, fields, licensing notes, known gaps) before training.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Responsible use
&lt;/h2&gt;

&lt;p&gt;Crawlora provides public data infrastructure, not permission to use any content for any AI purpose. Training and redistribution raise licensing and copyright questions beyond ordinary collection — keep public, factual data, honor source terms and machine-readable opt-outs, avoid unnecessary personal data, and consult counsel for your specific use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Sources&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://natlawreview.com/article/can-you-prevent-ai-scraping-your-website-data-district-court-says-answer-lies" rel="noopener noreferrer"&gt;X Corp. v. Bright Data — ToS, copyright, and scraping public data (ArentFox Schiff / National Law Review)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://iapp.org/news/a/training-ai-on-personal-data-scraped-from-the-web" rel="noopener noreferrer"&gt;Training AI on personal data scraped from the web (IAPP)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/pdf/2501.08365" rel="noopener noreferrer"&gt;Towards Best Practices for Open Datasets for LLM Training&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/1803.09010" rel="noopener noreferrer"&gt;Datasheets for Datasets (Gebru et al.) — dataset documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/HiQ_Labs_v._LinkedIn" rel="noopener noreferrer"&gt;hiQ Labs v. LinkedIn — accessing public data and the CFAA&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Next steps
&lt;/h2&gt;

&lt;p&gt;See &lt;a href="https://crawlora.net/blog/ai-vs-traditional-web-scraping?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;AI vs traditional web scraping&lt;/a&gt;, compare &lt;a href="https://crawlora.net/blog/best-ai-web-scraping-tools-2026?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;the best AI web scraping tools&lt;/a&gt;, and try the &lt;a href="https://crawlora.net/use-cases/ai-web-scraping?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;AI Web Scraping API&lt;/a&gt; in the &lt;a href="https://crawlora.net/playground?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Playground&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Can I use scraped web data to train AI models?
&lt;/h3&gt;

&lt;p&gt;Sometimes, but it is unsettled and actively litigated. The US Copyright Office's 2025 report found that assembling a training set from copyrighted works implicates the reproduction right, so fair use is a defense to argue, not a guarantee. Keep public, factual data, check each source's terms and any dataset license, avoid copyrighted media and personal data without a basis, and consult counsel. Crawlora is data infrastructure, not legal advice.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do Terms of Service or robots.txt make scraping for AI illegal?
&lt;/h3&gt;

&lt;p&gt;Not by themselves. In X Corp. v. Bright Data (2024) a court held a platform can't use its ToS to override copyright on user content, and courts have found robots.txt is a request, not a technical access control. But ignoring opt-outs can still breach terms, and bypassing rate limits or anti-bot systems is a separate DMCA risk.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is scraping public data for AI considered fair use?
&lt;/h3&gt;

&lt;p&gt;It's the central open question. Reading public, factual data is the most defensible; training on copyrighted creative works is where fair use is fought and courts are split. There is no blanket answer yet — analyze the specific content and get legal advice.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I keep an AI dataset compliant?
&lt;/h3&gt;

&lt;p&gt;Scope to sources you can defend, honor machine-readable opt-outs (robots.txt, ai.txt, TDM reservations), don't circumvent anti-bot controls, keep provenance (source, URL, timestamp, license, opt-out status) on every record, dedupe, strip or avoid PII, and document the dataset in a datasheet before training.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why use a structured API for AI training data?
&lt;/h3&gt;

&lt;p&gt;Documented JSON makes datasets easier to govern: provenance and source context come built in, the schema is stable so cleaning and dedupe are deterministic, the focus is public records, and there is no parser to silently break and corrupt rows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is scraping for RAG different from scraping for training?
&lt;/h3&gt;

&lt;p&gt;RAG needs current, well-sourced records you index for grounding, where freshness and provenance matter most. Training needs curated, licensed, documented datasets. Both benefit from clean structured records over raw HTML.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://crawlora.net/blog/web-scraping-for-ai-training-data?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;crawlora.net&lt;/a&gt;. &lt;a href="https://crawlora.net/platforms/datasets?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Crawlora Datasets&lt;/a&gt; ships pre-collected, structured datasets across dozens of platforms — skip the scraping step for AI training data.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>tutorial</category>
      <category>webscraping</category>
    </item>
    <item>
      <title>Scraping Sites That Block Bots: Cloudflare, DataDome &amp; PerimeterX</title>
      <dc:creator>Tony Wang</dc:creator>
      <pubDate>Sat, 01 Aug 2026 01:00:00 +0000</pubDate>
      <link>https://dev.to/tonywangca/scraping-sites-that-block-bots-cloudflare-datadome-perimeterx-4hlm</link>
      <guid>https://dev.to/tonywangca/scraping-sites-that-block-bots-cloudflare-datadome-perimeterx-4hlm</guid>
      <description>&lt;p&gt;For most of the web, scraping is a solved problem: fetch the URL, parse the HTML, done. The interesting sites — the ones with prices, listings, reviews, and inventory worth collecting — are exactly the ones that don't let you. They sit behind Cloudflare, DataDome, PerimeterX (now HUMAN), Akamai, or Kasada, and the moment a script asks for a page it gets a CAPTCHA, a "checking your browser" interstitial, or a flat 403. The hard part of modern scraping isn't parsing the page. It's &lt;em&gt;getting&lt;/em&gt; the page.&lt;/p&gt;

&lt;p&gt;This guide explains how that wall actually works — the signals these systems check and why a normal HTTP client trips every one of them — and then how a scraper gets through reliably without pretending the problem is simpler than it is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bot detection is layered: IP reputation, the TLS/HTTP fingerprint, a JavaScript sensor that probes the browser, and behaviour over time. You have to pass all of them, not one.&lt;/li&gt;
&lt;li&gt;A datacenter IP and a non-browser fingerprint are what get most scrapers blocked — not a missing User-Agent. Spoofing headers alone does almost nothing.&lt;/li&gt;
&lt;li&gt;The reliable pattern is escalation: a cheap Chrome-impersonated request first, a real stealth browser only when the site demands it, and a fresh IP when the current one is burned.&lt;/li&gt;
&lt;li&gt;When a browser earns a clearance cookie, cheaper requests can reuse it — and a request should only count as success when it returns the real page, not a challenge.&lt;/li&gt;
&lt;li&gt;None of this is 100%. It's probabilistic, the hardest sites need residential or mobile IPs, and it applies to public data only.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The four layers of bot detection
&lt;/h2&gt;

&lt;p&gt;Anti-bot vendors don't rely on a single check. They score every request across several independent layers, and a request has to look human on all of them. Understanding the layers is the whole game, because each one rules out a different class of naive scraper.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;What it checks&lt;/th&gt;
&lt;th&gt;Why a normal scraper fails&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;IP reputation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Is the address residential/mobile (trusted) or datacenter (suspect)? Has it made too many requests?&lt;/td&gt;
&lt;td&gt;Scrapers run on cloud servers and datacenter proxies — ranges these vendors flag on sight&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TLS / HTTP fingerprint&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Does the TLS handshake and HTTP/2 frame order match a real browser (JA3/JA4, Akamai fingerprint)?&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;requests&lt;/code&gt;, &lt;code&gt;curl&lt;/code&gt;, and most HTTP libraries have a fingerprint nothing like Chrome's, no matter the headers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;JavaScript sensor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A script probes for &lt;code&gt;navigator.webdriver&lt;/code&gt;, headless tells, missing APIs, canvas/WebGL/font quirks&lt;/td&gt;
&lt;td&gt;Headless automation leaks dozens of signals; an HTTP client runs no JavaScript at all, so the sensor never reports back&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Behaviour&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Request cadence, mouse/scroll, navigation patterns, cookie continuity&lt;/td&gt;
&lt;td&gt;Scripts hit pages faster and more mechanically than a person, from a session with no history&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The reason "just set a realistic User-Agent" stopped working years ago is that the User-Agent is a single string in the &lt;em&gt;least&lt;/em&gt; important layer. You can claim to be Chrome 140 all you like; if your TLS handshake says Python and your IP says AWS, you've already failed two checks before the page even loads.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Why headless Chrome alone isn't enough&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Running Puppeteer or Playwright with stock headless Chrome fixes the JavaScript layer better than an HTTP client — it actually executes the sensor — but headless mode leaks its own tells (&lt;code&gt;navigator.webdriver&lt;/code&gt;, automation-controlled flags, subtle rendering differences), and it does nothing for the IP or TLS layers. That's why "use a real browser" and "use a good proxy" are both necessary and neither is sufficient on its own.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What the vendors actually do
&lt;/h2&gt;

&lt;p&gt;The big three behave differently enough that it's worth knowing which wall you're looking at.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare&lt;/strong&gt; issues a managed challenge and, on success, a &lt;code&gt;cf_clearance&lt;/code&gt; cookie that's bound to your IP and User-Agent. Pass the challenge and the cookie buys you a window of access — change IP and it's void.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DataDome&lt;/strong&gt; scores the request in real time and sets a &lt;code&gt;datadome&lt;/code&gt; cookie; it's aggressive about datacenter IPs and replays of a fingerprint across too many requests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PerimeterX / HUMAN&lt;/strong&gt; runs a JavaScript sensor that POSTs a signal payload and grants a &lt;code&gt;_px3&lt;/code&gt;-family clearance cookie. It's strongly IP-bound: a cookie minted on one IP, presented from another, reads as theft and gets blocked harder than no cookie at all.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The common thread: a &lt;em&gt;clearance&lt;/em&gt; — the cookie that says "this client passed" — is only earned by executing the challenge in a real browser, and it's tied to the IP that earned it. That single fact dictates the entire strategy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which wall, which fix
&lt;/h2&gt;

&lt;p&gt;Each vendor leaves a fingerprint of its own — a tell-tale cookie or block message — and yields to a different lever. This is the rough field guide:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Wall&lt;/th&gt;
&lt;th&gt;How you know it's there&lt;/th&gt;
&lt;th&gt;What gets through&lt;/th&gt;
&lt;th&gt;Difficulty&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cloudflare&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;cf_clearance&lt;/code&gt; / &lt;code&gt;__cf_bm&lt;/code&gt; cookies, a "Checking your browser…" interstitial&lt;/td&gt;
&lt;td&gt;A real browser that solves the managed challenge; then reuse &lt;code&gt;cf_clearance&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Low–medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DataDome&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;datadome&lt;/code&gt; cookie, a 403 with a DataDome CAPTCHA page&lt;/td&gt;
&lt;td&gt;Trusted IP + real fingerprint; rotate IPs — it punishes replay&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PerimeterX / HUMAN&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;_px*&lt;/code&gt; cookies, "Access to this page has been denied"&lt;/td&gt;
&lt;td&gt;A browser that runs the JS sensor; clearance is IP-bound, so race fresh IPs&lt;/td&gt;
&lt;td&gt;Medium–high&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Akamai Bot Manager&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;_abck&lt;/code&gt; / &lt;code&gt;bm_sz&lt;/code&gt; / &lt;code&gt;ak_bmsc&lt;/code&gt; cookies&lt;/td&gt;
&lt;td&gt;Real TLS fingerprint + browser; the &lt;code&gt;_abck&lt;/code&gt; cookie must validate or you're shadow-blocked&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Kasada&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;x-kpsdk-*&lt;/code&gt; headers, a &lt;code&gt;kpsdk&lt;/code&gt; sensor script&lt;/td&gt;
&lt;td&gt;Full browser execution of the sensor; among the hardest to pass headlessly&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The pattern repeats: every one of them ultimately wants to see a real browser, from an IP it trusts, behaving like a person. The walls differ mostly in how strict each of those three checks is.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to get through reliably
&lt;/h2&gt;

&lt;p&gt;The mistake most scrapers make is doing one thing — a stealth browser, &lt;em&gt;or&lt;/em&gt; a residential proxy — for every request. That's slow and expensive on easy pages and still fragile on hard ones. The reliable pattern is &lt;strong&gt;escalation&lt;/strong&gt;: start cheap, and climb only as far as a specific site forces you to.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Chrome-impersonated HTTP.&lt;/strong&gt; A plain request, but with a TLS and HTTP/2 fingerprint that matches real Chrome. This alone clears the fingerprint layer and is enough for a surprising number of "protected" sites — at a fraction of the cost of a browser.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A real stealth browser.&lt;/strong&gt; When the page needs JavaScript executed — a Cloudflare or PerimeterX challenge — hand it to a fleet of hardened browser engines with patched automation tells and genuine fingerprints. Different engines beat different vendors, so racing or rotating across a fleet matters more than betting on one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A fresh IP.&lt;/strong&gt; Anti-bot is IP-reputation-first, so when the current exit is flagged, the highest-yield move is simply a &lt;em&gt;different&lt;/em&gt; address. Firing several requests through a rotating pool at once — and taking the first that comes back with the real page — turns a coin-flip into a near-certainty, because one fresh IP usually passes while others are blocked.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Not all addresses are equal, though, and this is where cost enters. IPs come in tiers of reputation, and the more trusted the tier, the more it costs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Datacenter IPs&lt;/strong&gt; are cheap and plentiful, but the most flagged — whole ranges are known to belong to clouds and hosting providers, so vendors distrust them by default.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Residential IPs&lt;/strong&gt; are real home-broadband addresses sourced through proxy networks. They look like ordinary visitors, carry far more trust, and cost meaningfully more.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mobile IPs&lt;/strong&gt; are carrier-NAT'd 4G/5G addresses — the most trusted of all, because thousands of real phones share one address, so blocking it risks blocking real customers. They're also the most expensive, usually billed by the gigabyte of traffic rather than per address.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The reflex on a hard wall is to reach straight for the priciest IPs. The cheaper play is the one this whole section is about: lean on the &lt;em&gt;stack&lt;/em&gt; — escalate to a real browser, race several &lt;strong&gt;datacenter&lt;/strong&gt; IPs at once, and reuse a clearance once you earn it — so you get through on low-cost addresses as often as possible, and only fall back to residential or mobile for the targets that genuinely demand them. You pay for reputation exactly when the page forces you to, and not a request sooner.&lt;/p&gt;

&lt;p&gt;Two refinements make this fast as well as reliable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reuse the clearance.&lt;/strong&gt; When a browser earns a &lt;code&gt;cf_clearance&lt;/code&gt; or DataDome cookie, cache it per-domain for its short lifetime and attach it to later requests from the same IP. A cheap engine can then ride a clearance an expensive one paid for — higher success, lower cost.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Only count a real page as success.&lt;/strong&gt; A challenge page, a "checking your browser" shell, and a 403 all return a &lt;code&gt;200&lt;/code&gt; with bytes in the body. A scraper that treats those as success hands you garbage and learns nothing. Detecting the difference — and escalating instead of returning the shell — is what separates a number that looks good from data you can use.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The honest part: it's probabilistic, and IPs are the ceiling&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No one beats every wall every time, and anyone claiming 100% is selling something. The technique raises the floor; the ceiling is your egress. Datacenter IPs — even rotated — get you through soft and medium protection. The hardest, IP-strict targets (some PerimeterX and DataDome deployments) only stay reliable from &lt;strong&gt;residential or mobile&lt;/strong&gt; addresses. Honest success-based pricing matters here too: you should pay for the request that actually returned the page, not for every blocked attempt along the way.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  A worked example: a PerimeterX-protected page
&lt;/h2&gt;

&lt;p&gt;Here's how the pieces compose on a real, stubborn target — a news site behind PerimeterX, where a datacenter exit IP had been used enough that the wall had already flagged it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One engine, one flagged IP:&lt;/strong&gt; asking a single stealth browser to fetch the page from that burned IP succeeded only about &lt;strong&gt;1 in 6&lt;/strong&gt; times. The engine was capable; the IP was the bottleneck.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Race fresh IPs:&lt;/strong&gt; firing four requests for the same page concurrently, each through a different exit IP, and taking the first that returned the real article, lifted success to &lt;strong&gt;5 in 6&lt;/strong&gt; — and it was &lt;em&gt;faster&lt;/em&gt;, because the winner usually came back in a few seconds while the blocked attempts were abandoned.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reuse the clearance:&lt;/strong&gt; once one browser earned PerimeterX's clearance cookie, even a lightweight engine that &lt;em&gt;never&lt;/em&gt; beats the wall on its own rode that cached cookie straight to the full page. The expensive request paid for the clearance; the cheap ones cashed it in.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No single one of these is a silver bullet. The result comes from stacking them — escalate to a browser, race fresh IPs, reuse what works — and from refusing to count a challenge page as a win. That last point is easy to get wrong: the naive version returns a &lt;code&gt;200&lt;/code&gt; full of nothing and reports a great success rate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build it yourself, or buy it?
&lt;/h2&gt;

&lt;p&gt;You can assemble all of this yourself, and for a single target it's a reasonable weekend project: a stealth-patched browser, a proxy, a cookie cache. The cost shows up later, as a treadmill.&lt;/p&gt;

&lt;p&gt;Building it means owning a fleet of patched browser engines (the patches go stale every Chrome release), a residential or mobile proxy budget (the line item that actually sets your ceiling), the escalation logic that picks the cheapest method per site, success detection that isn't fooled by challenge pages, and a standing commitment to re-fix all of it every time a vendor ships a detection update — which is &lt;em&gt;their&lt;/em&gt; full-time job and, for you, a side-quest that keeps interrupting the real one.&lt;/p&gt;

&lt;p&gt;Buying it — a managed scraping API — trades that treadmill for a per-request price. The honest comparison isn't "API credits versus free code"; it's "API credits versus a proxy bill plus the engineering weeks you'll spend maintaining detection bypasses instead of shipping your product." For one or two easy sites, DIY wins. For a moving list of protected targets you need to keep reliable, the maintenance &lt;em&gt;is&lt;/em&gt; the product — and that's the part worth outsourcing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Crawlora fits
&lt;/h2&gt;

&lt;p&gt;This is exactly the model Crawlora's &lt;a href="https://crawlora.net/web-scraping-api?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Web Scraping API&lt;/a&gt; is built on. A single &lt;code&gt;/web/scrape&lt;/code&gt; call escalates on its own — Chrome-impersonated HTTP, then a fleet of stealth browser engines, then fresh IPs raced concurrently — captures and reuses clearance cookies per domain, and only returns a page once it's confirmed to be real content rather than a challenge. You get clean Markdown (or HTML, links, and metadata) back, and you're billed for what succeeds.&lt;/p&gt;

&lt;p&gt;A request is one call — ask for the formats you want and let it escalate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"https://api.crawlora.net/api/v1/web/scrape"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"x-api-key: YOUR_API_KEY"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "url": "https://example.com/product/123",
    "formats": ["markdown", "links", "metadata"],
    "render": "auto"
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;render: "auto"&lt;/code&gt; is the escalation switch: it starts with Chrome-impersonated HTTP and climbs to the stealth-browser fleet (and fresh IPs) only if the page demands it, so you don't pay browser prices for pages that don't need a browser. The same call from Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.crawlora.net/api/v1/web/scrape&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;x-api-key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com/product/123&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;formats&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;markdown&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;links&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;metadata&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;render&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;auto&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# escalate HTTP -&amp;gt; stealth browser -&amp;gt; fresh IP as needed
&lt;/span&gt;    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;markdown&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;            &lt;span class="c1"&gt;# clean article text, not raw HTML
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;metadata&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;   &lt;span class="c1"&gt;# parsed page metadata
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you just want to know what you're up against before you write a line of code, run a URL through the free &lt;a href="https://crawlora.net/tools/can-i-scrape-this-site?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;can-I-scrape-this-site checker&lt;/a&gt;: it reports which protection a site uses and how hard it'll be to collect.&lt;/p&gt;

&lt;p&gt;A closing note on scope: everything here is for &lt;strong&gt;public&lt;/strong&gt; pages. Bot detection is not a login, and getting past one isn't the same as breaking into private data — but the responsible line is still public data only, with each site's terms and robots directives respected, and personal or copyrighted content left alone. For the legal landscape, see &lt;a href="https://crawlora.net/blog/is-web-scraping-legal-2026?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;is web scraping legal in 2026&lt;/a&gt;; for the related question of gated articles, see &lt;a href="https://crawlora.net/blog/how-paywalls-work?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;how paywalls actually work&lt;/a&gt;. Cloudflare's own AI-crawler policy is evolving on top of this same detection stack — see &lt;a href="https://crawlora.net/blog/cloudflare-ai-crawler-block-2026?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Cloudflare's new AI-crawler defaults for 2026&lt;/a&gt; for what changed and what it means for legitimate scrapers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sources&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/bots/" rel="noopener noreferrer"&gt;Cloudflare — Bot management &amp;amp; managed challenges&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://datadome.co/products/bot-protection/" rel="noopener noreferrer"&gt;DataDome — How bot protection works&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.humansecurity.com/products/bot-defender/" rel="noopener noreferrer"&gt;HUMAN (PerimeterX) — Bot defender&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/TLS_fingerprint" rel="noopener noreferrer"&gt;Wikipedia — TLS fingerprinting (JA3/JA4)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://crawlora.net/tools/can-i-scrape-this-site?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Crawlora — Can I scrape this site? (free checker)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://crawlora.net/web-scraping-api?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Crawlora — Web Scraping API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://crawlora.net/blog/is-web-scraping-legal-2026?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Crawlora — Is web scraping legal in 2026?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How do websites detect and block scrapers?
&lt;/h3&gt;

&lt;p&gt;Modern anti-bot systems check four layers at once: the IP's reputation (datacenter ranges are flagged, residential and mobile are trusted), the TLS and HTTP/2 fingerprint (a real Chrome handshake looks different from a Python or curl one), a JavaScript sensor that probes the browser for automation tells (headless flags, missing APIs, canvas/WebGL quirks), and behaviour over time. Failing any layer earns a CAPTCHA or a block page, so a scraper that only spoofs the User-Agent gets stopped immediately.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why does my scraper get blocked by Cloudflare or DataDome?
&lt;/h3&gt;

&lt;p&gt;Almost always the IP and the fingerprint. Requests from a cloud server (AWS, GCP, a datacenter proxy) sit in ranges these vendors treat as suspicious, and a non-browser HTTP client has a TLS/JS fingerprint that doesn't match a real Chrome. Cloudflare, DataDome and PerimeterX combine those signals — so the fix isn't a better User-Agent string, it's a real browser fingerprint coming from a trusted IP.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can you scrape a site protected by Cloudflare, DataDome or PerimeterX?
&lt;/h3&gt;

&lt;p&gt;Often, yes, for public pages — but it's probabilistic, not guaranteed. The reliable approach escalates only as far as a site demands: a Chrome-impersonated HTTP request first, then a real stealth browser that executes the challenge, then a fresh IP if the current one is flagged. Once a browser earns a clearance cookie, cheaper requests can reuse it. The hardest, IP-strict sites need residential or mobile egress to stay reliable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is it legal to scrape sites that block bots?
&lt;/h3&gt;

&lt;p&gt;Scraping publicly accessible pages is broadly defensible, and a bot-detection wall is not itself an access control on private data the way a login is. But the law turns on what you collect and how you use it — respect each site's terms and robots directives, avoid personal data and copyrighted content at scale, and never use this to get past a login or a paywall. This is not legal advice.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://crawlora.net/blog/scraping-sites-that-block-bots?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;crawlora.net&lt;/a&gt;. &lt;a href="https://crawlora.net/tools/can-i-scrape-this-site?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Can I Scrape This Site?&lt;/a&gt; is Crawlora's free anti-bot checker — see exactly which defenses a target site runs before you build around them.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Best Web Search APIs for AI Agents in 2026</title>
      <dc:creator>Tony Wang</dc:creator>
      <pubDate>Fri, 31 Jul 2026 01:00:00 +0000</pubDate>
      <link>https://dev.to/tonywangca/best-web-search-apis-for-ai-agents-in-2026-42jf</link>
      <guid>https://dev.to/tonywangca/best-web-search-apis-for-ai-agents-in-2026-42jf</guid>
      <description>&lt;p&gt;&lt;strong&gt;Key takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;There are two kinds of 'web search API', and conflating them is the #1 mistake: LLM-ready APIs (Tavily, Exa, Perplexity Sonar, Linkup, Jina) return cleaned content or a synthesized answer; raw SERP APIs (Serper, SerpApi, Brave, Crawlora) return parsed search results you process yourself.&lt;/li&gt;
&lt;li&gt;Pick by output and by job: an answer engine for finished cited answers, an LLM-ready search API for RAG context, the cheapest raw SERP for high-volume Google lookups, and a multi-engine/structured API when you also need Bing, Brave, or non-search platform data.&lt;/li&gt;
&lt;li&gt;2026 reshaped the market: Microsoft retired the Bing Search API (the Azure replacement lists at ~$35/1k) and Tavily was acquired by Nebius — so 'what do I migrate to' is a live question.&lt;/li&gt;
&lt;li&gt;Benchmark on cost per successful call for YOUR queries, not the headline price: raw SERP runs ~$0.30–$1/1k (Serper), LLM-ready search ~$5–8/1k, and answer/deep tiers higher.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are wiring web search into an AI agent or a &lt;a href="https://crawlora.net/use-cases/web-data-for-rag?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;RAG pipeline&lt;/a&gt;, the hard part is not finding an API — it is picking the &lt;em&gt;right kind&lt;/em&gt;. Some APIs hand your model a finished, cited answer. Some return cleaned, LLM-ready content. Others return the raw search results an engine actually shows, and leave the reading to you. They are priced differently, they fail differently, and the wrong choice shows up as either a bloated token bill or an agent reasoning over 200-character snippets. This guide splits the field into two categories, ranks the main options with real 2026 pricing, and shows how to choose by job.&lt;/p&gt;

&lt;h2&gt;
  
  
  "Web search API" is two categories, not one
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;LLM-ready APIs&lt;/strong&gt; — they &lt;em&gt;search, fetch, clean, and (optionally) synthesize&lt;/em&gt;. You get cleaned page content (often markdown) and/or a model-written answer with citations, ready to drop into a prompt. Best when the agent needs to &lt;em&gt;read and reason&lt;/em&gt;. Examples: Tavily, Exa, Perplexity Sonar, Linkup, Jina, Brave Answers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Raw SERP APIs&lt;/strong&gt; — they return the parsed search results page (organic links, snippets, knowledge graph, verticals) as JSON. No extraction, no answer; you add those. Best when you need the &lt;em&gt;actual ranking&lt;/em&gt;, multiple engines, or the cheapest high-volume lookups. Examples: Serper, SerpApi, Brave Search, and &lt;a href="https://crawlora.net/platforms/google-search?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Crawlora&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most production stacks use both: a raw SERP or structured API for the ranked results and known platforms they hit constantly, and an LLM-ready layer (or their own extractor) for the open-web pages an agent has to read.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to evaluate
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Output you actually need — a cited answer, LLM-ready content, or raw ranked results.&lt;/li&gt;
&lt;li&gt;Engine coverage — Google only, or Google plus Bing and Brave for source diversity and resilience.&lt;/li&gt;
&lt;li&gt;Freshness and filters — recency windows and domain include/exclude are table stakes for RAG.&lt;/li&gt;
&lt;li&gt;MCP support — a first-class MCP server matters if you are wiring tools into Claude, Cursor, or an agent runtime.&lt;/li&gt;
&lt;li&gt;Anti-bot reliability — extraction silently fails on protected sites; check it on YOUR targets.&lt;/li&gt;
&lt;li&gt;Cost per successful call — raw SERP, LLM-ready search, and answer tiers differ by ~10–50x.&lt;/li&gt;
&lt;li&gt;Free tier shape — one-time credits vs a recurring monthly allowance.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why 2026 is a migration year
&lt;/h2&gt;

&lt;p&gt;Two events pushed a wave of teams to re-pick their search layer. First, Microsoft &lt;strong&gt;retired the Bing Search API on August 11, 2025&lt;/strong&gt;; the official replacement, Grounding with Bing Search, returns LLM-grounded chunks (not raw results), requires an Azure AI Agent project, and lists at about &lt;strong&gt;$35 per 1,000 calls&lt;/strong&gt; — see &lt;a href="https://crawlora.net/blog/bing-search-api-alternatives?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Best Bing Search API Alternatives&lt;/a&gt;. Second, &lt;strong&gt;Tavily was acquired by Nebius&lt;/strong&gt;, prompting "Tavily alternatives" searches across developer communities. If you are choosing now, you are choosing in an unusually open market.&lt;/p&gt;

&lt;h2&gt;
  
  
  The best web search APIs for AI agents in 2026
&lt;/h2&gt;

&lt;p&gt;There is no single winner — the right pick depends on whether you want a cited answer, LLM-ready content, or raw ranked results. Here is the landscape at a glance, then a closer look at each. Prices are headline rates read in June 2026; always confirm on the vendor's pricing page.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;th&gt;MCP&lt;/th&gt;
&lt;th&gt;Free tier&lt;/th&gt;
&lt;th&gt;Approx price /1k&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tavily&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;LLM-ready&lt;/td&gt;
&lt;td&gt;Snippets + cleaned content + optional answer&lt;/td&gt;
&lt;td&gt;Official&lt;/td&gt;
&lt;td&gt;1,000 cr/mo&lt;/td&gt;
&lt;td&gt;~$4 basic / $8 advanced&lt;/td&gt;
&lt;td&gt;The default agent search layer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Exa&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;LLM-ready&lt;/td&gt;
&lt;td&gt;Neural results + full content + answer + find-similar&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;1,000 req/mo&lt;/td&gt;
&lt;td&gt;~$7 search (+$1 contents)&lt;/td&gt;
&lt;td&gt;Semantic discovery &amp;amp; research&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Perplexity Sonar&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Answer engine&lt;/td&gt;
&lt;td&gt;A cited, model-written answer&lt;/td&gt;
&lt;td&gt;Community&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;~$5–12 + tokens&lt;/td&gt;
&lt;td&gt;One-call cited answers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Linkup&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;LLM-ready&lt;/td&gt;
&lt;td&gt;Results / sourced answer / structured&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;$20/mo credit&lt;/td&gt;
&lt;td&gt;~$5 ($6 answer)&lt;/td&gt;
&lt;td&gt;Cost-sensitive EU RAG&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Jina&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;LLM-ready&lt;/td&gt;
&lt;td&gt;URL→markdown + search with content&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;10M tokens&lt;/td&gt;
&lt;td&gt;token-priced&lt;/td&gt;
&lt;td&gt;Cheap URL→markdown grounding&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Brave Search&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Raw SERP (+Answers)&lt;/td&gt;
&lt;td&gt;Independent-index results; optional answer&lt;/td&gt;
&lt;td&gt;Community&lt;/td&gt;
&lt;td&gt;$5 credit/mo&lt;/td&gt;
&lt;td&gt;~$5 / $4 answer&lt;/td&gt;
&lt;td&gt;A non-Google, non-Bing index&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Serper&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Raw SERP&lt;/td&gt;
&lt;td&gt;Parsed Google SERP JSON (10 verticals)&lt;/td&gt;
&lt;td&gt;Community&lt;/td&gt;
&lt;td&gt;2,500 cr once&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0.30–$1.00&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cheapest high-volume Google SERP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SerpApi&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Raw SERP&lt;/td&gt;
&lt;td&gt;Multi-engine SERP JSON + AI-overview parsing&lt;/td&gt;
&lt;td&gt;Listed&lt;/td&gt;
&lt;td&gt;250/mo&lt;/td&gt;
&lt;td&gt;~$9–25&lt;/td&gt;
&lt;td&gt;Deep SERP features across engines&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Crawlora&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Raw SERP + structured platforms&lt;/td&gt;
&lt;td&gt;Normalized Google/Bing/Brave SERP JSON + platform data&lt;/td&gt;
&lt;td&gt;Hosted&lt;/td&gt;
&lt;td&gt;2,000 cr/mo&lt;/td&gt;
&lt;td&gt;Credit-based, on success&lt;/td&gt;
&lt;td&gt;Multi-engine SERP + structured data + MCP&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Tavily — the default agent search layer
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://crawlora.net/compare/tavily?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Tavily&lt;/a&gt; is purpose-built for agents and RAG: it returns ranked results with cleaned content and an optional synthesized &lt;code&gt;answer&lt;/code&gt; with citations, plus extract, crawl, and map endpoints, an official MCP server, and native LangChain support. &lt;strong&gt;Choose it&lt;/strong&gt; when you want a no-fuss, LLM-ready search layer. It is less suited to exact rank tracking, where you need literal organic positions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Exa — semantic discovery and research
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://crawlora.net/compare/exa?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Exa&lt;/a&gt; is an embeddings-based search engine: it ranks by &lt;em&gt;meaning&lt;/em&gt;, and its find-similar endpoint takes a URL and returns related pages. It also returns full page contents and answers and offers bulk enrichment (Websets). &lt;strong&gt;Choose it&lt;/strong&gt; for concept-heavy retrieval and discovery; it is the wrong tool when you need the literal SERP a user sees.&lt;/p&gt;

&lt;h3&gt;
  
  
  Perplexity Sonar — one-call cited answers
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://crawlora.net/compare/perplexity-sonar?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Perplexity Sonar&lt;/a&gt; is an &lt;em&gt;answer engine&lt;/em&gt;, not a results API: it returns a model-written answer grounded in live web search, with citations, across sonar / sonar-pro / sonar-deep-research tiers. &lt;strong&gt;Choose it&lt;/strong&gt; when you want the answer step handled for you and minimal retrieval plumbing; skip it when you need raw results to process yourself.&lt;/p&gt;

&lt;h3&gt;
  
  
  Linkup — production RAG on a budget
&lt;/h3&gt;

&lt;p&gt;Linkup returns raw &lt;code&gt;searchResults&lt;/code&gt;, a &lt;code&gt;sourcedAnswer&lt;/code&gt;, or &lt;code&gt;structured&lt;/code&gt; output, ships an MCP server, and is priced around $5/1k with a recurring monthly credit. It is a strong, cost-sensitive, EU-friendly option for RAG.&lt;/p&gt;

&lt;h3&gt;
  
  
  Jina — cheap URL→markdown grounding
&lt;/h3&gt;

&lt;p&gt;Jina's Reader turns any URL into clean markdown and its Search returns results with full content; it ships an MCP server and a generous free token allowance. Pricing is token-based, so it does not compare cleanly on a per-1k-search basis, but it is among the cheapest ways to get LLM-ready content.&lt;/p&gt;

&lt;h3&gt;
  
  
  Brave Search API — an independent index
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://crawlora.net/platforms/brave?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Brave Search API&lt;/a&gt; is built on Brave's own crawl — genuinely independent of Google and Bing. It returns results optimized for LLM context and offers an Answers endpoint. &lt;strong&gt;Choose it&lt;/strong&gt; for source diversity or a privacy-first posture; note the old free tier was replaced by a metered $5 monthly credit.&lt;/p&gt;

&lt;h3&gt;
  
  
  Serper — cheapest high-volume Google SERP
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://crawlora.net/compare/serper?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Serper&lt;/a&gt; is a thin, fast Google SERP wrapper that returns parsed JSON across web, news, images, maps, places, shopping, and scholar — at roughly &lt;strong&gt;$0.30–$1.00 per 1,000&lt;/strong&gt;, the cheapest raw Google SERP in this list. There is no content extraction or answer; you add those. &lt;strong&gt;Choose it&lt;/strong&gt; for high-volume, Google-only lookups where price per query is the priority.&lt;/p&gt;

&lt;h3&gt;
  
  
  SerpApi — deep SERP features across engines
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://crawlora.net/compare/serpapi?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;SerpApi&lt;/a&gt; parses SERPs across 25+ engines with rich features (ads, knowledge panels, AI overviews) and a Legal Shield. It is the mature specialist when SERP-feature depth across engines is the requirement; it is pricier (~$9–25/1k) and, like all single-engine resellers, carries SERP-supply-chain risk — see &lt;a href="https://crawlora.net/blog/serpapi-alternatives?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;SerpApi alternatives&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Crawlora — multi-engine SERP plus structured platform data
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://crawlora.net/platforms/google-search?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Crawlora&lt;/a&gt; returns &lt;strong&gt;Google, Bing, and Brave&lt;/strong&gt; results in one normalized shape — position-accurate JSON for rank tracking — alongside structured endpoints for maps, social, video, marketplaces, app stores, reviews, and finance, all behind one API key with managed proxies, retries, and a &lt;a href="https://crawlora.net/blog/ai-agent-web-data-mcp?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;hosted MCP server&lt;/a&gt;. To be clear about the category: Crawlora returns &lt;strong&gt;raw, normalized search and platform JSON, not LLM-ready snippets or a synthesized answer&lt;/strong&gt; — pair it with your own extraction/LLM step (or one of the LLM-ready APIs above) when an agent needs to read cleaned content. &lt;strong&gt;Choose it&lt;/strong&gt; when you need more than one engine, structured platform data beyond search, and MCP-native tools in one place.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to choose, by job
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You want a finished, cited answer →&lt;/strong&gt; Perplexity Sonar (or Tavily/Linkup's answer mode).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You are feeding a RAG pipeline and want LLM-ready content →&lt;/strong&gt; Tavily or Linkup; Jina for cheap URL→markdown.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You want semantic discovery / find-similar →&lt;/strong&gt; Exa.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You need the cheapest high-volume Google SERP →&lt;/strong&gt; Serper.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You need deep SERP features across many engines →&lt;/strong&gt; SerpApi (mind the supply-chain risk).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You want a non-Google, non-Bing index →&lt;/strong&gt; Brave Search.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You need multiple engines, structured platform data, and rank tracking under one API + MCP →&lt;/strong&gt; &lt;a href="https://crawlora.net/use-cases/ai-agent-web-data?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Crawlora&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You are replacing the retired Bing Search API →&lt;/strong&gt; start with &lt;a href="https://crawlora.net/blog/bing-search-api-alternatives?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;the migration guide&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Scrape and search public data responsibly&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A web search API returns public results, but "public" is not blanket permission. Respect rate limits, robots and terms, and handle anything that could be personal data lawfully. See &lt;a href="https://crawlora.net/blog/is-web-scraping-legal-2026?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Is web scraping legal in 2026?&lt;/a&gt; for the longer version.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Sources&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.tavily.com/" rel="noopener noreferrer"&gt;Tavily — documentation and pricing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://exa.ai/pricing" rel="noopener noreferrer"&gt;Exa — pricing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.perplexity.ai/getting-started/pricing" rel="noopener noreferrer"&gt;Perplexity — Sonar API pricing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://serper.dev/#pricing" rel="noopener noreferrer"&gt;Serper — pricing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://brave.com/search/api/" rel="noopener noreferrer"&gt;Brave Search API — pricing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://serpapi.com/pricing" rel="noopener noreferrer"&gt;SerpApi — pricing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/lifecycle/announcements/bing-search-api-retirement" rel="noopener noreferrer"&gt;Microsoft Learn — Bing Search APIs retiring on August 11, 2025&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Related reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://crawlora.net/compare/tavily?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Crawlora vs Tavily&lt;/a&gt; — LLM-ready snippets and answers vs normalized SERP JSON.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://crawlora.net/compare/exa?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Crawlora vs Exa&lt;/a&gt; — neural, embeddings-based search vs keyword SERP.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://crawlora.net/compare/perplexity-sonar?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Crawlora vs Perplexity Sonar&lt;/a&gt; — an answer engine vs a structured data API.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://crawlora.net/compare/serper?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Crawlora vs Serper&lt;/a&gt; — multi-engine structured data vs the cheapest Google SERP.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://crawlora.net/blog/bing-search-api-alternatives?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Best Bing Search API Alternatives in 2026&lt;/a&gt; — what to migrate to after the retirement.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://crawlora.net/blog/best-serp-api?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Best SERP APIs in 2026&lt;/a&gt; — where a search endpoint fits among SERP-focused APIs.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://crawlora.net/blog/web-scraping-with-ai?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Web scraping with AI — how agents get web data&lt;/a&gt; — the fetch-and-extract side of the same problem, once search hands you a URL.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://crawlora.net/blog/ai-agent-web-data-mcp?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Give your AI agent live web data with MCP&lt;/a&gt; — wiring these APIs into an agent as callable tools.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is the best web search API for AI agents?
&lt;/h3&gt;

&lt;p&gt;It depends on the output you need. For a finished cited answer, use an answer engine like Perplexity Sonar; for LLM-ready content in a RAG pipeline, Tavily, Exa, or Linkup; for the cheapest high-volume Google SERP, Serper; and for multiple engines plus structured platform data and MCP under one API, Crawlora.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the difference between a web search API and a raw SERP API?
&lt;/h3&gt;

&lt;p&gt;An LLM-ready web search API returns cleaned content or a synthesized answer your model can read directly. A raw SERP API returns the parsed search results page (links, snippets, knowledge graph) as JSON, and you handle extraction and reasoning yourself. Many stacks use both.&lt;/p&gt;

&lt;h3&gt;
  
  
  What replaced the Bing Search API for AI agents?
&lt;/h3&gt;

&lt;p&gt;Microsoft retired the Bing Search API on August 11, 2025. The official path, Grounding with Bing Search, returns LLM-grounded chunks inside Azure at about $35 per 1,000 calls. For a drop-in JSON replacement, teams move to Crawlora, Brave, SerpApi, or an LLM-ready API like Tavily or Exa.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which web search API is cheapest?
&lt;/h3&gt;

&lt;p&gt;For raw Google SERP, Serper is among the cheapest at roughly $0.30-$1.00 per 1,000 by volume. LLM-ready search (Tavily, Exa, Linkup, Brave) clusters around $5-8 per 1,000, and answer or deep-research tiers cost more. Compare on cost per successful call for your queries.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which web search APIs ship an MCP server?
&lt;/h3&gt;

&lt;p&gt;Tavily, Exa, Linkup, Jina, and Crawlora ship MCP servers; Serper, SerpApi, and Brave have community MCP wrappers. MCP support matters if you are wiring search into Claude, Cursor, or an agent runtime.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which is best for a RAG pipeline?
&lt;/h3&gt;

&lt;p&gt;For LLM-ready content, Tavily or Linkup; for semantic discovery, Exa; for a one-call cited answer, Perplexity Sonar; and for structured, multi-engine results you control, Crawlora paired with your own extraction or LLM step.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://crawlora.net/blog/best-web-search-apis-for-ai-agents-2026?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;crawlora.net&lt;/a&gt;. &lt;a href="https://crawlora.net/platforms/google-search?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=blog_syndication" rel="noopener noreferrer"&gt;Google Search API&lt;/a&gt; returns structured JSON search results for AI agents and RAG pipelines — no scraping infrastructure to maintain.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>tutorial</category>
      <category>seo</category>
    </item>
  </channel>
</rss>
