NOTICEBuilt on public records from USASpending.gov and SAM.gov. Not affiliated with any government agency.
Guide · 2026 edition

Federal Contract Pricing Guide 2026: How Small Primes Price Federal Bids

Most small federal contractors lose bids the same way: they guess at price. They take their commercial rate, add 10% for "federal markup," and hope. The contracting officer opens a Price Reasonableness Determination, sees their number land at the P15 of historical awards, and quietly moves the file to a different bidder.

This guide walks through the actual math the winners use. Every figure here traces to public USASpending records. No estimates, no proprietary data, no "industry sources." If you bid federal work four or more times a year and you're under $50M in revenue, this is the version of pricing strategy that costs you nothing and changes your win rate.

1. Why pricing is the leak — not your past performance

Federal contractors lose for one of three reasons: technical non-compliance (you missed a Section L requirement), past performance gap (you don't have the contracts of similar size and scope), or price unreasonable (your number is too far from the historical band).

The first two are hard to fix in a 30-day response window. Past performance especially takes years to build. But pricing is solvable on a per-bid basis — and pricing is where the clearest waste sits.

When a contracting officer evaluates price reasonableness, they pull the same data you can: historical awards in the same NAICS, similar period of performance, similar place of performance. Your bid lands somewhere on that distribution. Land below P10 and they flag "unrealistic — likely quality risk." Land above P90 and they flag "not competitive." The sweet spot is somewhere between P25 and P75, and where you bid in that band depends on your specific differentiators.

The leak: small primes typically bid at or below P25 because they're scared of looking expensive. The data shows winning bids actually cluster between the median and P75. If you're consistently bidding 30-40% below median, you aren't winning more — you're winning the same number of bids and getting paid 30-40% less when you do. That gap is often five-figure annual money on four bids a year.

2. P10, P25, P50, P75, P90 — what each one actually means

Percentile = the position of a value in a sorted distribution. If you line up every contract awarded in your NAICS over the last 24 months from smallest dollar amount to largest, the percentile tells you where a specific value falls in that line.

  • P10 — 10% of awards came in below this number. This is the "cheap end." Bids here look unrealistic unless you have a structural cost advantage (e.g., AbilityOne, Hubzone with lower wage band, or a true tech-enabled productivity edge).
  • P25 (lower quartile) — 25% of awards came in below here. This is where price-sensitive small primes cluster. Defensible but leaves money on the table on contracts you would have won anyway.
  • P50 (median) — the middle of the distribution. Half of awards came in below, half above. The single safest point estimate when you have no other signal.
  • P75 (upper quartile) — 75% of awards came in below here. Winners with strong past performance + clear technical differentiation routinely price here.
  • P90 — 90% of awards came in below this number. The "expensive end." Acceptable only when you're the named incumbent, have a true monopoly capability, or the solicitation is structured to discount price (highly qualified evaluation or LPTA with strict technical floors).

Percentiles compute on the dollar value of each award. They don't care whether you bid hourly, fixed-price, or IDIQ — they treat each award as a single dollar value at the contract level.

The reason this matters: percentile bands are agency-agnostic. A VA Medical Center janitorial contract and an Army base janitorial contract land on the same NAICS 561720 distribution. Both buyers use the same reference data when evaluating your price. You should be using the same data when writing it.

3. Where to bid in the band — the only honest answer

There is no single right answer. The right answer depends on three signals: who's the agency, what's the evaluation criteria, and what differentiates you against the likely incumbent.

If the solicitation is LPTA (lowest price technically acceptable):

Bid P25 to P40. The evaluator's only job is to confirm you meet the technical minimums and pick the lowest price. Going below P25 makes you look like you'll cut corners; going above P50 loses you the bid by definition.

If the solicitation is Best Value (or Trade-Off):

Bid P50 to P65. Best Value lets the evaluator pay more for stronger past performance, technical approach, or management capability. If you're a credible challenger to the incumbent, the median price + a strong technical narrative is the winning posture.

If you're the named incumbent re-competing:

Bid P55 to P75. You have institutional knowledge and the incumbent advantage. The contracting officer expects you to price at or slightly above the median. Bidding below P50 as the incumbent signals desperation or quality decay.

If the bid is set-aside (8(a), HUBZone, SDVOSB, WOSB):

Bid P50 to P70. Set-aside competitions have fewer bidders (by definition) and the evaluator already accepted that the competitive pool is narrower. You don't need to be the cheapest — you need to be the most credible.

4. The SCA wage floor: the price you literally cannot go below

Service Contract Act (SCA) applies to most federal service contracts (NAICS 561720 janitorial, 485991 NEMT, 492110 courier, 621610 home health, plus dozens more). When SCA applies, the Department of Labor publishes a per-county hourly wage floor and a fringe benefit rate. You cannot pay workers less than that. Your bid must reflect at least that labor cost — or you're committing fraud.

For service NAICS, the SCA wage + fringe typically accounts for 40–60% of total cost basis. If the per-county janitor hourly rate is $19.50 + $5.30 fringe = $24.80 per hour, and the solicitation calls for 2,080 labor hours a year, that contract has a floor of $51,584 in direct labor before you add overhead, G&A, or profit.

The percentile band tells you what the market pays. The SCA floor tells you what the law requires. Your defensible price lives in the intersection — somewhere between the SCA-adjusted floor and P75. If the P25 of the band is below your SCA-adjusted floor, the solicitation is structurally hostile to compliant pricing and you should think hard about whether this is the right bid.

Pull the actual SCA rate from SAM.gov Wage Determinations. Search by occupation code and county. The federal site has the authoritative version; secondary sources are sometimes stale.

5. How to pull this data yourself (USASpending in 10 minutes)

Everything FedRange computes is derived from public data you can pull yourself. Here's the minimum viable workflow if you want to do the math by hand.

  1. Go to usaspending.gov/search. Pick "Contracts" as the award type.
  2. Filter by your NAICS code (e.g., 561720 for Janitorial).
  3. Filter by time period: last 24 months works as the freshness floor. Older awards reflect outdated market conditions.
  4. Optionally filter by place of performance state, awarding agency, or set-aside type if your bid is scoped that way.
  5. Export to CSV. You'll get the recipient, award amount, period start/end, agency, and a description column.
  6. In Excel or Google Sheets, sort by award amount. Use PERCENTILE.INC(range, 0.10), 0.25, 0.50, 0.75, 0.90 to compute the band yourself.

That's the full methodology. There's no proprietary magic. The only differentiator a tool like FedRange adds is speed (sub-second vs 30 minutes), pre-filtered AbilityOne / JWOD / sole-source exclusions, and the named-comparable drill-down that takes manual work to assemble from scratch.

If you only bid once a year, the manual workflow is fine. If you're bidding monthly, the per-bid time savings compound.

6. What gets disqualified before evaluation even starts

Federal proposals routinely die on Section L compliance failures before anyone reads your technical approach. The pricing volume is no exception. The common kill shots:

  • Math errors. Line items don't sum to the bid total. The cost sheet doesn't tie to the narrative. A single arithmetic error in a $2M proposal looks like sloppiness across every section.
  • Unloaded labor rates. Quoting a labor rate without fringe / overhead / G&A / profit baked in. The contracting officer sees $19/hr in a SCA $24.80 county and flags "materially non-compliant with the SCA wage determination."
  • Wrong basis of estimate. The cost narrative claims one labor mix; the pricing tables show a different one. Reconciliation is the evaluator's job, not yours, but they often just disqualify rather than dig.
  • Missing required price elements. CLINs, sub-CLINs, options, ODCs — every solicitation specifies exactly which columns the cost sheet must contain. Missing one is an automatic non-responsive.
  • Outlier pricing without explanation. If your number lands above P90 of the historical band, attach a narrative that explains why. Without it, the contracting officer fills in the gap with "unrealistic" and moves on.

These aren't pricing strategy questions — they're quality control questions. Build a checklist, run it before submission, and you avoid 80% of the rejections that have nothing to do with the actual price.

7. The recompete window: where the real money is

Every federal contract has a period of performance. When it expires, the agency has three options: extend the incumbent via a sole-source modification (only allowed in narrow cases), let it die quietly (rare for ongoing service work), or open a new competition. The third path is your opportunity.

The window matters. Contracts expiring in the next 12-18 months are the sweet spot — late enough that the incumbent's renewal decision is still being weighed, early enough that a challenger has time to build relationships, attend industry days, and submit a competitive bid. Contracts expiring inside 90 days are usually already locked.

Pulling the list manually: search USASpending for awards in your NAICS where period_of_performance_end falls in the next 12-18 months. Exclude sole-source set-asides (8(a) sole source, AbilityOne / JWOD, SDVOSB sole source). The remaining set is your active prospect list.

FedRange surfaces this list automatically on each NAICS slice page — see Janitorial recompetes, NEMT recompetes, Courier recompetes, and Home health recompetes. Each is a free list with no signup.

8. Summary checklist for your next bid

Before you submit any federal pricing volume, run this list:

  1. Pull P10–P90 for the NAICS + state + 24-month window.
  2. Confirm your bid lands between P25 and P75 (LPTA: P25–P40; Best Value: P50–P65; incumbent recompete: P55–P75).
  3. Pull the SCA wage determination for your county. Confirm your direct labor cost is at or above the floor.
  4. Reconcile your line items: cost sheet sums match the bid total, narrative ties to the math, all required CLINs populated.
  5. If your bid is above P75, write a 1-paragraph price narrative explaining the differentiator. Don't leave the contracting officer guessing.
  6. Check 10 comparable awards in the same NAICS, similar dollar range. Are you in the same ballpark? If not, figure out why before you submit.
  7. Final read: arithmetic check, format compliance against Section L, sign and submit at least 24 hours before deadline.

Run the pricing slice for your NAICS now

Free, no signup, no card. Each slice shows the live P10–P90 band, top 10 named comparable awards, and upcoming recompetes for that NAICS.

The bid analyzer + proposal drafter

Paste any SAM.gov URL, get the percentile band, the SCA wage floor, comparable awards, and 5 drafted proposal sections in ~30 seconds. Free during the founder trial for 25 federal janitorial contractors. 2-minute application for same-day access.

Get free access →

Last updated 2026-05-20. All percentile math computed via Postgres percentile_cont over the last 24 months of USASpending public records. Full methodology →