<?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: Faceless Satine</title>
    <description>The latest articles on DEV Community by Faceless Satine (@faceless_satine_148164446).</description>
    <link>https://dev.to/faceless_satine_148164446</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%2F4013699%2Fccc65736-f6d9-4cad-93d2-04bd4b6d8fe3.png</url>
      <title>DEV Community: Faceless Satine</title>
      <link>https://dev.to/faceless_satine_148164446</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/faceless_satine_148164446"/>
    <language>en</language>
    <item>
      <title>I measured whether datacenter IPs are actually blocked. Only 4% of the top 1,000 sites refuse them.</title>
      <dc:creator>Faceless Satine</dc:creator>
      <pubDate>Sat, 12 Sep 2026 07:06:50 +0000</pubDate>
      <link>https://dev.to/faceless_satine_148164446/i-measured-whether-datacenter-ips-are-actually-blocked-only-4-of-the-top-1000-sites-refuse-them-fk8</link>
      <guid>https://dev.to/faceless_satine_148164446/i-measured-whether-datacenter-ips-are-actually-blocked-only-4-of-the-top-1000-sites-refuse-them-fk8</guid>
      <description>&lt;p&gt;"Datacenter proxies are dead" is repeated constantly in scraping circles and I have never seen a number attached to it. So I built one.&lt;/p&gt;

&lt;p&gt;Every day, a job takes the Tranco top 1,000 and asks each host for its homepage &lt;strong&gt;twice at the same moment&lt;/strong&gt; — once from a datacenter IP, once through a residential exit. It publishes only the cases where the two answers disagree.&lt;/p&gt;

&lt;h2&gt;
  
  
  The list is not what it says it is
&lt;/h2&gt;

&lt;p&gt;The first finding had nothing to do with blocking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;228 of the top 1,000 names have no address at their apex at all.&lt;/strong&gt; &lt;code&gt;akamai.net&lt;/code&gt; is rank 8. &lt;code&gt;gtld-servers.net&lt;/code&gt; is 27. &lt;code&gt;apple-dns.net&lt;/code&gt; is 33. Tranco ranks by DNS query volume, so nameserver and CDN domains — which answer billions of lookups and serve a homepage to nobody — sit near the top of a list everybody uses as "the top websites."&lt;/p&gt;

&lt;p&gt;That is roughly a quarter of the sample. If you have ever drawn a crawl target list from Tranco, you were partly crawling infrastructure.&lt;/p&gt;

&lt;p&gt;For this measurement it is load-bearing rather than trivia. A name with no address of its own &lt;strong&gt;still gets an answer&lt;/strong&gt; from a residential exit whose resolver replies regardless — and that looks byte-for-byte like "the datacenter request was refused and the residential one succeeded." Before I resolved every name first, that alone had put 42 hosts on the published list that did not belong there.&lt;/p&gt;

&lt;p&gt;So the denominator is 772, not 1,000.&lt;/p&gt;

&lt;h2&gt;
  
  
  The number
&lt;/h2&gt;

&lt;p&gt;Of the 772 that serve a homepage, 698 gave a clean answer on both legs.&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;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Refused datacenter, served residential&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;31 (4%)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Refused residential, served datacenter&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;17&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blockers behind Cloudflare&lt;/td&gt;
&lt;td&gt;42% (13 of 31)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blockers announcing no CDN&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dialled, no clear answer&lt;/td&gt;
&lt;td&gt;74&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Four percent.&lt;/strong&gt; Twenty-four sites in twenty-five still answer a datacenter IP.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rank barely predicts it
&lt;/h2&gt;

&lt;p&gt;The folk belief is that the big sites are the hard ones.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Band&lt;/th&gt;
&lt;th&gt;Block rate&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Top 100&lt;/td&gt;
&lt;td&gt;4% (3 of 74)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;101–500&lt;/td&gt;
&lt;td&gt;3% (7 of 263)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;501–1,000&lt;/td&gt;
&lt;td&gt;6% (21 of 361)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Flat enough that the honest reading is that popularity does not predict whether a site cares where your request came from.&lt;/p&gt;

&lt;h2&gt;
  
  
  Residential is not strictly better
&lt;/h2&gt;

&lt;p&gt;17 sites did the reverse — served the datacenter request and refused the residential one. A residential-only setup loses those. It is a smaller number than the headline, but it kills the idea that one IP type dominates the other.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who actually blocks
&lt;/h2&gt;

