2 corpora·1 MCP endpoint·2 Apify actors→

We keep the record. Your agent asks it.

Upwork freelancer and buyer data — ask it as an agent, run it as an actor, or, soon, call it as an API. You get answers or rows. The corpus never leaves.

Get Upwork dataon the Apify Store
Search Upwork freelancers by rate, Job Success Score, badge and country — exact earnings, hours, the full contract history — in seconds, $4 per 1,000 rows. Ready-made tasks on the store, code in Python, JavaScript and curl, and a guide for each job: export to CSV, filter by the numbers a client cares about, enrich a list of profiles, compare with every other Upwork scraper on the store on one day. For the buyers behind anonymous postings — who they are and what they have paid — the record is asked over MCP at buyer.moxlade.com.
ask, over MCP Who is the client behind this anonymous Upwork posting, and do they actually pay?
client_since
2019-04-11
hires
128
total_paid
$412,900
median_hourly
$47
jobs_posted_unhired
19
One of 15 tools on buyer.moxlade.com. An illustration of the record's shape; the figures are not a real client's.
ask, as an actor Top Rated Python developers in the United States, $50–100 an hour, Job Success 90 or better.
matching profiles
139
rows delivered
25 of 25
rate inside the band
25 of 25
run time
1.9 s
charged
25 × $0.004
A release run of moxlade/upwork-freelancers, 2026-09-12. Every filter is a column of the census.
companies named13,029behind anonymous postings
contracts with a rate on record165,515paid, not posted
freelancer profiles, in full30,04271,351 indexed, refreshed daily
freelancer contracts on record395,022156,836 with feedback both ways

Counts read from our tables on 2026-09-04 (buyers) and 2026-09-13 (freelancers).

Ways to ask.

An agent asks one question at a time and wants an answer it can reason on. A pipeline wants rows it can join, filter and schedule. An app wants one HTTP call it can bill to a key. Each reads a record we keep; none receives the corpus.

01 · over MCP For your agent One endpoint, 15 tools, MCP 2026-07-28 over Streamable HTTP. Your agent connects with one line and signs in; every call is metered, capped and logged to your account. Answers, not exports: search is bounded by a required filter and a recent window, and there is no query that returns the corpus.
02 · as Apify actors For your pipeline The same records as rows: typed fields, CSV, JSON or Excel, one HTTP call or a schedule. Pay per delivered row, no start fee, a zero-row run costs nothing. Ready-made example tasks on the store and working code in Python, JavaScript and curl.
03 · as a metered API soon For your app One HTTP call from your own code, a key of your own, pay by the row — no marketplace and no plan between you and the record. The two Upwork corpora open this way first. Not live yet; the slot is here so the door lands as an addition.

The register.

One line per corpus, in the order they opened. Each opens the doors that fit it — an agent, an actor, soon an API — and the line says which. A line is written when a corpus is old enough to be worth asking; watching starts long before that.

001open · agentopened 2026 · records since 2024-03
Upwork buyers, postings and rates. Who the anonymous client really is, what they have paid before, and what the market charges for the skill you are quoting. 13,029 companies named, 21,430 buyers with a contract history, 165,515 contracts with a rate, 176,734 reviews of buyers written by freelancers.
what we keep
a corpus — buyers, postings and rates, records since 2024-03
doors
agent, over MCP at buyer.moxlade.com/mcp/ · API soon
auth
sign in, or a token; one account either way
002open · actoropened 2026-09 · re-read daily
30,042 full profiles (71,351 indexed, 153 countries), every version kept. What a profile page hides: exact earnings where Upwork exposes them, hours, Job Success Score, hire-again rate, and 395,022 contracts with the client's feedback and the freelancer's feedback about the client — plus education, employment, languages, certificates.
what we keep
a corpus — every profile version, re-read daily
doors
actor, on the Apify Store — search, look up, live read · API soon
filters
rate band, JSS, badge, country, hours, earnings, tenure, recency, skills
price
$4 / $5 / $20 per 1,000 rows · no start fee
003watchingsince 2026-09-06 · not a corpus yet
Not a corpus yet — a monitor. Subreddit listings, keyword search and full comment trees read live, and a memory of what each scheduled run already delivered, so the next run returns only what is new. A line is written here when the record is old enough to be worth asking.
what we keep
watching — live reads, and a memory of what each run delivered
doors
actor, on the Apify Store — listings, searches, threads, onlyNew
price
$2 per 1,000 posts · $1 per 1,000 comments · no start fee

The actors, on the Apify Store.

Each one is a turnstile over a record we keep or a source we watch. One event per delivered row, charged after the row is in your dataset; maxItems is also your spending cap.

apify.com/moxlade/upwork-freelancerson the store
Upwork Freelancer Search — rates, earnings, JSS, work history Search the census by the numbers a client cares about, look up a list of profiles, or read a profile live with every contract. 65 typed fields per row. 25 stored rows in 0.4–1.9 s of run time on the release runs; every filter 25 of 25.
stored row
$4.00 per 1,000
live search row
$5.00 per 1,000
full profile
$20.00 per 1,000
apify.com/moxlade/reddit-scraperwatching
Reddit Scraper — posts, comments, search, subreddit monitoring Subreddit listings by new, hot, top or rising; keyword search sitewide or inside chosen subreddits; post URLs with their comment trees. No login and no proxy to set up. onlyNew on a schedule delivers only what appeared since the last run, and a run with nothing new costs nothing.
post
$2.00 per 1,000
comment
$1.00 per 1,000
start fee
none

Guides.

How to get the data the actors return, and how they compare with the rest of the store — measured on dated runs, with the harness public and the code ready to run.

What we keep, and how you reach it.

Two questions, asked separately. The register answers both for every line.

what we keepA corpus, or watchingA corpus is recorded when it happened, re-read on a schedule and kept in every version, so it answers about yesterday: what the rate was in March, who was there before you, what changed since. Watching is a source read live, with a memory of what each run already delivered — useful on a schedule, not yet deep enough to ask about the past. A line moves from one to the other when the record is old enough to be worth asking.
how you reach itAn agent, an actor, or an APIAs an agent, over MCP: one question, one answer, metered to your account. As a pipeline, through an Apify actor: rows for the query you ran, paid per row. As an app, through a metered API: one HTTP call and a key of your own — soon. Not every corpus has every door; each opens the ones that fit it, and the register says which.

What a corpus is here.

01Not a dumpYou never receive the data. You receive answers, one call at a time, or rows for the query you ran. Answers are metered, capped and logged.
02Not a scrapeAnyone can fetch a page today. A corpus answers about yesterday: what the rate was in March, who was there before you, what changed since — because it was recorded when it happened and kept.
03Not an appNothing to log into and no dashboard to learn. The endpoint, the actor and the API are the product. You bring the agent and its subscription, or the pipeline; we never run inference.
04Not your accountEvery record is compiled from public postings and public profiles with anonymous sessions. Nothing is read through a buyer's login, and a private profile is answered as private, not silently dropped.