Skip to content

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). The psc_type field 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)), with parent naming the immediate group (R4 - PROFESSIONAL SERVICES). Filter by category to pull an entire family of codes.
  • Codes are retired over time. is_active is true for codes currently in use and false for 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_count is how many federal prime contract awards in our corpus carry the code, so you can tell a high-volume code (8915 Fruits and Vegetables, over a million actions) from a rarely-used one. Results are ordered active-first, then by award_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 (R4 returns every R4xx code), or a capability phrase matched against the code names and descriptions. Phrase matching is word-based, so a multi-word query like software development returns 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 - Service or Product. Any other value returns 400.
  • active_only - Boolean, default false. Pass true to exclude retired codes.
  • limit - Results per page. Default 100; maximum 100 on the free trial and 1,000 on paid plans. Over the maximum returns 402.
  • 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, and parent can be null on some (mostly retired) codes.
  • pagination: total is exact (the catalog is small). has_next is driven by page fullness, so page forward until a short or empty page.
  • filters_applied: echoes the filters actually used (booleans only when true).

Errors

  • 400: psc_type not Service/Product, or an unknown query parameter (the body names the valid set).
  • 422: limit below 1 or negative offset. A limit above 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"

A REST API and MCP server for U.S. federal procurement data.

Get a free key, emailed instantly, or follow the quickstart.

Found something wrong, missing or confusing on this page?

Press Ctrl + Enter to send a note. Highlight text first and it travels with your note.