European Company Data API - Firmographics
Under maintenancePricing
$12.00 / 1,000 company results
European Company Data API - Firmographics
Under maintenanceSearch a European company database by country, registry id, industry code, website keywords, detected technologies, employee count and filed financials such as turnover and profit. Pay per result. Bring your own API key.
Pricing
$12.00 / 1,000 company results
Rating
0.0
(0)
Developer
Nabeel Hassan
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Search a European company database and export the matches as clean rows. Filter by country, registration number, domain, city, municipality, region and postal code, by official industry code or the provider's own industry model, by keywords found on the company website or in its filed financial statements, by the technologies detected on its website, and by real numbers from filed accounts: employee count, employee growth, turnover, turnover growth and profit. You pay only for the companies you actually receive.
This actor is built for building territory and ideal customer profile lists in the Nordics and wider Europe, enriching a CRM with registry-grade company data, and pulling incremental updates as company records change.
What you can do with it
- Build a target list of every company in a country above a turnover or headcount threshold.
- Find companies running a given technology on their website, in a chosen market.
- Look up companies in bulk by national registration number or by domain.
- Filter by growth: companies whose headcount or turnover rose by at least a set amount.
- Pull only what changed since a date, for an incremental sync rather than a full re-export.
- Export everything as JSON, CSV or Excel, or push it into a CRM or warehouse.
Features
- Filters are built from the provider's own field-plus-operator grammar, so each input maps to exactly one documented filter, for example an employee minimum becomes
staff_number__gte. - List filters accept several values and match any of them, entered as a list, a comma list or a newline list.
rawFiltersreaches the provider's several hundred remaining fields and every operator, including the decimal maturity scores and geographic radius search.- A run without a country filter is allowed but logged as a warning, because the provider recommends always setting one for speed.
- Optional field selection trims the response to the columns you need, which makes large exports noticeably faster.
- Offset pagination is walked automatically, advancing by the number of records actually returned so a short page can never skip a match.
- Registry, contact, digital, industry and financial fields are flattened into flat sortable columns, with numbers kept as numbers.
- Duplicate companies are removed across pages, keyed on provider id, registration number and domain, before anything is charged.
- The untouched provider payload is kept under
raw, so nothing is lost. - Access tokens are exchanged from your long-lived token, cached for their 12 hour lifetime and refreshed automatically, including one silent retry if a token expires mid-run.
- Rate limits are handled with retry-after aware backoff, and a run that hits a limit keeps everything already collected.
- Pay-per-result pricing with a hard result cap so a run can never surprise you.
Input
| Field | Type | Description |
|---|---|---|
country | array | Two-letter country codes. Recommended on every run. |
companyName / companyNameContains | string | Exact name, or a case-insensitive substring. |
businessId / domain / vid | array | Direct lookup by registration number, domain or provider id. |
city / municipality / region / postal / visitingCity | array | Location filters. |
industryCodes / customIndustry | array | Official industry codes, or the provider's own labels. |
companyKeywords / websiteKeywords / financialStatementKeywords | array | Keyword filters. |
webTechnologies | array | Technologies detected on the company website. |
formOfCompany / status | array | Legal form and registry status. |
registrationDateFrom / registrationDateTo | string | Registration date range, as YYYY-MM-DD. |
modifiedSince | string | Only records changed on or after this date. |
staffNumberMin / staffNumberMax / staffNumberGrowthMin | integer | Employee count and growth. |
turnOverMin / turnOverMax / turnOverGrowthMin | integer | Turnover and turnover growth. |
profitMin / profitMax | integer | Reported profit range. |
rawFilters | object | Any extra field and operator, merged last. |
fields | array | Restrict the response to these provider fields. |
maxResults | integer | Stop after this many companies (1 to 50,000). |
pageSize | integer | Companies per API call (1 to 100). |
apiKey | string | Your API token. Required, stored securely. |
apiKeyIsAccessToken | boolean | The token is already an access token, so skip the exchange. |
At least one filter is required.
Example output
Each dataset item is one company. Fields are populated where the provider has data, and the untouched payload is kept under raw:
{"vid": "987654321","businessId": "1234567-8","name": "Example Logistiikka Oy","alternativeNames": ["Example Logistics Ltd"],"status": "Active","formOfCompany": "OY","registrationDate": "2012-03-19","foundationDate": "2012-02-28","deregistrationDate": null,"country": "FI","address": "Esimerkkikatu 12","postal": "00100","city": "Helsinki","municipality": "Helsinki","region": "Uusimaa","visitingAddress": "Esimerkkikatu 12 A","visitingCity": "Helsinki","coordinates": { "lat": 60.1699, "lon": 24.9384 },"phone": "+358 9 5550188","email": "info@example.fi","domain": "example.fi","website": "https://www.example.fi","verifiedDomains": ["example.fi"],"linkedinId": "example-logistiikka","twitterLink": null,"facebookLink": null,"industryCodes": ["52290"],"customIndustry": ["Freight forwarding"],"companyKeywords": ["logistics", "freight"],"technologies": ["HubSpot", "Cloudflare"],"staffNumber": 84,"staffNumberEstimate": 88,"staffNumberGrowth": 12,"turnOver": 18400000,"turnOverEstimate": 18900000,"turnOverGrowth": 9,"profit": 1240000,"totalAssets": 9800000,"totalEquity": 4100000,"totalLiabilities": 5700000,"digitality": 0.72,"marketility": 0.55,"sociality": 0.41,"alexaRankGlobal": 842910,"lastModified": "2026-07-28","raw": { "business_id": "1234567-8", "company_name": "Example Logistiikka Oy" }}
Pricing and the credit model
This actor uses pay-per-result pricing. You are charged a fixed price for each company delivered to the dataset, after duplicates are removed. A search that matches nothing costs nothing. Set maxResults to cap how many rows a run can collect, and set a run spending limit as a second safety net. Your own provider plan meters its own quota separately.
Bring your own API key
This actor connects to a third-party European company data provider (Vainu) on your behalf and requires your own provider API token. Create a token in the provider's platform and paste it into the apiKey input. It is stored securely and never logged, and the actor never ships with or shares credentials.
Frequently asked questions
What data does this actor return?
Provider company id and national registration number, company name and alternative names, registry status and legal form, registration, foundation and deregistration dates, the registered and visiting addresses with city, municipality, region, postal code and coordinates, phone, email, domain, website and verified domains, LinkedIn, Twitter and Facebook links, official industry codes and the provider's own industry labels, company and website keywords, detected web technologies, employee count with the provider's estimate and growth, turnover with estimate and growth, profit, total assets, equity and liabilities, digital, marketing and social maturity scores, global website rank, and the date the record last changed. Every record also carries the untouched provider payload.
Which countries are covered?
The provider's registry coverage is strongest in the Nordics and the Netherlands and extends across Europe, with the exact set depending on your own subscription. Filter with country using two-letter codes. If a country is not licensed on your plan the provider says so in its error, which the actor surfaces verbatim.
How do the filter operators work?
Each input maps to one documented field-and-operator pair. A minimum becomes __gte, a maximum becomes __lte, a list becomes __in, and the name substring filter becomes __icontains. For anything not modelled as an input, rawFilters takes the raw field name with any operator: __gt, __gte, __lt, __lte, __ne, __in, __contains, __icontains, __startswith and __geo_within_sphere.
How do I filter on the decimal maturity scores?
The digitality, marketility and sociality scores run from 0 to 1, which cannot be typed into a whole-number input field. Put them in rawFilters instead, for example {"digitality__gte": 0.8}.
How do I pull only what changed?
Set modifiedSince to the date of your last export. That maps to the provider's core-data change timestamp, so a nightly run collects only the records that actually moved rather than re-downloading and re-charging for the whole list.
Why should I always set a country?
The provider says so explicitly: a query without a country filter searches the whole database and is much slower. The actor still runs without one and logs a warning, so an intentionally global search is possible, just slower.
What does the fields input do?
It restricts the response to the provider fields you name, which cuts response size and speeds up large exports. Leave it empty to get the provider's default field set. Note that a column not requested arrives empty in the output row, so only trim once you know which columns you need.
How does authentication work?
The provider issues a long-lived refresh token and short-lived access tokens. The actor exchanges your token for an access token, caches it for its 12 hour lifetime, and refreshes it automatically. If a token is rejected mid-run it is refreshed once and the request is retried. If you already hold an access token, turn on apiKeyIsAccessToken and the exchange is skipped.
How does the actor handle rate limits?
It throttles requests, honours the retry-after signal on a rate-limited response, and backs off exponentially. A response saying the plan does not license a field or country stops the run early and keeps everything already collected.
How am I charged?
You pay a fixed price per company returned to the dataset. Duplicates are removed before charging and empty runs cost nothing. Use maxResults and the run spending limit to control cost.
What output formats are available?
The dataset can be exported as JSON, CSV, Excel, HTML or RSS, or read through the API for pushing into a CRM or warehouse.
Keyword map
european company data api, nordic company database api, finnish company data api, swedish company register api, company firmographics api, business register api, company financials api, turnover and profit data, company registration number lookup, nace industry code search, technographic data api europe, website technology detection data, b2b prospecting data europe, ideal customer profile list builder, company enrichment api, crm data enrichment europe, incremental company data sync, company employee count data, european b2b database, business id lookup api.