moxlade/guides/best upwork freelancer scrapers

Best Upwork freelancer scrapers in 2026: eleven Apify actors, one query, one day — what each one actually returned

There are eleven actors on the Apify Store that say they scrape Upwork freelancer profiles. We ran all of them on 2026-09-11 with one query (python developer), the filters each one claims, 3-row filter runs and a 25-row plain run started in the same second, and read the settled bills. Four of the eleven returned rows. This page ranks them on what they returned, and it is written by the maker of the one at the top.

published 2026-09-13 · updated 2026-09-13

Disclosure: Moxlade publishes this page and makes the actor ranked #1. The measurements are ours, the inputs and the day are stated, and every other actor is named so you can repeat the runs. Prices are the list prices on the store on 2026-09-11 and the amounts the settled run objects charged.

The short answer

most fields, filters, history
moxlade/upwork-freelancers — 65 fields, JSS and rate as filters, contracts with feedback, $4 per 1,000, seconds
cheapest live rows
crw/upwork-talent-scraper — $5 per 1,000, 3–5 s, exact earnings; no JSS, numeric rate filter returns nothing
most users
parseforge/upwork-freelancers-scraper — filters honoured; $22–24 per 1,000 paid, 27–67 s run floor, earnings dropped to 0 on 2 of 25 rows
JSS on a cheap listing
sian.agency/upwork-jobs-scraper — JSS as a percentage, no earnings, a repeated person billed twice
returned nothing that day
bovi, powerai, gio21, jungle_synthesizer, scrapers_lat, dataharvest, meticulous_snail — 7 of 11

The ranking, with the reason for each place

1. moxlade/upwork-freelancers — ours

It is first because it answers questions the others cannot ask. It searches a census of 30,042 full profiles (71,351 indexed, refreshed daily) instead of scraping the result page at run time, so Job Success Score, hours billed, jobs, lifetime earnings, hire-again rate, member-since and last-worked date are filter inputs, a numeric rate band works (25 of 25 on the release runs), and 25 rows come back in 0.4–1.9 s. Each row carries 65 typed fields, and include: ["contracts"] adds every completed contract we hold — 395,022 of them, 156,836 with the client's feedback and the freelancer's feedback about the client — plus education, employment history, languages and certificates. liveSearch reads Upwork's current result when you want its order; fullProfiles re-reads a profile now with every contract. $4 per 1,000 stored rows, $5 live, $20 per full profile, no start fee.

What to hold against it: a stored row is up to 30 days old unless you ask for a live read (every row says its age); an exact earnings figure is on 47.7% of stored rows today, the rest carry the band; and it is one day old on the store, with the users to show for it. Details on its own page.

2. crw/upwork-talent-scraper

The best of the run-time scrapers by a distance. It calls Upwork's search API rather than the page, so it answered in 3 to 5 s, honoured talentBadges (3 of 3 Top Rated), countries (3 of 3 United States) and the enum hourlyRateRange: "60+" (65, 100, 100), charged exactly list — $0.00005 start + $0.005 per row, $5.02 per 1,000 — and returned the exact earnings figure on 96–100% of rows. Held against it: its numeric hourlyRateMin/hourlyRateMax fields returned zero rows every time, alone or combined, so a buyer who fills the two number boxes gets nothing; there is no Job Success Score field at all; and, like every run-time scraper, no contract history, no education, no sections. 22 keys per record.

3. parseforge/upwork-freelancers-scraper

The most used actor in the lane (345 users, 58 in the last 30 days on 2026-09-11) and it delivers: topRatedOnly + country came back 3 of 3 on both, region: Europe 3 of 3, subRegion: Latin America 3 of 3. The costs: $0.005 start + $0.02266 per row list, $22.4 to $23.9 per 1,000 delivered as paid (one run charged a second start event and an extra row), a run floor of 27 to 67 s even for 3 rows, 1.5 s per row at 25. Two of 25 rows came back with totalEarnings: 0 where the same person had $62,858 and $7,230 in another actor's same-second payload — and 0 is also what it returns for a hidden figure, so the buyer cannot tell a miss from a hidden one. Its jobSuccessScore is a 0..1 fraction, not the profile's score.

4. sian.agency/upwork-jobs-scraper (freelancer operations)

The cheap way to get the JSS as a percentage (86, 88, 97, 100 on its rows): $0.035 for a 10-row page on the paid tier, $0.14 on the free tier ($0.05 start + $0.009 per listing). No earnings field at all; its profile operation adds only portfolios at $0.025 to $0.075 per profile. On a 3-page run one person appeared on pages 2 and 3 and was billed twice (30 charged, 29 unique).

