Reference

Data fields

Every field returned by the MCP server – per tool, with type, meaning and the rule for when a field is empty (null).

Search deliberately returns only a compact summary card per hit – not the full data. That is by design (fast and lean). The full record is fetched on demand by the agent via get_company_details or get_full_record.
search_companies

10-field card per hit – for searching, ranking, scanning.

get_company_details

Full profile of a company (all sections below).

get_full_record

Superset of the profile: full taxonomy + lineage.

1 search_companies → card

Compact extract. Codes are already resolved to labels here (e.g. GmbH, Oberösterreich).

FieldTypeMeaningnull when …
fnrstringFirmenbuch number (e.g. 078052h)never
namestringCompany namenever
legal_formstringLegal-form label (e.g. GmbH)unknown
bundeslandstringBundesland label (e.g. Wien)unknown
size_gklstringUGB filing class: W micro, K small, M medium, G large (not equal to balance-sheet size – holdings often file as small)unknown
bilanzsumme_bandstringhonest size band by balance-sheet totalno statement available
bilanzsumme_latestnumber €Balance-sheet total of the most recent statementno statement available
manager_namestringName of the primary authorised representative (public Firmenbuch data; year of birth yes, no day/month)not provided
equity_ratio_latest0–1Equity ratio (most recent year)not calculable
revenue_latestnumber €Revenue (most recent year)no P&L in the most recent statement
growth_profilestringshrinking/stable/growing/fast_growing< 2 comparable years
has_guv_latestbooldoes the most recent statement have a P&L?– (always set)

2 get_company_details → profile

The company sits under result. Raw codes are returned here (e.g. legal_form: "GES" = GmbH, bundesland: "O" = Oberösterreich). The full code tables are further down under Code tables.

identity · Master data

FieldTypeMeaning
fnrstringFirmenbuch number
register_idstringtechnical ID, format AT_<fnr>
namestringCompany name
legal_formstringLegal form as code (GES = GmbH family; all codes)
statusstringactive / historical / deleted
courtstring | nullresponsible Firmenbuch court (often empty)

location · Registered seat

FieldTypeMeaning
countrystringCountry, always AUT
bundeslandstringBundesland as code, e.g. W Wien, O Oberösterreich (all codes)
citystringCity
postal_codestringPostal code
streetstring | nullStreet (often empty)

company · Key data

FieldTypeMeaning
stammkapitalnumber | nullShare capital in € (often empty)
first_filing_yearintfirst available statement year
last_filing_yearintmost recent available statement year
filing_years_availableintnumber of available statement years
founded_yearint | nullyear founded, if derivable
founded_sourcestring | nullorigin of the founded year
descriptionnullnot populated in V1

size · Size classification

FieldTypeMeaning
gklstringSize class: W micro, K small, M medium, G large
bilanzsumme_bandstringBalance-sheet-total band, small to very_large
peer_percentilesobjectPercentile rank per ratio within the company's own size class (e.g. bilanzsumme: 99.3 = larger than 99.3%)

financials · Financial data

First the header fields, then the positions – each as a time series (year → value).

FieldTypeMeaning
latest_yearintmost recent statement year
has_guv_latestbooldoes the most recent year have a P&L?
revenue_basisstring | nullorigin of the revenue value
latestobjectheadline values for the most recent year (subset)
bilanzobjectBalance-sheet positions (see below)
guvobjectP&L positions (see below; empty {} when there is no P&L)

Balance-sheet positions in financials.bilanz

PositionMeaning
Total
bilanzsummeBalance-sheet total (sum of all assets, equal to sum of liabilities and equity)
Assets
anlagevermoegenNon-current assets (long-term assets)
sachanlagenProperty, plant and equipment (land, buildings, machinery)
finanzanlagenFinancial assets (participations, securities)
umlaufvermoegenCurrent assets (short-term assets)
vorraeteInventory (stock on hand)
forderungenReceivables (e.g. trade receivables)
cashCash and equivalents (cash on hand, bank balances)
Liabilities & equity
eigenkapitalEquity
stammkapitalShare capital (subscribed capital)
kapitalruecklagenCapital reserves
gewinnruecklagenRetained earnings reserves
bilanzgewinn_verlustNet profit / loss carried forward
rueckstellungenProvisions
verbindlichkeitenLiabilities (debt)

P&L positions in financials.guv · only when has_guv

PositionMeaning
umsatzerloeseRevenue
materialaufwandCost of materials
personalaufwandPersonnel expenses
abschreibungenDepreciation and amortisation
ebitOperating result (before financial result and taxes) – see note
ebitdaOperating result plus depreciation – see note
jahresueberschussNet income / loss for the year
Note on EBIT/EBITDA: The Austrian UGB statement (§ 231 (2), total-cost format) reports neither EBIT nor EBITDA. As ebit we use the reported Betriebserfolg (operating result before financial result and taxes), and as ebitda the operating result plus depreciation. This does not match the strict EBIT definition (earnings before interest and taxes, including the financial result); treat it as a simplified approximation. For companies with a material financial or participation result (e.g. holdings) the values can deviate noticeably.
Balance sheet only, no P&L: Small companies often file only a balance sheet. In that case guv = {}, revenue_latest = null, and margin-based ratios stay empty. Filter explicitly with has_guv / has_guv_latest.

