# German Insolvency Monitor 🇩🇪 Insolvenzbekanntmachungen alerts (`tagadanar/german-insolvency-monitor`) Actor

Every new German insolvency announcement the day the court publishes it, from the official Insolvenzbekanntmachungen portal. Openings, dismissals for lack of assets, protective measures and discharges, with Handelsregister number, appointed administrator and a Slack digest of only-new notices.

- **URL**: https://apify.com/tagadanar/german-insolvency-monitor.md
- **Developed by:** [Tagada Data](https://apify.com/tagadanar) (community)
- **Categories:** Lead generation, Automation, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 notice founds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## German Insolvency Monitor (Insolvenzbekanntmachungen)

Track every new German insolvency the day the court publishes it. This actor
reads neu.insolvenzbekanntmachungen.de, the official portal the German insolvency
courts publish to, and returns each announcement as a clean row with the debtor,
the court, the case number and the Handelsregister entry. Ask for the full
published text and you also get the appointed Insolvenzverwalter and the deadline
for filing claims. Run it on a schedule and get a Slack digest of only the
notices that are new since last time.

No API key, no login, nothing to set up. You only pay for notices you actually
get back.

### Who uses this

- **Credit control and risk teams** screening German customers and suppliers
  against fresh insolvency openings, keyed on the HRB number so it joins straight
  to their own master data.
- **Insolvency practitioners, restructuring advisors and turnaround firms**
  watching for openings and preliminary protective measures in their region.
- **Creditors and debt collectors** who need the claims deadline and the
  administrator's office address the day the court sets them.
- **Distressed asset buyers and investors** looking for companies in trouble
  before anyone advertises them.
- **B2B lead generation** for anyone who sells to insolvency administrators:
  every opening names one, with an address.
- **Data teams** who want the German insolvency feed as tidy JSON instead of a
  session-bound search form.

### What you get

One record per notice:

| Field | Description |
| --- | --- |
| `publicationDate` | The day the court published the notice, as ISO date |
| `noticeType` | What happened, in plain words ("Insolvency proceedings opened") |
| `debtorName` | Company name, or surname and given name for a private debtor |
| `debtorLocation` | Registered seat or place of residence |
| `isCompany` | True for a registered business, false for a private individual |
| `court` | The insolvency court (Amtsgericht) |
| `caseNumber` | The Aktenzeichen, e.g. `514 IN 4/26` |
| `register` | Commercial register entry as published |
| `registerCourt` / `registerType` / `registerNumber` | The same, split up, so `HRB 41460 HB` joins to your own company data |
| `state` / `stateCode` | Federal state, when the search was narrowed to one |
| `administrator` | Appointed Insolvenzverwalter, Sachwalter or Treuhänder with office address (needs the notice text) |
| `decisionDate` | The date of the court's decision (needs the notice text) |
| `claimsDeadline` | The § 174 InsO deadline for filing claims (needs the notice text) |
| `noticeText` | The complete published Veröffentlichungstext |
| `noticeKey` | Stable identity of the notice, so you can dedupe across runs |
| `isNew` | In monitor mode, whether the notice is new since the last run |

### Notice types you can track

Proceedings opened (Eröffnungen), preliminary protective measures
(Sicherungsmaßnahmen), petitions dismissed for lack of assets (Abweisung mangels
Masse), decisions during and after the proceeding, discharge of residual debt
(Restschuldbefreiung), distribution schedules (§ 188 InsO), supervised insolvency
plans, and everything filed as Sonstiges. Pick any combination.

For scale: on a working day the whole of Germany publishes roughly 5,000 notices
of all types, of which about 500 are proceedings actually opened.

### Input examples

Every new insolvency opening in Germany over the last three days:

```json
{
  "noticeTypes": ["EROEFF"],
  "sinceDays": 3,
  "maxNotices": 2000
}
```

A scheduled daily monitor for North Rhine-Westphalia and Bavaria, with the full
text and a Slack alert:

```json
{
  "noticeTypes": ["EROEFF", "SICHMASS"],
  "states": ["NW", "BY"],
  "sinceDays": 2,
  "includeNoticeText": true,
  "monitorMode": true,
  "webhookUrl": "https://hooks.slack.com/services/XXX/YYY/ZZZ"
}
```

Watch a handful of named companies across every notice type:

```json
{
  "noticeTypes": ["EROEFF", "SICHMASS", "ABWMASS", "ENT_VERF"],
  "keywords": ["Sansibar", "Nord West Transporte"],
  "sinceDays": 14
}
```

### How monitor mode works

Turn on `monitorMode` and schedule the actor, daily is typical. The first run
records what is already published as a baseline. Every run after that returns,
and charges for, only the notices that are new since the previous run, and posts
them to your webhook if you set one. A quiet scheduled run therefore costs you a
handful of new notices, not the whole window again.

The portal publishes no notice id of its own, so identity is the combination of
publication day, court, case number, notice type and debtor. The same case coming
back at a later stage is reported as the new event it is.

### Output sample

```json
{
  "noticeKey": "2026-08-03|bremen|514in4/26|EROEFF|ms-sansibar gmbh",
  "publicationDate": "2026-08-03",
  "noticeType": "Insolvency proceedings opened",
  "noticeTypeCode": "EROEFF",
  "caseNumber": "514 IN 4/26",
  "court": "Bremen",
  "state": "Bremen",
  "stateCode": "HB",
  "debtorName": "MS-Sansibar GmbH",
  "debtorLocation": "Bremen",
  "isCompany": true,
  "register": "Bremen, HRB 41460 HB",
  "registerCourt": "Bremen",
  "registerType": "HRB",
  "registerNumber": "41460 HB",
  "administrator": "Rechtsanwalt Christian Meyer, Gerhard-Rohlfs-Str. 16, 28757 Bremen",
  "decisionDate": "2026-08-01",
  "claimsDeadline": "2026-09-01",
  "noticeText": "514 IN 4/26 : Über das Vermögen der MS-Sansibar GmbH, Uhthoffstraße 10, 28757 Bremen (AG Bremen, HRB 41460 HB), vertr. d.: Uwe Schröter, (Geschäftsführer), ist am 01.08.2026 um 09:00 Uhr das Insolvenzverfahren eröffnet worden. Insolvenzverwalter ist: Rechtsanwalt Christian Meyer, ...",
  "sourceUrl": "https://neu.insolvenzbekanntmachungen.de/ap/suche.jsf",
  "isNew": true,
  "retrievedAt": "2026-08-07T00:21:48.226Z"
}
```

### Pricing

Pay per event, no subscription, and platform usage is included in the price, so
what you see is what you pay. There are four events: a small flat fee when a run
starts, one per notice returned, one per notice whose full text was actually
delivered, and one per webhook digest posted in monitor mode. A notice the portal
has no text for costs you nothing extra, and in monitor mode the persistent
baseline means you are never billed twice for the same notice. Users on higher
Apify plans get automatic discounts.

### FAQ

**Where does the data come from?** neu.insolvenzbekanntmachungen.de, the joint
portal of the German state justice administrations. Insolvency courts are
required by § 9 InsO to publish there, so this is the official public record, not
a third-party aggregation.

**Do I need an account or an API key?** No. Nothing to set up, nothing to renew.

**How fresh is it?** Notices appear here the moment the court publishes them,
which is the moment they become legally public. A daily scheduled run catches
everything.

**Can I get the Handelsregister number?** Yes, whenever the court published one,
split into court, type and number. That is what makes this easy to join to
Bundesanzeiger financials, Handelsregister data or your own CRM.

**Does it cover private individuals as well as companies?** Yes. Consumer
insolvency (Verbraucherinsolvenz) and discharge of residual debt are included,
and `isCompany` tells the two apart so you can filter to businesses only.

**What is the difference between the notice types?** Sicherungsmaßnahmen come
first, when the court appoints a preliminary administrator. Eröffnungen are the
opening of the actual proceeding. Abweisung mangels Masse means the court refused
to open one because there is not enough money to cover the costs, which is the
end of the road for that company.

**Why would I turn on the notice text?** Because that is where the appointed
administrator, the court's decision date and the § 174 InsO claims deadline live.
Without it you still get the debtor, court, case number and register entry. It
costs one extra request per notice, so a broad run is noticeably slower with it.

**Can I search for a specific company?** Yes, use `keywords`. It matches the
debtor name, the town, the court, the case number and, with texts on, the whole
published text. Umlauts and their transcriptions match each other, so `München`
and `Muenchen` both work.

**How far back can I look?** Up to 30 days. Older notices thin out on their own:
§ 3 InsoBekV requires the portal to delete notices from a closed proceeding six
months after it ends, and most other notices one month after publication.
Separately, § 2 InsoBekV limits unrestricted browsing of the portal to about two
weeks after publication. Neither matters for a monitor watching for new notices,
but it does mean a deep look-back returns less than a fresh day.

**Is this GDPR-safe?** These are statutory publications the courts are legally
required to make public, which is the same basis on which the portal itself
serves them. Treat personal data in consumer insolvency notices accordingly.

**Do you also cover France and the UK?** Yes. See
[BODACC Insolvency Monitor](https://apify.com/tagadanar/bodacc-insolvency-monitor)
for French procédures collectives and
[UK Insolvency Monitor](https://apify.com/tagadanar/uk-gazette-insolvency) for
Gazette winding-up petitions and administrations. For German company master data,
see [German Company KYC](https://apify.com/tagadanar/german-company-kyc).

***

German insolvency data, Insolvenzbekanntmachungen scraper, Insolvenzverfahren
monitor, insolvency opening alerts, Abweisung mangels Masse, Insolvenzverwalter
lookup, Handelsregister insolvency, German credit risk monitoring, distressed
company leads Germany, Restschuldbefreiung notices.

# Actor input Schema

## `noticeTypes` (type: `array`):

Which insolvency announcements to track. Openings are the hard event most buyers want. Dismissals for lack of assets mean the company is gone without a distribution, and protective measures come days before an opening.

## `states` (type: `array`):

Limit the search to these federal states. Leave empty for all of Germany, which is also the cheapest option: the portal answers one nationwide query per day, while each state you list adds a query.

## `keywords` (type: `array`):

Only return notices matching these words: a company name, a town, a court, a case number or, with notice texts on, anything in the published text. Umlauts and their transcriptions match each other (<code>München</code> finds <code>Muenchen</code>). Leave empty to get every notice of the selected types.

## `sinceDays` (type: `integer`):

Only notices published within the last N days. A scheduled daily monitor needs 2 or 3; a first sweep can look back further. The portal deletes notices on the § 3 InsoBekV schedule, so very old days return less.

## `includeNoticeText` (type: `boolean`):

Fetch the complete published text of every notice, which also fills in the appointed insolvency administrator, the court decision date and the § 174 InsO deadline for filing claims. This is one extra request per notice, so it makes a broad run noticeably slower.

## `maxNotices` (type: `integer`):

Stop after collecting this many notices. Caps cost and runtime on a broad sweep. For scale: the whole of Germany publishes roughly 5,000 notices of all types on a working day, of which about 500 are proceedings actually opened.

## `monitorMode` (type: `boolean`):

Remember notices already reported across runs and return only newly published ones. Built for a scheduled run: the first run sets the baseline, later runs report and charge for new notices only.

## `webhookUrl` (type: `string`):

When monitor mode finds new notices, post a text digest here (Slack incoming webhook or any endpoint accepting <code>{"text": "..."}</code> JSON).

## Actor input object example

```json
{
  "noticeTypes": [
    "EROEFF"
  ],
  "states": [
    "BY"
  ],
  "keywords": [],
  "sinceDays": 5,
  "includeNoticeText": true,
  "maxNotices": 25,
  "monitorMode": false
}
```

# Actor output Schema

## `notices` (type: `string`):

One item per matched insolvency notice in the default dataset.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "noticeTypes": [
        "EROEFF"
    ],
    "states": [
        "BY"
    ],
    "sinceDays": 5,
    "includeNoticeText": true,
    "maxNotices": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("tagadanar/german-insolvency-monitor").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "noticeTypes": ["EROEFF"],
    "states": ["BY"],
    "sinceDays": 5,
    "includeNoticeText": True,
    "maxNotices": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("tagadanar/german-insolvency-monitor").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "noticeTypes": [
    "EROEFF"
  ],
  "states": [
    "BY"
  ],
  "sinceDays": 5,
  "includeNoticeText": true,
  "maxNotices": 25
}' |
apify call tagadanar/german-insolvency-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tagadanar/german-insolvency-monitor"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/JHntYorkLJxbIm1CQ/builds/lwrQX2IVNegi8Ta1v/openapi.json
