Research method

Methodology

How the numbers on this site are produced, what they mean, and what we refuse to publish. Last updated July 3, 2026.

What we monitor

We continuously monitor publicly visible Upwork job postings and have done so since July 2025. As of July 2026 the corpus holds 1.5 million postings from 588,000 client accounts, growing by roughly 120,000 to 150,000 postings per month. Each posting is observed repeatedly over its life, not captured once, which is what makes outcome analysis possible.

We publish absolute volumes, never coverage percentages. We have not measured what share of all Upwork postings our monitoring captures, so we do not claim one.

Outcome resolution: the four-way taxonomy

Most published Upwork statistics count postings. Ours track what happened to them. Every posting is followed until it reaches a final state:

  • FILLED: at least one freelancer was hired.
  • UNFILLED: the posting closed without any hire.
  • CANCELLED: the client withdrew the posting.
  • EXPIRED: the posting aged out without resolution.

A posting is resolved once it carries one of these labels. Fill rate = FILLED as a share of resolved postings.

The cohort rule (why our fill rate differs from other published numbers)

Fill rates computed only among resolved recent postings are systematically inflated: jobs that hire tend to close within days, while jobs that never hire linger open for weeks before closing or expiring. Measure a young cohort that way and the fast, successful closures dominate. Count all recent postings instead and unresolved rows depress the observed rate. Our April 2026 resolved subset, measured in early July, shows a misleading 55.8% fill rate for the first mechanism.

Our published fill rates therefore use stable cohorts: postings old enough (roughly four months) for nearly all observed outcomes to settle. Current stable-cohort baseline (postings from October 2025 through February 2026, n = 617,336 resolved): 43.9% filled, 41.3% unfilled, 8.7% cancelled, 6.1% expired.

This is also why published Upwork hire rates disagree with each other:

SourcePublished numberDisclosed denominator and window
GigUp live dashboard, accessed July 3, 202622.8%69,231 matched postings in its last-month view; jobs with a hire divided by all matched jobs
Vollna 2024 report, published January 7, 2025; updated March 24, 2026; accessed July 12, 202638%Closed projects in 2024, within a study of more than 5 million projects across two years
This site43.9%Resolved postings from monitored cohorts old enough for nearly all observed outcomes to settle

GigUp updates its selected period continuously. The cited values preserve the July 3 snapshot used for this edition and may differ from the current live page.

The estimates are not directly interchangeable. GigUp’s young all-matched denominator is exposed to unresolved outcomes. Vollna explicitly restricts its 38% figure to closed projects, so its difference from ours cannot be attributed to unsettled postings. Window construction, source coverage, taxonomy, and outcome rules may also contribute. Directionally, our category ranking broadly matches GigUp’s July 3 snapshot, while Vollna also reports entry-level projects as its highest-filling experience tier. These are cross-checks, not replications.

Client-level metrics

Client attributes (payment verification, lifetime hires, lifetime spend, feedback score) are captured at each observation of each posting. Client-level classifications use the maximum value seen across all observations. Missing lifetime-hire counters are treated as zero before that maximum is computed, so a client with only missing counters remains in the zero-hire bucket. Postings from the last 14 days are excluded from outcome-dependent cuts so fresh postings are not placed in a zero-hire group before their outcomes have had time to develop.

Client-quality label discipline

  • “Real” is not a stored or inferred row-level label. The analysis does not authenticate the person behind an account or classify an individual posting as safe, fake, or fraudulent.
  • Payment-verified means the platform field was true when observed. Proven hirer additionally requires the maximum observed lifetime-hire counter to be at least one. Neither guarantees intent on a current posting.
  • Chronic non-hirer means a pre-cutoff client with 5 or more observed postings, a maximum observed lifetime-hire counter of zero, and no observed filled posting.
  • Cross-client template cluster means descriptions tied to different client IDs reached at least 0.9 estimated Jaccard similarity on 5-word shingles and were merged into one cluster. “Template farm” and “ring” are shorthand descriptions, not proof of common control.
  • Bot-shaped means the client matches both the chronic-non-hirer definition and membership in a cross-client template cluster. It is a proxy label, not a confirmed bot, scam, or fraud finding.

Time-to-fill

Time-to-fill measures elapsed days from posting publication to detected closure, for filled postings. Buckets are half-open: under 1 day, 1 to under 3 days, 3 to under 7 days, 7 to under 14 days, and 14 to under 30 days. Exactly 30 days belongs in a 30-days-or-more bucket. No fills landed in that last bucket among the 15,970 April 2026 fills observed for the published table. Closure detection runs on a cadence of roughly two hours, so figures are accurate at day granularity. We publish time-to-fill only for cohorts from April 2026 onward; before that date our closure timestamps reflect a retroactive backfill rather than true close times, and we treat them as unusable for duration analysis.

What we deliberately do not publish

  • Per-posting or per-client raw data. Everything published is an aggregate or a bucket.
  • Applicant-count statistics. Our stored applicant figures sit well below freelancer folklore and pass internal consistency checks, but until we finish validating what the counter measures against live postings, no competition statistics ship.
  • Pre-April-2026 time-to-fill (see above).
  • First-posting flags. The signal is unreliable in recent data and is excluded until traced.
  • Coverage percentages (see “What we monitor”).

Known limitations

  • Fill rates describe resolved postings; a posting can hire after unusually long delays and outcome labels are only as current as our last observation of the posting.
  • Cohorts from July through September 2025, our first months of monitoring, show fill rates of 36-42% versus 43-45% afterward. We verified this is not a category-mix artifact and have not yet established the cause, so those cohorts are excluded from headline claims and disclosed here instead.
  • A legacy timestamp offset affects roughly 830,000 early rows at sub-day precision. It has no effect on day-granularity statistics.
  • 51 closed postings carry no outcome label (0.005% of closed postings). 38 postings show reopened-after-closure edge states. Both are excluded from fill-rate denominators only in the sense that unlabeled rows cannot be counted as resolved.
  • Numbers describe the postings we monitor and may differ from Upwork’s internal accounting.

Corrections

If you believe a published number is wrong, write to contact@freelancingstats.com. Corrections are noted inline with the original figure struck through, not silently edited.

Niche reports are coming

Tell us what you do. We'll measure the market around it.

Upcoming deep dives cover demand volume, real rates, fill rate, time-to-fill, and client quality. The most-requested niches get researched first.

See exactly what you get: view a sample report

Research updates only. No platform noise.