moxlade/upwork-freelancers vs parseforge/upwork-freelancers-scraper: the lane's most used actor, measured against ours
parseforge/upwork-freelancers-scraper had 345 users and 58 in the last 30 days when we measured the lane on 2026-09-11 — the most of any Upwork talent scraper on the store — and it works: its filters held on every row we asked for. This page puts it next to ours on the same query and says where each one wins. Written by the maker of ours.
published 2026-09-13 · updated 2026-09-13Disclosure: Moxlade makes one of the two actors on this page. The parseforge figures are from our own runs of it on 2026-09-11 (and 2026-08-20), read from the settled run objects; ours are from our release runs on 2026-09-12 and our table on 2026-09-13.
Side by side
| parseforge/upwork-freelancers-scraper | moxlade/upwork-freelancers | |
|---|---|---|
| how it works | reads Upwork's search result at run time | answers from a census of 30,042 profiles; live read on request |
| list price | $0.005 per start + $0.02266 per row (free tier); tiered to $0.02078 on the paid tier we ran on | $0.004 per stored row, $0.005 live, $0.02 per full profile; no start fee |
| paid, per 1,000 delivered | $22.4 (3 rows, exactly list) to $23.9 (10 rows: a second start event and one extra row charged) | $4.00; charged events equalled rows on every release run |
| time | 27–67 s per run even for 3 rows; 1.5 s per row at 25 | 25 stored rows in 0.4–1.9 s; 25 live rows in under 30 s |
| filters that held | topRatedOnly, country, region, subRegion — 3 of 3 each | badge, country, region, numeric rate band, JSS, hours, jobs, earnings, hire-again, tenure, recency, skills — 25 of 25 |
| exact earnings | yes, but 0 on 2 of 25 rows where the figure existed ($62,858 and $7,230 in a same-second payload) — and 0 is also its value for hidden | with earnings_precision: exact / band / hidden, never a bare 0 |
| Job Success Score | a 0..1 fraction (1, 0.9375), not the profile's score | the percentage, on 90.3% of stored rows; a filter and a sort |
| ids | ciphertext on 34% of rows (vanity URLs otherwise), no numeric id | ciphertext and person_id on 100% |
| skills | slugs (django-framework) | display names |
| contracts, feedback, education, employment, languages | no | yes — 395,022 contract rows, 156,836 with feedback both ways; sections on 99.2% of profiles |
| history | no | fetched_at, versions, changedSince with diffs; private profiles answered |
| freshness | read at run time | stored rows up to 30 days old, stated per row; liveSearch / fullProfiles read now |
| record | 26 keys | 65 typed fields |
Where parseforge wins
- It is the one people already use, with the reviews to show it (one, at 5.0) and a 97% run success rate over 30 days.
- Every row is read at run time. If a freelancer changed their rate this morning, parseforge's row has it; our stored row has it once the census re-reads the profile, and says how old it is. (
liveSearchcloses that gap for a search;fullProfilesfor a profile.) - Region and sub-region filters worked on the day (Europe → three Ukrainians; Latin America → Mexico and Colombia). Ours has regions; it has no sub-region filter.
Where ours wins
- Price: $4 against $22–24 per 1,000 delivered rows, and no start fee — the run that charged a second start event is the kind of thing a per-row price cannot do.
- Time: seconds against a 27–67 s floor per run.
- Filters: a numeric rate band, JSS, hours, jobs, earnings, hire-again rate, tenure, recency, skills — parseforge filters on badge and place.
- The figure you can trust: an earnings value with a precision flag, and a JSS that is the score.
- The history: every contract with feedback both ways, education, employment, languages, certificates — not on the search page, so not in parseforge's row.
- Change: what moved since a date, with the diff, from a census that remembers.
How this was measured
Query python developer on 2026-09-11: parseforge with topRatedOnly + country: United States (3 rows), region: Europe (3),
subRegion: Latin America (3), and a plain 25-row run started in the same second as three other actors; plus a 10-row topRatedOnly
run from 2026-08-20. Charges read from the settled run objects. Ours on the same query and filters in the release suite of 2026-09-12. The full lane is on
Best Upwork freelancer scrapers, measured; the harness and the per-run numbers are on
GitHub.
Same query, one fifth of the price, seconds instead of a minute, and the history parseforge cannot return.
$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 freeQuestions
- Do parseforge and moxlade return the same freelancers for a query?
- For a plain query, largely yes — every run-time scraper reads Upwork's one result set, and on the 25-row run 23 people were in all four delivering actors. A stored search of ours sorts by our columns;
liveSearchreturns Upwork's order. - Why is parseforge five times the price?
- It charges per row at $0.02266 (free tier) plus a start event, and reads Upwork on every run. Ours answers most searches from a table it already holds and charges $0.004 per row.
- Which one should I use for a one-off list of Top Rated US developers?
- Either delivers it. Ours does it in seconds for $4 per 1,000 with the JSS and rate as filters, and the rows carry the same badge and country parseforge honoured.