Market Note · 15 September 2026

Federal Contract Labor Rates, FY2025

Every federal agency has to publish, contract by contract, how many contractor labor hours it bought and what it was invoiced against them. Almost nobody reads the file. Here is what it shows for FY2025 — starting with why the number everyone calls a labor rate is not one, which turns out to be the most useful thing about it.

Intelligent Win · Market Intelligence measured on intelligent.win’s contract corpus.

Data as ofService Contract Inventory FY2016–FY2025, acquisition.gov, as loaded 2026-08-06; figures re-verified 2026-09-15

Federal agencies publish a Service Contract Inventory each year. For each service contract it carries two reported elements: the contractor direct labor hours expended, and the total dollars invoiced. Divide the second by the first and you get a per-hour figure.

In FY2025 the median was $147.43 per direct labor hour, across 32,205 contract filings. In FY2024 it was $142.43, across 37,528.

Both years run together through every table, every band and every coverage figure in this piece, and there is a measured reason for that which appears further down.

The per-hour figure falls at every step as reported hours rise — and it does so in both years independently:

Contract size, by reported hours FY2025 FY2024
Under 5,000 hours $162.44 $158.08
5,000 – 25,000 hours $138.84 $132.93
25,000 – 100,000 hours $125.90 $118.51
100,000 – 500,000 hours $104.90 $101.99
Over 500,000 hours $95.31 $97.23

Smallest band to largest: a 41% slide in FY2025, and a 38% slide in FY2024. Monotonic across all five bands, in both years, measured separately.

That independent replication is the whole reason this is publishable. One year’s monotonic slope is a shape; the same shape in a different year, over a different and larger set of reporters, is a pattern.

What it is not is an explanation. Nothing in this file measures why the figure falls as contracts get larger, and this piece does not guess. Larger contracts carry a different mix of work, a different mix of contract types, and a different mix of non-labor cost inside the same invoiced total. Any of those moves this number. The slide is an observation about the record, and it stops there.

$147.43
Median dollars invoiced per direct labor hour, FY2025
$142.43 in FY2024
32,205
Contract filings behind the FY2025 median
37,528 in FY2024
41%
Slide from the smallest contracts to the largest, FY2025
38% in FY2024

Federal Service Contract Inventory, FY2016–FY2025.

It is not a labor rate, and that is the most useful thing about it

The dollars figure in this file is defined by FAR 52.204-14 as “the total dollar amount invoiced for services performed during the previous Government fiscal year under the contract” — and by FAR 52.204-15 in identical wording at the order level. The hours figure is defined separately, in its own paragraph, as contractor direct labor hours.

Two separately defined elements. The dollars element carries no instruction to exclude materials, equipment, travel, or other direct costs, because it was never scoped to labor in the first place. The inventory exists so agencies can track how much of their mission is contracted out — a workforce-reliance measure, not a cost-accounting one. A total-invoiced figure serves that purpose perfectly well without isolating labor.

So the quotient is directional. It behaves closest to a real hourly billing figure on time-and-materials and labor-hour work, where the invoice is contractually tied to hours worked in the same period. It behaves worst on fixed-price work in materials-heavy, equipment-heavy or construction-flavoured categories, where the invoiced total in a fiscal year can be a milestone payment carrying substantial cost that has nothing to do with the hours reported beside it. Our own research on this file measured the same categories of work, invoiced the two different ways, producing composites several times apart.

No contract invoiced $147.43 an hour. That sentence is the one thing this dataset cannot support, and it is the sentence every article written on this query wants to write.

What the figure is good for is comparison — band against band, year against year, on a consistent measure — which is exactly what the table above does and exactly what the rest of this piece is limited to.

One more disclosure that belongs in this section rather than in a footnote. The divisor used throughout is prime direct labor hours. Under DFARS 252.204-7023, DoD’s own reporting instruction folds first-tier subcontractor direct labor hours into the hours a prime reports, where the civilian FAR clause has subcontractors report separately. So “prime hours” is not a consistent quantity across the whole government, and it is the government’s own instruction that makes it inconsistent, not sloppy filing.

Four things we did to try to break it

Test 1 — did we compute the median correctly? No, not the first time.

This is the one worth reading, because it is our own error and internal Red Cell Analyst caught it before anyone else could.

The first version of this measurement selected the wrong row. In the largest size band — contracts over 500,000 reported hours — the FY2025 population is 203 filings. 203 is odd, so the median is unambiguously the 102nd value. Sorted, the three values around the middle are:

rank 101 rank 102 — the median rank 103
$93.4381 $95.3053 $95.8356

We had published $95.84. That is rank 103 — one position above the middle, the classic off-by-one you get from an offset rank rather than a true percentile. The correct figure is $95.31.

Every population count in that first version was exactly right — every one of them, to the row. Every dollar figure was slightly wrong. Counts are hard to get wrong and easy to check; statistics are the opposite, which is why the derivation is now a version-controlled query file with its own recorded output, and why a reader running the stated method gets the digits printed here rather than something close to them.

