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.
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
| actor | users total / 30d | list price | rows on 2026-09-11 | speed | exact earnings | JSS % | filters honoured | contracts, sections |
|---|---|---|---|---|---|---|---|---|
| moxlade/upwork-freelancers | new (2026-09-12) | $4 stored / $5 live / $20 profile per 1k, no start | 25 / 25, every filter | 0.4–1.9 s for 25 stored | 47.7% of stored rows, flagged exact / band / hidden | yes (90.3%) | rate band, JSS, hours, jobs, earnings, badge, country, region, tenure, recency, skills | yes |
| crw/upwork-talent-scraper | 24 / 11 | $0.00005 start + $0.005 row | 25 / 25 | 0.2 s per row | 96–100%, 0 when hidden | no | badge, country, rate enum; numeric rate → 0 rows | no |
| parseforge/upwork-freelancers-scraper | 345 / 58 | $0.005 start + $0.02266 row | 25 / 25 | 1.5 s per row; 27–67 s floor | 88% (2 of 25 dropped to 0) | fraction, not the score | Top Rated, country, region, sub-region | no |
| sian.agency/upwork-jobs-scraper | 61 / 26 | $0.05 start + $0.009 listing, $0.075 profile (free tier) | 30 / 3 pages (29 unique) | 1.3 s per row | none | yes | page only | portfolios only, per profile |
| parseforge/upwork-scraper | 37 / 8 | $0.021 row + platform usage | 25 / 25 | 1.6 s per row | band only | yes | none; tier constant | no |
| bovi/upwork-talent-scraper | 67 / 16 | $0.019 row | 0 in 6 runs | 28–64 s to nothing | (80% + hidden flag, 2026-08-20) | flag only | untestable | no |
| powerai/upwork-talent-scraper | 173 / 14 | $0.09 per GB start + $0.00499 row | 0 in 4 runs | 93–103 s to nothing | — | — | untestable | no |
| gio21/upwork-freelancers-scraper | 5 / 3 | $0.005 start + $0.0204 row, $0.25 minimum | 0 | 40–56 s | — | — | untestable | no |
| scrapers_lat/upwork-scraper | 5 / 3 | $0.008 row | 0 (error row) | 255–265 s | — | — | untestable | no |
| jungle_synthesizer/upwork-freelancers-scraper | 2 / 1 | $0.10 per GB start + $0.003 row | 0 | 81 s | — | — | untestable | no |
| dataharvest/upwork-scraper | 3 / 1 | platform usage only | 0 | 3 s | — | — | — | no |
| meticulous_snail/upwork-freelancer-leads | 2 / 1 | platform usage only | 0 | 4 s | — | — | — | no |
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.
The #1 entry is ours. Run it on the query you care about and read the rows.
$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 freeHow 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.