moxlade/guides/vs bovi

moxlade/upwork-freelancers vs bovi/upwork-talent-scraper: the actor that returned nothing in six runs, measured against ours

bovi/upwork-talent-scraper lists at $0.019 per row, promises "you only pay for the freelancers actually returned", and had 67 users when we measured the lane on 2026-09-11. That day it returned zero rows in six runs — keyword, URL, URL with filters — with BRIGHTDATA_BROWSER_WS not set, no browser fallback in its log. On the last day it delivered, 2026-08-20, it charged 10 events for 5 rows. This page puts it next to ours. Written by the maker of ours.

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

Disclosure: Moxlade makes one of the two actors on this page. The bovi figures are from our own runs of it on 2026-09-11 and 2026-08-20, read from the settled run objects and its run logs; ours are from our release runs on 2026-09-12 and our table on 2026-09-13.

Side by side

bovi/upwork-talent-scrapermoxlade/upwork-freelancers
how it worksreads Upwork's search result at run time through a managed browseranswers from a census of 30,042 profiles; live read on request
rows on 2026-09-110 in 6 runs (28–64 s each), free25 of 25 on every release run
list price$0.019 per row (tiered to $0.01881 on the paid tier)$0.004 per stored row, $0.005 live, $0.02 per full profile; no start fee
paid, per 1,000 delivered$37.6 on 2026-08-20: 10 profile-result events for 5 rows — it charges the page Upwork returns, not the rows written$4.00; charged events equalled rows on every release run, the zero-row run at $0.00
time, when it delivered12.2 s per row (2026-08-20)25 stored rows in 0.4–1.9 s
filtersa search URL with facets; untestable on the day, every URL run returned nothingbadge, country, region, numeric rate band, JSS, hours, jobs, earnings, hire-again, tenure, recency, skills — 25 of 25
exact earningsyes, with an earnings_hidden flag (80% of its 5 rows)with earnings_precision: exact / band / hidden
Job Success Scorea 0/1 flag (its README says the percentage is not returned)the percentage, on 90.3% of stored rows; a filter and a sort
contracts, feedback, education, employment, languagesnoyes — 395,022 contract rows, 156,836 with feedback both ways
historynofetched_at, versions, changedSince with diffs; private profiles answered
record35 keys (the widest in the lane), incl. search_rank65 typed fields

What bovi does well, when it runs

  • The honest hidden-earnings flag. Its payload nulls a hidden figure and says so with earnings_hidden; two other actors in the lane return 0 for hidden and for missed alike. We do the same as bovi, with a third state for a rounded band.
  • The widest record among the run-time scrapers, with a search rank per row.
  • Free when empty. Its six zero-row runs cost nothing; three other actors in the lane charge a start fee before the first row.

Where ours wins

  • Rows. A census does not depend on a managed browser being configured in the build; the release suite runs before every deploy and every scenario returned its rows.
  • One event per row, after the row is in your dataset — not per page Upwork happened to return.
  • Filters at your thresholds, not a URL's facets.
  • JSS as the score, hire-again, tenure, recency; the contract history; what changed since a date.
  • $4 against $19 list and $37.6 paid.

How this was measured

bovi on 2026-09-11: a keyword run, a plain URL run, a URL with Top Rated + United States, one with a rate facet, a 25-row plain run started in the same second as the delivering actors, and a late retry with the plain Top Rated + US URL — six runs, zero rows, $0. On 2026-08-20 a plain python run for 5 rows, $0.1881. 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.

use it

Rows every time, one event per row, and the history a search payload never carries.

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

Questions

Why did bovi return nothing?
Its run log on 2026-09-11 says BRIGHTDATA_BROWSER_WS not set, no browser fallback and then "page 1: 0 profiles" — the managed-browser access it relies on was not configured in the build we ran. Every run ended SUCCEEDED with zero rows, which is why a 30-day success rate can read 99% while nothing is delivered.
Is bovi's 2× charge a one-off?
It is one measured run (2026-08-20, 5 rows asked, 10 profile-result events charged). We could not add a second data point because bovi delivered no rows on the later day; the run object is what we report.
Do the two return the same freelancers?
When bovi delivered, its payload was the same as crw's for the same person in the same second (rate, exact earnings, hours, job counts identical, different key names). A stored search of ours draws on the same public profiles, held and re-read.