Every federal notice carries two classification codes, and people routinely treat them as duplicates. They are not: one describes the industry that would do the work, the other describes the thing being bought. Choosing the wrong one produces a filter that quietly misses your market.
Two systems, two questions
| System | Answers | Example |
|---|---|---|
| NAICS | What industry is the supplier in? | 541511 — Custom Computer Programming Services |
| PSC | What product or service is being bought? | D302 — IT and Telecom systems development |
The distinction is real in practice. A software licence purchase and a bespoke development contract can share an industry and differ completely in what is being procured — and the reverse happens too, where the same service is bought from suppliers classified in different industries.
Which one is better filled
Measured on 13,434 notices: PSC 97.8%, NAICS 96.1%. Both are well filled enough to build on, and PSC has the edge.
The gap is small but it is consistent, and if you can only maintain one code list — which is the realistic situation for most bidders — PSC is the one that will miss fewer notices.
The `_all` fields
naics_all and psc_all carry every code on the notice, not just the primary. A notice can be classified under several, and filtering only on the primary code misses notices where your code is present but secondary.
The Actor's naicsCodes and pscCodes filters work server-side, so excluded notices are never delivered and never charged — which makes it cheap to run a broad code list rather than guessing at the single right one.
Choosing for your use case
- You sell a service. PSC, because it describes what the government is buying.
- You are analysing an industry. NAICS, because it aligns with economic statistics and with how firms are classified elsewhere.
- You are building a monitor. Both, with a generous code list. The filters are server-side and the marginal cost of extra codes is zero.
- You are joining to other federal data. Whichever the other dataset uses — spending data tends toward PSC, economic data toward NAICS.
When they disagree
Sometimes a notice's NAICS looks wrong for its PSC, and usually it is not wrong. A contract to develop software might be classified under the industry of the incumbent's primary business rather than the work itself, or under a facilities code because it is being bought through a facilities vehicle.
Treat a divergence as information about how the agency buys, not as an error to correct. Correcting it in your copy of the data means your dataset no longer matches the source, which is a cost that arrives later.
Practical filtering
{
"maxResults": 1000,
"activeOnly": true,
"publishedWithinDays": 14,
"naicsCodes": ["541511", "541512", "541519"],
"pscCodes": ["D302", "D307", "D399"],
"noticeTypes": ["o", "k", "r"]
}Including Sources Sought (r) is worth doing: those notices are the government asking industry whether something is feasible, they carry a document 60% of the time, and they arrive before the solicitation does.

