Methodology & Data Sources
Four populations (do not mix)
PlainFedContract renders four separately fetched populations. Spot-SQL and page labels must keep them apart, especially any ratio, coverage %, or "share of FY" claim:
- Category window (calendar 2024 action dates). Agency contract
obligations, state place-of-performance totals, NAICS industry totals, and the
agency-contractor / state-contractor link tables all use the shared
CATEGORY_WINDOWfilter in the ETL (2024-01-01through2024-12-31, award types A-D). Surfaces MUST label this slice CY2024 / calendar-2024, never "FY2024" (federal FY2024 is Oct 2023-Sep 2024 and belongs to the fiscal-year trend series, not this extract). - Lifetime recipient ledger. The top-5,000 contractor directory and every
/contractor/profile come from/api/v2/recipient/with no time filter, all-time prime obligations on that recipient ID. A lifetime total is never a share of the category-window national pool. - Fiscal-year trend series.
yearly_spendingcomes fromspending_over_timegrouped by fiscal year (complete FY2019-FY2024 plus a partial FY2025 slice at extract time). Trend pages and homepage "latest FY spending" read this series only. - Annual window (one complete calendar year per row).
entity_yearlycomes fromspending_by_categorycalled once per calendar year 2019-2024 (award types A-D), giving each contractor, agency, state, and NAICS industry its own year-over-year series. It is what the change charts on entity pages and the movers table on statistics read. Two limits bind every claim built on it: the incomplete calendar year 2025 is excluded outright, and each year holds the entities the source ranked for that year, so a year missing from an entity's series means it fell outside that cohort, never that it received nothing. Its calendar-2024 row reproduces the population (1) totals; it is never comparable to the lifetime ledger in (2).
Relationship tables under (1) are also category-window dollars. When a contractor page names a "largest awarding agency" percentage, that percentage is within the agency-attributable category-window rows for that recipient, not a fraction of the lifetime ledger.
Data Source
PlainFedContract uses data from USAspending.gov (usaspending.gov), the official open data source of federal spending information. USAspending.gov is maintained by the U.S. Department of the Treasury as required by the Federal Funding Accountability and Transparency Act (FFATA) of 2006, as amended by the Digital Accountability and Transparency Act (DATA Act) of 2014. It is the official source for federal contract award data, covering every contract action reported by federal agencies through the Federal Procurement Data System.
USAspending.gov API Endpoints
Our data pipeline queries several USAspending.gov REST API endpoints to build a comprehensive picture of federal contract spending. The primary endpoints we use include:
/api/v2/references/toptier_agencies/- Returns the list of federal agencies with budget authority and obligation totals, allowing us to build agency profile pages with accurate financial summaries./api/v2/recipient/- Provides detailed recipient (contractor) profiles including UEI identifiers, recipient level classifications, and total award amounts aggregated across all agencies./api/v2/search/spending_by_category/awarding_agency/,/naics/,/state_territory/, and/recipient/- Category-breakdown endpoints that aggregate contract award data by awarding agency, NAICS industry code, state/territory (place of performance), and recipient, per fiscal year./api/v2/search/spending_over_time/- Supplies fiscal-year time-series totals used to build our historical spending trend pages.
All API requests use standard HTTP GET/POST methods with JSON responses. USAspending.gov imposes rate limits, and we respect these by spacing requests and implementing retry logic with exponential backoff.
Data Vintage & Coverage
Trend coverage (population 3) runs fiscal year 2019 through fiscal year 2024 as complete fiscal-year buckets, plus a partial fiscal year 2025 slice at extract time. Category pages (population 1) use the calendar-2024 action-date window described above. Contractor profiles (population 2) are lifetime. Year-over-year change (population 4) runs calendar 2019 through calendar 2024, complete years only. USAspending.gov receives data from federal agencies on a rolling basis through the Federal Procurement Data System - Next Generation (FPDS-NG). Agencies are required to report contract actions within three business days, though processing delays mean the published data typically lags real-world contract activity by several weeks.
- Geographic coverage: All 50 US states, DC, and 5 territories
- Contractors: 5,000 top recipients by lifetime obligation amount
- Agencies: 111 federal departments and agencies (category-window contract $)
- Industries: 499 NAICS industry classifications (category-window)
- Time span: See four populations - do not collapse them into one "FY2024" stamp
- Refresh cycle: We pull updated data quarterly to capture newly reported contract actions and modifications
NAICS assignment and SBA size standards
This section used to be repeated, near-identically, on all 499 industry pages. It is general background about the taxonomy rather than a fact about any one industry, so it lives here once and each industry page links to it.
The NAICS taxonomy is maintained jointly by the U.S. Census Bureau, the Bureau of Economic Analysis, Statistics Canada, and Mexico's Instituto Nacional de Estadística y Geografía, on a five-year revision cycle (current vintage 2022). In federal contracting the contracting officer assigns one NAICS code per solicitation, based on its principal purpose, the activity representing the largest share of contract value. That single assignment governs which size standard applies, which set-aside programs are eligible, and how the award rolls up into industry statistics. Because the code attaches to the solicitation and not to the awardee's line of business, one contractor routinely appears under many codes, and an industry total is the value of work classified there, never the revenue of the firms involved.
Every code carries an SBA size standard, expressed either as average annual receipts (usually over the three most recently completed fiscal years) or as average employee count. It determines whether a firm qualifies as small for 8(a), HUBZone, WOSB, SDVOSB, and standard small-business set-asides; firms self-certify against the standard in effect when the opportunity is issued. Our extract holds category totals only, so it does not report set-aside type or small-business participation. The award-level detail on USAspending.gov carries those fields, along with socioeconomic status and place of performance, for anyone who needs to measure participation rates directly.
Corpus placement (where each entity sits)
Every contractor, agency, industry, and state detail page states a corpus-relative placement - #N of M - computed from the same ORDER BY that powers the matching listing or rankings table. Placement is derived from live queries against this portal's USAspending.gov extract; it is not typed by an editor and is not a fabricated composite score.
- Contractors: rank by lifetime
total_amountdescending among all tracked recipients (same basis as /rankings/ and the contractors listing). - Agencies: rank by calendar-2024
total_obligationsdescending among agencies with obligations > 0 and below the $1T ETL-bug stamp (same filter as /agencies/). - Industries (NAICS): rank by calendar-2024 CATEGORY_WINDOW
total_amountdescending (same order as /industries/). - States: rank by calendar-2024 place-of-performance
total_amountdescending (same order as /states/).
Ties break on slug ascending so ordinals are stable. The according-to lead on each detail page restates that ordinal so a reader sees where the entity sits before the raw record fields.
Federal contractor value score
Each contractor detail page also shows a separate 0-100 + letter-grade "federal contractor value score" - distinct from the corpus-placement ordinal above, and not a claim about contract quality, past performance, or government endorsement. It combines three measures computed directly from this portal's own compiled award data: total tracked contract scale, the most recent year's obligation change versus the prior year (only when the two years are consecutive), and revenue consistency (the year-over-year coefficient of variation across every tracked year, inverted so a steadier history scores higher).
Each measure is converted to a 0-100 percentile score against benchmark points (p10/p25/p50/p75/p90) computed from the live tracked-contractor corpus - not a national claim beyond that corpus, and re-derivable from the published data at any time. Recent momentum requires a consecutive prior-year data point; revenue consistency requires at least three tracked years. When a recipient lacks the history for either, that dimension is dropped and its weight redistributes across the remaining measures, so a missing input never silently lowers the score.
Data Processing Pipeline
Our automated ETL (Extract, Transform, Load) pipeline transforms raw USAspending.gov API responses into the structured database that powers this portal:
- Extraction: Query the USAspending.gov API endpoints listed above to download aggregated contract award data by recipient, agency, NAICS code, and state. The pipeline handles pagination, rate limiting, and error recovery automatically.
- Name normalization: Generate URL-safe slugs for each entity while preserving official names exactly as they appear in government records. Contractor names are not merged or deduplicated, if USAspending.gov lists "LOCKHEED MARTIN CORP" and "LOCKHEED MARTIN CORPORATION" as separate recipients, they remain separate in our database.
- Contractor profile aggregation: Compute total obligations per contractor across all agencies and fiscal years. Each contractor profile is built by summing every contract action associated with that recipient's UEI (Unique Entity Identifier), which replaced the legacy DUNS number system in April 2022.
- Relationship mapping: Build agency-contractor and state-contractor relationship tables with associated dollar amounts, enabling drill-down views from any dimension.
- Fiscal year aggregation: Aggregate annual spending totals by fiscal year to show spending trends over time.
- Database optimization: Build an optimized SQLite database with indexes on all lookup columns (slugs, codes, names) and pre-computed cache tables for homepage statistics and ranking pages to ensure fast response times.
- Page generation: The Astro SSR application dynamically generates searchable pages for each contractor, agency, industry, and state directly from the database at request time.
No data is fabricated, interpolated, or editorially modified. All values come directly from USAspending.gov data. Aggregations (totals, rankings) are computed from the source data using straightforward summation.
Limitations of the API-Based Approach
While the USAspending.gov API provides convenient programmatic access to federal spending data, there are inherent limitations compared to working with the bulk download files that the Treasury Department also publishes:
- Reporting lag: Data may lag behind the most current contract actions by several weeks due to agency reporting timelines and FPDS-NG processing cycles.
- Classified contracts: Contracts classified for national security reasons (primarily in defense and intelligence) may not appear in USAspending.gov data at all, or may appear with redacted recipient information.
- Prime contracts only: Only prime contract data is included, subcontract spending, which can represent a significant portion of total program costs, is not captured in our dataset.
- Contracts only: Grants, loans, direct payments, insurance, and other forms of financial assistance are not included, this portal covers procurement contracts exclusively.
- De-obligations and modifications: Contract modifications and de-obligations may cause total amounts to differ from initial award values. The totals shown reflect net obligations, not original award ceilings.
- Top 5,000 threshold: Our database includes the top 5,000 contractors by total obligation amount. Smaller recipients below this threshold may not appear in search results.
- API pagination limits: The USAspending.gov API returns paginated results, and very large result sets may be subject to timeout constraints that affect completeness.
- No real-time updates: This data represents a periodic snapshot, not a live feed of federal spending activity.
Financial Disclaimer
This site does not provide financial, investment, or business advice. Contract award data reflects historical federal spending patterns and should not be used as the sole basis for business planning, investment decisions, or competitive analysis. The presence of a company in this database indicates only that it has received federal contract awards, not an endorsement of the company or its products. Consult appropriate professionals for financial and business decisions. This data is provided for informational purposes only.
Contact
Questions about our methodology or data? Contact us - we welcome feedback and corrections.