<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[DataScrape Solutions]]></title><description><![CDATA[DataScrape Solutions builds custom web scrapers and data pipelines for businesses. On this blog we write about collecting, cleaning, and making sense of public ]]></description><link>https://datascrape.hashnode.dev</link><image><url>https://cdn.hashnode.com/uploads/logos/6abfcafa878b3933a3bc9690/7fefd152-1491-403e-b6aa-17e65e334d61.jpg</url><title>DataScrape Solutions</title><link>https://datascrape.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Sat, 31 Oct 2026 16:48:27 GMT</lastBuildDate><atom:link href="https://datascrape.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Which US Retailers Are Hardest to Scrape? We Tested the Top 14]]></title><description><![CDATA[We tested the 14 biggest US retailers four ways to find what actually blocks scrapers. The answer is three gates: IP reputation, TLS fingerprint, and…]]></description><link>https://datascrape.hashnode.dev/hardest-us-retailers-to-scrape</link><guid isPermaLink="true">https://datascrape.hashnode.dev/hardest-us-retailers-to-scrape</guid><category><![CDATA[web scraping]]></category><category><![CDATA[data-engineering]]></category><category><![CDATA[ecommerce]]></category><category><![CDATA[Python]]></category><category><![CDATA[Web Development]]></category><dc:creator><![CDATA[Mehul Jalondhara]]></dc:creator><pubDate>Fri, 30 Oct 2026 06:47:41 GMT</pubDate><content:encoded><![CDATA[<p>If you point a plain script at a retail site and it comes back with a 403, that tells you almost nothing. A default HTTP client gets blocked on easy sites too, because its TLS handshake, the fingerprint it presents before a single byte of the page loads, marks it as "not a browser" instantly. So "my scraper got blocked" is not a measure of how hard a site is. It is a measure of how obvious your scraper is.</p>
<p>To find out what actually makes a US retailer hard to scrape, you have to separate the things that get you blocked: your IP, your TLS fingerprint, and whether you run a real browser. So we tested the 14 biggest US retail sites four different ways and watched which gate each site really enforces. The results are not what the "big name means hard" assumption would tell you.</p>
<h2>How we tested it</h2>
<p>We ran each of the 14 sites through four setups, changing one variable at a time.</p>
<p>One, a plain scripted request from a clean residential connection. Two, the same scripted request but with a real Chrome TLS fingerprint, using curl_cffi, which impersonates a browser's handshake, still a script and not a browser. Three, a real browser running on a datacenter IP. Four, the same real browser on a residential IP.</p>
<p>For each site we read the response headers and cookies to identify the anti-bot vendor, Akamai Bot Manager, DataDome, PerimeterX, Cloudflare, Imperva, by the fingerprints they leave behind (cookies like <code>_abck</code> and <code>bm_sz</code> for Akamai, <code>datadome</code> for DataDome, <code>_px</code> for PerimeterX). And we checked the actual page content, not just the status code, so a long "please verify you are human" page does not get counted as a success. Comparing those four results isolates exactly which gate stops you at each site.</p>
<h2>What actually blocks you: three separate gates</h2>
<p>Across all 14 sites, the blocking came down to three independent gates. A site can enforce one, two, or all three, and you have to pass every one it uses.</p>
<p><strong>Gate one is IP reputation.</strong> The exact same real browser loaded Etsy, Wayfair, Chewy, Macy's and Kroger with no problem from a residential IP, and got blocked outright from a datacenter IP. Same browser, same everything, only the IP changed. Datacenter IPs are effectively dead for retail scraping, which is the entire reason residential proxies exist.</p>
<p><strong>Gate two is your TLS fingerprint.</strong> From the same residential IP, swapping a plain request for one with a real Chrome TLS handshake unlocked Home Depot, Nike and Macy's, no browser, no new proxies, just a handshake that looked like Chrome. The fingerprint was the only thing that had been giving the scraper away. This is the cheapest, highest-leverage fix most people miss.</p>
<p><strong>Gate three is browser execution.</strong> Etsy (DataDome) and Wayfair (PerimeterX) blocked even a script with a perfect Chrome TLS fingerprint on a clean residential IP. They run JavaScript challenges and behavioral checks that a script cannot answer. Only a real browser got through. So for those sites, a good IP and good TLS are necessary but not enough.</p>
<h2>The full results</h2>
<table>
<thead>
<tr>
<th>Site</th>
<th>Bot defense</th>
<th>Plain script</th>
<th>Chrome-TLS script</th>
<th>Browser (datacenter)</th>
<th>Browser (residential)</th>
</tr>
</thead>
<tbody><tr>
<td>Costco</td>
<td>None</td>
<td>Loads</td>
<td>Loads</td>
<td>Loads</td>
<td>Loads</td>
</tr>
<tr>
<td>Walmart</td>
<td>PerimeterX + Akamai</td>
<td>Loads</td>
<td>Loads</td>
<td>Loads</td>
<td>Loads</td>
</tr>
<tr>
<td>Target</td>
<td>PerimeterX</td>
<td>Loads</td>
<td>Loads</td>
<td>Loads</td>
<td>Loads</td>
</tr>
<tr>
<td>Lowe's</td>
<td>Akamai</td>
<td>Loads</td>
<td>Loads</td>
<td>Loads</td>
<td>Loads</td>
</tr>
<tr>
<td>Home Depot</td>
<td>Akamai + PerimeterX + Forter</td>
<td>Blocked</td>
<td>Loads</td>
<td>Loads</td>
<td>Loads</td>
</tr>
<tr>
<td>Nike</td>
<td>Akamai</td>
<td>Blocked</td>
<td>Loads</td>
<td>Loads</td>
<td>Loads</td>
</tr>
<tr>
<td>Macy's</td>
<td>Akamai</td>
<td>Blocked</td>
<td>Loads</td>
<td>Blocked</td>
<td>Loads</td>
</tr>
<tr>
<td>eBay</td>
<td>Akamai</td>
<td>Blocked</td>
<td>Blocked</td>
<td>Loads</td>
<td>Loads</td>
</tr>
<tr>
<td>Chewy</td>
<td>Akamai</td>
<td>Blocked</td>
<td>Blocked</td>
<td>Blocked</td>
<td>Loads</td>
</tr>
<tr>
<td>Kroger</td>
<td>Akamai</td>
<td>Blocked</td>
<td>Blocked</td>
<td>Blocked</td>
<td>Loads</td>
</tr>
<tr>
<td>Etsy</td>
<td>DataDome</td>
<td>Blocked</td>
<td>Blocked</td>
<td>Blocked</td>
<td>Loads</td>
</tr>
<tr>
<td>Wayfair</td>
<td>Cloudflare + PerimeterX</td>
<td>Blocked</td>
<td>Blocked</td>
<td>Blocked</td>
<td>Loads</td>
</tr>
<tr>
<td>Amazon</td>
<td>Akamai + CloudFront</td>
<td>Interstitial</td>
<td>Interstitial</td>
<td>Interstitial</td>
<td>Interstitial</td>
</tr>
<tr>
<td>Best Buy</td>
<td>Akamai</td>
<td>Blocked</td>
<td>Geo-gate</td>
<td>Geo-gate</td>
<td>Loads</td>
</tr>
</tbody></table>
<p><em>Both scripted tests ran from a residential IP. "Loads" means the real page came back; "Blocked" means a 403, 429, or challenge page; "Geo-gate" means a country-selection interstitial instead of the store.</em></p>
<h2>The three tiers of US retail</h2>
<p>Group the 14 sites by the hardest gate each one enforces, and a clear ranking appears.</p>
<p><strong>Easy</strong>, where a residential IP plus a browser-grade TLS fingerprint was enough and no headless browser was needed: Costco, Walmart, Target, Lowe's, Home Depot, Nike and Macy's all returned full, real pages to a simple script once it had a Chrome fingerprint. Costco was the softest of all, running essentially no bot management. The surprise is Home Depot, which stacks three vendors (Akamai, PerimeterX and Forter) and still folded to good TLS from a clean IP.</p>
<p><strong>Hard</strong>, where you need a real browser and a perfect-TLS script is not enough: eBay, Chewy, Kroger, Etsy and Wayfair. All five blocked the script but loaded in a real residential browser.</p>
<p><strong>Special cases:</strong> Amazon throws its own "continue shopping" interstitial at almost everything, including a real browser, so it is aggressive but inconsistent rather than a hard wall. Best Buy showed a country-selection interstitial to our script and datacenter tests, but loaded the full US store in a real browser on a residential connection, so its wall leans on the same signals as the rest rather than a hard geo-block.</p>
<p>One pattern across all of it: Akamai Bot Manager is the most common vendor, on 9 of the 14 sites, but on most of them it blocks only the obvious signals, a bad TLS fingerprint or a datacenter IP. The vendors that demanded a full browser even with good TLS were DataDome (Etsy) and PerimeterX (Wayfair), plus a few stricter Akamai setups (eBay, Chewy, Kroger).</p>
<h2>What this means if you are scraping retail</h2>
<p>The working setup for retail at scale is all three gates at once: a residential IP, a browser-grade TLS fingerprint, and a real headless browser for the strict sites. Drop any one and a chunk of retail goes dark. This is exactly why a cheap datacenter-proxy scraper comes back with blanks on half the sites, and why "it worked on my laptop" quietly breaks in production. Your laptop had a residential IP and a real browser. Your server has neither.</p>
<p>It also means the difficulty is not really about the retailer. It is about how many of the three gates you are equipped to pass. A cheap self-serve tool passes zero of them well. A serious setup passes all three, and keeps passing them as the sites escalate.</p>
<p>That last part, keeping it working as sites change, is the real job. If you would rather have clean retail price or catalog data without building and babysitting that stack, that is what we do at <a href="https://www.datascrapesolutions.com/">DataScrape Solutions</a> for clients. We handle the IP, the fingerprint, and the browser layer, maintain it as the retailers tighten their defenses, and hand over clean, validated data. You can <a href="https://www.datascrapesolutions.com/tools/free-sample">start with a free sample</a> of your exact targets so you see the data first.</p>
<h2>FAQ</h2>
<p><strong>What is the hardest US retail site to scrape?</strong>
In our test, the sites that blocked even a real browser on a datacenter IP and needed a full residential browser were Etsy (DataDome), Wayfair (PerimeterX), eBay, Chewy and Kroger. Amazon is also aggressive in a different way, showing its own interstitial to almost every automated request. The easiest was Costco, which runs almost no bot management.</p>
<p><strong>Why does my scraper get blocked even with a good proxy?</strong>
A clean IP is only one of three gates. Most scrapers get caught on their TLS fingerprint, the handshake a default HTTP client sends looks nothing like a browser, so anti-bot systems flag it before the page even loads. In our test, fixing only the TLS fingerprint (with a tool like curl_cffi) unlocked several sites from the same IP. And the strictest sites, DataDome and PerimeterX, need a real browser on top of that.</p>
<p><strong>Do I need residential proxies to scrape retail sites?</strong>
For the strict ones, yes. The identical browser that loaded Etsy, Wayfair, Chewy, Macy's and Kroger from a residential IP was blocked outright from a datacenter IP. Datacenter proxies are effectively dead for most retail. Easier sites like Costco or Walmart tolerate more, but a residential IP plus a browser-grade TLS fingerprint is the baseline that actually works.</p>
<p><strong>Can you just deliver the retail data instead of me building this?</strong>
Yes. We run the full stack, residential IPs, browser-grade fingerprints, and a real browser layer for the strict sites, maintain it as the retailers change their defenses, and hand you clean, validated data on your schedule. You can start with a free sample of your exact targets to see the quality before committing.</p>
]]></content:encoded></item><item><title><![CDATA[Scraping Myntra is a nightmare, so I wrapped it in an API]]></title><description><![CDATA[Hosted Myntra API returning product, price, discount, stock and rating data as clean JSON. Search any keyword or fetch a product by ID. Free tier.]]></description><link>https://datascrape.hashnode.dev/scraping-myntra-is-a-nightmare-so-i-wrapped-it-in-an-api</link><guid isPermaLink="true">https://datascrape.hashnode.dev/scraping-myntra-is-a-nightmare-so-i-wrapped-it-in-an-api</guid><category><![CDATA[web scraping]]></category><category><![CDATA[webscrapingapi ]]></category><category><![CDATA[#MyntraproductRatingdataextraction,]]></category><dc:creator><![CDATA[Mehul Jalondhara]]></dc:creator><pubDate>Thu, 15 Oct 2026 07:20:30 GMT</pubDate><content:encoded><![CDATA[<p>If you have ever tried to scrape Myntra, you know the feeling. You request a product URL expecting a price, and you get an empty shell back. The real price, the discount, the size-level stock, all of it loads a second later from internal endpoints sitting behind Akamai's bot protection.</p>
<p>I kept running into this on client work, so I built a hosted API that just returns clean JSON. Here is what the hard parts actually were.</p>
<h2>The scraping isn't the problem. Keeping it alive is.</h2>
<p>Myntra scrapers rarely crash in a way you would notice. They drift. A layout change moves the discounted price into a different field, and suddenly every product reads as full price, no drop ever fires, and the job still finishes green. The data is wrong and nothing tells you.</p>
<p>On top of that, datacenter IPs get throttled or served blank responses, bursts from one address get rate-limited, and accessing the site from outside India can change what the page shows. None of it is unbeatable, but it breaks the moment Myntra ships a change, which is often. That maintenance, not the first version, is the real cost.</p>
<h2>What the API returns</h2>
<p>Two endpoints. Fetch a product by ID:</p>
<pre><code class="language-bash">curl "https://myntra-product-price-data-api.p.rapidapi.com/products/35776515" \
  -H "X-RapidAPI-Key: YOUR_KEY" \
  -H "X-RapidAPI-Host: myntra-product-price-data-api.p.rapidapi.com"
