DEV Community

Devil Scrapes profile picture

Devil Scrapes

View all public scrapers @ https://apify.com/devilscrapes

Joined Joined on 
Bayt Jobs Scraper: the proxy country pin that was the block

Bayt Jobs Scraper: the proxy country pin that was the block

Comments
3 min read
InfoJobs Spain Scraper: the proxy default that 407'd every run

InfoJobs Spain Scraper: the proxy default that 407'd every run

Comments
3 min read
Fotocasa Scraper: the null field that hid every discounted listing

Fotocasa Scraper: the null field that hid every discounted listing

Comments
3 min read
XING's job data ships as a JS object, not JSON. Here's how we parse it without breaking on the first undefined.

XING's job data ships as a JS object, not JSON. Here's how we parse it without breaking on the first undefined.

Comments
3 min read
PropertyFinder.ae's category parameter wasn't what the spec assumed. We tested it before shipping.

PropertyFinder.ae's category parameter wasn't what the spec assumed. We tested it before shipping.

Comments
3 min read
A green QA run hid an untested pagination path. Here's the check that caught it before we shipped.

A green QA run hid an untested pagination path. Here's the check that caught it before we shipped.

Comments
3 min read
A probe and a production scraper saw two different pages for the same missing Snapchat user

A probe and a production scraper saw two different pages for the same missing Snapchat user

Comments
4 min read
Per-profile or per-link: the billing unit on a link-in-bio scraper differs by 10x

Per-profile or per-link: the billing unit on a link-in-bio scraper differs by 10x

Comments
4 min read
We tested the 'always pin the proxy country' rule instead of trusting it. Same data came back from two exit countries.

We tested the 'always pin the proxy country' rule instead of trusting it. Same data came back from two exit countries.

Comments
4 min read
nbHits said 6,360. The API only let us page through 1,000 of them.

nbHits said 6,360. The API only let us page through 1,000 of them.

Comments
4 min read
Filter the CFTC COT report for WHEAT and you get three different markets

Filter the CFTC COT report for WHEAT and you get three different markets

1
Comments 1
5 min read
Our two-state UCC run returned 200 rows, 127 filings, and zero from Colorado

Our two-state UCC run returned 200 rows, 127 filings, and zero from Colorado

Comments
5 min read
We doubled the memory, cut runtime 33%, and raised the cost 41%

We doubled the memory, cut runtime 33%, and raised the cost 41%

Comments
3 min read
We swept 288 scrapers for columns that are empty in every row. 35 had one.

We swept 288 scrapers for columns that are empty in every row. 35 had one.

Comments
4 min read
A note said the run scraped 0 rows. The platform's own record said 6.

A note said the run scraped 0 rows. The platform's own record said 6.

Comments
4 min read
Our scraper returned 50 rows and 39 distinct IDs — count identities, not rows

Our scraper returned 50 rows and 39 distinct IDs — count identities, not rows

Comments
4 min read
Our QA run passed with rows in the dataset and still proved nothing about pagination

Our QA run passed with rows in the dataset and still proved nothing about pagination

Comments
4 min read
Our Actor got 403'd on every page and still reported SUCCEEDED with zero rows

Our Actor got 403'd on every page and still reported SUCCEEDED with zero rows

Comments
4 min read
A CONNECT 407 looked like a proxy-entitlement problem. It was a country pin with no group name.

A CONNECT 407 looked like a proxy-entitlement problem. It was a country pin with no group name.

Comments
4 min read
Bing's ad-library search box accepts any query and returns the exact same ads

Bing's ad-library search box accepts any query and returns the exact same ads

Comments
4 min read
44 rows of Apple's 'Icon + Asset Ad' format, and not one had an asset. Bug or null?

44 rows of Apple's 'Icon + Asset Ad' format, and not one had an asset. Bug or null?

Comments
4 min read
We queried Wallapop for zzznonsensequery9999xyz. Zero results is what proved the search actually works.

We queried Wallapop for zzznonsensequery9999xyz. Zero results is what proved the search actually works.

Comments
4 min read
pump.fun's search parameter accepts any string and returns the same feed. We shipped without it.

pump.fun's search parameter accepts any string and returns the same feed. We shipped without it.

Comments
5 min read
OLX Brazil embeds a decoy listings array with the exact shape of the real one. We had to prove which was which.

OLX Brazil embeds a decoy listings array with the exact shape of the real one. We had to prove which was which.

Comments
5 min read
We doubled Mercado Libre's scraper memory and clearance went from 50% to 90% - with zero code changes.

We doubled Mercado Libre's scraper memory and clearance went from 50% to 90% - with zero code changes.

Comments
6 min read
Kleinanzeigen has two page-2 URLs. One is a redirect trap. We verified the one we shipped actually advances.

Kleinanzeigen has two page-2 URLs. One is a redirect trap. We verified the one we shipped actually advances.

Comments
6 min read
We shelved a finished scraper because the site ignored its own search box. Now we test for it first.

We shelved a finished scraper because the site ignored its own search box. Now we test for it first.

Comments
5 min read
FurnishedFinder Scraper: caps every search at 50, and the fix isn't in the docs

FurnishedFinder Scraper: caps every search at 50, and the fix isn't in the docs

Comments
5 min read
Our QA harness certified this Actor at 4096 MB. It ships on 512.

Our QA harness certified this Actor at 4096 MB. It ships on 512.

Comments
3 min read
A run delivered 0 rows and still got billed $0.30 — the bug was ours, not Bayut's