5. parseforge/upwork-scraper

Delivers 25 of 25 without filters at 1.6 s per row and carries the JSS percentage — but its tier field read "Top Rated Plus" on 32 of 33 rows across two days, including three people every other actor reports as not eligible, and it bills platform usage to the buyer (platformUsageBillingModel: USER): $20.9 to $39.3 per 1,000 depending on the run. Earnings as a band string only.

6–11. Returned nothing on 2026-09-11

  • bovi/upwork-talent-scraper — 0 rows in 6 runs ("page 1: 0 profiles"; its log: BRIGHTDATA_BROWSER_WS not set, no browser fallback). When it did deliver, on 2026-08-20, it charged 10 events for 5 rows — $37.6 per 1,000 against a $19 list price. Free when empty.
  • powerai/upwork-talent-scraper — "data not found" in 4 runs, $0.09 per GB start fee each time: $0.36 for nothing. Two reviews, both 1.0.
  • gio21/upwork-freelancers-scraper — Cloudflare cleared, then "No freelancer tiles on this page": the selector is broken. Rejects any run with a spending cap under $0.25.
  • jungle_synthesizer/upwork-freelancers-scraper — builds a legacy search URL, 0 tiles on 2 pages, $0.10 per GB start fee.
  • scrapers_lat/upwork-scraper — Cloudflare never cleared; one error row per run after 255 to 265 s. Free.
  • dataharvest/upwork-scraper — runs Apify's placeholder main.js; an empty scaffold.
  • meticulous_snail/upwork-freelancer-leads — a search-engine dork (site:upwork.com/freelancers), not an Upwork scraper; "Pushed 0 results".

The lane in one table

actorusers total / 30dlist pricerows on 2026-09-11speedexact earningsJSS %filters honouredcontracts, sections
moxlade/upwork-freelancersnew (2026-09-12)$4 stored / $5 live / $20 profile per 1k, no start25 / 25, every filter0.4–1.9 s for 25 stored47.7% of stored rows, flagged exact / band / hiddenyes (90.3%)rate band, JSS, hours, jobs, earnings, badge, country, region, tenure, recency, skillsyes
crw/upwork-talent-scraper24 / 11$0.00005 start + $0.005 row25 / 250.2 s per row96–100%, 0 when hiddennobadge, country, rate enum; numeric rate → 0 rowsno
parseforge/upwork-freelancers-scraper345 / 58$0.005 start + $0.02266 row25 / 251.5 s per row; 27–67 s floor88% (2 of 25 dropped to 0)fraction, not the scoreTop Rated, country, region, sub-regionno
sian.agency/upwork-jobs-scraper61 / 26$0.05 start + $0.009 listing, $0.075 profile (free tier)30 / 3 pages (29 unique)1.3 s per rownoneyespage onlyportfolios only, per profile
parseforge/upwork-scraper37 / 8$0.021 row + platform usage25 / 251.6 s per rowband onlyyesnone; tier constantno
bovi/upwork-talent-scraper67 / 16$0.019 row0 in 6 runs28–64 s to nothing(80% + hidden flag, 2026-08-20)flag onlyuntestableno
powerai/upwork-talent-scraper173 / 14$0.09 per GB start + $0.00499 row0 in 4 runs93–103 s to nothinguntestableno
gio21/upwork-freelancers-scraper5 / 3$0.005 start + $0.0204 row, $0.25 minimum040–56 suntestableno
scrapers_lat/upwork-scraper5 / 3$0.008 row0 (error row)255–265 suntestableno
jungle_synthesizer/upwork-freelancers-scraper2 / 1$0.10 per GB start + $0.003 row081 suntestableno
dataharvest/upwork-scraper3 / 1platform usage only03 sno
meticulous_snail/upwork-freelancer-leads2 / 1platform usage only04 sno
Users and list prices from the store on 2026-09-11; rows, speed and charges from the settled run objects of our runs that day (the bovi earnings figure and its 2× charge are from 2026-08-20, the last day it delivered). Ours from our own release runs on 2026-09-12 and our table on 2026-09-13.

What every run-time scraper has in common

