Workana Jobs Scraper avatar

Workana Jobs Scraper

Pricing

from $1.80 / 1,000 project returneds

Go to Apify Store
Workana Jobs Scraper

Workana Jobs Scraper

Scrape open Workana freelance projects across the English, Spanish and Portuguese boards. Every row carries the title, full brief, category and skills, budget band, fixed or hourly, proposal count, client country and rating, and how long ago it was posted. No account needed.

Pricing

from $1.80 / 1,000 project returneds

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

16 hours ago

Last modified

Categories

Share

Workana Jobs Scraper: projects, budgets, proposals and client data

Workana is where a lot of Latin American freelance work gets posted, and the board is public: you can read every open project without an account. This actor reads it and hands you clean rows: title, the client's full brief, category and skill tags, the budget band, how many people have already pitched, which country the client is in, and how long ago it went up.

Export as JSON, CSV or Excel. Nothing to log into, no API key, no browser.

Read this before you buy

Workana serves a logged-out visitor about seven projects per page, and its own result counter counts more than that. A search that says "896 results found" hands an anonymous caller roughly 317 of them. Measured across nine different searches on 19 September 2026, the share landed between 35% and 42% every time, and it is deterministic: asking for the same page five times returns the same seven projects, not seven new ones.

So: every row you get is real, complete and correctly parsed. But if you need literally every project matching a filter, this will not give you that, and no keyless tool can. The way to widen coverage is to run several narrower searches rather than one broad one. See "Getting more of the board" below.

That is the single most important thing to know, so it is at the top rather than in a footnote.

Three boards, not one

Workana keeps English, Spanish and Portuguese projects in separate catalogues, and a project sits on exactly one. They do not overlap at all: the same four pages returned 30 English projects and 32 Spanish ones with not a single project in common.

The English board is small, under a thousand open projects. Spanish and Portuguese are each an order of magnitude bigger. If you are looking for volume, tick Spanish and Portuguese. If you only read English, you are seeing a genuinely narrow slice of Workana, and that is Workana's doing, not this actor's.

The projectLanguage field on every row says which board it came from.

What you get, per project

FieldExample
projectId, title, projectUrlcomprehensive-brand-identity-redesign-for-perspective-therapy-center
descriptionthe client's full brief, tags stripped, paragraphs kept
category, subcategoryDesign & Multimedia, Corporate image
projectDetailsthe extra answers Workana collects, e.g. {"What is the scope of the project?": "Define from scratch"}
skills, skillSlugs["Graphic Design","Logo design","Adobe Illustrator"]
projectTypefixed or hourly
budgetText, budgetMin, budgetMax, budgetCurrency, budgetUnitUSD 500 - 1,000, 500, 1000, USD, project
proposalsCount44
clientCountry, clientCountryCodeUnited States, US
clientNameMasked, clientRating, clientHasRating, clientPaymentVerified, clientPlanC. M., 0, false, true, null
postedRelative, postedAt, postedAtPrecisionYesterday, 2026-09-19T00:20:28Z, day
isFeatured, isUrgentbooleans
projectLanguage, searchUrl, page, position, scrapedAten, the exact search this came from

Budgets are bands, and the band means different things

Workana does not ask clients for a number. It asks them to pick a bracket, and there are ten:

fixed price Less than USD 50 · 50-100 · 100-250 · 250-500 · 500-1,000 · 1,000-3,000 · Over USD 3,000
hourly Less than USD 15/hour · USD 15-45/hour · Over USD 45/hour

budgetMin and budgetMax are the edges of that bracket, and an open-ended bracket leaves the open side null: "Less than USD 50" gives you budgetMin: null, budgetMax: 50. That is why budgetMin is populated on only about 57% of rows; it is not a gap in the parsing, it is the shape of the data. budgetUnit is project or hour, and on an hourly project USD 15 - 45 means per hour, not for the job. Every row says which, so you never have to guess.

budgetText is the untouched string if you would rather do your own thing with it.

Dates are an age, not a timestamp

The board publishes "5 hours ago" or "2 weeks ago", never a date. postedRelative is exactly what Workana said. postedAt is that converted to a real instant, and postedAtPrecision tells you how much to trust it: exact, hour, day, week or month. A row marked week could be six days either side. Most of the board is fresh (in a 168-project sample, "yesterday" and "two to five days ago" were the commonest values), so this matters less than it sounds, but it is worth knowing before you sort by it.

Input

{
"searchQuery": "wordpress",
"languages": ["es", "pt"],
"categories": ["it-programming"],
"clientCountries": ["BR", "AR"],
"maxProposals": 5,
"maxItems": 200
}

Everything is optional. A keyword on its own works; so does a category on its own; so does pasting a Workana search URL you already built in the browser into startUrls.

  • searchQuery: free text, in whatever language the board you picked uses.
  • languages: which boards to read. Each is searched separately.
  • categories / subcategories / skills / clientCountries: Workana's own filters, applied on their side. Use the slug from the site's own URL: it-programming, web-development, adobe-photoshop, BR. A skill slug that does not exist matches nothing rather than erroring, so check one against a live search first.
  • projectType, maxProposals, minProposals, postedWithinDays: applied here, after Workana answers, because the site has no server-side filter for any of them. Projects dropped by these are never charged.
  • maxItems: the hard cap on rows.

