Search PSC codes
Search the federal Product & Service Code (PSC) catalog by code or by capability language. It works in both directions: a bare code like R425 resolves to its official name, description, and place in the category hierarchy, and a plain-language capability phrase like software development or help desk support resolves to the codes that cover it, so you can turn what you do into the codes the rest of the API filters by (?psc= on opportunities, contracts, pricing, and partners) without leaving the API.
What a PSC is (read this first)
A PSC is the federal government's 4-character code for what is being bought. It is the "what" that complements NAICS (the "who"):
- Services are lettered (
R425,D302,C211); Products / supplies are numbered (7030,8915,1005). Thepsc_typefield tells you which. - Codes roll up into a two-level category-management hierarchy:
category(Level 1, e.g.Professional Services) →subcategory(Level 2, e.g.Technical and Engineering Services (non-IT)), withparentnaming the immediate group (R4 - PROFESSIONAL SERVICES). Filter bycategoryto pull an entire family of codes. - Codes are retired over time.
is_activeistruefor codes currently in use andfalsefor retired ones. Retired codes are kept in the catalog on purpose, because an older contract award still carries the code that was current when it was signed, and you still need to resolve it. award_countis how many federal prime contract awards in our corpus carry the code, so you can tell a high-volume code (8915Fruits and Vegetables, over a million actions) from a rarely-used one. Results are ordered active-first, then byaward_count, so the codes that matter surface at the top.
The catalog is the authoritative set from the GSA Product & Service Code Manual (about 3,600 codes, roughly 2,300 currently active), so a well-formed code that is missing simply has never appeared on a federal award we hold.
Quick start
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://govconapi.com/api/v1/psc/search?keywords=engineering&active_only=true&limit=2"
Parameters
keywords- A code prefix (R4returns everyR4xxcode), or a capability phrase matched against the code names and descriptions. Phrase matching is word-based, so a multi-word query likesoftware developmentreturns the codes whose name or description covers all of its terms, ranked most-used first. Alias:q.category- Exact Level-1 category, e.g.Professional Services,IT,Facilities & Construction. Returns the whole family.psc_type-ServiceorProduct. Any other value returns400.active_only- Boolean, defaultfalse. Passtrueto exclude retired codes.limit- Results per page. Default 100; maximum 100 on the free trial and 1,000 on paid plans. Over the maximum returns402.offset- Pagination offset (0-based).
Response
{
"data": [
{
"code": "R425",
"name": "SUPPORT- PROFESSIONAL: ENGINEERING/TECHNICAL",
"full_description": "Engineering and Technical Services",
"psc_type": "Service",
"category": "Professional Services",
"subcategory": "Technical and Engineering Services (non-IT)",
"parent": "R4 - PROFESSIONAL SERVICES",
"is_active": true,
"award_count": 145455
},
{
"code": "C219",
"name": "ARCHITECT AND ENGINEERING- GENERAL: OTHER",
"full_description": "Other Architect and Engineering Services",
"psc_type": "Service",
"category": "Facilities & Construction",
"subcategory": "Construction Related Services",
"parent": "C2 - ARCH-ENG SVCS - GENERAL",
"is_active": true,
"award_count": 23530
}
],
"pagination": { "limit": 2, "offset": 0, "total": 85, "total_is_estimate": false, "has_next": true },
"filters_applied": { "keywords": "engineering", "active_only": true }
}
data: the matching codes. Fields are described under what a PSC is above;full_description,category,subcategory, andparentcan benullon some (mostly retired) codes.pagination:totalis exact (the catalog is small).has_nextis driven by page fullness, so page forward until a short or empty page.filters_applied: echoes the filters actually used (booleans only whentrue).
Errors
- 400:
psc_typenotService/Product, or an unknown query parameter (the body names the valid set). - 422:
limitbelow 1 or negativeoffset. Alimitabove your plan maximum returns 402. - 401: missing API key. 429: rate limit exceeded.
Examples
Resolve a capability phrase to codes (most-used first):
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://govconapi.com/api/v1/psc/search?keywords=software%20development"
A whole category (all professional services):
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://govconapi.com/api/v1/psc/search?category=Professional%20Services&active_only=true"
Everything under a code group, most-used first:
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://govconapi.com/api/v1/psc/search?keywords=R4"
Only products (supplies):
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://govconapi.com/api/v1/psc/search?psc_type=Product&limit=10"
Related
- Get one PSC code - resolve a single code.
- Search Contract Opportunities and Federal Contracts both filter by
psc; use this catalog to pick the code.