Description
n8n-nodes-firmendata
An n8n community node for firmendata —
German and Swiss company data from the Unternehmensregister, Handelsregister
and Swiss commercial register: register profiles, parsed annual financial statements,
shareholder cap tables, UBO chains and register history.


Installation · Operations · Credentials · Compatibility · Resources
Installation
Follow the
community nodes installation guide
and enter n8n-nodes-firmendata as the npm package name.
Operations
Company
| Operation | What it returns |
|—|—|
| Autocomplete | Company-name suggestions for a fragment. Costs no credits. |
| Search | Company registers, with filters for country (DE or CH), Swiss canton, German and Swiss legal forms, legal status, register court, federal state, city, industry, revenue, balance-sheet total, employees, founding date, public-procurement role and more. Dropdowns wherever the API has a fixed set of values. Cursor-paginated. |
| Get | Full profile for one company |
| Get Financials | Multi-year financial statements, parsed into figures rather than PDFs. Lean by default — switch on Include Line Items for the rows as filed, and set Years to shorten the history |
| Get Shareholders | Cap table from the most recent Gesellschafterliste (GmbH/UG) |
| Get UBO | Ultimate beneficial owners, resolved through ownership chains |
| Get History | Chronological register history |
| List Documents | Live registry check returning available documents, including older versions, with labels, dates, stored-copy status, coverage and freshness. Costs 5 credits; Swiss, empty and registry-unreachable responses cost no credits. |
| Download Document | A download URL and document metadata. Select File Type and optionally a Document ID from List Documents; leave it empty for the latest version. |
All Get operations, List Documents and Download Document take a Company ID (eu_id), which
Search and Autocomplete return on each hit.
Canton accepts multiple selections and is OR-merged with Federal State.
Sorting by Name defaults to ascending unless Sort Direction is set.
Company profiles, search hits and autocomplete hits include country_code
(DE or CH); search hits also include registered_seat.
Company Size accepts multiple selections: Micro (kleinst, § 267a HGB),
Small (klein, § 267 (1) HGB) and Medium-Sized (mittelgross, § 267 (2) HGB).
For a specific document version, pass its document_id from List Documents
and select the matching File Type. Document ID cannot be combined with
File ID or Fetch Realtime. Register extracts have no document_id;
download them by File Type. The download response includes document_id
and label.
The node is also usable as an AI tool, so an agent can look companies up
directly.
Typical flow
Search → iterate hits → Get UBO for each, for a KYC or onboarding check:
Search (Legal Status: Insolvent, Total Assets Min: 1000000)
→ Loop Over Items
→ FirmenData: Get UBO (Company ID = {{ $json.eu_id }})
> Filtering on company size? Use Total Assets, not Revenue. Small and
> medium-sized German companies file abridged accounts — a balance sheet, but
> no profit-and-loss statement and no headcount. So a revenue or employee
> filter silently narrows your results to the minority that publish a full
> P&L, while the balance-sheet total is available for every filing company.
Credentials
1. Create an API key at
firmendata.com → Account → API Keys.
The free plan includes 100 credits.
2. In n8n, add a FirmenData API credential and paste the key.
3. Press Test — it calls the autocomplete endpoint, which costs no credits,
so testing never spends your balance.
Operations are priced in credits per call; see the
pricing page. Failed requests (4xx/5xx) are
never charged.
Compatibility
Tested against n8n 1.x with n8nNodesApiVersion: 1. Requires Node.js 20.15+.
The package has no runtime dependencies — a requirement for n8n’s verified
community nodes, and the reason the node is written in declarative style: it
describes its HTTP requests via routing and lets n8n’s own request helper
execute them, rather than shipping an HTTP client of its own.
Resources
Development
npm install
npm run dev # starts n8n with this node loaded
npm run generate # regenerate the search filters from contracts/openapi.v1.json
npm run lint # enforces much of n8n's verification checklist
npm test # routing unit tests and the submission scanner's ESLint gate
npm run build
The Search operation’s filters are generated, not hand-written:
contracts/openapi.v1.json (the same contract the firmendata npm and PyPI
SDKs generate their types from) is the input, and
nodes/FirmenData/searchFilters.ts is the output. Names, descriptions,
dropdown options and numeric bounds all come from the spec, so the node cannot
drift from the API the way it did when this list was maintained by hand.
To pick up an API change: copy the new contract in and run npm run generate.
Both npm test and npm run build re-run it with --check and fail if the
committed file is stale.