ActorStack.dev

Thirteen Workana filters that accept your value and ignore it

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

By Oswaldo Carabano7 min read

Short answer

Workana accepts thirteen URL parameters that look like filters and do not filter: `budget_min`, `budget`, `is_hourly`, `project_type`, `duration`, `published`, `date`, `urgent`, `payment_verified`, `max_bids`, `featured`, `hourly` and `budget_from`. Each was tested against the live site and returned HTTP 200 with an unchanged result set. `language` is worse than useless — it widens the results, taking a Brazilian query from 2,826 declared projects to Workana's 10,000 cap.

Key points

  • Thirteen parameters return HTTP 200 and leave the result set unchanged.
  • Only five filters actually apply: category, subcategory, skill, country and free-text search.
  • `language` does not narrow, it widens: `country=BR` declares 2,826 projects, and adding `language=pt` declares 10,000 — the counter's cap.
  • One skill applies per query. Workana keeps the first value and silently drops the rest.
  • A wrong skill slug returns zero projects with HTTP 200, which is why the Actor validates slugs before the run rather than after.
On this page7 sections

A filter that returns HTTP 200 and does nothing is worse than a filter that errors. You get a plausible result set, you believe it was filtered, and you pay for every row in it. Workana has thirteen of them.

The thirteen

ParameterWhat it looks like it does
budget_minSet a minimum budget
budgetFilter by budget
budget_fromSet a budget floor
is_hourlyOnly hourly projects
hourlyOnly hourly projects
project_typeFilter by project type
durationFilter by expected duration
publishedFilter by publication date
dateFilter by date
urgentOnly urgent projects
payment_verifiedOnly payment-verified clients
max_bidsCap by proposal count
featuredOnly featured projects

Every one of them is accepted. Every one of them leaves the result set unchanged. Several are the exact filters somebody scraping a freelance marketplace would reach for first — a budget floor and a payment-verified flag are the two most obvious ways to narrow to serious work.

How they were tested

By comparison, which is the only method available without documentation: request the same query with and without the parameter and diff the result sets. If the sets are identical, the parameter did nothing regardless of what it returned.

A status code proves nothing here, and neither does a plausible-looking page. That is the whole lesson of this article: on an undocumented surface, the absence of an error is not evidence of an effect.

The one that makes things worse

language is not on the list above because it does not merely fail to narrow — it widens:

QueryProjects declared
country=BR2,826
country=BR&language=pt10,000

Ten thousand is Workana's counter cap, so the honest reading is “at least 10,000” — the parameter did not add Portuguese-speaking Brazilian projects to a Brazilian query, it loosened the country constraint. Somebody expecting a language filter would conclude the Brazilian market is 3.5 times bigger than it is.

The skill parameter that keeps only the first value

skill does work — for one value. Pass two and Workana keeps the first and silently drops the rest, so a two-skill query is a one-skill query that looks like two. Run one query per skill and union the results.

The empty run that looks correct

The related failure is a wrong slug. react returns zero projects with HTTP 200; react-js returns hundreds. Nothing distinguishes that from a skill nobody is hiring for.

So the Actor validates the slug before the run starts and reports what is wrong instead of charging for nothing — the slug reference.

Why the Actor does not offer them anyway

It would be easy to expose all eighteen parameters and let users find out. The reason not to is that it would be a lie with a plausible cover story: the input form would promise a budget filter, the run would return unfiltered rows, and the user would pay per row for the difference.

The five that work

  • category — one of eight top-level categories.
  • subcategory — 61 of them, and the axis that narrows a large category most.
  • skill — one value, exact slug.
  • country — the client's country, and the axis the Actor splits large queries along.
  • query — free text, the only axis without a fixed vocabulary.

Everything else you want to filter on — budget, hourly, payment verification, proposal count — is a column in the output. Filter it in your own query, and accept that you paid for the rows you discarded, because that is the true cost of the site not supporting it.

Frequently asked questions

Why can't I filter Workana projects by budget?
Because Workana's budget parameters do not filter. `budget_min`, `budget`, `budget_from` and `max_bids` all return HTTP 200 and leave the result set unchanged. Filter on `budget_min` in your own query after the rows arrive — and read `budget_type` first, because a quarter of budgets have no lower bound.
Does adding a language give me more relevant projects?
It gives you more projects, which is not the same thing. `country=BR` declares 2,826 and `country=BR&language=pt` declares 10,000 — the cap on Workana's own counter. It widens the set rather than narrowing it, so the Actor does not offer it.
Can I filter by two skills?
No. Workana keeps the first value and silently drops the rest, so a two-skill query is a one-skill query that looks like two. Run one per skill and union the results.
What happens if I get a skill slug wrong?
Zero projects, with HTTP 200 — an empty run that looks like a correct one. `react` returns nothing while `react-js` returns hundreds. The Actor checks the slug before the run starts and tells you what is wrong instead of billing you for nothing.

Sources

Every URL below was requested and returned a page on the date shown.

  1. Operator claimchecked 19 Aug 2026
    Workana Projects & Client Demand Scraper — Actor README and input schemaActorStack / Apify Store
  2. Site declarationchecked 19 Aug 2026
    workana.com/robots.txtWorkana
A white measuring tape curving across a dark background, showing the numbers 15 to 45.
WorkanaMeasured

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.

6 min
A white measuring tape curving across a dark background, showing the numbers 15 to 45.
WorkanaMeasured

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.

6 min
Paper receipts and printed documents arranged on a desk beside office stationery.
WorkanaExplainer

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.

8 min