Last week I published eleven web scrapers to a marketplace that pays developers a revenue share. This is not a "how I made $X" story — as of writing they have earned nothing, and the platform's own case studies say the first two months usually do. What I can share is the part nobody writes down: the data I queried before building each one, the three technical patterns that made most of them a single-evening job, and the mistakes that cost me hours.
Every marketplace has the same shape: a handful of red-ocean targets everyone builds for, and a long tail nobody has touched. Building the twentieth Amazon scraper is a reliable way to earn nothing. So before writing a line of code, I asked one question per candidate site: how many competing tools already exist, and how many users do they have?
The marketplace exposes a public search API, so this is a twenty-line script rather than an afternoon of clicking. I ran it across roughly fifty candidate targets. The output sorted itself into two piles.
Every one of these has more demand than my targets. Every one also has incumbents with reviews, ranking and years of uptime. A newcomer with zero reviews does not win that fight.
Empty is only good news if the demand exists somewhere else in the same category. That is the second filter.
Empty niche plus proven category demand elsewhere. Concretely: the Japanese restaurant directory had almost no competition, but a different Japanese restaurant site had three scrapers with 17, 26 and 44 users. That says buyers of Japanese restaurant data exist and are paying — they simply have not been offered this source. Same logic for the classifieds board: neighbouring resale marketplaces had 91 and 166 users, so the buyer persona (resale sourcing) was already proven.
Where the category showed no demand anywhere, I skipped the niche no matter how empty it looked.
Most modern sites server-render from a JSON payload embedded in the page. Framework-specific script tags carry the entire result set — descriptions, structured prices, geo coordinates — in a form that survives redesigns. On one site the search results alone carried 28 usable fields before I opened a single detail page. Parsing styled HTML should be the fallback, not the default.
Where there is no framework payload, detail pages very often carry a schema.org block for search engines: phone numbers, opening hours, postal addresses, posted dates. It is public, it is stable, and it exists specifically to be machine-read.
My favourite trap of the week: a classifieds site whose list pages are a decade-old server-rendered template while its detail pages are a modern framework app. The detail pages also contained a global variable belonging to the ad stack with almost the name I was looking for — it parsed cleanly and returned nothing useful. Two parsers, one site, and an hour lost to a decoy.
"0", which is truthy in JavaScript. My first version happily published "0 - 0 per month" salary ranges. Coerce to a number and require it to be positive.Eleven scrapers across Taiwanese and Japanese job boards, marketplaces, rental portals and classifieds. A few of them:
Revenue so far: zero. Eleven listings, a daily health check that runs every one of them, and a wait. The platform's published case study — 98 tools over six months — describes almost no income in months one and two, with the catalogue effect arriving around month five. I am one week in. Anyone telling you their marketplace listings printed money in week one is selling a course.
What I can say already is that the selection method held: every build took a single evening because I checked the data source before committing, and none of the eleven landed in a niche where an incumbent with hundreds of users was waiting. Whether that converts into revenue is the next three months' question, and I will publish that number too.
The exact setup behind a camera-free AI channel — tool stack, the order to wire it in, and the silent failure points that cost me weeks. Free, no email gate.
Get the free checklist →