Each combination of language, category and country is run as its own search, so two languages and three countries is six searches. That is deliberate and it is how you get past the per-search ceiling. maxItems is shared out across those searches rather than being spent on the first one: tick three boards and you get roughly a third from each, not 150 English rows and nothing else. A search with less to give hands its unused share to the ones after it.

Getting more of the board

One search stops at 99 pages, and a logged-out caller gets about seven projects per page. The way around that is to slice, not to page harder:

  • Tick all three languages. That alone roughly triples what you see.
  • Add several categories instead of searching the whole board. it-programming and design-multimedia are separate searches with separate ceilings.
  • Add client countries. BR, MX, AR, CO and ES are the big ones.

Duplicates are removed across every search in a run, so overlapping slices cost you nothing.

A real row

{
"projectId": "comprehensive-brand-identity-redesign-for-perspective-therapy-center",
"title": "Comprehensive Brand Identity Redesign for Perspective Therapy Center",
"projectUrl": "https://www.workana.com/job/comprehensive-brand-identity-redesign-for-perspective-therapy-center",
"description": "We are seeking a talented graphic designer to undertake a comprehensive brand identity redesign...",
"category": "Design & Multimedia",
"subcategory": "Corporate image",
"skills": ["Graphic Design", "Logo design", "Corporate Brand Identity", "Adobe Illustrator"],
"projectType": "fixed",
"budgetText": "USD 500 - 1,000",
"budgetMin": 500,
"budgetMax": 1000,
"budgetCurrency": "USD",
"budgetUnit": "project",
"proposalsCount": 44,
"clientCountry": "United States",
"clientCountryCode": "US",
"clientNameMasked": "C. M.",
"clientRating": 0,
"clientPaymentVerified": true,
"postedRelative": "Yesterday",
"postedAt": "2026-09-19T00:20:28.735Z",
"postedAtPrecision": "day",
"projectLanguage": "en"
}

Measured field coverage

77 projects parsed across all three boards, 19 September 2026:

FieldPresent
title, description, projectUrl100%
category, subcategory100%
skills100%
budgetText, budgetCurrency, budgetUnit, projectType100%
budgetMax97.4% (open-ended top brackets have none)
budgetMin57.1% (open-ended bottom brackets have none)
proposalsCount100%
clientCountry, clientCountryCode100%
clientRating, clientPaymentVerified100%
postedRelative, postedAt100%
clientPlan2.6%; only a handful of clients carry a plan badge

Across a separate 24-search run covering keywords, all eight categories, subcategories, countries and skills, every single search answered: 24 of 24.

What this does not do

  • It does not return every project Workana counts. Roughly 35-42%, as measured above. The rest is behind a sign-in, and this actor does not sign in to anything.
  • It does not give you the client's name. Workana masks it to initials for anonymous visitors. clientNameMasked is C. M., and that is genuinely all there is. It does not give you their email, their company, their spend history or their other projects either.
  • It does not give you exact budget figures, because Workana never collects them, only the bracket the client picked.
  • It does not give you a publication timestamp, only an age, converted and labelled with its precision.
  • It does not read proposals, messages or freelancer profiles. Open projects only.
  • It does not go past page 99 of a single search. Workana answers 404 there.
  • It does not filter by budget. Workana's budget controls are a range slider that did not behave as a server-side filter in testing, and shipping a filter that silently does nothing is worse than not shipping one. Every row carries budgetMin/budgetMax, so filter after export.

Billing

You are charged per project returned: one charge per row in your dataset, and nothing else.

Free, always:

  • The sample row you get back from an empty input.
  • Diagnostic rows: a bad URL, a search that returned nothing, a search that failed.
  • Projects dropped by projectType, maxProposals, minProposals or postedWithinDays. They are filtered before anything is pushed, so they never reach your dataset and never bill.
  • Duplicates. A project that appears in two of your searches is charged once.

A run that finds nothing costs you the run fee and nothing more.

FAQ

Do I need a Workana account or an API key? No. Neither. The actor reads the same public project board a logged-out visitor sees.

Why do I get fewer projects than the search says it found? Because Workana shows a logged-out visitor about seven projects per page while counting all of them. It is their gate, not a limit in this actor. Tick more languages and add categories to widen the slice.

Why is the English board so small? Workana is a Latin American marketplace. Most of its clients post in Spanish or Portuguese. Under a thousand open English projects against ten thousand-plus on each of the other two boards is normal.

Can I get the client's name or contact details? No. Workana shows anonymous visitors initials only, and this actor does not sign in. If you need the full name you need a Workana account of your own.

Are the budgets real numbers? They are real brackets. Workana asks clients to pick a range, not type an amount, so

USD 500 - 1,000
is the client's actual answer. There is no more precise figure to be had.

Is postedAt accurate? To the hour on anything posted in the last day, to the day within a week, coarser after that. postedAtPrecision says which on every row, and postedRelative preserves exactly what Workana printed.

Can I paste a search I built on the site? Yes. Copy the address bar into startUrls and the keyword, category, skills, country and language are read straight out of it.

How do I find fresh work nobody has bid on? Set maxProposals to 5 and postedWithinDays to 2. Plenty of rows come back with proposalsCount: 0.

What happens if Workana blocks a request? You get an uncharged diagnostic row saying so, and the run still finishes as succeeded. You are never charged for a search that failed.