Test 2 — does the size pattern replicate? Yes, and that is the load-bearing test in this piece. Monotonic across all five bands in FY2025, and independently monotonic across all five in FY2024, on a larger population. A pattern that survives being re-measured on a different year’s reporters is a different kind of claim from one that does not.

Test 3 — is FY2025 completely reported? Possibly not, so FY2024 runs beside FY2025 through every table, every band and every coverage figure here.

Fewer contract-years filed a usable hours-and-dollars pair in FY2025 than in FY2024: 42,118 against 47,157. That is a real drop, and we have not measured what is in it — later filing, genuinely fewer covered contracts, or something else. Rather than explain it, we publish FY2024 beside every FY2025 figure and let the reader see both.

Test 4 — are we counting contracts, or filings? Filings, and the noun matters.

The deduplication key in this file is the contract number plus the referencing vehicle, so a contract running under two different vehicles is two rows. The FY2025 population is 32,205 filings across 30,640 distinct contract numbers — 5.1% more filings than contracts. FY2024 is 37,528 filings across 35,310 distinct contracts.

Every count printed beside a median in this piece is the filings count, because that is the population the median was actually computed over. Publishing the distinct-contract count next to a median computed over filings would be a smaller-sounding number attached to the wrong population, which is how this kind of page goes quietly wrong.

The size slide

Grouped bar chart of median dollars invoiced per direct labor hour by contract size, FY2025 in house gold and FY2024 in house chart blue at a shared zero baseline. The figure steps down at every band in both years: under 5,000 hours $162.44 and $158.08; 5,000–25,000 hours $138.84 and $132.93; 25,000–100,000 hours $125.90 and $118.51; 100,000–500,000 hours $104.90 and $101.99; over 500,000 hours $95.31 and $97.23. The contract filings behind each band, FY2025 then FY2024, run 16,863 and 20,124; 9,419 and 10,992; 4,294 and 4,775; 1,426 and 1,428; 203 and 209.
Contract size, by reported hours FY2025 median FY2025 filings FY2024 median FY2024 filings
Under 5,000 hours $162.44 16,863 $158.08 20,124
5,000 – 25,000 hours $138.84 9,419 $132.93 10,992
25,000 – 100,000 hours $125.90 4,294 $118.51 4,775
100,000 – 500,000 hours $104.90 1,426 $101.99 1,428
Over 500,000 hours $95.31 203 $97.23 209
All filings $147.43 32,205 $142.43 37,528

The band counts add up to the totals, in both columns. A reader can check that with a calculator, and should.

Two details in that table are worth naming rather than leaving to be spotted.

The smallest band is the biggest population. More than half of FY2025’s filings — 16,863 of 32,205 — are filings from contracts reporting under 5,000 hours in the year. The high end of this measure is also its crowded end.

The largest band is the one band that fell year over year. Four of the five bands read higher in FY2025 than FY2024; contracts over 500,000 hours read lower ($95.31 against $97.23). It is also by far the thinnest band — 203 filings — so it is the figure in the table most exposed to a handful of reporters moving.

We publish it because leaving out the one band that moves against the grain is how a table stops being a measurement.

Ten years, and the reason to read the line carefully

The file opens in FY2016. Across the ten years it covers, the median reads higher in every year than the year before it — nine consecutive year-over-year rises, from $121.87 to $147.43, a 21% change over the decade.

Bar chart of median dollars invoiced per direct labor hour for each fiscal year the inventory covers, FY2016 to FY2025, at a zero baseline, with the decade's two endpoints in house gold and the eight years between them in house chart blue. The median reads $121.87, $122.02, $124.85, $125.07, $127.55, $129.11, $133.33, $137.94, $142.43 and $147.43. The contract filings behind each year's median, shown beneath every bar, run 12,196; 17,569; 16,987; 22,617; 27,688; 32,465; 32,347; 36,071; 37,528; and 32,205 — not the same population throughout.
Fiscal year Median Contract filings
FY2016 $121.87 12,196
FY2017 $122.02 17,569
FY2018 $124.85 16,987
FY2019 $125.07 22,617
FY2020 $127.55 27,688
FY2021 $129.11 32,465
FY2022 $133.33 32,347
FY2023 $137.94 36,071
FY2024 $142.43 37,528
FY2025 $147.43 32,205

Now the caveat, and it is a real one rather than a decorative one: the population under that line grew to 2.6 times its FY2016 size, having peaked at 3.1 times in FY2024. FY2016 rests on 12,196 filings, FY2024 on 37,528, and FY2025 on 32,205 — and that fall-back between the last two years is the FY2025 completeness question from Test 3 showing up again. The set of contracts reporting into this file in 2016 is not the set reporting into it in 2025, and a measure taken over a growing, shifting population can move because the population moved.

We have not published a test that separates those two things, so we are not claiming to have separated them. A within-work-category check — holding the type of work constant and asking whether the figure still rises — is the test that would do it. Ours did not survive independent re-measurement, so it is not in this piece and nothing here leans on it.

What is left is still worth printing, stated at its true strength: over the ten years the file covers, the median reads higher every year, and the reporting population grew substantially over the same period. Both of those are facts about the record. Which share of the first is explained by the second is not something this file has told us yet.