&lt;p&gt;Refusing a datacenter IP and serving the identical request from a residential one, in the same second:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;openai.com&lt;/code&gt; (rank 85), &lt;code&gt;medium.com&lt;/code&gt;, &lt;code&gt;mit.edu&lt;/code&gt;, &lt;code&gt;patreon.com&lt;/code&gt;, &lt;code&gt;imgur.com&lt;/code&gt;, &lt;code&gt;meta.com&lt;/code&gt;, &lt;code&gt;espn.com&lt;/code&gt;, &lt;code&gt;tripadvisor.com&lt;/code&gt;, &lt;code&gt;character.ai&lt;/code&gt;, &lt;code&gt;investopedia.com&lt;/code&gt;, &lt;code&gt;ancestry.com&lt;/code&gt;, &lt;code&gt;att.com&lt;/code&gt;, &lt;code&gt;ikea.com&lt;/code&gt;, &lt;code&gt;tencent.com&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Method, and the two things that cost me the first version
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Ask twice, at the same moment.&lt;/strong&gt; A plain &lt;code&gt;GET /&lt;/code&gt; from a datacenter IP and the same request through a residential exit, following up to three redirects. Status and headers only — never the body.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resolve before dialling.&lt;/strong&gt; Covered above. This is the one that produced 42 false positives.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Confirm before counting.&lt;/strong&gt; Every refusal is re-asked before it counts: twice from the datacenter, where the IP never changes, and up to three times residentially, where every attempt draws a different exit. A pair that would be published gets measured again from a fresh exit. A difference that will not reproduce is not published.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Publish only the disagreement.&lt;/strong&gt; A host that refuses both legs is blocking the &lt;em&gt;request&lt;/em&gt;, not the IP. That is a measurement whose answer is "does not single out datacenter traffic" — not an exclusion.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limits, stated up front
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Homepages only. No logged-in pages, no search endpoints, no APIs.&lt;/li&gt;
&lt;li&gt;One datacenter provider and one residential pool. A different pair moves the number; the direction should hold.&lt;/li&gt;
&lt;li&gt;A snapshot per host, not a rate over time. A soft block that fires on the second request looks like a pass here.&lt;/li&gt;
&lt;li&gt;A bot wall that returns &lt;code&gt;200&lt;/code&gt; with a challenge body counts as served. &lt;strong&gt;So 4% is a floor, not a ceiling.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;The crawler identifies itself as &lt;code&gt;ProxmintBench/1.0&lt;/code&gt; rather than impersonating a browser. I checked what that costs: a browser user-agent with realistic Accept headers changed no status on either leg.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Take the data
&lt;/h2&gt;

&lt;p&gt;CC BY 4.0, JSON and CSV, no key, CORS open:&lt;/p&gt;

&lt;p&gt;curl '&lt;a href="https://proxmint.com/api/site-blocks" rel="noopener noreferrer"&gt;https://proxmint.com/api/site-blocks&lt;/a&gt;'&lt;br&gt;
curl '&lt;a href="https://proxmint.com/api/site-blocks?format=csv" rel="noopener noreferrer"&gt;https://proxmint.com/api/site-blocks?format=csv&lt;/a&gt;'&lt;br&gt;
curl '&lt;a href="https://proxmint.com/api/site-blocks?blocked=all" rel="noopener noreferrer"&gt;https://proxmint.com/api/site-blocks?blocked=all&lt;/a&gt;'&lt;/p&gt;

&lt;p&gt;Full table and daily-updated figures: &lt;a href="https://proxmint.com/free-proxies/blocked-sites" rel="noopener noreferrer"&gt;https://proxmint.com/free-proxies/blocked-sites&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disclosure:&lt;/strong&gt; I sell proxies. That is why the measurement exists, and it is why I would rather you checked it than believed it. The data is free either way, including to anyone writing something that concludes you do not need what I sell.&lt;/p&gt;




&lt;h2&gt;
  
  
  Update, 23 Sep 2026: what held up over 12 days
&lt;/h2&gt;

&lt;p&gt;The job has now run daily for 12 days (12–23 Sep). The datacenter-only block rate stayed between &lt;strong&gt;3.2% and 5.3%&lt;/strong&gt; (22 to 37 sites per run), so treat any single day's number as noisy and the band as the result.&lt;/p&gt;

&lt;p&gt;The per-site list above came from one run, and not all of it held up. &lt;strong&gt;17 sites refused the datacenter leg in all 12 runs&lt;/strong&gt;, including reddit.com, mit.edu, patreon.com, imgur.com, espn.com, genius.com, mediafire.com, teamviewer.com, wiley.com, doctolib.fr, kleinanzeigen.de and att.com. Some names above did not: openai.com showed up in 2 of 12 runs, medium.com in 1, meta.com in none, and character.ai, investopedia.com and ancestry.com in 3–4. Those are sites whose answer depends on which exit you draw, not reliable blockers.&lt;/p&gt;

&lt;p&gt;The reverse set (residential refused, datacenter served) ran 17 to 23 sites a day. Daily snapshots are mirrored to &lt;a href="https://github.com/proxmint/blocked-sites" rel="noopener noreferrer"&gt;https://github.com/proxmint/blocked-sites&lt;/a&gt; if you want to check the history yourself.&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>networking</category>
      <category>data</category>
      <category>opensource</category>
    </item>
    <item>
      <title>We tested 62,541 free proxies from GitHub. Only 4% actually work.</title>
      <dc:creator>Faceless Satine</dc:creator>
      <pubDate>Fri, 03 Jul 2026 13:36:55 +0000</pubDate>
      <link>https://dev.to/faceless_satine_148164446/we-tested-62541-free-proxies-from-github-only-4-actually-work-404n</link>
      <guid>https://dev.to/faceless_satine_148164446/we-tested-62541-free-proxies-from-github-only-4-actually-work-404n</guid>
      <description>&lt;p&gt;If you've ever grabbed a "free proxy list" off GitHub, you already know the feeling: you paste 10,000 IPs into your scraper, and approximately none of them connect. I wanted to know exactly &lt;em&gt;how&lt;/em&gt; bad it is, so I measured it.&lt;/p&gt;

