GovCon API

Federal Contractor Profile API

One API call. Pass a UEI, get the contractor's full federal-award profile: total contracts won, total dollars, top agencies, NAICS spread, recent activity, and a list of similar companies by NAICS + agency overlap. The aggregations happen server-side, so you don't write the SQL.

Who this page is for: anyone with a CRM full of UEIs (or a list of vendor names) who needs structured federal-contracting context written back to each record. BD targeting, capture analysis, supplier vetting, competitive intelligence, financial-research enrichment. If your job involves the question "who is this contractor and what have they done with the federal government?", this page is the entry point.
Contents:

Five workflows you can build

Each one is supported by the API today. None are guaranteed to fit your situation; they're meant to ground the value of the endpoint in concrete jobs to be done.

1. CRM enrichment

Job: back-fill federal-contracting context (total awards, top agencies, last-award-date, recent activity) onto every contractor record in your CRM, refreshed on a schedule.

How: one GET /api/v1/companies/{uei} per record returns the structured rollup. Server-side latency is fast enough for batch enrichment (p50 ~30ms, p95 under a second), so thousands of UEIs in a few minutes is reasonable.

2. Competitive analysis

Job: for any known competitor, find similar companies competing in the same NAICS + agencies. Useful for "who else is in this lane?" discovery.

How: GET /api/v1/companies/{uei}/peers returns the top N companies ranked by a NAICS-overlap + agency-overlap similarity score, with the underlying overlap counts so you can re-rank if you want.

3. Teaming partner / sub vetting

Job: a candidate sub or teaming partner says they have federal experience. You want a quick, structured second-look at whether they've actually won contracts, with whom, in what NAICS, and how recently.

How: GET /api/v1/companies/{uei} for the profile, /awards for line items if you need them. Pair with Vendor Risk Intelligence in the same call for exclusion status, address clusters, and name-variant clusters.

4. Capture targeting and account research

Job: build a target list of contractors active in your space (specific NAICS, specific agencies) and segment by recent activity (e.g., who has been quiet for 12 months and might be vulnerable on a recompete).

How: two-step, since the search endpoint takes a name (not a NAICS+agency combo). First call GET /api/v1/opportunities/search?naics=541512&agency=HHS&notice_type=Award+Notice&date_from=... to find recent awardees. Collect the unique award_uei_sam values. Then call /api/v1/companies/{uei} per UEI to get the rollup, and filter client-side on awards_last_12mo.

5. Financial intelligence / due diligence

Job: for an investor evaluating a federal-services company, confirm how much of the company's claimed federal revenue is visible in the public award-notice record.

How: profile endpoint returns total_value across observable award notices since Q4 2024. Use /awards for line-item detail. Cross-reference against the company's claimed numbers. (Caveat: subcontract revenue, modifications, and pre-2024 history aren't in this number; see Limits.)

What the profile actually contains

One GET /api/v1/companies/{uei} call returns:

FieldWhat it isSource
uei12-char SAM Unique Entity Identifier (echoed back)request
nameMost-common spelling of the awardee name across their awardsMODE() WITHIN GROUP over awardee_name
total_awardsNumber of distinct award noticesopportunity-table count
total_valueSum of all award_amount valuesSUM(award_amount)
avg_valueMean per-award amountAVG(award_amount)
first_award_dateEarliest award date we haveMIN(award_date)
last_award_dateMost-recent award dateMAX(award_date)
awards_last_12moRecent activity signal: count in trailing 365 daysfiltered count
awards_last_90dEven fresher activity signal: trailing 90 daysfiltered count
top_naicsTheir top 10 NAICS codes by count + valueunnested NAICS array, grouped
top_agenciesTheir top departments (top-level of agency path) by count + valuegrouped on split_part(agency, '.', 1)
primary_stateMost-common awardee_state_codeMODE
primary_cityMost-common awardee_city_nameMODE

Plus the /awards endpoint gives you the underlying line items (paginated), and /peers gives you the similarity-ranked alternatives.

The four endpoints

GET/api/v1/companies/search?q={name_or_uei_prefix}resolve a name to candidate UEIs
GET/api/v1/companies/{uei}aggregated profile (the main call)
GET/api/v1/companies/{uei}/awardspaginated award history
GET/api/v1/companies/{uei}/peers?limit=10similar companies by NAICS + agency overlap

All four require a Pro Bundle key. Auth: Authorization: Bearer gca_.... Non-Pro keys get 402 (Payment Required); unauth gets 403.

Code: full enrichment in one block

import requests, os
KEY = os.environ["GOVCONAPI_KEY"]
H = {"Authorization": f"Bearer {KEY}"}
BASE = "https://govconapi.com/api/v1"

# Start from a name in your CRM
search = requests.get(f"{BASE}/companies/search",
    params={"q": "Booz Allen Hamilton", "limit": 5}, headers=H).json()
uei = search["results"][0]["uei"]   # JCBMLGPE6Z71

