What federal contractors charge per hour on GSA Schedule contracts, by role, education, experience, and vendor, read from the awarded record.
What does a federal contractor bill per hour? On a GSA Multiple Award Schedule (MAS), the answer is on the record: every schedule holder's awarded labor rates are public. This page turns roughly 262,000 of them into percentile benchmarks by role, education level, years of experience, and vendor. As a first anchor, the median awarded ceiling rate runs about $183/hour for a Program Manager, $139 for a Software Engineer, and $123 for a Business Analyst. Every figure below is computed from awarded GSA Schedule labor categories, not a salary survey and not a single blended average.
There is no single rate for a role, because a role is a range. Below is the awarded ceiling-rate distribution for the labor categories contractors compete on most, read as percentiles: the 25th, the median, and the 75th. The middle-half spread (p25 to p75) is the useful band. A rate at the 25th percentile is aggressive; the 75th is on the high side of the market.
| Labor category | Rates | p25 | Median | p75 |
|---|---|---|---|---|
| Subject Matter Expert | 9,300 | $158 | $202 | $255 |
| Program Manager | 7,600 | $150 | $183 | $222 |
| Data Scientist | 1,100 | $136 | $168 | $202 |
| Project Manager | 11,500 | $125 | $152 | $184 |
| Systems Engineer | 4,800 | $112 | $139 | $173 |
| Software Engineer | 3,400 | $110 | $139 | $172 |
| Cybersecurity / InfoSec Analyst | 2,000 | $105 | $131 | $163 |
| Business Analyst | 4,000 | $99 | $123 | $153 |
| Management Analyst | 2,000 | $93 | $119 | $156 |
| Systems Administrator | 2,000 | $93 | $115 | $144 |
| Technical Writer | 4,000 | $77 | $96 | $119 |
| Help Desk / Support | 2,200 | $62 | $81 | $105 |
Median current-year not-to-exceed ceiling rate, in dollars per hour, from awarded GSA Schedule labor categories. Titles vary between vendors, so each row pools the awarded variants of the role (a "Program Manager" reads across "Program Manager II", "Senior Program Manager", and so on); the percentiles smooth over the naming noise. Rate counts are rounded.
The single most common misread of this data: a schedule ceiling rate is not the rate work is actually performed at. It is the awarded maximum. On a real task order, rates are negotiated down from the ceiling, and independent analyses put actual billed rates roughly 10 to 20 percent below the not-to-exceed ceiling, varying by order size, competition, and geography.
So read these numbers as the top of the band. For a competitive bid, the realistic target usually sits in the lower-middle of the range, around the 25th to 50th percentile, not at the ceiling. The ceiling tells you what the market has been allowed to charge; where you price inside it is the judgment.
Two things move a labor rate more than the title does. Both are on the record, and both are what a defensible should-cost estimate adjusts for.
Across engineering and technical categories, the required education level steps the median ceiling rate up cleanly:
| Minimum education | Median rate |
|---|---|
| High school | $89 |
| Associate's | $107 |
| Bachelor's | $138 |
| Master's | $186 |
The minimum years of experience a rate is priced at moves it further, roughly tripling from entry level to the most senior band:
| Minimum experience | Median rate |
|---|---|
| 0 to 2 years | $88 |
| 3 to 5 years | $120 |
| 6 to 10 years | $156 |
| 11 to 20 years | $206 |
| 20+ years | $236 |
Business size is a smaller but real factor: the median ceiling rate on other-than-small vendors runs about $136 against $125 on small businesses, the burden difference the large primes carry. This is why a benchmark is only honest when it is read against your own lane: your role, your education and experience floor, your business size.
A proposal has to price the option years, not just the base, and justify the escalation it applies. The awarded record answers that too. The typical year-over-year change in the ceiling rate is about 2.7 to 2.8 percent, and it holds roughly flat from the first option year into the second, measured as the median change across the awards that carry out-year pricing. That is a defensible starting escalation to build option-year rates from, tied to what the market actually awarded rather than a flat guess.
Because the awarded rates carry the vendor, you can read one company's schedule rate card: what a specific competitor, or your own firm, has been awarded for a category. It is the fastest way to see where your number sits against a named incumbent. As a concrete example, Booz Allen Hamilton's awarded Program Manager rates run a median near $252/hour against a market median of about $183, the burden and positioning of a top-tier prime made visible. Scope any role to a vendor with the vendor filter on the endpoint.
A labor category means something different under an IT schedule than under an engineering or logistics one. Each rate carries the Special Item Number (SIN) it was awarded under, and SINs are aligned to NAICS, so you can scope a role to your solicitation's industry: an "engineer" rate under IT systems design (NAICS 541512) reads differently from one under engineering services (541330). That crosswalk, SIN to NAICS, is one of the pieces the free tools leave you to assemble by hand.
Three rate concepts get conflated constantly. Getting them straight is half of pricing labor:
You do not need us for this, and we will not pretend otherwise. GSA publishes the awarded ceiling rates for free through the CALC+ tool at buy.gsa.gov, and there is a public API behind it. For a one-off "what is the going rate for a Program Manager" question, that free tool is the right answer, go use it. The headache is not the single lookup. It is everything around doing this repeatably, at the scope pricing actually needs. Here is the real workflow, and where each step turns into a project:
Every one of those steps is real, and none of it is secret. If maintaining that is worth your time, the data is public, go build it. If not, that is exactly what the endpoint below is for: it returns the distribution, the escalation, the per-vendor cut, and the NAICS scope in one call, kept current.
Pass a labor category and, optionally, an education level, experience range, NAICS, or vendor. The endpoint returns the awarded ceiling-rate distribution as percentiles, the typical out-year escalation, real comparable rates, and, when your match pools several title variants, how it breaks down so you can narrow it.
Scope it to one vendor's rate card with &vendor=booz%20allen, or to an industry with &naics=541512. A query with too few rates comes back with the nearest real category names to search instead, so a typo does not dead-end. Full labor-rate API reference.
Labor rates are one half of pricing a services bid. Contract value is the other. Contractors and contracting officers reach for both under several names:
For the other half, what a contract like this is worth as a whole, see the federal contract pricing benchmarks: award-value distributions by NAICS, contract type, and set-aside, with a price-position read. Labor rate plus contract value is the full should-cost picture, and both are read from the same awarded record.
The labor-rate endpoint is on every paid plan. Unlike the contract-value benchmark and position endpoints, it carries no separate daily quota: it is basic public data, so it runs under the standard per-key rate limit (1,000 requests per hour on paid plans), enough to price a full labor mix, not a handful of lookups.
Across awarded GSA Schedule labor categories, the median not-to-exceed ceiling rate for a Program Manager is about $183 per hour, with the middle half of awards running roughly $150 to $222. A Software Engineer runs about $139 at the median, a Data Scientist about $168, and a Business Analyst about $123. These are fully burdened ceiling rates; actual billed rates on task orders typically run 10 to 20 percent below.
A ceiling rate is the not-to-exceed maximum a vendor may bill for a labor category on its GSA schedule. The actual rate on a task order is negotiated down from that ceiling and, by independent analyses, tends to land 10 to 20 percent lower, depending on order size, competition, and geography. Use the ceiling as the top of the band, not the expected price.
A fully burdened rate is an employee's direct labor cost loaded with fringe, overhead, and general and administrative expense, plus fee. The "wrap rate" is the multiplier applied to base labor to reach it. GSA ceiling rates are already fully burdened prices, so they are what a wrapped rate is compared against, not a way to compute your own wrap rate.
Awarded schedule rates are public and carry the vendor, so a competitor's rate card is readable. Doing it by hand across a role means filtering the awarded data to that vendor and clustering their category variants. The labor-rate endpoint does it in one call with a vendor filter, returning that vendor's rate distribution for the category.
An independent government cost estimate for labor is built category by category: identify the labor mix, the hours per category (the level of effort), and a defensible loaded hourly rate for each, then sum hours times rate with documented rationale. Awarded GSA ceiling rates are a standard basis for the rate; GSA's CALC+ tool has a dedicated IGCE mode.
CALC is the Contract-Awarded Labor Category tool, now branded CALC+, which publishes awarded not-to-exceed ceiling rates from GSA Multiple Award Schedule contracts. It has two modes: an awarded-contract mode (real schedule prices) and a separate mode built on Bureau of Labor Statistics wage data. The rates on this page are the awarded-contract mode.
The awarded record shows a typical year-over-year increase of about 2.7 to 2.8 percent, roughly flat from the first option year into the second, measured as the median change across the awards that carry out-year pricing. That is a defensible starting point for option-year escalation, tied to awarded data rather than a flat assumption.
A Service Contract Act (now Service Contract Labor Standards) wage determination is a Department of Labor minimum wage plus fringe for non-exempt service workers in a locality. It is a mandatory floor and sits well below a fully burdened schedule ceiling. A wage-determination minimum is not a market rate.
A single average hides the spread and is pulled around by outliers. The median and the interquartile range (p25 to p75) describe the rate you are actually pricing, and the band is what tells you whether a proposed rate is aggressive or high.
Yes. GSA ceiling rates are fully burdened not-to-exceed prices: they already include fringe, overhead, general and administrative expense, and fee. They are prices, not raw wages.
You can; GSA publishes the data free through CALC+ and a public API, and for a one-off lookup that is the right tool. The work is in doing it repeatably: clustering the hundred-thousand-plus distinct category names, working around the 10,000-result cap, crosswalking SIN to NAICS, adding escalation math, reading competitors by vendor, and keeping a whole labor mix current every quarter. The endpoint collapses that into one call and keeps it fresh.
Awarded GSA Multiple Award Schedule labor categories, roughly 262,000 ceiling rates across thousands of vendors, from GSA's Contract-Awarded Labor Category data, refreshed daily.