</code></pre>
<p>It returns something like:</p>
<pre><code class="language-json">{
  "brand_name": "Marks &amp; Spencer",
  "mrp": 1699,
  "discounted_price": 679,
  "coupon_discounted_price": 509,
  "available_count": 70,
  "average_rating": "4.29"
}
</code></pre>
<p>Prices come back as numbers, not rupee strings you have to clean up first.</p>
<h2>The Myntra pagination gotcha (this one cost me a day)</h2>
<p>Myntra search is cursor-paginated, and it does not tell you that anywhere. If you just increment an offset, you get page 1 back over and over, with a 200 OK, so it looks like it is working while it quietly hands you duplicates.</p>
<p>The trick is that each response carries a pagination cursor, and you have to walk the pages in order, feeding each response's cursor into the next request. You cannot jump straight to page 5. So the API exposes it as a proper cursor:</p>
<pre><code class="language-python">import requests

headers = {
    "X-RapidAPI-Key": "YOUR_KEY",
    "X-RapidAPI-Host": "myntra-product-price-data-api.p.rapidapi.com",
}
url = "https://myntra-product-price-data-api.p.rapidapi.com/search"

cursor, all_products = None, []
while True:
    params = {"keyword": "tshirts"}
    if cursor:
        params["cursor"] = cursor
    data = requests.get(url, headers=headers, params=params).json()
    all_products += data["products"]
    if not data["has_next_page"]:
        break
    cursor = data["next_cursor"]

