Every agency on Upwork has a public profile (upwork.com/agencies/<id> or upwork.com/ag/<handle>). Signed out, that page publishes: total earned, total jobs, total hours, Job Success Score, Top Rated / Top Rated Plus / Expert-Vetted status, the hourly rate range, minimum project size, member-since date, team size bracket, year founded, skills, services, featured clients, languages and awards. We read exactly those fields, from the same data the page renders from, and store them with the time of reading.
Nothing on this site comes from a signed-in session, a scraped client list, or a private API. If Upwork hides a figure (earnings can be hidden by the agency), the field is blank here too.
Agencies enter the index through Upwork's own directory, category by category (the same 6 categories), so the first thing a visitor sees is a ranking inside the category they searched, not a global list dominated by one vertical. The index currently holds 7,313 agencies, observed between May 30, 2026 and Oct 29, 2026; 1 of them from Internet Archive captures used as historical observations.
Other leaderboards print an "MRR" for every agency. The common recipe takes the most recently ended contract, or the last six months of visible contract values, and divides. That is not a revenue figure: the public page does not show when money was earned, contract values are shown only for hourly work, and one large contract ending last week says nothing about next month.
We do something slower and more honest. Total earned is a lifetime counter that Upwork maintains. Read it twice, at least 14 days apart, and the difference is money the agency actually earned in that window. We annualise the newest window of up to ~90 days and call it the run-rate. It appears only once two observations exist; until then the page says "pending" rather than inventing a number. Archived captures of the page count as earlier observations, which is why some agencies show a run-rate on day one.
Two labelled estimates sit next to it. Lifetime pace is total earned divided by years on Upwork, a floor on historical throughput. Realised hourly is total earned over billed hours; fixed-price work inflates it, so it is shown beside the rate card, not instead of it.
A 0–100 sorting aid, fully visible on every page:
| Scale | 40 | log₁₀ of lifetime earnings; $10M earns full marks |
| Quality | 20 | Job Success Score (unrated agencies sit at half) |
| Trust | 15 | Top Rated Plus 1.0 · Top Rated 0.7 · Expert-Vetted +0.3, capped |
| Momentum | 15 | measured run-rate vs lifetime pace; with one observation, recency of the last contract |
| Team | 10 | declared size bracket |
The default ranking is by lifetime earnings, because it is the one figure nobody can argue with. The score exists so that a young, well-reviewed, fast-growing agency is visible next to a large old one.
Marketplace figures come from Upwork Inc.'s filings with the U.S. Securities and Exchange Commission: GAAP revenue, net income and gross profit from the XBRL company facts; GSV, active clients, GSV per client, the marketplace/enterprise split and adjusted EBITDA from the earnings press release attached to each quarterly 8-K. Each row links to its filing. Community items come from public feeds and are labelled as such.
The index started with a handful of categories and grows deliberately: each new category is crawled completely before the next is added, so a category page is never half a list. Pages are re-read on a rolling schedule; claimed pages weekly. The build date is in the footer and every agency page shows when it was last observed.
If a figure here does not match your Upwork page, claim the page and we re-read it the same day. Agency owners can also ask for the page to be unlisted; we honour that within 24 hours and keep only the anonymised row so category totals stay right. This site is independent and not affiliated with Upwork Inc.