The four that delivered rows read one result set. For the 25-row plain run started in the same second, 23 people appeared in all four, 24 to 25 in every pair, and the order agreed position for position on 14 to 18 of the shared names; the rates were 16.75 / 35 / 55 (min / median / max) in every actor. They differ in fields, filters and price, not in who they find. None of them returns work history, contract feedback, employment history, education or certificates: those are not on the search result page, and a run-time scraper has nowhere else to look.

That is the gap a census fills, and it is the whole case for #1. It is also the honest limit: a census knows what it has read, and it says when it read it.

What you actually pay

  • Start fees are what make an empty run cost money: powerai $0.09 per GB and jungle $0.10 per GB charge before the first row, so their default 2 GB runs cost $0.18 and $0.20 for nothing; gio21 refuses runs capped under $0.25.
  • Events versus rows: bovi charged 10 for 5; parseforge/freelancers charged 2 starts and 11 rows for 10 on one run and exactly list on the next four; sian billed a repeated person.
  • Buyer-paid platform usage (parseforge/upwork-scraper) moved the effective price from $20.9 to $39.3 per 1,000 between two runs.
  • Tier prices: parseforge, bovi, gio21, scrapers_lat and sian list a free-tier price a paying buyer never sees; the store card shows one number and the page another.
  • Ours: one event per delivered row, no start fee, and the charged event count equalled the row count on every release run — including the zero-row run at $0.00.
use it

The #1 entry is ours. Run it on the query you care about and read the rows.

moxlade/upwork-freelancers on Apify
$4.00 per 1,000 stored rows · $5.00 per 1,000 live search rows · $20.00 per 1,000 full profiles · no start fee, a zero-row run is free

How this was measured

One query, python developer. One 3-row run per actor per filter it claims (Top Rated; United States; $50–100 an hour; the same Upwork talent-search URL for the URL-mode actors), then a 25-row plain run with the delivering actors started in the same second. Every actor at its defaults otherwise, every run capped. Rows counted from the datasets, charges read from the run objects 5 to 25 minutes after each run so the events had settled. 38 launches, $2.12 in total. The URL-mode filters could not be judged because the URL-mode actors returned nothing, plain URLs included. We will run it again; the date at the top says when. The harness, the plan with every input, and the per-run numbers are public: getmoxlade/upwork-scraper-comparison — run it with your own Apify token and the numbers are yours.

Questions

Which Upwork freelancer scraper returns the Job Success Score?
As a percentage: ours (on 90% of stored rows), sian.agency and parseforge/upwork-scraper. parseforge/upwork-freelancers-scraper returns a 0..1 fraction that is not the profile score; crw returns no JSS field; bovi returns a flag.
Which one returns exact lifetime earnings?
The figure is in Upwork's search payload where the freelancer does not hide it, so crw, bovi and parseforge/upwork-freelancers-scraper return it (0 or null when hidden; parseforge also returned 0 on 2 of 25 rows where the figure existed). Ours returns it with a precision flag — exact, band or hidden — so a 0 never has to be guessed at.
Which Upwork scraper is the cheapest?
Per delivered row on the day: ours at $4 per 1,000 stored rows, then crw at $5.02 (list equals paid), sian at $3.2–3.5 on its paid tier but without earnings. The actors with start fees per GB cost $0.18–0.20 per run before any row, and delivered none.
Can any of them filter by hourly rate as a number?
Ours (rateMin / rateMax, 25 of 25 on the release runs). crw's numeric rate fields returned zero rows every time; its enum band ("60+") works. The URL-facet actors could not be tested because they returned nothing.
Which one gives a freelancer's contract history and feedback?
Only ours. None of the run-time scrapers return work history, per-contract feedback, employment history, education or certificates; sian's profile operation adds portfolio items only.
Is scraping Upwork freelancer profiles legal?
We are not lawyers and this is not advice. The data is public profile data; how it may be collected and used depends on where you are and what you do with it (GDPR and CCPA govern personal data; hiQ v. LinkedIn is the U.S. case usually cited on public-page scraping). Our census is built from public profiles with anonymous sessions and never through a buyer's account. Ask counsel for your use.
Why did seven of eleven actors return nothing?
Different reasons, all visible in their logs: a broken selector against the current site (gio21, jungle), a managed-browser dependency missing from the build (bovi), Cloudflare never cleared (scrapers_lat), an empty scaffold (dataharvest), a search-engine dork rather than a scraper (meticulous_snail), and "data not found" behind a start fee (powerai). A 30-day success rate on the store counts SUCCEEDED statuses; six of these ended SUCCEEDED with zero rows.