All articles
Bid StrategyOctober 15, 2026 · 6 min read

CPV Codes Explained: How Trade Contractors Can Use Procurement Classifications to Find Better Bids

Keyword alerts match words. Buyers classify work. Learn the classification layer that sorts a roofing job from a telecom tower — even when both say “roof.”

Picture an HVAC contractor who sets aside two hours on a Monday to work through bid alerts. Forty emails. Most mention “mechanical” or “ventilation” somewhere, but they are for lab equipment, vehicle exhaust systems, or a software contract with an unlucky word choice. One is a real boiler and air-handler replacement. By the time it is found and read, the deadline has passed. (This is an illustrative scenario, but if you chase public bids, it will feel familiar.)

The problem is not effort. It is that most alert tools match on keywords, while the people buying the work describe it with classifications. Once you understand that classification layer, you can filter bids far more precisely. The most widely used one is the CPV code.

What a CPV code is

CPV stands for Common Procurement Vocabulary. It is a standardized classification system for public procurement, and public buyers attach a CPV code to their tender notices to describe what they are buying. The main vocabulary contains roughly 9,454 terms arranged in a hierarchical tree. The structured data already exists on the notice. Most alert tools simply do not use it.

How to read a CPV code

A CPV code is eight digits plus a check digit, for example 45331000-6, which is heating, ventilation and air-conditioning installation work. Read it left to right, from broad to specific:

  • First two digits: the division. The broad sector. Division 45 means construction work.
  • Digits three to five: group, class, category. Each extra digit narrows the scope, from “building installation work” down to “HVAC installation.”
  • The check digit. The number after the hyphen is for validation. You can ignore it when filtering.
  • Supplementary Vocabulary. Optional qualifiers that add detail such as materials or finish type.

CPV codes mapped to common trades

Trade contractors already think in scope buckets. Bid packages and prequalification lists sort work into roofing, HVAC, electrical, and the rest. CPV formalizes that habit. Here are representative codes under construction division 45:

TradeCPV codeDescription
Electrical45310000-3Electrical installation work
HVAC45331000-6Heating, ventilation and air-conditioning installation work
Plumbing45330000-9Plumbing and sanitary works
Roofing45261000-4Erection and related work of roof frames and roof coverings
Insulation45320000-6Insulation work

Treat this as a starting list, not a complete one. Your real scope may sit in a neighboring class, and that is exactly why the hierarchy matters.

Why CPV beats keywords

A buyer can describe the same roofing scope in five ways: “re-roof,” “roof replacement,” “membrane renewal,” “roofing remediation,” “building envelope repair.” A keyword filter on “roof replacement” catches one or two. CPV normalizes all five into the same classification node, so a CPV-aware filter catches them all.

It works in the other direction too. A keyword alert on “roof” flags a telecom tower job because of “roof access.” The CPV code for that job is not roofing, so a classification filter drops it.

Keyword alerts

Match the words in the notice. Miss alternate phrasing. Flag unrelated jobs that happen to mention your trade.

CPV classification

Matches what the buyer is actually buying. One node covers every phrasing, and unrelated scopes fall out.

How to use CPV codes to filter portals and set up alerts

  1. Pick your primary code. Choose the class that matches the work you do most, such as 45331000 for HVAC installation.
  2. Add adjacent codes deliberately. Climb one level up the tree to see sibling categories. A roofer who also does insulation may want both.
  3. Use the code, not just the word. Where a portal lets you filter or save searches by classification, use the CPV code instead of keywords alone.
  4. Pair the code with geography and size. A perfect CPV match three states away, or at ten times your usual contract size, is still not a bid you can win.
  5. Watch the calendar. A good match with a deadline in 48 hours needs attention today.

One caveat: many U.S. federal notices are classified with NAICS rather than CPV, and portals differ in what they let you filter on. Doing this by hand across several portals is where the time goes.

How RFPWatch uses classification to score bids

RFPWatch treats classification as a normalization layer that runs before scoring. For U.S. federal bids, we map the notice's native classification to the equivalent so every portal sits on one consistent layer. Then:

  • Exact class match earns the highest relevance score. A roofer sees roofing work first.
  • Parent division or group match earns secondary relevance: adjacent scope that is worth a look.
  • Supplementary detail boosts confidence for specialized work, such as membrane versus metal roofing.
  • Non-matching classification is filtered out before the digest is built, however many keywords overlap.

That relevance is combined with your geography, license type, and contract size range. The goal is a digest of a handful of bids you can realistically win, not forty alerts with three worth reading, with closing-soon flags on the high-fit ones so the last 48 hours are not spent on noise. We are also building the digest to show why a bid appeared, such as “Matched on CPV 45261000 — roofing work,” so you can trust the filter.

The takeaway

You do not need to memorize the CPV tree. You need to know that buyers classify their work, that the classification is more reliable than the words around it, and that a tool built on it will hand you fewer, better bids.

Let Us Map Every Bid Before It Reaches Your Inbox

Try RFPWatch's fit-scored daily digest for your trade, with closing-soon alerts included. 7-day free trial.

Built with Leapd