PKD codes in prospecting: a good sieve, a poor argument
Sell into Poland and sooner or later somebody offers you a list built on PKD codes. The offer is tempting: the data is public, free and exhaustive, and one condition removes whole sections of the economy. It is also where most Poland entry lists go wrong, because a PKD code tells you what a company registered as, never what it is doing this quarter. Here is what the code is, where the sieve earns its keep, and what has to sit beside it.
Published 14 Sept 2026 · 9 min read
What a PKD code is, and who it was made for
PKD — Polska Klasyfikacja Działalności — is Poland's classification of economic activities, the national build of the EU's NACE. Every entity declares one primary activity and further secondary ones when it registers; the declarations land in REGON, the register kept by Statistics Poland (GUS), and travel together with the legal form and the KRS court-register number. If you have used SIC or NACE at home the structure will feel familiar: section, division, group, class, and a Polish subclass one level deeper.
The purpose is in the name: the classification exists so the state can count what the economy is made of and so offices share one vocabulary. Nobody filled that field in thinking a foreign vendor would build a call list out of it, and that mismatch is the source of every problem below.
Two consequences follow. First, a code is a declaration, not an observation: nobody comes back a year later to check it, and codes are added in bulk at incorporation so that nobody has to return to the registry court for every new service line. Second, the classification is organised around an activity or a product, and your ideal customer profile almost never is — you sell to companies of a certain size, with a certain operational problem, at a certain stage of growth, and the classification has a column for none of that.
What a PKD filter is genuinely good at
None of the criticism below makes the code useless. It has three properties that nothing else has this early in a search, and they are worth using on purpose.
- It excludes fast, and for nothing. Excluding an entire section of the classification is one condition that removes thousands of entities before anybody fetches a single web page. Where reading a site and asking a model both cost money, the order of criteria has a price: the free, unambiguous ones go first. The code belongs in that group, as a reject rule.
- It does not move. The same company carries the same codes next month and next year unless it changes them itself. That stability makes the criterion reproducible: write it into a profile and get the same selection logic back in six months. It is also what disqualifies the code as an opening line — something that has not changed in a year cannot explain why you are calling today.
- It is public, shared and checkable. REGON is open and free, and the classification is one dictionary for everyone. You never have to negotiate what “a manufacturer” means with a colleague or a vendor: the criterion can be written down, handed over and audited afterwards. Criteria invented for one campaign have none of those properties.
Three places where the code breaks
First, the primary code goes stale. A company registers for one activity, its centre of gravity moves within two years, and nobody touches the entry because nothing forces them to. A manufacturer that started as a distributor still shows wholesale as its primary activity. Filter on the primary code and you lose that company in silence — rejected companies never write back to tell you that you were wrong about them.
Second, the condition “holds this code anywhere” fails the other way, and worse. We checked this against our own data on 5 September 2026: across the 59 companies from all our runs that had a matched registry record at the time, the average one declared 22 codes and the extreme case declared 139. With a tail like that, “holds this code” is satisfied by almost everybody, and a filter that passes almost everybody is not a filter. You are left with one option that loses the right companies and one that loses none.
Third, groups hide the entity that actually operates. The company that signs the contract is often registered for management or holding activity, while the plant or the logistics arm sits in a subsidiary under a different code. The sieve then keeps the warehouse and drops the head office, or the reverse, and either way you are talking to the wrong legal entity. No choice of code fixes that; reading what the group says about itself does.
And the plain one: two companies with identical codes routinely have nothing in common. The same position covers a team of fifteen and a plant of a thousand, an exporter and a firm serving three counties. The code distinguishes neither scale nor sales model nor maturity — usually the three things that decide whether a company is worth your time.
The pattern that works: the code excludes, the signal calls
Put the code on the exclusion side of the profile, not the selection side. Excluding whole sections your offer does not apply to costs you very little. Selecting on a single code narrows the market to one declaration filed years ago and removes everyone who never updated it. Cheap rejection at the front, cautious selection at the back — in that order the code pays for itself.
Take the reason to call from something else: a dated event with a source address. A new facility, a job ad for a new location, an investment announcement, a change in the management board — or a new code added to an existing company, which is an event with a date rather than a standing attribute. A sentence like that can be quoted in a first line and can be checked. A code can be neither. The rule on our side is hard: a “why now” sentence with no stored source and date is not written at all.
At Pursiva the ideal customer profile is not a document but a set of conditions. Before a list goes out, every scored company passes an automatic, deterministic check: stored facts about the company against your exclusions, the legal form read from the register, the employee range and the voivodeships you chose. The check does not guess — the same input always produces the same verdict — and a company that fails it is held back rather than sent with the rest. The run delivers itself, within an hour of payment.
PKD codes are deliberately not part of that check, for the reason above: with more than twenty registered codes on an average company, “holds this code” rejects nobody and “holds it as primary” loses the manufacturer registered as a distributor. Both are heuristics rather than facts, so they stay with the model, which also reads the company's own site. We settle deterministically only what can be settled honestly.
Why a code is not a list — one run, counted
In the run of 2 Sept 2026, made on the offer of an ERP and WMS vendor from Wrocław — our own submission, the vendor is not a customer — 11 planned queries produced 111 candidates and 40 scored, ranked companies. If a code decided the list, the list would be that first number — the rest of the funnel is how much survives once you check what those companies actually do. A registry record, and with it the PKD codes, could be attached to 6 of the scored companies; the limit is not GUS, which answers nearly every query, but the fact that most Polish companies do not publish their tax number on their own site.
- 11Grounded searches
- 111Candidates found
- 80Kept by the cheap filter
- 59Websites read and researched
- 40Scored and ranked
Where Pursiva reads the code from
We read codes from the REGON register through the GUS API, and only when the company publishes its Polish tax number (NIP) on its own site — without it there is nothing to query with. The legal form and the KRS number come back in the same record, which is what turns “some company in Wrocław” into a specific entity you can check further. Registry data carries a stored source address, like every signal does.
Sole-trader entries are never read: results marked in the register as a natural person are dropped before any full report is requested, so their data never enters the database. The name of a Polish sole proprietorship is a person's first name and surname, and the address is often their home. We deliver knowledge about companies, not profiles of people — individuals are described by role and nothing else.
A company we could not match to a registry record does not get an invented code: the gap shows up on the list as a gap, and everything we do know about it comes from its own site and public sources with an address and a date attached.
Frequently asked questions
- Can I supply my own PKD codes?
- Yes. The ICP editor has a field for them, with format validation and a limit of twenty entries. The codes you enter steer the search and feed the scoring, but they are not the hard sieve — what is checked strictly is your exclusions, the legal forms, the employee range and the voivodeships. The model will not invent codes either: if your offer does not make them obvious, it leaves the field empty.
- Is the code in the register up to date?
- Formally yes, practically rarely. The entry shows the last declaration a company filed, not what it does today, and nothing compels an update. A primary code from several years ago is often misleading, and the secondary codes usually describe plans made on the day of incorporation. Read the entry as the range a company may move in, not as a description of this quarter.
- Is PKD enough to build a list?
- No. The code answers cheaply who could be a customer at all; it never answers who is worth contacting this week. In the published run of 2 Sept 2026, 111 candidates ended as 40 scored and ranked companies — the rest fell away on things the register does not show. The pattern is the one above: the code excludes, a dated signal with a source gives the reason to call.
Read next
See which companies fall out of your own offer
Paste your website address. You first see the ideal customer profile built from your offer — exclusions, legal forms and a field for your own PKD codes — and you can correct it before you pay anything. A run costs PLN 149 net (+ 23% VAT, so PLN 183.27) and lands in your inbox within an hour.
Paste your website