The federal contracting data layer

GSA Labor Rates

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.

What these rates are, and what they are not. These are awarded not-to-exceed ceiling rates: the maximum a vendor may bill for a labor category on its schedule, fully burdened (they already include fringe, overhead, G&A, and fee). They are worldwide ceilings, so real task-order rates are typically negotiated somewhat below them. They are a market read for a should-cost or IGCE labor estimate, and a sanity check on a proposed rate. They are not your own cost build-up, not a wrap-rate calculator, and not a win predictor. The evidence goes in front of you; the bid decision stays with you.
On this page:

What is a fair labor rate on a GSA schedule?

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 categoryRatesp25Medianp75
Subject Matter Expert9,300$158$202$255
Program Manager7,600$150$183$222
Data Scientist1,100$136$168$202
Project Manager11,500$125$152$184
Systems Engineer4,800$112$139$173
Software Engineer3,400$110$139$172
Cybersecurity / InfoSec Analyst2,000$105$131$163
Business Analyst4,000$99$123$153
Management Analyst2,000$93$119$156
Systems Administrator2,000$93$115$144
Technical Writer4,000$77$96$119
Help Desk / Support2,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.

Ceiling rate vs. the rate you will actually bill

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.

What moves a labor rate: education and experience

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.

Education

Across engineering and technical categories, the required education level steps the median ceiling rate up cleanly:

Minimum educationMedian rate
High school$89
Associate's$107
Bachelor's$138
Master's$186

Experience

The minimum years of experience a rate is priced at moves it further, roughly tripling from entry level to the most senior band:

Minimum experienceMedian 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.

How much to escalate year over year

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.

Read a competitor's rate card

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.

Scope a rate to your industry (NAICS)

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.

Wrap rates, SCA floors, and where CALC fits

Three rate concepts get conflated constantly. Getting them straight is half of pricing labor:

How to benchmark labor rates yourself

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:

  1. Untangle the category names. CALC has no controlled vocabulary. "Program Manager," "Program Manager II," "Sr. Program Manager," and "PM" are separate rows, and there are over a hundred thousand distinct category strings. Benchmark on the wrong slice of them and your average is wrong. You have to cluster the synonyms yourself.
  2. Work around the result cap. The tool and API cap a query at 10,000 results, so a broad category cannot be pulled in one pass; you shard it by filters and stitch the pieces back together.
  3. Remember these are ceilings, not actuals. The rates are worldwide not-to-exceed maximums. Real billed rates run lower, and the tool cannot tell you by how much for your scope; that reconciliation is on you.
  4. Filter to a comparable set. Education, minimum experience, business size, worksite, and the SIN, crosswalked to your NAICS. A raw title match mixes non-comparable work.
  5. Do the escalation math. The awarded rates sit in different base years. To compare them or project option years, you normalize and escalate yourself; the tool does none of it.
  6. Handle competitors by hand. There is no clean per-vendor rollup: reading a named competitor's rate card across a role is a manual exercise, or a paid research request elsewhere.
  7. Do it for the whole labor mix, and keep it current. One role is easy. A full basis of estimate is a dozen or more categories, each benchmarked, per SIN, refreshed every quarter as schedules are modified. That is the part that never ends.

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.

The labor-rate endpoint

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.

GET /api/v1/pricing/labor-rates?labor_category=Program%20Manager&education_level=BA&min_experience=5&max_experience=15 "rate_distribution": { "sample_size": 5259, "unit": "USD_per_hour", "percentiles": { "p10": 127.99, "p25": 154.67, "p50": 184.76, "p75": 221.56, "p90": 264.78 } }, "escalation": { "basis": "median year-over-year change in awarded ceiling rate", "median_next_year_pct": 2.6, "median_second_year_pct": 2.7 }, "category_breakdown": [ { "labor_category": "Program Manager", "sample_size": 1336, "median": 182.42 }, { "labor_category": "Program Manager II", "sample_size": 318, "median": 197.21 } ]

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.

Where this fits: should-cost, IGCE, price-to-win

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.

Plans and access

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.

See full pricing.

Frequently asked questions

What is the average GSA labor rate for a program manager in 2026?

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.

What is the difference between a ceiling rate and the actual awarded rate?

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.

What is a fully burdened or wrap rate?

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.

How do I find a competitor's GSA Schedule labor rates?

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.

How do I build an IGCE for labor?

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.

What is GSA CALC / CALC+?

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.

How much should I escalate labor rates year over year?

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.

How is an SCA wage determination different from a GSA schedule rate?

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.

Why use percentiles instead of an average?

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.

Are these rates fully burdened, and do they include profit?

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.

Can I just build this from GSA CALC myself?

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.

Where does the data come from and how fresh is it?

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.

Related guides