Developers › Filters
Filters
77 query parameters, accepted by every endpoint that takes filters. The same list is available as JSON from GET /api/v1/filters — this page and that endpoint are generated from the same source, so they cannot disagree.
Unknown parameters are rejected. A misspelled filter returns 400 unknown_parameter instead of being ignored. This is deliberate: an ignored filter would widen your query to the whole register and bill you for it, and you would only find out from the invoice.
Boolean filters accept only true. They narrow the set; to not filter, leave the parameter out. has_phone=false is an error, not "companies without a phone" — for that, use the negative filters where they exist (no_website, no_mx, no_dmarc).
Location
| Parameter | Type | Description |
|---|---|---|
municipalitye.g. 091 | string | Municipality code (3 digits, Statistics Finland). |
regione.g. 01,02 | string | Region code, or several separated by commas. |
postal_codee.g. 00100 | string | Postal code (5 digits). |
Industry
| Parameter | Type | Description |
|---|---|---|
industry_sectione.g. F | string | TOL 2025 section letter. |
industry_divisione.g. 41 | string | TOL 2025 division (2 digits). |
industry_codee.g. 41200 | string | Exact TOL 2025 class (5 digits). |
industry_prefixe.g. 412,431 | list | TOL code prefixes; several are combined with OR. |
searche.g. konepaja | string | Free-text match on company name and industry description. Every word must match the beginning of a word, so "konep" finds "Konepaja". |
Size and age
| Parameter | Type | Description |
|---|---|---|
min_taxable_incomee.g. 50000 | integer | Taxable income in euros, lower bound. NOT revenue — this is confirmed taxable profit after deductions. |
max_taxable_income | integer | Taxable income in euros, upper bound. |
has_taxable_income | boolean | Taxable income is known at all. |
min_age_yearse.g. 5 | integer | Company age in full years, lower bound. |
max_age_years | integer | Company age in full years, upper bound. |
registered_aftere.g. 2025-01-01 | date | Registered on or after this date (YYYY-MM-DD). |
registered_before | date | Registered on or before this date. |
registered_within_dayse.g. 30 | integer | Business ID was issued within the last N days (max 999). Note: this is the business ID registration date, not the trade register entry date — the latter lags by about a week and is processed in batches. |
company_forme.g. 16 | string | Company form code (PRH numeric code): 16 = osakeyhtiö, 2 = asunto-osakeyhtiö, 13 = kommandiittiyhtiö, 10 = keskinäinen kiinteistöosakeyhtiö, 5 = avoin yhtiö, 14 = osuuskunta. |
min_staff_named | integer | At least N named people found on the company website. A size proxy, not a headcount. |
Contact availability
| Parameter | Type | Description |
|---|---|---|
has_phone | boolean | A phone number is available. Level note. On decision-maker level this means the person's own direct number, not merely a number somewhere in the company. |
has_email | boolean | An email address can be delivered for the row. Level note. On decision-maker level: an address for THIS person — either found directly or derivable from the organisation's address pattern. |
has_direct_email | boolean | A personal address found as published, not derived. Level note. On decision-maker level this is the person's own column. |
has_email_pattern | boolean | The organisation's address pattern is known, so an address can be derived from a name. |
email_kinde.g. laskutus | string | Role mailbox category, inferred from the local part. One of: myyntiasiakaspalvelulaskutusrekryviestintakirjaamoLevel note. Not accepted on decision-maker level: role mailboxes belong to the company, not to a person. On company level the row's own email group is what this filters. |
People
| Parameter | Type | Description |
|---|---|---|
has_decision_maker | boolean | At least one named person with a classified decision-making role is known. Narrower than the availability flag of the same name in responses, which counts any named person. Level note. Not accepted on decision-maker level: every row there is a decision-maker, so the filter would mean nothing. |
rolese.g. toimitusjohtaja,myyntijohto | list | Decision-maker roles, comma separated. The special value 'yhteyshenkilo' selects rows with no identified role but with a phone number or email the company published itself — the largest single group. Level note. On company level this asks 'has such a person'; on decision-maker level it filters the row's own role. 'yhteyshenkilo' works on decision-maker level only. |
occupationse.g. terveys_hoiva | list | Occupational groups — a different axis from roles. A dentist has no decision-making role but is still findable. |
job_titlese.g. hammaslaakari | list | Specific job titles inside an occupational group. |
person_changed | boolean | A decision-maker changed within the last 12 months. |
Website and technology
| Parameter | Type | Description |
|---|---|---|
has_domain | boolean | The company holds a domain name. |
no_website | boolean | Neither a domain nor a site registered with the trade register. |
is_ecommerce | boolean | Online store detected on the site. |
technologiese.g. WordPress,WooCommerce | list | Site technologies, comma separated. |
multilingual_site | boolean | The site has a version in another language than Finnish. |
email_platforme.g. Microsoft 365 | string | Mail platform from the MX record. |
no_mx | boolean | The domain accepts no mail — often parked. |
dmarc | string | DMARC policy. One of: nonequarantinereject |
no_dmarc | boolean | The domain has mail but no DMARC record. |
has_customer_portal | boolean | The site has a login — suggests recurring customer relationships. |
site_stale | boolean | Footer copyright year has not moved in three years. |
document_kind | string | A PDF of this kind was found on the site. |
min_page_bytes | integer | Front page weight in bytes, lower bound. |
max_page_bytes | integer | Front page weight in bytes, upper bound. |
min_response_ms | integer | Front page response time in ms, lower bound — i.e. SLOWER than this. The name follows the measurement, not the feeling. |
max_response_ms | integer | Response time upper bound — faster than this. |
min_pages | integer | Pages in the site's own sitemap, lower bound. Sites without a sitemap are excluded in both directions. |
max_pages | integer | Pages in the sitemap, upper bound. |
site_changed_within_days | integer | A change was detected on the site within N days. |
Buying signals
| Parameter | Type | Description |
|---|---|---|
sells_to_public_sector | boolean | Appears in public-sector purchase invoice data. |
min_public_sales | integer | Public-sector sales in euros for the latest full year. |
max_public_sales | integer | Public-sector sales, upper bound. |
won_tender | boolean | Won a public tender (Hilma award notice). |
open_tender | boolean | Has an open call for tenders as a contracting entity. |
in_municipal_decisions | boolean | Named in a municipal decision document. |
received_funding | boolean | Received public development funding (Business Finland / EU). |
min_funding | integer | Funding in euros for the latest decision year, lower bound. |
max_funding | integer | Funding upper bound. |
is_hiring | boolean | Open positions listed on the site. |
certified | boolean | A quality certificate is mentioned on the site (ISO, RALA…). |
customer_type | string | Customer base inferred from the site profile. Includes companies serving both. One of: b2bb2c |
international_trade | boolean | Holds a valid EORI number — imports or exports outside the EU. |
has_patent | boolean | Has filed a patent application (PRH). |
lobbying | boolean | Registered in the transparency register. |
regulated_industry | boolean | The industry has a matter pending in parliament. |
regulated_topic | boolean | The company's own site topic is pending in parliament. |
Registers and property
| Parameter | Type | Description |
|---|---|---|
vat_registered | boolean | In the VAT register. |
prepayment_registered | boolean | In the prepayment register. |
employer_registered | boolean | In the employer register. |
removed_from_prepayment | boolean | Removed from the prepayment register in the last 12 months and not registered again since. |
alcohol_licence | boolean | Valid alcohol licence (Valvira). |
transport_licence | boolean | Valid transport licence (Traficom). |
in_bankruptcy | boolean | Bankruptcy proceedings are currently under way. Completed bankruptcies are not included — the registry entry is removed when the proceedings end. |
in_restructuring | boolean | Corporate restructuring proceedings are currently under way. |
in_liquidation | boolean | The company is currently in liquidation. Usually a controlled wind-down, not insolvency. |
housing_company | boolean | Housing company or mutual real estate company. Note: the registered address is usually the property manager's office, not the building. |
residential_housing_company | boolean | Residential housing company only. |
commercial_property_company | boolean | Mutual real estate company only. |
property_manager_known | boolean | The property manager company is known for this housing company. |
The same filter can mean two things
Company rows and decision-maker rows are different units, and a few filters follow the unit rather than the wording. On /companies, has_phone=true means "this company has a number somewhere". On /decision-makers, it means "this person has their own direct number". The second is a much smaller set, and it is the one you want when you are going to call someone.
The filters where this applies are marked Level note above. Getting it wrong is not a small error: measured on our own data, filtering by role at the wrong level returned 48 408 rows where only 13 399 were genuine — a 3.6× difference, all of it billable.