ratios · Financial ratios

13 ratios, each as a time-series object. Margin and return ratios require a P&L and otherwise stay empty.

RatioMeaning
equity_ratioEquity ratio (equity / balance-sheet total)
debt_ratioDebt ratio (debt / balance-sheet total)
debt_to_equityDebt-to-equity ratio (debt / equity)
working_capital_ratioWorking-capital ratio
anlagedeckungsgrad_1Fixed-asset coverage I (equity / non-current assets)
ebit_marginEBIT margin (EBIT / revenue) – EBIT = operating result, see note above
ebitda_marginEBITDA margin (EBITDA / revenue)
net_marginNet margin (net income / revenue)
personalkostenquotePersonnel-cost ratio (personnel expenses / revenue)
materialaufwandsquoteMaterial-cost ratio (cost of materials / revenue)
roaReturn on assets (ROA)
roeReturn on equity (ROE)
capital_profilequalitative capital-structure profile

Each ratio object contains, among others, latest, latest_year, history (year → value), avg_3y/avg_5y, min_5y/max_5y, volatility, trend as well as growth measures.

growth · Growth

FieldTypeMeaning
profilestring | nullshrinking / stable / growing / fast_growing (empty with < 2 comparable years)
methodstring | nullcalculation basis for the profile

employees · Employees

FieldTypeMeaning
latest / latest_year / historyobject | nullEmployee count per year – often empty, since the Firmenbuch records employee counts only sporadically

filings · Filed annual statements + events

filings[] fieldTypeMeaning
stichtagstringBalance-sheet date of the statement
formatstringSource format (e.g. legacy_finanzonline, jab_4_0)
parsedboolparsed by machine?
gklstringSize class at filing time
doc_key · document_url · pdf_doc_keystring | nullDocument references (partly empty)

events[] – register events; mostly empty in V1.

management · Management

FieldTypeMeaning
n_signatories_latestintNumber of authorised signatories (most recent year)
signatories_stable_yearsintYears of stable management
primary_manager.ageintcurrent age of the primary manager (year-based)
primary_manager.birth_yearintYear of birth (year only)
primary_manager.role_labelstringRole (e.g. Managing Director)
primary_manager.vertretungstring | nullType of representation (sole / joint)
Privacy (GDPR): Personal names are not returned. Available are only age and year of birth (year only, no day/month) as well as role and representation – enough for succession screens without identifying the individual.

3 get_full_record → full record

Contains everything from the profile plus:

  • financials.positions – the complete 317-position taxonomy (every UGB position)
  • financials.passthrough – unknown source codes including history (lossless)
  • financials.completeness – quality measure (position count per year)
  • financials.guv_years – list of years with a P&L
  • management.signatories_history – authorised signatories per year
  • derivationsmetrics_version + formula registry of the ratios

Same here: names stay hidden (GDPR).

4 Filters, sorting, pages

Arguments of search_companies.

FilterMeaning
nameSubstring of the company name
legal_formLegal form, e.g. GmbH
bundeslandPlain name, e.g. Wien
size_gklSize class W/K/M/G
bilanzsumme_min / _maxBalance-sheet total from / to (€)
equity_ratio_min / _maxEquity ratio from / to (0–1)
revenue_min / _maxRevenue from / to (€)
employees_min / _maxEmployees from / to
growth_profileshrinking / stable / growing / fast_growing
has_guv · has_guv_latestonly companies with a P&L (ever / in the most recent year)
last_filing_year_minmost recent statement at least from this year
founded_year_min / _maxYear founded from / to
gf_age_minprimary manager at least X years old (succession screen)
manager_nameSubstring of the authorised representative's name (public Firmenbuch data)
statusactive / inactive / all

Sorting: sort = { field, descending } over, among others, bilanzsumme, equity_ratio, revenue. Pages: page (from 1), page_size (default 25).

5 Code tables

Bundesland (code → plain name): B Burgenland · K Kärnten · N Niederösterreich · O Oberösterreich · S Salzburg · St Steiermark · T Tirol · V Vorarlberg · W Wien.

Legal form: The granular Firmenbuch code is in the profile (legal_form). The GmbH family is the prefix GE… (GES ≈ 99.7%); the search card labels it as GmbH.

Size class gkl: W micro · K small · M medium · G large.

6 Example response

This is what a full get_company_details response looks like for a fictional example company (abbreviated; time series are illustrative). Fields with null or empty objects/lists are also part of the response and are sent where useful, so the agent can tell the difference between "not present" and "unknown".