# Pull the aggregated profile (one call)
profile = requests.get(f"{BASE}/companies/{uei}", headers=H).json()
print(f"{profile['name']}")
print(f"  Total: {profile['total_awards']} awards / ${profile['total_value']:,.0f}")
print(f"  Last 12 months: {profile['awards_last_12mo']} awards")
print(f"  Top agency: {profile['top_agencies'][0]}")
print(f"  Top NAICS:  {profile['top_naics'][0]}")

# Award line items (for a sub-table in your CRM)
awards = requests.get(f"{BASE}/companies/{uei}/awards", headers=H, params={"page": 1}).json()

# Peers (for competitive view)
peers = requests.get(f"{BASE}/companies/{uei}/peers", headers=H, params={"limit": 10}).json()
for p in peers["peers"]:
    print(f"  similar: {p['name']:35} similarity={p['similarity_score']}")

Worked examples (real data, today)

Booz Allen Hamilton (UEI JCBMLGPE6Z71) — large prime

9 award notices since launch, total $1.6B, average $179M per award, last award 2026-03-30. Top agency: Department of Defense ($200M, 2 awards). Top NAICS: 541512 (Computer Systems Design Services).

Use case: a financial-research analyst evaluating a portfolio company that competes with Booz Allen wants the spread of agencies + NAICS to model overlap. One API call replaces an afternoon of SAM.gov clicking.

Kampi Components (UEI XX2WFHJEFB45) — high-volume small biz

848 award notices, total $226M. Their pattern is opposite of Booz Allen: many small awards, not few large ones. Useful for understanding which contracting vehicle a vendor lives on.

Skytek LLC (UEI ZJ5TDRYAP9P8) — mid-size services firm

4 awards, total $10M, average $2.5M per award. Indicates a teaming-partner profile (mid-size deal flow, specific NAICS niche). Compare side-by-side to a different small biz via the /peers endpoint.

Why this beats querying SAM.gov / USASpending directly

ApproachSetup timePer-call latencyAggregationsMaintenance
SAM.gov UINoneManual, several seconds per recordNone (you do it in your head)None, but doesn't scale
SAM.gov API direct~2 weeks to register for the 1,000/day rateVariable, plus daily-limit + hourly-throttle behaviorYou write the SQL on raw dataThrottling can interrupt batch runs
USASpending bulk download~Days (build the CSV ingest pipeline)Fast once loadedYou write the SQLMulti-GB CSV refresh on a schedule you maintain
This APISign up + paste API keyp50 ~30ms, p95 under 1s server-side (measured from api_usage_log; end-to-end depends on your network)Server-side, returned readyNone

The honest case: if you're going to query 50 UEIs across your career, do it manually on SAM.gov. If you're enriching a CRM with thousands of records, building competitive intelligence, or running this query as part of a procurement workflow, you want the aggregations server-side.

What this doesn't cover

Pricing and access

The Companies API is part of the Pro Bundle ($39/mo), which also includes:

View pricing →

FAQ

How fresh is the data?
Award notices are kept in sync with SAM.gov on a sub-daily cadence. Profile aggregations are computed at request time, so they reflect the latest available data the moment you call the endpoint.

Can I get the underlying award rows for accounting / audit?
Yes, GET /api/v1/companies/{uei}/awards?page=N returns paginated rows with notice_id, solicitation_number, award_date, award_amount, agency, naics, and place-of-performance fields. From there you can join back to /api/v1/opportunities/{notice_id} for the full notice (description, attachments, contact info).

What's the difference between this and Vendor Risk?
This endpoint is about past performance: who they've contracted with and how much. Vendor Risk is about fraud-pattern signals: are they on the exclusion list, do they share an address with debarred entities, were they part of a coordinated enforcement action. Different jobs to be done. Both included in Pro Bundle. Both can be called for the same UEI.

How does the peers endpoint compute "similar"?
A composite similarity score based on NAICS overlap + agency overlap. NAICS match counts more than agency match (NAICS is the harder constraint). The endpoint returns the top N peers ranked by score, with the underlying overlap counts so you can re-rank if you want.

Can I use this without the API, just looking at the page?
The free public Vendor Risk lookup handles one-off vendor-screening questions without an API key. There isn't currently a free public Companies lookup; if you want one, email and let us know.

What if my contractor isn't in your data?
We have data on 11,275 unique award winners (UEIs that have appeared on at least one Award Notice since our ingest started in Q4 2024). If a contractor has only won contracts before 2024, or has registered in SAM but never won an award, they won't show up in /companies/*. They will show up in /exclusions/* if debarred. Use sam.gov entity search to verify any UEI exists.

Is the data accurate?
We mirror SAM.gov award notices. If SAM publishes the data, we have it. If SAM has an upstream data quality issue (mistyped agency name, missing award amount, etc.), so do we. We do apply some normalization and filtering on top of the raw SAM feed to avoid known SAM data-quality artifacts (records that SAM's own UI shows as inactive but their export still lists as active, for example). Garbage-in-garbage-out is mitigated where we can; we don't pretend to fix what SAM publishes.

How do I cancel?
Stripe Customer Portal. One click. No retention dance.


Last updated: April 2026 · API reference · Vendor Risk API · Research a federal contractor · Pricing · Questions