Skip to content

KnowledgeBasics

CPV codes: what is a CPV code and how do you find the right ones?

Every European public tender carries a CPV code: an eight-digit number that says what is being bought. When you search TenderNed, the Dutch tender platform, or TED, the EU’s, you are really searching on a buyer’s choice of code. Pick the wrong CPV codes and you either see contracts that do not suit you, or you miss exactly the one you should have won. This article explains how the codes work, where they fall short, and how to build a search profile from codes and keywords together.

Atvalio · November 2026 · 9 min read

Written by the Atvalio editorial team: people who spent years bidding on tenders themselves. About us

What is a CPV code?

A CPV code is a code from the Common Procurement Vocabulary, a single European classification that public buyers use to describe the subject of their contracts. Because the codes are the same in every EU country, you can search with them regardless of the language or wording the buyer used.

The CPV was set up by Regulation (EC) No 2195/2002. The list in use today is the revised version in Regulation (EC) No 213/2008, which applies from 15 September 2008. The EU procurement directive refers to it directly: any classification used in a European tender is the CPV (Article 23 of Directive 2014/24/EU). PIANOo, the Dutch government’s procurement expertise centre, calls the code mandatory in European tenders.

Note that a CPV code describes what a public body buys, not what your company is. You choose your codes based on how buyers describe your work, not on how your company is registered.

How is a CPV code built?

The list is a tree. The more leading digits are filled in, the more specific the code. The first two digits give the division, the first three the group, the first four the class and the first five the category. The last three of the eight digits add precision within a category. A ninth digit, after the hyphen, is a check digit with no meaning of its own.

This is how it works for security:

LevelCodeWhat it covers
Division79000000Everything starting with 79. Security sits here, but so does printing, for example (79800000).
Group79700000-1Investigation and security services
Class79710000-4Security services
Category79713000-5Guard services

Sources: PIANOo (structure of the code; overview of CPV codes for social and other specific services, Dutch) and Regulation (EC) No 213/2008, Annex I. Descriptions translated by us; the official English labels are in the CPV list on TED.

Alongside this main vocabulary, the CPV has a supplementary vocabulary. Those codes combine letters and digits and add characteristics such as material, form or use. For a search profile, you work with the ordinary eight-digit codes.

Do not confuse the supplementary vocabulary with the additional codes in a notice. A notice has one main code; on TenderNed the field is called “Belangrijkste classificatie (cpv)”. Below it, the buyer can add extra codes from the same main list, under “Aanvullende classificatie (cpv)”, or “Aanvullende CPV-code(s)” in older notices. Those extra codes often tell you what else the contract contains.

How do public buyers choose their CPV code?

PIANOo gives buyers several rules, including these. Choose the code that fits the contract best, and as specific as possible. For a mixed contract, choose the code of the main part. Make sure the first two digits match the type of contract: 50 to 98 for services, 45 for works, 0 to 44 and 48 for supplies. And choose the code early: TED rejects a notice with a wrong combination, and TenderNed shows an error.

Rules do not guarantee that every code is right. When TED announced stricter checks from January 2020, a Dutch law firm noted that choosing the right code “does not always go well”. And the rules themselves create gaps in your results. A fictional example: a municipality buys facility services covering cleaning, security, reception and catering in one contract. The main code becomes Facilities management (79993100). Cleaning appears at most as an additional code. If you only search on cleaning codes and your search only looks at the main code, you will not see this contract.

The code can also decide which rules apply. Security services (79710000-4) and guard services (79713000-5) are on the list of social and other specific services (Annex XIV to Directive 2014/24/EU). For those, the European threshold from 1 January 2026 is €750,000, against €216,000 for other services bought by municipalities and provinces. A security contract worth a few hundred thousand euros therefore does not have to be tendered at European level. How such contracts are bought in the Netherlands is explained in below the threshold.

A CPV code shows how the buyer classified the contract, not everything that is in it.

Which CPV code fits your service?

These are codes you will find in Dutch notices for services. Use them as a starting point, not a complete list. Looking for the CPV code for cleaning, for instance? Check the codes around it too: offices, schools and buildings each have their own.

ServiceCPV codeDescription as shown on TenderNed
Cleaning90900000Schoonmaak- en afvalverwijderingsdiensten (cleaning and waste disposal services)
Cleaning90911200Reiniging van gebouwen (building cleaning)
Cleaning90919000Reinigingsdiensten van kantoren, scholen en kantoorapparatuur (cleaning of offices, schools and office equipment)
Cleaning90919200Schoonmaken van kantoren (office cleaning)
Grounds maintenance77310000Beplanten en onderhouden van groengebieden (planting and maintenance of green areas)
Grounds maintenance77314000Onderhoud van terreinen (grounds maintenance)
Security79710000Beveiligingsdiensten (security services)
Security79711000Diensten voor alarmbewaking (alarm monitoring)
Security79713000Bewakingsdiensten (guard services)
Security79714000Surveillancediensten (surveillance services)
Facilities79993000Gebouwen- en faciliteitenbeheer (building and facilities management)
Facilities79993100Faciliteitenbeheer (facilities management)
Facilities79992000Receptiediensten (reception services)
Facilities98341100Accommodatiebeheerdiensten (accommodation management)
IT72000000IT-diensten: adviezen, softwareontwikkeling, internet en ondersteuning (IT services: consulting, software development, internet and support)
IT72222300Diensten in verband met informatietechnologie (information technology services)
IT72254000Testen van software (software testing)