That is a weaker claim than the one we could have written. It is the one the evidence currently supports.

What you can actually do with it

Use the band, not the headline. A single government-wide median is a headline. The useful row is the one matching the size of the work in front of you. A 3,000-hour task order and a 600,000-hour services contract sit in the same FY2025 record at $162.44 and $95.31 respectively — $158.08 and $97.23 in FY2024 — and reading either one against the all-filings figure of $147.43 ($142.43 in FY2024) puts you the wrong distance from what the record actually reports for work of that shape.

Read it as a comparison, never as a build-up. This figure carries whatever non-labor cost rode the same invoices. It will not reconcile to a rate build-up and it is not meant to. What it will do is tell you whether the number you have arrived at sits inside or outside what the federal record reports for work of that shape — and where it sits is a question worth being able to answer before someone else asks it.

Know which side of the measure you are on. The closer a contract is to time-and-materials, the closer this figure sits to something recognisable. The closer it is to fixed-price work with real materials content, the further it drifts, in a direction that inflates it.

And check us. The same figures render at intelligent.win/labor-rates, with the filters and the guardrail stated on the page. The page and this piece agree because they read from the same recorded derivation — one query, one constants file — not because two people separately arrived at the same digits.

Methodology
·Source. The federal Service Contract Inventory, as published through acquisition.gov and loaded into our own copy: 821,564 rows spanning FY2016 to FY2025, single load stamp 6 August 2026. The reporting requirement is FAR 52.204-14 and 52.204-15, with DoD implementing through DFARS 252.204-7023. Every figure in this piece was measured 8 September 2026.
·The measure. Total dollars invoiced divided by prime contractor direct labor hours, both as reported by the contractor to the government, both for the same fiscal year. It is a composite, it is not scoped to labor cost, and it is not a labor rate, a billing rate or a price.
·The population, and it travels with every figure here. One row per contract per referencing vehicle per fiscal year, keeping the first of any duplicate key; reported prime hours greater than zero; invoiced dollars greater than zero; and the computed per-hour figure inside a $20 to $500 band, inclusive.
·The guardrail is disclosed because it is a real filter, not a formality. This file is contractor self-reported and unaudited, and it contains values that are not plausible as anything — in the two columns this measure actually uses, the highest per-hour figure computable anywhere in the FY2025 file is $10.7 billion an hour, from a single filing’s invoiced dollars over its own reported prime hours. The band excludes both tails.
·And the band’s bite is not small, which is worth stating rather than leaving to be subtracted. Of the 42,118 FY2025 rows carrying a computable per-hour figure, the band removes 9,913 — 23.5%: 1,011 below $20 and 8,902 above $500, leaving the published 32,205. The exclusion runs roughly nine to one toward the top, so the guardrail moves the published median down, not up. (The exclusion counts above and the $10.7 billion figure were measured by the adversarial review of 15 September 2026 against this same table under these same filters; they are the only figures in this piece that do not come from the recorded output block.)
·The inclusive convention is not a rounding preference either: three FY2025 rows sit at exactly $500 an hour, and none at exactly $20 — those three rows are the entire difference between the inclusive population of 32,205 and the exclusive one of 32,202, which is what pins the convention to inclusive.
·Medians only. Nothing in this file is ever summed or averaged here. A single self-reported outlier swamps a total, and this source has them. Every dollar figure in this piece is a median computed as a true percentile over the stated population — not an offset rank, for the reason in Test 1.
·Hours. The divisor is the prime direct labor hours element. A separate published roll-up folding in subcontractor hours exists; it is thinly and inconsistently filled in recent years and unusable across the full decade, so it is not used anywhere here. Note the DFARS asymmetry above: on qualifying DoD contracts the government’s own instruction puts first-tier subcontractor hours into the prime’s reported figure.
·Coverage is partial, and its limits are not knowable from the file. Of the contract-years that appear in the inventory at all, roughly half carry a usable hours-and-dollars pair: 42,118 of 80,394 in FY2025 (52.4%), and 47,157 of 87,075 in FY2024 (54.2%). Those denominators are contract-years that filed something. A covered contract that filed nothing is not a row in this file at all, so how much of the covered universe reports is not measurable here in either direction — and the true share can only be lower than 52%, never higher. DoD reports against a higher dollar threshold than civilian agencies, and defense work is visibly under-represented in this file relative to its real share of federal services buying.
·Fiscal years run 1 October to 30 September.
·Not published here, and why. No government-wide or per-agency total of any kind, for the reason above. No breakdown by agency or by contract type, and no within-work-category trend test: those cuts exist in our working notes but have not been re-measured against a recorded derivation, and the standing rule on this source is that a figure whose method is not written down does not ship. No prediction, no forecast, and no claim about why the figure falls as contracts get larger. No named company appears anywhere in this piece; this is an ecosystem-level measurement.
·Analysis was run read-only. No figure here is estimated, modelled, or projected; each traces to a specific recorded query.

These numbers came out of the platform, not a spreadsheet.
The same contract corpus behind this note — 2.6 million contracts, reconciled against the government’s own published totals before anything publishes — is what the product runs on. If you want to see how it’s assembled and checked, that’s written up in full.