One API call. Pass a UEI, get the federal contractor's full profile: SAM registration, total contracts won, total dollars, top agencies, NAICS spread, recent activity, the entity's self-declared website, and a list of similar companies by NAICS + agency overlap. The aggregations happen server-side, so you don't write the SQL.
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.
Job: back-fill federal-contracting context (total awards, top agencies, last-award-date, recent activity, entity website, registration status) onto every contractor record in your CRM, refreshed on a schedule.
How: one GET /api/v1/companies/{uei} per record returns the structured rollup, plus the entity's self-declared entity_url for the company-website field your CRM is probably missing. 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.
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.
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 the Vendor Risk Intelligence API in the same call for exclusion status, address clusters, and name-variant clusters.
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¬ice_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.
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.)
One GET /api/v1/companies/{uei} call returns:
| Field | What it is | Source |
|---|---|---|
uei | 12-char SAM Unique Entity Identifier (echoed back) | request |
name | Most-common spelling of the awardee name across their awards | MODE() WITHIN GROUP over awardee_name |
total_awards | Number of distinct award notices | opportunity-table count |
total_value | Sum of all award_amount values | SUM(award_amount) |
avg_value | Mean per-award amount | AVG(award_amount) |
first_award_date | Earliest award date we have | MIN(award_date) |
last_award_date | Most-recent award date | MAX(award_date) |
awards_last_12mo | Recent activity signal: count in trailing 365 days | filtered count |
awards_last_90d | Even fresher activity signal: trailing 90 days | filtered count |
top_naics | Their top 10 NAICS codes by count + value | unnested NAICS array, grouped |
top_agencies | Their top departments (top-level of agency path) by count + value | grouped on split_part(agency, '.', 1) |
top_agency_share_pct | Customer-concentration signal: share of total_value from the single largest agency. Single-buyer dependents = 100.0; well-diversified vendors are below ~30. Null when no awards. | top_agencies[0].value / total_value |
set_aside_distribution | Per-UEI rollup grouped by SAM set_aside_type. Each entry: set_aside, awards, value, pct_of_awards. UNRESTRICTED is the no-set-aside default (most common). Useful for "what % of their wins are SDVOSB / WOSB / 8(a)?" | GROUP BY set_aside_type over awards |
primary_state | Most-common awardee_state_code | MODE |
primary_city | Most-common awardee_city_name | MODE |
registration | Block: SAM registration status, active, registration_date, activation_date (most-recent activation), expiration_date, expiring_soon (60-day flag), source_extract_date | SAM entity record |
entity | Block: legal_business_name, dba_name, entity_structure_code (legal entity type, e.g. 2L = LLC, 2X = For Profit, XS = Subchapter S), entity_url (self-declared company website), physical_address, primary_naics, naics_codes[], psc_codes[], business_types[], business_types_labels[], cage_codes[] | SAM entity record |
The registration and entity blocks are returned for any of the ~873K SAM-registered firms. The award fields (totals, top NAICS, top agencies, etc.) populate when the UEI has at least one Award Notice on file. UEIs that are registered in SAM but have never won a contract still get a 200 with the entity blocks populated and award fields zeroed.
Plus the /awards endpoint gives you the underlying line items (paginated), and /peers gives you the similarity-ranked alternatives.
{
"uei": "XX2WFHJEFB45",
"name": "KAMPI COMPONENTS CO INC",
"primary_city": "Fairless Hills",
"primary_state": "PA",
"total_awards": 938,
"total_value": 248491192.74,
"avg_value": 264915.98,
"first_award_date": "2025-08-15",
"last_award_date": "2026-05-15",
"awards_last_90d": 340,
"awards_last_12mo": 938,
"top_naics": [
{"naics": "332510", "awards": 50, "value": 9630516.93},
{"naics": "333613", "awards": 40, "value": 10858242.06}
],
"top_agencies": [
{"agency": "DEPT OF DEFENSE", "awards": 938, "value": 248491192.74}
],
"top_agency_share_pct": 100.0,
"set_aside_distribution": [
{"set_aside": "UNRESTRICTED", "awards": 925, "value": 229286216.20, "pct_of_awards": 98.6},
{"set_aside": "SBA", "awards": 7, "value": 5372035.82, "pct_of_awards": 0.7},
{"set_aside": "NONE", "awards": 6, "value": 13832940.72, "pct_of_awards": 0.6}
],
"registration": {
"status": "A",
"active": true,
"registration_date": "2001-08-16",
"activation_date": "2026-01-21",
"expiration_date": "2027-01-19",
"expiring_soon": false,
"source_extract_date": "2026-05-03"
},
"entity": {
"legal_business_name": "KAMPI COMPONENTS CO INC",
"dba_name": null,
"entity_structure_code": "2L",
"entity_url": "http://www.kampi.com",
"physical_address": {
"street1": "88 CANAL RD", "city": "FAIRLESS HILLS",
"state": "PA", "zip": "19030", "country": "USA"
},
"primary_naics": "423990",
"naics_codes": ["423120Y", "423430Y", "423610Y", "..."],
"psc_codes": [],
"business_types": ["2X", "XS"],
"business_types_labels": [
"For Profit Organization",
"Subchapter S Corporation"
],
"cage_codes": ["7Z016"]
}
}
For the full technical reference (parameters, error codes, related endpoints), see API guide: Companies endpoints.
naics + agency filters narrow to UEIs that have actually won under that NAICS / from that agency (distinct from Federal Contractor Search, which filters by SAM-registration data not award history)All four require a Pro key. Auth: Authorization: Bearer gca_.... Non-Pro keys get 402 (Payment Required); unauth gets 403.
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']}")
JCBMLGPE6Z71), large prime9 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.
XX2WFHJEFB45), high-volume small biz848 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.
ZJ5TDRYAP9P8), mid-size services firm4 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.
| Approach | Setup time | Per-call latency | Aggregations | Maintenance |
|---|---|---|---|---|
| SAM.gov UI | None | Manual, several seconds per record | None (you do it in your head) | None, but doesn't scale |
| SAM.gov API direct | ~2 weeks to register for the 1,000/day rate | Variable, plus daily-limit + hourly-throttle behavior | You write the SQL on raw data | Throttling can interrupt batch runs |
| USASpending bulk download | ~Days (build the CSV ingest pipeline) | Fast once loaded | You write the SQL | Multi-GB CSV refresh on a schedule you maintain |
| This API | Sign up + paste API key | p50 ~30ms, p95 under 1s server-side (measured from api_usage_log; end-to-end depends on your network) | Server-side, returned ready | None |
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.
total_value here is what their public award notices add up to. It is not their total federal revenue (which can include subcontracts, modifications, and intra-agency work not visible in award notices)./awards and aggregate the set_aside_type field client-side.publicDisplayFlag="N" at registration to opt out of public disclosure. Roughly 1.0M actively-contracting entities use this option. They appear in SAM's internal index but no public API or bulk export reaches them, FOIA-protected by design. Our 876K coverage is the contract-vendor universe that consented to public disclosure. The internal SAM registry holds 2.33M total records; the rest are migration debris and non-contract-vendor purposes. Full breakdown here.The Company Intelligence API is part of the Pro ($39/mo), which also includes:
Bonus: this profile now carries subaward context inline. Pro responses on /companies/{uei} add three top-level fields alongside the prime-award totals: sub_revenue_total (FFATA dollars this UEI has received as a sub-vendor), top_paying_primes (their actual customers, ranked by total $), and prime_revenue_share (the prime-vs-sub split of their combined federal revenue based on the SAM Award Notice slice). For many small businesses the sub side is the larger half of federal revenue, and a prime-only profile undercounts dramatically. See the Subawards API guide for the records behind those aggregates.
Plus FPDS prime contract context. Pro responses add a second group of fields driven by the federal procurement system of record: fpds_obligated_total (total prime contract dollars obligated to this UEI over the 5-year plan window), fpds_distinct_contracts (count of distinct PIIDs), fpds_transaction_count (every base award and modification), fpds_first_action_date and fpds_latest_action_date (activity bounds), fpds_top_naics (top 5 NAICS by total $), and fpds_top_agencies (top 5 awarding sub-agencies by total $). FPDS covers 100% of federal prime contract obligations to a recipient, where the SAM-noticed slice covers 10-30%. Both views are returned so callers can pick the denominator that matches their question. See the Contracts API guide for the underlying records.
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. 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?
The endpoint returns 200 for any of the ~873K SAM-registered firms, with the registration and entity blocks populated. Award fields are populated when the UEI has at least one Award Notice on file (~11K distinct firms in our current award dataset). If the UEI is unknown to both sources, you get a 404. Debarment is a separate question; check /exclusions/*.
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.