10 guides
Freelance demand data, and the filters that actually filter
Project listings from Latin America's largest freelance marketplace: budgets parsed with their currency and type, proposal counts, client signals, and the thirteen filters Workana accepts and ignores.

Scrape Workana
A walkthrough of extracting LATAM freelance demand: the five filters that work, the coverage ceiling nobody can exceed, and why the language setting changes what a budget means.

Workana API
No public API, a robots.txt that disallows the internal one, and a set of URL parameters that accept anything. What a compliant integration actually has to work with.

Filters that do nothing
`budget_min`, `is_hourly`, `duration`, `payment_verified` and nine others return HTTP 200 and change nothing. One of them makes the result set bigger.

The coverage ceiling
About 350 projects per query is the limit for every tool. The interesting part is that Workana cannot tell you what you are missing either — so the Actor writes a coverage report instead of a percentage.

Parsing budgets
"USD 1,000" and "USD 1.000" are both one thousand. "Less than USD 50" has no lower bound. Both facts break naive budget parsing in ways that survive review.

The rating that is not a rating
Workana returns a rating for every project, so "100% coverage" would be true. It would also throw away four fifths of the market if you believed it.

Workana data fields
55 fields measured on 718 projects across 12 subcategories and 8 countries — reported as how often a field carries useful information, not how often the key exists.

Market analysis
What listing data supports — demand by skill, budget distributions, competition levels — and the four claims it cannot carry.

Proposal velocity
Measured across 401 projects: competition on a freelance listing has a half-life measured in hours, which makes a stale row a wrong row.

Skill slugs
`react` returns zero projects with HTTP 200. `react-js` returns hundreds. A wrong slug is the worst kind of failure, so it gets checked before the run rather than after.