Note: all values below are fictional and serve only to illustrate the structure.

// Response envelope
"schema_version": "1.0",
"data_version": "2026-06-27",
"provenance": {
  "source":        "Österreichisches Firmenbuch / BMJ – Justiz",
  "license":       "CC BY 4.0",
  "data_version":  "2026-06-27",
  "schema_version": "1.0",
  "built_at":      "2026-06-27T07:32:14Z"
},
"result": {
  "identity": {
    "fnr":         "999999x",
    "register_id": "AT_999999x",
    "name":        "Beispiel Industrie GmbH",
    "legal_form":  "GES",           // code → label "GmbH" (see §5)
    "status":      "active",
    "court":       null
  },
  "location": {
    "country":     "AUT",
    "bundesland":  "O",             // Oberösterreich
    "city":        "Linz",
    "postal_code": "4020",
    "street":      null
  },
  "company": {
    "stammkapital":           35000,
    "first_filing_year":      2014,
    "last_filing_year":       2024,
    "filing_years_available": 11,
    "founded_year":           2013,
    "founded_source":         "first_filing-1",
    "description":            null
  },
  "size": {
    "gkl":               "M",           // medium
    "bilanzsumme_band":  "large",
    "peer_percentiles": {
      "bilanzsumme":    82.4,
      "equity_ratio":   71.3,
      "revenue":        68.9
    }
  },
  "financials": {
    "latest_year":     2024,
    "has_guv_latest":  true,
    "revenue_basis":   "umsatzerloese",
    "latest": {
      "bilanzsumme":    12450000,
      "eigenkapital":   5230000,
      "umsatzerloese":  18900000,
      "ebit":           1430000,
      "ebitda":         2210000,
      "jahresueberschuss": 980000
    },
    "bilanz": {
      "bilanzsumme": {
        "latest":      12450000,
        "latest_year": 2024,
        "history":     { "2022": 10840000, "2023": 11620000, "2024": 12450000 }
      },
      "eigenkapital":    { "latest": 5230000,  "history": { "2022": 4380000, "2023": 4790000, "2024": 5230000 } }
      // … more balance-sheet positions (verbindlichkeiten, anlagevermoegen, vorraete, cash, …)
    },
    "guv": {
      "umsatzerloese":  { "latest": 18900000, "history": { "2022": 16200000, "2023": 17550000, "2024": 18900000 } },
      "ebit":           { "latest": 1430000,  "history": { "2022": 1180000, "2023": 1290000, "2024": 1430000 } }
      // … materialaufwand, personalaufwand, abschreibungen, jahresueberschuss, …
    }
  },
  "ratios": {
    "equity_ratio": {
      "latest":        0.42,
      "latest_year":   2024,
      "history":       { "2022": 0.404, "2023": 0.412, "2024": 0.42 },
      "avg_3y":        0.412,
      "min_5y":        0.39,
      "max_5y":        0.42,
      "trend":         "rising",
      "growth_1y":     0.019,
      "growth_3y_cagr": 0.021
    },
    "ebit_margin":  { "latest": 0.076, "trend": "stable" }
    // … debt_ratio, debt_to_equity, working_capital_ratio, anlagedeckungsgrad_1,
    //    ebitda_margin, net_margin, personalkostenquote, materialaufwandsquote,
    //    roa, roe, capital_profile
  },
  "growth": {
    "profile": "growing",
    "method":  "revenue_3y_cagr"
  },
  "employees": null,                  // only sporadically recorded in the Firmenbuch
  "management": {
    "n_signatories_latest":    2,
    "signatories_stable_years": 4,
    "primary_manager": {
      "age":         52,
      "birth_year":  1974,            // year only (GDPR)
      "role_label":  "GESCHÄFTSFÜHRER/IN (handelsrechtlich)",
      "vertretung":  "selbständig"
    }
  },
  "filings": [
    {
      "stichtag":     "2024-12-31",
      "format":       "jab40_semantic",
      "parsed":       true,
      "gkl":          "M",
      "eingereicht":  "2025-08-12",
      "document_url": "https://justizonline.gv.at/…",
      "pdf_doc_key":  null
    }
    // … older statements, sorted by stichtag descending
  ],
  "events": []
}

In the search card (search_companies) codes are already resolved to labels (e.g. legal_form: "GmbH", bundesland: "Oberösterreich"). In the full profile and in get_full_record the raw codes are returned — the tables above in §5 explain the resolution.

7 Status & warranty

Every response carries provenance.data_version and built_at (build time of the delivered data). The data comes from the Austrian Firmenbuch (BMJ – Justiz, EU High Value Dataset, CC BY 4.0), is processed automatically and provided without warranty as to accuracy, completeness or timeliness. The official Firmenbuch extract is always authoritative.

Developer variant of this page: FIELD_REFERENCE.md in the repo.