Codes without check digit. Checked in notices on TenderNed and in PIANOo’s CPV overview. The Dutch labels are those in the notices; the English in brackets is our translation. The full list in every EU language is available on TED.

Look beyond your own division. A grounds maintenance tender can include earthworks, which carries a works code (45112500). A facilities contract can contain codes from division 55 (catering), 79 (security, reception) and 90 (cleaning). If you only want to bid for part of such a contract, teaming up is an option: see consortium or subcontracting.

How do you build a search profile on TenderNed or TED?

On TenderNed you save your search as an interest profile (interesseprofiel). In it you set CPV codes, search terms, region, contracting authorities and the type of contract, and you choose whether to be alerted straight after publication or once a day. Just following tenders needs no company account. To respond or submit a bid, you need an account with eHerkenning, the Dutch business login. On TED you search with the same CPV codes, for contracts across Europe. More about the platform itself in what is TenderNed.

  1. Start from what you sellWrite down your services in your clients’ words, not your brochure’s. Note what comes with them too, such as window cleaning with office cleaning, or alarm response with security.
  2. See which codes buyers actually useFind five to ten notices on TenderNed you would have wanted to bid for, including old or awarded ones. Note the main code and the additional codes. That is your best evidence of how your market is classified.
  3. Pick the right levelAccording to TenderNed, a broad code also finds all codes below it, but a specific code does not find the codes beside or above it. Choose only 90919200 and you miss a notice under 90911200. So go up a level wherever you can do all the work below it.
  4. Add keywordsKeywords catch what a code misses, such as a cleaning part inside a facilities contract. Most Dutch notices are in Dutch, so add Dutch terms. In the TenderNed search bar, put a fixed phrase in double quotation marks to search for exactly those words.
  5. Narrow by region and contract typeSet the place of performance to the provinces where you work, and the contract type to services if you do no works or supplies.
  6. Test and maintainRun your profile against the past month’s notices. Did you hear about a tender from a colleague or client that your profile missed? Find out why, and adjust codes or keywords.

Too narrow or too broad: where does it go wrong?

  • Too narrowOnly the most precise codeYou choose office cleaning, while schools, buildings and sports halls fall under other codes. Your profile looks tidy and misses half the market.
  • Too broadA whole divisionChoose 90900000 and you also get waste disposal next to cleaning. Choose all of division 79 and you also get printing. After a few weeks you stop reading the alerts, and then you miss the good ones anyway.
  • Codes onlyNo keywordsThe tender you are after sits under a different main code, because your service is only part of the contract.
  • Keywords onlyNo codesBuyers describe the same work differently from you, and a TED notice from another country is in another language. The code is the same in every language.
  • Wrong typeService codes onlyMaintenance on a building can count as works when it goes beyond keeping things running, such as repairing or replacing. If you do that work, add the matching codes from division 45.
  • Expecting everythingThinking the profile finds it allSmaller contracts awarded by invitation are, as a rule, not publicly announced, so they are not on TenderNed either. For those you have to be invited, which takes a different approach.

A good search profile misses little and alerts you to little noise. You do not get there in one go, but by tracking what you miss.

A match is not yet a contract. Read the documents first and make a deliberate bid/no-bid decision: do the requirements, size and location fit your company? If the contract is large and you doubt your chances, also read can a small business win a European tender.

HOW ATVALIO HELPS

In Atvalio you set your search profile with CPV codes and keywords. Every working day, Atvalio checks the new publications on TenderNed against that profile and tells you what fits, with the code or keyword that matched. You start the tender with one click: Atvalio fetches the documents, reads everything and lists the requirements, award criteria, formal requirements and deadlines for you, with the page where each one appears. You get a reasoned bid/no-bid recommendation, first provisional and final after the answers to bidders’ questions, and suggestions for questions you could ask. Atvalio does not monitor TED or other platforms; a tender from elsewhere you upload yourself. You choose your codes and keywords, and you decide whether to bid.

Atvalio Tenders launches in January 2027. On the waiting list, you can be the first to start a 14-day trial on a real tender.

Want Atvalio to do this for you?

You will first get an email to confirm your address. Unsubscribing takes one click. More in our privacy statement.

Sources