&lt;p&gt;Short version: &lt;strong&gt;of 62,541 free proxies pulled from public lists, only 2,236 (4%) were alive.&lt;/strong&gt; And "alive" is generous — it just means the TCP handshake completed once.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I measured it
&lt;/h2&gt;

&lt;p&gt;I built a liveness checker that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ingests the big public free-proxy lists on GitHub (the monosans/proxy-list-style aggregators — HTTP, HTTPS, SOCKS4, SOCKS5).&lt;/li&gt;
&lt;li&gt;Dedupes and re-checks &lt;strong&gt;every&lt;/strong&gt; proxy through a controlled endpoint on a rolling &lt;strong&gt;5-minute&lt;/strong&gt; cycle.&lt;/li&gt;
&lt;li&gt;Records success/failure, latency, and protocol over a 7-day window.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No sampling — the full set, continuously. A proxy counts as "alive" onlest in the most recent check.&lt;/p&gt;

&lt;h2&gt;
  
  
  The results
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;4% alive.&lt;/strong&gt; 2,236 of 62,541. That's the number at any given moment; ttly.&lt;/p&gt;

&lt;p&gt;Alive-rate by protocol:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Protocol&lt;/th&gt;
&lt;th&gt;Live now&lt;/th&gt;
&lt;th&gt;Alive rate&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;HTTP&lt;/td&gt;
&lt;td&gt;1,474&lt;/td&gt;
&lt;td&gt;6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SOCKS5&lt;/td&gt;
&lt;td&gt;479&lt;/td&gt;
&lt;td&gt;2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SOCKS4&lt;/td&gt;
&lt;td&gt;247&lt;/td&gt;
&lt;td&gt;2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTTPS&lt;/td&gt;
&lt;td&gt;36&lt;/td&gt;
&lt;td&gt;10%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;HTTP dominates the live pool by raw count, but every protocol is brutal. HTTPS has the "best" alive-rate (10%) only because so few are listed to begin with.&lt;/p&gt;

&lt;p&gt;It gets worse when you look at stability:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Median latency of live proxies: ~2,900 ms.&lt;/strong&gt; Nearly 3 seconds per request — before your target server even responds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uptime across the live set: 44%.&lt;/strong&gt; A proxy that answers now has a con the next check. So the &lt;em&gt;usable&lt;/em&gt; pool at any instant is a fraction ofeven that 4%.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Put together: you might scrape a 60k list, find ~2k that ping, and be left with a few hundred that are actually usable for more than one request — each one adding ~3s of&lt;br&gt;
latency.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why free proxy lists are like this
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;They're recycled instantly.&lt;/strong&gt; The moment an open proxy is discoverered by everyone until it dies or gets firewalled.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No ownership = no maintenance.&lt;/strong&gt; Most are misconfigured servers or honeypots, not intentional services. Nobody keeps them up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Churn is the whole game.&lt;/strong&gt; By the time a list is committed to GitHud. Lists that "update daily" are mostly re-listing corpses.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The security part nobody mentions
&lt;/h2&gt;

&lt;p&gt;Free proxies aren't just unreliable — some are actively harvesting. An nd your target and sees everything not wrapped in TLS. Treat any traffic through a random free proxy as &lt;strong&gt;public&lt;/strong&gt;. Never send credentials or anything sensitive through one.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this is actually good for
&lt;/h2&gt;

&lt;p&gt;Free proxies do have a narrow, legit use: throwaway, low-stakes, high-tolerance-for-failure tasks where you can retry infinitely and don't care about latency or getting a&lt;br&gt;
clean IP. Building a hobby scraper to learn on? Fine. Anything you depeill eat you alive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Data + methodology
&lt;/h2&gt;

&lt;p&gt;Full breakdown — alive-rate by protocol, geography, latency distributiop — is published here and refreshed continuously:&lt;/p&gt;

&lt;p&gt;👉 **[Free Proxy Statistics report](&lt;a href="https://proxmint.com/free-proxies/statistics" rel="noopener noreferrer"&gt;https://proxmint.com/free-proxies/statistics&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I run &lt;a href="https://proxmint.com" rel="noopener noreferrer"&gt;Proxmint&lt;/a&gt;, a paid proxy servibuilding a free proxy-liveness tool, and the numbers were bleak-worthyenough to write up. The report page is free to read and cite — raw figures on request.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;What's your experience been with free proxy lists? Curious if anyone's seen a source with a meaningfully better hit-rate.&lt;/p&gt;

&lt;h1&gt;
  
  
  webscraping #proxy #opensource #data
&lt;/h1&gt;

</description>
      <category>networking</category>
      <category>showdev</category>
      <category>testing</category>
      <category>webscraping</category>
    </item>
  </channel>
</rss>
