Workana Jobs Scraper
Pricing
from $1.74 / 1,000 projects
Workana Jobs Scraper
Scrape open Workana freelance projects on the English, Spanish and Portuguese boards. Each row has the title, full brief, category and skills, budget bracket, fixed or hourly, proposal count, client country and rating, and when it was posted. No account needed. $1.80 per 1,000 projects.
Pricing
from $1.74 / 1,000 projects
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Scrape open Workana freelance projects with budgets, proposal counts and client country: give it a keyword, a Workana category or a search link, and the matching projects come back as rows with the client's full brief, the budget bracket, fixed or hourly, how many freelancers have already sent a proposal, and the client's country and rating.
The catch is coverage. Workana shows a signed-out visitor only part of each search, about 35 to 42% of what its own counter says, and the same part on every run.
| Input | A keyword, Workana categories, skills or client countries, or Workana search URLs |
| Output | One row per open project: title, full brief, category and skills, budget bracket, fixed or hourly, proposal count, client country and rating, posted age as a timestamp |
| Ceiling | 2,000 projects per run, 99 pages per search |
| Account needed | None |
| Price | $1.80 per 1,000 projects on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 2,700 |
🔍 What Workana Jobs Scraper does
Workana keeps three boards, English, Spanish and Portuguese, and a project sits on exactly one of them. They do not overlap. The same four pages returned 30 English projects and 32 Spanish ones with nothing in common, and the English board is by far the smallest. If you want volume, tick Spanish and Portuguese.
Each combination of language, category, subcategory and country runs as its own search, up to 200
in one run. maxItems is shared out across them, so three boards give you roughly a third each
instead of the first one taking the lot.
Budgets are brackets. Workana asks clients to pick one rather than type an amount, so budgetMin and
budgetMax are the bracket's edges, and an open-ended bracket leaves that side null: "Less than USD
50" gives budgetMin: null and budgetMax: 50. On an hourly project the numbers are per hour, and
budgetUnit says so.
Dates are an age. Workana prints "5 hours ago", never a date, so postedAt is that age turned into a
timestamp and postedAtPrecision tells you how far to trust it.
📋 What data you get from each Workana project
| What you get | Field |
|---|---|
| The project and its stable ID | projectId, projectUrl, title |
| The client's full brief | description |
| Where the client filed it, and Workana's extra questions | category, subcategory, projectDetails |
| The skills asked for, with their slugs | skills, skillSlugs |
| Fixed or hourly, and the budget bracket | projectType, budgetText, budgetMin, budgetMax, budgetCurrency, budgetUnit |
| How many freelancers have pitched | proposalsCount |
| The client: country, initials, rating, verified payment, plan badge | clientCountry, clientCountryCode, clientNameMasked, clientRating, clientHasRating, clientPaymentVerified, clientPlan |
| How old it is, and how precise that is | postedRelative, postedAt, postedAtPrecision |
| Workana's featured and urgent flags | isFeatured, isUrgent |
| Which board and search it came from | projectLanguage, searchUrl, page, position, scrapedAt |
▶️ How to scrape Workana projects
- Open Workana Jobs Scraper and click Try for free.
- Type what you are after into Keyword, or leave it empty for the newest projects.
- Tick the boards you want under Project language.
- Set Maximum projects. To narrow it, open Narrow the search or Filter the results.
- Click Start, then download the dataset as JSON, CSV or Excel.
The form arrives with wordpress, English and 50 already filled in, so a run started without
editing it is a real search. Called through the API with an empty input, it writes one free sample
row and stops.
💰 How much does it cost to scrape Workana projects?
$1.80 per 1,000 projects on the Free plan. Paid plans pay a little less: $1.78 on Starter, $1.76 on Scale and $1.74 on Business. On the free plan, the $5 Apify gives you each month covers about 2,700 projects.
Not charged: the sample row, diagnostic rows, projects dropped by projectType, the proposal counts
or postedWithinDays, and repeats. A project that turns up in two of your searches is charged once.
If you set a maximum cost for the run, it stops when that is reached.
📥 What you give it
{"searchQuery": "wordpress","languages": ["es", "pt"],"categories": ["it-programming"],"clientCountries": ["BR", "AR"],"maxProposals": 5,"maxItems": 200}
| Field | Default | What it is |
|---|---|---|
searchQuery | none, the form opens with wordpress | Free text, in the language of the board you pick. Empty takes the newest projects on those boards. |
languages | English | en, es, pt. Each board is searched separately. |
maxItems | 50 | 1 to 2,000. The cap on projects for the whole run, shared across its searches. |
categories | none | Top-level category slugs from Workana's own URLs: it-programming, design-multimedia, sales-marketing, writing-translation, admin-support, legal, finance-management, engineering-manufacturing. Each is its own search. |
subcategories | none | Narrower slugs such as web-development, e-commerce or wordpress-1. Searched on their own, not combined with the categories. |
skills | none | Skill slugs such as adobe-photoshop or logo-design-1. A wrong slug matches nothing rather than erroring, so try one on the site first. |
clientCountries | none | Two-letter codes for where the client is: BR, MX, AR, CO, US, ES. Each is its own search. |
startUrls | none | Workana search URLs copied from your address bar. Their filters are read from the URL, and the category, subcategory and country fields are then ignored. |
projectType | any | any, fixed or hourly. |
maxProposals | none | Keep projects with at most this many proposals. |
minProposals | none | Keep projects with at least this many. |
postedWithinDays | none | 1 to 365. Keep projects posted in the last N days. |
proxyConfiguration | not used | Optional. Only for sending the requests through servers of your own, which are used exactly as given. |
projectType, the two proposal counts and postedWithinDays are applied after Workana answers,
because the site has no filter of its own for them. Projects they drop never reach your dataset and
are never charged. With one of them set, a search reads on until enough pass. It gives up after ten
pages in a row with none, and a run where nothing passes stops within 25 pages; the status message
says how many were read and passed.
📤 What you get back
A real row from a run on 27 September 2026, with the brief cut short:
{"projectId": "experienced-wordpress-developer-for-website-page-redesign-and-modernization","title": "Experienced Wordpress Developer for Website Page Redesign and Modernization","projectUrl": "https://www.workana.com/job/experienced-wordpress-developer-for-website-page-redesign-and-modernization","description": "We are a UK-based company seeking an experienced WordPress developer to renew and modernize a specific existing page on ...","category": "IT & Programming","subcategory": "Wordpress","projectDetails": {"Category": "IT & Programming","Subcategory": "Wordpress","What is the scope of the project?": "Custom development"},"skills": ["WordPress", "HTML", "CSS", "PHP", "Responsive Web Design", "User Interface", "Testing"],"skillSlugs": ["wordpress", "html", "css", "php", "responsive-web-design", "user-interface", "testing"],"projectType": "fixed","budgetText": "USD 100 - 250","budgetMin": 100,"budgetMax": 250,"budgetCurrency": "USD","budgetUnit": "project","proposalsCount": 45,"clientCountryCode": "GB","clientCountry": "United Kingdom","clientNameMasked": "R. S.","clientRating": 0,"clientHasRating": false,"clientPaymentVerified": false,"clientPlan": null,"postedRelative": "22 hours ago","postedAt": "2026-09-26T16:25:38.599Z","postedAtPrecision": "hour","isFeatured": false,"isUrgent": false,"projectLanguage": "en","searchUrl": "https://www.workana.com/jobs?query=wordpress&language=en","page": 1,"position": 1,"scrapedAt": "2026-09-27T14:25:38.599Z"}
| Field | How to read it |
|---|---|
projectId | Workana's slug for the project. Stable, so it tells you which projects you already have. |
description | The client's full brief, markup stripped, paragraphs kept. |
skillSlugs | The slugs behind the skill tags. They go straight into skills on your next run. |
budgetMin, budgetMax | The bracket's edges. Null on the open side of an open-ended bracket, and per hour when budgetUnit says so. |
proposalsCount | How many freelancers had pitched when the run read the project. |
clientNameMasked | The client's initials, which is all Workana shows a signed-out visitor. |
clientRating, clientHasRating | 0 with clientHasRating: false means no rating yet, not a bad one. clientPlan is null for most clients. |
postedAtPrecision | exact, hour, day, week, month or year. A week row can be days out either way. |
🧾 Reading the output
Three kinds of row can share the dataset. Only the first one costs anything.
| Row | How to spot it | Charged |
|---|---|---|
| A project | no _sample and no _diagnostic field | yes |
| The sample row | _sample: true and charged: false. Only when the input asks for nothing at all | no |
| A diagnostic | _diagnostic: true, ok: false, charged: false, and an errorCode | no |
Real project rows carry no charged field at all. The sample row has a projectId like a real one,
so filter on the flags, not on projectId: drop any row with _sample or _diagnostic and what is
left is the projects you paid for.
errorCode | What it means |
|---|---|
NO_RESULTS | That search kept nothing. Workana had nothing for it, an earlier search in the same run had already turned up everything it found, or your filters kept none of what it read. error says which, and how many projects were read. |
BAD_URL | A startUrls entry is not a Workana search address. |
NO_SEARCH | Nothing was left to search after reading the input. |
RATE_LIMITED, HTTP_ERROR, BAD_RESPONSE, API_ERROR | Workana did not give a usable answer for that search. Worth one re-run a few minutes later. |
NOT_SERVED | This project was not served this run. Re-run it later. Until 12 October 2026 this code was called CHALLENGED. |
A diagnostic about one search names it in search, and one failed search does not stop the others.
💡 What people use it for
- Finding projects few people have pitched on, with
maxProposals. On a busy board those are mostly old posts: on Spanish "wordpress" on 30 September 2026, 17 of the first 20 with 5 or fewer proposals were two months old or more. - Pricing your own services against what clients actually budget, by category and client country.
- A daily feed of new projects in one category, with
projectIdto skip the ones you have already seen. - Reading which skills clients ask for together, straight off
skillSlugs.
What one kind of work pays, on three marketplaces:
- Run this on
logo designwithlanguagesset to Spanish and Portuguese, and readbudgetMinandbudgetMaxbyclientCountry. - Run Freelancer.com Scraper on the same keyword for its budgets, bid counts and average bids.
- Run Fiverr Scraper on it to see the starting price sellers ask for the same work.
🚧 What it does not do
- It does not return every project Workana counts. About 35 to 42% of each search, measured across nine searches in September 2026, because Workana serves a signed-out visitor about 7 of the 20 projects on each page. This does not sign in.
- No client names or contact details. Workana shows initials to signed-out visitors, and that is all there is.
- No exact budgets. Workana only ever collects the bracket.
- No posting timestamp, only the age Workana prints, converted and labelled with its precision.
- No proposals, messages or freelancer profiles. Open projects only.
- No budget filter. Filter on
budgetMinandbudgetMaxafter you export. - Nothing past page 99 of a single search. Workana stops serving there.
- It is not an official Workana tool. Dami's Studio is independent and is not affiliated with or endorsed by Workana, or by any other company named on this page.
🧭 Which freelance scraper do you need?
| If you want | Use |
|---|---|
| Open projects on Workana, with budgets and proposal counts | This one |
| Projects on Freelancer.com, with the bid count and the average bid | Freelancer.com Scraper |
| The other side of the market: the gigs sellers offer on Fiverr | Fiverr Scraper |
| Salaried jobs in Brazil, with the salary Catho shows | Catho Jobs Scraper |
| Remote jobs, with the region you must live in | Remotive Jobs Scraper |
❓ Questions people ask
Do I need a Workana account or an API key?
No. It reads the same public board a signed-out visitor sees.
Why do I get fewer projects than the Workana search says it found?
Because Workana shows a signed-out visitor only part of each search while counting all of it.
Is postedAt accurate?
To the hour on anything from the last day, to the day within a week, coarser after that.
postedAtPrecision says which on every row.
Can I paste a search I built on the Workana site?
Yes. Copy the address bar into startUrls and the keyword, category, skills, country and language
are read out of it.
Can I call it from code or connect it to an AI assistant?
Yes. The API tab has ready-made code
for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/workana-jobs-scraper. Either way the
run happens on your Apify account at the same price.
Is scraping Workana legal?
These are public project listings, and Workana masks client names itself. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Send the input you used and the run ID, and the
errorCode on any diagnostic row.