A run delivered 0 rows and still got billed $0.30 — the bug was ours, not Bayut's

Comments
3 min read
The TikTok 'block' that was actually Camoufox running out of memory

The TikTok 'block' that was actually Camoufox running out of memory

Comments
3 min read
A datacenter IP gets 0 listings; a residential one gets 12. Same build.

A datacenter IP gets 0 listings; a residential one gets 12. Same build.

Comments 1
3 min read
Our scraper went 0-for-19 against Cloudflare. One boolean took it to 9-for-10.

Our scraper went 0-for-19 against Cloudflare. One boolean took it to 9-for-10.

Comments
5 min read
We cleared PeoplePerHour 4/4 locally. The first cloud run got HTTP 202 from every URL.

We cleared PeoplePerHour 4/4 locally. The first cloud run got HTTP 202 from every URL.

Comments
4 min read
A Dockerfile typo turned 33 real Depop rows into a silent, SUCCEEDED zero

A Dockerfile typo turned 33 real Depop rows into a silent, SUCCEEDED zero

Comments
4 min read
An isinstance(str) check that was always False capped every Facebook Page at exactly 3 posts

An isinstance(str) check that was always False capped every Facebook Page at exactly 3 posts

Comments
4 min read
Alibaba renamed one JavaScript variable and our price field silently dropped to 0%

Alibaba renamed one JavaScript variable and our price field silently dropped to 0%

Comments
5 min read
A 586 KB HTTP 200 from YouTube that contains zero videos

A 586 KB HTTP 200 from YouTube that contains zero videos

Comments
4 min read
Our test asked for 4 branches, ran 1, and reported PASS

Our test asked for 4 branches, ran 1, and reported PASS

Comments
4 min read
LinkedIn has an /api/ endpoint that needs no login and returns HTML

LinkedIn has an /api/ endpoint that needs no login and returns HTML

Comments
3 min read
Our release gate read a docstring and blocked the deploy over a word

Our release gate read a docstring and blocked the deploy over a word

Comments
4 min read
No introspection, no allowlist: reconstructing Whatnot's GraphQL queries from a compiled AST

No introspection, no allowlist: reconstructing Whatnot's GraphQL queries from a compiled AST

Comments
4 min read
Zero results, five rows: the Flippa search response that lies about matching nothing

Zero results, five rows: the Flippa search response that lies about matching nothing

Comments
4 min read
A 200 that isn't reachability: SpareRoom's soft-redirect and the empty run nobody notices

A 200 that isn't reachability: SpareRoom's soft-redirect and the empty run nobody notices

Comments
5 min read
A 404 is not a failure: what Discord's invite endpoint taught us about billing

A 404 is not a failure: what Discord's invite endpoint taught us about billing

5
Comments
5 min read
A 25%-failing test is not flaky. It's a bug reporting itself honestly.

A 25%-failing test is not flaky. It's a bug reporting itself honestly.

5
Comments
4 min read
A bare useApifyProxy: true resolves to datacenter. Patreon 403s every one of those.

A bare useApifyProxy: true resolves to datacenter. Patreon 403s every one of those.

Comments
4 min read
grep '"aggregate_rating":' finds zero matches on Zomato. The field is there, just double-escaped.

grep '"aggregate_rating":' finds zero matches on Zomato. The field is there, just double-escaped.

Comments
4 min read
?q=chairs on Chairish isn't a search - it's a redirect to a category page wearing a search URL.

?q=chairs on Chairish isn't a search - it's a redirect to a category page wearing a search URL.

Comments
5 min read
?q=chairs on Chairish isn't a search - it's a redirect to a category page wearing a search URL.

?q=chairs on Chairish isn't a search - it's a redirect to a category page wearing a search URL.

Comments
5 min read
?page=2 on Immowelt returns page 1, byte for byte. It's a button, not a route.

?page=2 on Immowelt returns page 1, byte for byte. It's a button, not a route.

Comments
5 min read
window.__NUXT__ is not JSON. It's a function you have to run first.

window.__NUXT__ is not JSON. It's a function you have to run first.

Comments
4 min read
Our build wave shipped four scrapers that scraped nothing

Our build wave shipped four scrapers that scraped nothing

Comments
4 min read
A one-step probe told us YouTube was blocked. It was asking the wrong endpoint.

A one-step probe told us YouTube was blocked. It was asking the wrong endpoint.

Comments
4 min read
The top-earning product on Indie Hackers reports $10,000,000,000,000,000 a month

The top-earning product on Indie Hackers reports $10,000,000,000,000,000 a month

Comments
3 min read
Grailed's __NEXT_DATA__ is empty. The listings come from Algolia, and the key is on the page.

Grailed's __NEXT_DATA__ is empty. The listings come from Algolia, and the key is on the page.

Comments
3 min read
Coursera ships two big JSON blobs on every search page. Neither has the results.

Coursera ships two big JSON blobs on every search page. Neither has the results.

Comments
4 min read
dict.get(key, [None])[0] is not safe, and our green test suite agreed with us

dict.get(key, [None])[0] is not safe, and our green test suite agreed with us

Comments
4 min read
Pinterest's ad library endpoint was hiding behind one missing curl flag

Pinterest's ad library endpoint was hiding behind one missing curl flag

Comments
4 min read
Google News RSS has no cursor, so the query IS the cursor

Google News RSS has no cursor, so the query IS the cursor

Comments
4 min read
loading...