Bundesanzeiger Company Filings & Financials
Pricing
from $0.96 / 1,000 filing saveds
Bundesanzeiger Company Filings & Financials
Search official Bundesanzeiger company filings and export annual-account metadata, reporting periods, document links, and published XBRL financial figures.
Pricing
from $0.96 / 1,000 filing saveds
Rating
0.0
(0)
Developer
Automation Lab
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
Search official public Bundesanzeiger company filings and export filing metadata, reporting periods, official document links, available notice text, and published inline-XBRL financial figures.
The Actor is designed for recurring German-company due diligence, annual-account research, audit evidence, and filing-change monitoring.
What does this Actor do?
The Actor opens the public German Federal Gazette search service and returns one structured dataset item per publication.
It can:
- search one or many company names or filing keywords;
- focus on accounting and financial reports;
- search business disclosures, capital-market notices, and other Gazette areas;
- apply publication-date filters;
- follow result pagination within a coherent source session;
- extract reporting periods from annual-account titles;
- open filing details and retain available notice text;
- follow official ESEF report links;
- normalize published inline-XBRL figures and retain their provenance attributes;
- cap accepted results globally and per query;
- optionally bound result-page scanning and stop repeated pages;
- report enrichment availability and financial period/unit provenance explicitly.
The Actor does not invent missing financial values. A filing without an exposed ESEF report remains a useful filing-metadata record, while unavailable financial fields are omitted.
Who is it for?
Due-diligence and KYB teams
Check when a German counterparty published annual accounts and retain source-linked evidence for periodic reviews.
Credit and investment analysts
Collect filing periods, publication dates, revenue, profit or loss, assets, equity, liabilities, and broader XBRL facts when the issuer published them.
Audit and accounting teams
Build a repeatable evidence set for annual-account publication checks without copying rows manually from the Gazette interface.
Corporate-intelligence teams
Run the same company watchlist on a schedule and compare filing keys, dates, periods, or financial facts with earlier datasets.
Data engineering teams
Send typed filing records to a warehouse, spreadsheet, webhook, or downstream entity-resolution pipeline.
Why use this Actor?
Bundesanzeiger uses session-scoped Wicket links and separate ESEF report pages.
This Actor manages that navigation in one run and turns the result into integration-ready JSON.
Useful differentiators include:
- official Bundesanzeiger provenance on every row;
- both filing metadata and available financial facts in one record;
- normalized values plus raw XBRL value, context, unit, decimals, and scale;
- a per-query cap so one broad company name does not consume a whole watchlist run;
- graceful metadata-only output when a filing has no structured report;
- no login requirement for the supported public workflow.
What data can I extract?
| Field | Description |
|---|---|
query | Company name or keyword that produced the result |
searchArea | Requested Gazette section |
companyName | Filing party or company displayed by Bundesanzeiger |
location | Published company location |
area | Source filing area |
publicationTitle | Official publication title |
publicationDate | Date displayed by Bundesanzeiger |
reportingPeriodStart | Parsed annual-account period start, when present |
reportingPeriodEnd | Parsed annual-account period end, when present |
detailUrl | Session-scoped official filing detail link |
documentUrl | Official ESEF report link, when exposed |
documentName | Published XHTML report file name |
noticeText | Available detail text, capped at 50,000 characters |
keyFinancials | Selected normalized revenue, profit/loss, assets, equity, liabilities, and currency |
financialFacts | Published numeric XBRL facts with raw values, normalization outcome, namespace, resolved context and units |
enrichment | Independent notice-text/financial availability and detail-page outcome |
financialSummary | Convenience-key provenance, omission reasons, total facts and raw-array truncation |
sourceUrl | Official result-page provenance |
source | Bundesanzeiger |
fetchedAt | ISO extraction timestamp |
financialFacts can contain issuer-specific concepts as well as standard IFRS concepts.
Use concept, contextRef, and unitRef when joining facts into your own accounting model.
How much does it cost to extract Bundesanzeiger company filings?
The Actor uses pay-per-event pricing:
- one run started event: $0.005;
- one filing saved event for each accepted dataset row;
- BRONZE filing price: $0.0016 per filing;
- lower filing prices apply on higher Apify tiers.
Financial facts included inside a filing row do not create a separate charge event. The Actor checks the remaining payer budget before enrichment and uses the SDK budget-aware save path; it stops with charge_budget instead of returning rows beyond that budget.
Example BRONZE Actor charges:
| Useful output | Estimated Actor charge |
|---|---|
| 1 filing | $0.0066 |
| 5 filings | $0.0130 |
| 25 filings | $0.0450 |
| 100 filings | $0.1650 |
These are Actor charges before any plan-specific platform usage. Start with a small limit, inspect the output, and then scale a scheduled task.
How to run the Actor
- Add one or more legal company names to
queries. - Keep
matchModeset toexact_companyfor precision-safe monitoring. - Keep
searchAreaset toaccountingfor annual accounts. - Set
maxItemsPerQueryfor fair watchlist coverage. - Set the total
maxItemsbudget. - Keep
extractFinancialsenabled when you need published ESEF facts. - Run the Actor and export the default dataset as JSON, CSV, Excel, XML, or RSS.
A good first input is:
{"queries": ["Siemens Aktiengesellschaft"],"matchMode": "exact_company","searchArea": "accounting","maxItems": 2,"maxItemsPerQuery": 2,"includeDetails": true,"extractFinancials": true,"maxFinancialFacts": 100}
Input reference
queries
Legal company names, or filing keywords when matchMode is full_text.
matchMode
Controls which Bundesanzeiger search hits become dataset rows:
exact_company(default) compares normalized legal names and rejects related entities that only mention the query in filing text;company_containsaccepts rows whose displayed company name contains the query;full_textpreserves all source results, including records that matched only inside publication text.
Use exact_company for recurring due diligence and watchlists. Select full_text deliberately for broad filing-keyword research.
searchArea
Supported values:
accountingfor annual accounts and financial reports;businessfor business disclosures;capital_marketfor capital-market notices;official,unofficial,judicial, orvariousfor those Gazette sections;allfor a broad search.
fromDate and toDate
Optional real calendar publication-date boundaries in YYYY-MM-DD format. Reversed ranges, invalid dates, unknown areas, invalid booleans and non-integer/out-of-range limits fail before the run-start event is charged.
maxItems
Maximum unique filing rows across the run. Allowed range: 1–1,000.
maxItemsPerQuery
Maximum unique rows accepted for each query, also capped by maxItems. The Console input schema supplies a default of 5. Raw API inputs that omit this field retain the existing runtime fallback to the global maxItems value. Rejected names and overlapping-query duplicates do not count toward accepted-row caps.
maxPagesPerQuery
Optional result-page scan cap per query, including pages containing only rejected names or duplicates. 0 (default) adds no page cap; 1–10,000 sets an explicit work budget. For a conservative watchlist start with 3. Repeated URLs or repeated result content stop even without a page cap. Limits do not establish that a company has no filings.
The RUN_SUMMARY key-value record exposes pages, scanned, matched, duplicates, saved, and an explicit termination reason per query index (indexes follow input order). source_exhausted means the visible source results ended; page_limit, repeated_page, repeated_content, query_item_limit, global_item_limit and charge_budget are incomplete scans. It also records total requests, response bytes, retries and peak process RSS. Rows not attempted after a global or payer limit are reflected in queriesRequested versus queriesProcessed. No cross-run completeness is promised.
includeDetails
When enabled, the Actor includes actual publication text or text from the official XHTML report, capped at 50,000 characters. An ESEF filing can require viewer/report requests even with extractFinancials off. Result headers, expired sessions and security prompts are never copied as notice text. Both enrichment switches false skip all detail/viewer/report requests.
extractFinancials
When enabled, the Actor follows official ESEF links and parses published inline-XBRL numeric facts.
maxFinancialFacts
Maximum raw XBRL facts retained per filing (1–2,000; default 250). The full report is still downloaded and inspected for summary selection. A lower cap reduces output size, not report download time; financialSummary.totalFacts and truncated disclose retention.
Output example
A current real workflow produces records shaped like this:
{"query": "Siemens Aktiengesellschaft","searchArea": "accounting","companyName": "Siemens Aktiengesellschaft","location": "Berlin und München","publicationTitle": "Jahres- und Konzernabschluss zum Geschäftsjahr vom 01.10.2021 bis zum 30.09.2022","publicationDate": "01/11/2023","reportingPeriodStart": "2021-10-01","reportingPeriodEnd": "2022-09-30","documentName": "siemens-20220930.xhtml","keyFinancials": {"currency": "EUR","revenue": 71977000000,"profitLoss": 4392000000,"assets": 151502000000,"equity": 54805000000,"liabilities": 96697000000},"financialFacts": [{"concept": "ifrs-full:Revenue","label": "Revenue","value": 71977000000,"rawValue": "71.977","contextRef": "CYTD","unitRef": "EUR","decimals": "-6","scale": 6}],"source": "Bundesanzeiger","fetchedAt": "2026-09-19T06:43:29.850Z"}
Session-scoped URLs can expire. Persist the company, title, date, period, document name, and source metadata as the durable record.
Monitoring German annual accounts
Create an Apify Task with your company watchlist.
Use a small maxItemsPerQuery, schedule the Task weekly or monthly, and compare each new dataset with the previous run.
A practical change key is:
companyName + publicationTitle + publicationDate
Send new keys to your compliance queue, CRM, warehouse, or notification workflow.
The Actor returns current source results. It does not maintain cross-run state or send alerts by itself.
Working with financial facts
keyFinancials is a convenience projection of standard concepts found in the report.
financialFacts is the richer provenance layer.
For robust analysis:
- inspect the concept namespace;
- use
contextRefto distinguish periods or dimensions; - use
unitRefand currency context; - retain
rawValuefor auditability; - use normalized
valuefor calculations; - validate issuer-specific concepts before comparing companies.
A report may contain current, comparative and dimensional facts. Convenience keys use standard IFRS taxonomy concepts only, non-dimensional contexts, a simple ISO4217 monetary unit, and the exact reporting period parsed from the filing title. Revenue/profit require the matching duration; balance-sheet keys require the matching period-end instant. Conflicting values, entities, currencies, missing period provenance or invalid normalized facts omit the affected key with a reason in financialSummary.omissions. Identical duplicate facts may agree. currency is present only when all selected keys use the same currency; inspect per-key provenance when it is absent.
Supported numeric transforms include comma-decimal, dot-decimal and fixed-zero/dash forms. Inline sign and base-10 scale are applied, nil stays null (never zero), and unknown transforms, malformed or non-finite values remain raw with a null normalized value and explanation. The capped raw fact array does not limit summary selection from the complete report. Issuer-specific facts remain available without being guessed into standard convenience keys.
enrichment.noticeText is available, disabled or unavailable. enrichment.financials distinguishes available, disabled, no_esef, no_numeric_facts and unavailable. enrichment.detail identifies a publication/ESEF page, challenge, expired session, missing link, unrecognized/search return or failed request/parser phase. A genuine publication without an ESEF link is normal no_esef; failed optional enrichment preserves and charges its useful filing-metadata row once, not an invented financial result.
Reliability and limitations
Bundesanzeiger result and detail links are session-scoped.
The Actor keeps cookies together for search, pagination, filing details, and official report access.
Transient network errors, HTTP 429, and temporary 5xx responses receive bounded retries.
Known limitations:
- not every filing exposes an ESEF XHTML report;
- older or exemption filings may provide metadata but no structured figures;
- official document URLs may expire with the source session;
full_textmode can include related entities because the source may match publication text rather than the displayed company name;exact_companyintentionally omits related subsidiaries, consolidated entity lists, and spelling variants that do not normalize to the requested legal name;- XBRL taxonomies and issuer-specific concepts vary;
- the Actor does not provide accounting advice or restate source figures;
- broad
allsearches can be less precise thanaccountingsearches.
Use exact_company, exact legal names, and source-specific filters when precision matters.
Export and integration workflows
Spreadsheet review
Export the default dataset to Excel or CSV and filter on company, date, period, and filing title.
Data warehouse
Load JSON records into a raw filing table, then expand financialFacts into a child fact table keyed by filing and context.
Compliance automation
Use a webhook after a scheduled run, compare source keys, and create a review only for unseen publications.
Research pipeline
Join records to an internal German-company identifier, then keep the Bundesanzeiger fields as the official publication provenance.
API usage with JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/bundesanzeiger-company-filings-financials').call({queries: ['BASF SE'],searchArea: 'accounting',maxItems: 5,maxItemsPerQuery: 5,extractFinancials: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
API usage with Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/bundesanzeiger-company-filings-financials').call(run_input={'queries': ['BASF SE'],'searchArea': 'accounting','maxItems': 5,'maxItemsPerQuery': 5,'extractFinancials': True,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
API usage with cURL
curl -X POST \'https://api.apify.com/v2/acts/automation-lab~bundesanzeiger-company-filings-financials/runs?token=YOUR_APIFY_TOKEN' \-H 'Content-Type: application/json' \-d '{"queries": ["Deutsche Bank Aktiengesellschaft"],"searchArea": "accounting","maxItems": 3,"maxItemsPerQuery": 3,"extractFinancials": true}'
MCP setup for Claude Desktop, Cursor, and VS Code
Add the Actor to Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/bundesanzeiger-company-filings-financials"
Claude Desktop
Use this server configuration in Claude Desktop:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/bundesanzeiger-company-filings-financials"}}}
Cursor and VS Code
Use the same MCP server URL in Cursor or VS Code's MCP settings. The server exposes this Actor as an Apify tool under your own client configuration.
Example prompts:
- “Find the latest Bundesanzeiger annual-account publications for BASF SE.”
- “Extract published revenue and equity facts for this German-company filing.”
- “Run my three-company annual-account watchlist and return source-linked changes.”
AI-generated interpretations should be checked against the official filing and its XBRL context.
Legality, privacy, and responsible use
The Actor accesses public Bundesanzeiger pages without a private account. It is an independent extraction tool and is not affiliated with, endorsed by, or certified by Bundesanzeiger Verlag.
The Actor does not use AI and sends no input or source records to an AI model provider. Optional MCP clients may process results under the user's own model and provider configuration.
It creates no external filing cache. Failed operations send sanitized diagnostic input, exceptions and Actor/build/run IDs to our private GlitchTip service for repair, retained for 30 days. Secret fields, company/keyword queries and URL query strings are removed. Filing text, raw source records and customer identifiers are not sent in diagnostic reports. This diagnostic-only exception is separate from Apify datasets, key-value stores and logs, which follow your Apify account retention settings and can be deleted through Apify storage controls.
You are responsible for:
- using the data for a lawful purpose;
- respecting applicable terms, database rights, and rate limits;
- applying GDPR and other privacy obligations;
- validating material decisions against the official publication;
- keeping schedules and limits proportionate;
- avoiding claims that a missing result proves a company has no filing.
This Actor is a data-extraction tool, not legal, audit, tax, credit, or investment advice.
Troubleshooting
Why does a filing have no keyFinancials?
The publication may not expose an official ESEF XHTML report, or it may use concepts outside the convenience mapping. Check documentName, financialFacts, and the official filing.
Why do I see a related company?
Bundesanzeiger full-text search can include consolidated-account relationships and related issuer names. Use the exact legal name, the accounting area, and downstream entity matching.
Why are document links unavailable later?
The source uses session-scoped links. Save durable filing metadata and rerun the query to obtain a fresh source session.
Why did I receive fewer rows than maxItems?
The source may have fewer matching publications, maxItemsPerQuery may be lower, or duplicate filing keys may have been removed.
How can I reduce run time?
Set includeDetails and extractFinancials to false for a metadata-only monitoring pass. Set maxPagesPerQuery to bound scan work. Lower maxFinancialFacts to reduce retained output size, not download time.
Related Automation Lab Actors
Use these when the buyer job needs a different official surface:
- Germany Handelsregister Scraper for registry and corporate filing records rather than Bundesanzeiger financial publications.
- North Data Company, Officers & Financials Scraper for company profiles, officers, and timeline enrichment from North Data.
- German Insolvency Announcements Scraper when the workflow is official insolvency notices rather than annual accounts.
FAQ
Does the Actor require login?
No. The supported workflow uses public search, filing, and official ESEF pages.
Can it search several companies in one run?
Yes. Add several values to queries and set maxItemsPerQuery for balanced coverage.
Does it download PDFs?
No. It follows official XHTML reports for structured facts and records available document provenance.
Are financial figures always present?
No. They are included only when published structured facts are available through the filing.
Can I schedule recurring monitoring?
Yes. Save the input as an Apify Task, add a schedule, and compare dataset keys across runs.
Does the Actor identify the newest filing automatically?
It preserves source order and obeys your limits. Verify chronology using publicationDate and reporting periods.
Can I use output as final due-diligence evidence?
Use it as source-linked research evidence, then validate material conclusions against the official publication.