print(len(all_products), "products")
</code></pre>
<p>Each call is exactly one upstream request, so no duplicate pages and no wasted calls.</p>
<h2>Try it</h2>
<p>It is live on RapidAPI with a free tier and no setup: <a href="https://rapidapi.com/king052/api/myntra-product-price-data-api">https://rapidapi.com/king052/api/myntra-product-price-data-api</a></p>
<p>If you have fought Myntra, Ajio, or Nykaa scraping before, I would like to hear how you handled the Akamai side.</p>
]]></content:encoded></item><item><title><![CDATA[Who blocks AI crawlers? I checked the robots.txt of the top 1,000 sites]]></title><description><![CDATA[Which of the top 1,000 sites block AI crawlers like GPTBot and CCBot in robots.txt? News blocks them 4x more than everyone else.]]></description><link>https://datascrape.hashnode.dev/who-blocks-ai-crawlers-i-checked-the-robots-txt-of-the-top-1-000-sites</link><guid isPermaLink="true">https://datascrape.hashnode.dev/who-blocks-ai-crawlers-i-checked-the-robots-txt-of-the-top-1-000-sites</guid><category><![CDATA[web scraping]]></category><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[SEO]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[Data Science]]></category><dc:creator><![CDATA[Mehul Jalondhara]]></dc:creator><pubDate>Fri, 02 Oct 2026 15:33:10 GMT</pubDate><content:encoded><![CDATA[<p>Every big AI company runs a crawler. OpenAI has GPTBot, Anthropic has ClaudeBot, Google runs Google-Extended, Perplexity has PerplexityBot. A website can wave them through or turn them away with a few lines in a file called robots.txt. I wanted to know how many actually turn them away, so I pulled the data instead of guessing.</p>
<p>I took the top 1,000 sites from the Tranco ranking, fetched each one's robots.txt on October 2, 2026, and read what it said about the main AI crawlers. Here is what came back.</p>
<h2>What "the top 1,000" actually is</h2>
<p>One caveat up front, because it turned out to be interesting on its own. Of the 1,000 domains, only 485 served a robots.txt I could read. The rest are not websites in the normal sense. Around 320 were CDN and DNS infrastructure like akamaiedge.net and cloudfront.net. Another 68 were API endpoints such as googleapis.com with nothing to crawl. 63 returned a login page or a soft error instead of a real file, and 64 blocked the request outright. So every number below is out of the 485 sites that have a real, readable robots.txt.</p>
<h2>About a quarter block at least one AI crawler</h2>
<p>114 of the 485 sites, or 23.5%, block at least one of the eight major AI crawlers by name. Only 14 block all eight. So blocking happens, but blanket blocking is still rare. Most sites that block pick their targets.</p>
<p>Here is how often each crawler gets a full block:</p>
<table>
<thead>
<tr>
<th>Crawler</th>
<th>Share of sites that block it</th>
</tr>
</thead>
<tbody><tr>
<td>Common Crawl (CCBot)</td>
<td>17.3%</td>
</tr>
<tr>
<td>Bytespider (ByteDance)</td>
<td>16.3%</td>
</tr>
<tr>
<td>GPTBot (OpenAI)</td>
<td>15.9%</td>
</tr>
<tr>
<td>ClaudeBot (Anthropic)</td>
<td>15.1%</td>
</tr>
<tr>
<td>Google-Extended</td>
<td>13.8%</td>
</tr>
<tr>
<td>Meta (meta-externalagent)</td>
<td>12.6%</td>
</tr>
<tr>
<td>PerplexityBot</td>
<td>12.0%</td>
</tr>
<tr>
<td>Applebot-Extended</td>
<td>10.5%</td>
</tr>
<tr>
<td>Amazonbot</td>
<td>9.1%</td>
</tr>
</tbody></table>
<p>Common Crawl sits at the top, and that makes sense. Its public archive feeds a lot of model training, so blocking CCBot is a way to block many AI companies at once. Bytespider, ByteDance's crawler, comes next and has a rough reputation for ignoring limits, which is probably why so many admins name it directly.</p>
<p>Sites also tend to treat AI crawlers as one group. Of the sites that block GPTBot, 79% also block ClaudeBot. When someone decides to close the door, they usually close it on everyone at once.</p>
<h2>News sites are the real outlier</h2>
<p>This is the sharp line in the data. Among the news and media sites in the set, 80% block at least one AI crawler. For everything else, it is 20%. News is four times more likely to say no.</p>
<p>And they are not shy about it. The New York Times, BBC, Bloomberg, CNBC, USA Today, NBC News and the Daily Mail block all eight crawlers I checked. CNN, Forbes, NPR and the Financial Times block seven.</p>
<p>The exceptions are the fun part. The Wall Street Journal blocks none of them by name. Neither does Fox News, Time, the Telegraph or the Independent. Reuters blocks one. Same industry, opposite bet. A lot of that comes down to licensing. A publisher that has signed a content deal with an AI company has a reason to leave the door open.</p>
<h2>Marketplaces and platforms mostly stay open</h2>
<p>Step outside news and the blocking drops off fast. Amazon blocks seven of the eight crawlers, but Etsy, Shopify and Booking.com block none of them by name. Wikipedia, Pinterest, IMDb, Substack and WordPress.com are wide open. Apple and Microsoft's main domains do not block them either.</p>
<p>So this is less about the whole web closing to AI and more about one corner of it. Newsrooms are pulling up the drawbridge. Most of the rest has not bothered yet.</p>
<h2>64 sites would not even hand over the file</h2>
<p>One more thing, and it matters if you pull data for a living. 64 of the 1,000 returned a 403 error to a plain request for robots.txt, a public file that exists specifically to be read. nih.gov, ScienceDirect and Stack Overflow were among them. That is a different kind of blocking, aimed at any automated request rather than any specific bot, and it is getting more common.</p>
<h2>Why this is worth watching</h2>
<p>If your business depends on being found or on pulling public data, this is a trend to keep an eye on. Blocking a training crawler like GPTBot is not the same as blocking the bot that fetches a page to answer a live question, and most sites that block are aiming at training, not answers. But the line keeps moving. The data a competitor publishes openly today may be closed to a crawler tomorrow, which is the whole reason a reliable way to collect and store the data you need is worth having before you need it.</p>
<p>I pulled all of this with a short script: read the Tranco list, fetch each robots.txt, parse the user-agent rules, count the blocks. If you want the same kind of web-scale snapshot for a question of your own, whether that is prices, listings, or who publishes what, that is the sort of thing we build at DataScrape Solutions.</p>
<p>Method, for anyone who wants to check it: Tranco top 1,000, fetched October 2, 2026. 485 of the 1,000 served a readable robots.txt; the rest were infrastructure domains, returned non-robots responses, or refused the request. "Block" means a full Disallow of the site root for that crawler's named user-agent.</p>
]]></content:encoded></item></channel></rss>