# Poland MSiG Court Gazette Scraper (`regdata/msig-scraper`) Actor

Search Polish Court & Economic Gazette (Monitor Sądowy i Gospodarczy) for bankruptcy declarations, liquidation notices, restructuring proceedings, creditor calls. Full-text search across archive from 2001. Structured JSON output.

- **URL**: https://apify.com/regdata/msig-scraper.md
- **Developed by:** [getregdata](https://apify.com/regdata) (community)
- **Categories:** Lead generation, Automation, Agents
- **Features:** Limited permissions
- **Stats:** 9 total users, 3 monthly users, 95.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 announcement results

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Poland MSiG Court Gazette Scraper | Monitor Sadowy i Gospodarczy

Search Poland's official court gazette - **Monitor Sadowy i Gospodarczy (MSiG)** - for bankruptcy declarations, creditor calls, restructuring proceedings, and liquidation notices, full-text and back to 2001. Structured JSON, in bulk, beyond what the gazette's manual web search allows. MSiG is the only legally binding source for these announcements, and it has no public API.

**No login, no API key, nothing to configure** - give a date range and a search term, get structured notices back.

### What data do you get?

One record per announcement:

```json
{
  "id": 19333823,
  "entityName": "Chalat Mariusz",
  "krs": null,
  "nip": null,
  "signatureOfCase": "V GUp 276/25",
  "chapterName": "III. OGLOSZENIA WYMAGANE PRZEZ PRAWO UPADLOSCIOWE",
  "monitorNumber": "235/2025",
  "dateOfPublication": "2025-12-04T00:00:00",
  "textInPosition": "Poz. 64291. Chalat Mariusz. Sad Rejonowy w Kielcach...",
  "textInBody": "Sad Rejonowy w Kielcach, V Wydzial Gospodarczy, Sekcja ds. Upadlosciowych i Restrukturyzacyjnych, postanowieniem z dnia...",
  "numberOfNotice": "64291",
  "page": 156,
  "issuePdfUrl": "https://wyszukiwarka-msig.ms.gov.pl/api/Monitor/Download?id=19389837&fileId=false",
  "detailsFetched": true,
  "scrapedAt": "2026-07-28T15:02:15.632Z"
}
```

| Field | Description |
|-------|-------------|
| `id` | Unique announcement ID |
| `entityName` | Entity/company or person name |
| `krs` / `nip` | Court-registry and tax IDs, where present |
| `signatureOfCase` | Court case signature |
| `chapterName` | Gazette chapter (bankruptcy, restructuring, etc.) |
| `monitorNumber` | Monitor issue number |
| `dateOfPublication` | Publication date |
| `textInPosition` | Announcement header/summary |
| `textInBody` | Full announcement text |
| `numberOfNotice` / `page` | Notice position and page in the issue |
| `issuePdfUrl` | Official PDF of the gazette issue this notice appeared in - cite it, or jump to `page` |
| `detailsFetched` | `false` when the full-text fetch failed, so a blank `textInBody` is never mistaken for a notice that genuinely has none |
| `scrapedAt` | UTC timestamp this row was retrieved |

### How much does the MSiG data cost?

**Pay per result** - you are not charged for Apify platform usage, only a fixed price per announcement. The price drops on higher Apify subscription tiers.

| Volume | Cost |
|--------|------|
| 1 result | $0.024 |
| 100 results | ~$0.42 |
| 1,000 results | ~$4.02 |
| 10,000 results | ~$40.02 |

Totals include the start fee: **$0.005 per GB of run memory**, which is **$0.02 per run** at the default 4 GB. The per-result price shown ($0.004) is the Apify Free plan price; it drops to $0.0035 (Starter), $0.003 (Scale) and $0.0025 (Business and above). Apify's $5 monthly free credit covers ~1,200 results. No subscription, no minimum.

### Is it legal, and where does the data come from?

Data comes from the official **MSiG** at [wyszukiwarka-msig.ms.gov.pl](https://wyszukiwarka-msig.ms.gov.pl/), published by Poland's Ministry of Justice. MSiG is the statutory public gazette for insolvency, restructuring, liquidation, and creditor announcements, with an archive back to 2001, published daily on business days. Extraction of this public data is permitted; you remain responsible for lawful, GDPR-compliant use of any personal data downstream.

### How do I use it?

Click **Try it** and paste this input:

```json
{ "dateFrom": "2025-01-01", "dateTo": "2025-12-31", "textInBody": "upadłości", "maxResults": 50 }
```

A date range is required. Add `entityName`, `krs`, `nip`, or `signatureOfCase` to narrow, or full-text search with `textInBody` (e.g. `upadłości`, `likwidacji`, `wierzycieli`).

> **Polish diacritics are required in `textInBody` and `textInPosition`.** The gazette matches
> the text literally, so `upadłości` returns hundreds of notices a month while `upadlosci`
> returns none - and a folded term fails exactly like a term that does not exist. Case is
> ignored and phrases work (`wezwanie wierzycieli` matches). This README recommended
> `oglasza upadlosc` until 2026-08-28; that example could only ever have returned nothing.

### Schedule it - get only what is new

Run the same search every day (or every week) with **Monitor mode** on (`onlyNew: true`) and a rolling date window. The first run returns every match and remembers it; every later run returns only notices **published since the last run**, so you pay per result only for those (plus the small start fee).

- **In Apify:** open this actor -> **Schedules** -> **Create schedule**, or save your input as a **Task** and schedule the task.
- **Example** - every new bankruptcy notice, each morning: `{ "textInBody": "upadłości", "dateFrom": "1 month", "dateTo": "0 days", "maxResults": 0, "onlyNew": true }` (or put a company's `krs` / `entityName` in place of `textInBody` to watch one counterparty).

Details are under **How monitor mode works** below.

### Input options

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `dateFrom` | string | **Yes** | - | Start date. Date picker, or `YYYY-MM-DD`, or a relative value like `3 months` |
| `dateTo` | string | **Yes** | - | End date. Same formats as `dateFrom` |
| `searchType` | string | No | `A` | `A` = Announcements, `B` = KRS entries |
| `entityName` | string | No | - | Entity name (partial match) |
| `krs` / `nip` | string | No | - | KRS or NIP filter |
| `textInBody` | string | No | - | Full-text search in the announcement body. Literal match - **Polish diacritics required** (`upadłości`, not `upadlosci`) |
| `textInPosition` | string | No | - | Search the announcement header line. Literal match - **Polish diacritics required** |
| `signatureOfCase` | string | No | - | Court case signature |
| `fetchDetails` | boolean | No | `true` | Fetch full body text for each result |
| `maxResults` | integer | No | `10` | Max results (0 = every match). Starts small so a first run is cheap to try |

### What you can do with it

- **Credit-risk monitoring** - schedule a recurring run over your portfolio and catch new bankruptcy or restructuring notices the day they publish.
- **Insolvency due diligence** - check whether a company has any court-proceeding or restructuring history before doing business.
- **Debt collection** - track a debtor's proceedings and pull the case signature and court for your file.
- **Legal research** - full-text search the gazette archive back to 2001 for specific notices.
- **Deeper coverage** - pair with the [KRZ debtor register](https://apify.com/regdata/krz-debtor-scraper?fpr=getregdata) for complete insolvency monitoring.

### Run it from code

```bash
## cURL - start a run and get the dataset back
curl -X POST "https://api.apify.com/v2/acts/regdata~msig-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "dateFrom": "2025-01-01", "dateTo": "2025-12-31", "textInBody": "upadłości", "maxResults": 50 }'
```

```javascript
// Node.js - apify-client
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('regdata/msig-scraper').call({ dateFrom: '2025-01-01', dateTo: '2025-12-31', textInBody: 'upadłości', maxResults: 50 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

```python
## Python - apify-client
from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("regdata/msig-scraper").call(run_input={"dateFrom": "2025-01-01", "dateTo": "2025-12-31", "textInBody": "upadłości", "maxResults": 50})
items = client.dataset(run["defaultDatasetId"]).list_items().items
```

### How monitor mode works

With **Monitor mode - only new notices** (`onlyNew: true`), use a rolling window such as Published from `1 month` and Published to `0 days` - the dates are not part of the memory - and set Max results to `0` so the first run records every match. The first run returns every matching notice and remembers it; every later run returns only notices published since, each marked `changeType: "new"`. A run with nothing new succeeds with an empty dataset and a status message. The memory lives in your own Apify account (key-value store `regdata-msig-monitor`); delete it to start over.

### Integrations

Runs anywhere Apify does: call it from the **REST API**, **schedule** a daily monitor of new notices, pipe results into **n8n / Make / Zapier**, or use it from any **MCP client** (Claude, Cursor) via [mcp.apify.com](https://mcp.apify.com).

### FAQ

**Is it legal to scrape MSiG?** Yes. MSiG is the official public court gazette published by the Ministry of Justice. Extraction of public data is permitted; you remain responsible for lawful, GDPR-compliant use downstream.

**Do I need an account or API key?** No. No login, no key, nothing to configure - just an Apify account.

**Why is a date range required?** MSiG is a chronological gazette; every search is scoped to a publication-date window. Set `dateFrom`/`dateTo` and add any other filter.

**How do I monitor for new notices?** Schedule a daily run with a rolling recent date range and your entity/keyword filters; new announcements appear as they publish.

**What export formats are supported?** JSON, CSV, Excel, or XML, or read live via the API.

**What is the difference between search type A and B?** `A` searches announcements (the main gazette content). `B` searches the legacy KRS-entries section, which is being phased out since November 2025 - newer KRS changes will not appear there.

### Limitations

- A date range is required for every search.
- The KRS-entries section (type `B`) is being phased out since November 2025; newer KRS changes will not appear there.
- Full PDF monitor issues are not parsed by this actor (the structured announcement text is returned instead).

### Related actors

Part of a suite of official government registry actors - **no public API to build or maintain**, pay per result, nothing to configure.

| Country | Actors |
|---|---|
| Poland | [BDO](https://apify.com/regdata/bdo-waste-registry-scraper?fpr=getregdata) · [CRBR](https://apify.com/regdata/crbr-beneficial-owners-scraper?fpr=getregdata) · [KRS (financials)](https://apify.com/regdata/poland-krs-financial-scraper?fpr=getregdata) · [EKW](https://apify.com/regdata/ekw-ksiegi-wieczyste-scraper?fpr=getregdata) · [KNF](https://apify.com/regdata/knf-registry-scraper?fpr=getregdata) · [KRS (board)](https://apify.com/regdata/krs-fullnames-scraper?fpr=getregdata) · [KRZ](https://apify.com/regdata/krz-debtor-scraper?fpr=getregdata) · **MSiG (this actor)** · [KYB check](https://apify.com/regdata/poland-kyb-check?fpr=getregdata) · [PEP (Sejm)](https://apify.com/regdata/poland-parliamentary-pep-scraper?fpr=getregdata) · [REGON (sites)](https://apify.com/regdata/polish-premises-prospector?fpr=getregdata) · [REGON](https://apify.com/regdata/polish-regon-scraper?fpr=getregdata) · [UOKiK](https://apify.com/regdata/uokik-clauses-scraper?fpr=getregdata) |
| Germany | [Insolvenzbekanntmachungen](https://apify.com/regdata/germany-insolvency-scraper?fpr=getregdata) · [Handelsregister](https://apify.com/regdata/germany-handelsregister-scraper?fpr=getregdata) |
| Spain | [BORME](https://apify.com/regdata/borme-corporate-acts-scraper?fpr=getregdata) · [Registro Mercantil](https://apify.com/regdata/spain-company-directory-scraper?fpr=getregdata) · [Registro Público Concursal](https://apify.com/regdata/spain-concursal-scraper?fpr=getregdata) |
| Italy | [INI-PEC](https://apify.com/regdata/italy-pec-lookup?fpr=getregdata) · [Registro Imprese](https://apify.com/regdata/italy-registro-imprese-scraper?fpr=getregdata) |
| Austria | [Ediktsdatei](https://apify.com/regdata/austria-ediktsdatei-scraper?fpr=getregdata) · [WKO](https://apify.com/regdata/wko-business-directory-scraper?fpr=getregdata) |
| France | [Societe.com](https://apify.com/regdata/societe-com-scraper?fpr=getregdata) |
| Belgium | [KBO / BCE](https://apify.com/regdata/belgium-kbo-company-scraper?fpr=getregdata) |
| Czechia | [ISIR](https://apify.com/regdata/czech-isir-insolvency-scraper?fpr=getregdata) |
| Slovakia | [RPVS](https://apify.com/regdata/slovakia-rpvs-ubo-scraper?fpr=getregdata) |
| Cyprus | [DRCOR](https://apify.com/regdata/cyprus-drcor-company-scraper?fpr=getregdata) |
| Ireland | [CRO](https://apify.com/regdata/ireland-cro-company-scraper?fpr=getregdata) |
| Portugal | [Publicações MJ](https://apify.com/regdata/portugal-corporate-acts-scraper?fpr=getregdata) |
| Nigeria | [CAC](https://apify.com/regdata/nigeria-cac-company-scraper?fpr=getregdata) |
| Colombia | [RUES](https://apify.com/regdata/colombia-rues-company-scraper?fpr=getregdata) |
| USA | [California SoS](https://apify.com/regdata/california-sos-business-scraper?fpr=getregdata) · [California UCC](https://apify.com/regdata/california-ucc-lien-scraper?fpr=getregdata) |
| UAE | [ADGM](https://apify.com/regdata/uae-adgm-public-register-scraper?fpr=getregdata) |
| Global | [Adverse media](https://apify.com/regdata/adverse-media-screener?fpr=getregdata) |

**Common combinations:** company register -> [UBO](https://apify.com/regdata/crbr-beneficial-owners-scraper?fpr=getregdata) -> [insolvency/debtors](https://apify.com/regdata/krz-debtor-scraper?fpr=getregdata) -> [adverse media](https://apify.com/regdata/adverse-media-screener?fpr=getregdata) is the standard KYB/onboarding chain.

For Poland that whole chain is one call: [Poland KYB Risk Check](https://apify.com/regdata/poland-kyb-check?fpr=getregdata) takes a NIP or KRS and returns identity, beneficial owners and insolvency - screened against the company **and every beneficial owner** - as a single verdict. The component registry lookups it runs bill as usual, plus a small orchestration fee.

> Full suite: [apify.com/regdata](https://apify.com/regdata?fpr=getregdata) · Callable from any MCP client via [mcp.apify.com](https://mcp.apify.com)

### Informacje po polsku

#### Czym jest ten aktor?

Ten aktor umozliwia automatyczne przeszukiwanie **Monitora Sadowego i Gospodarczego** (MSiG) - oficjalnego dziennika urzedowego Ministerstwa Sprawiedliwosci. MSiG to jedyne prawnie wiazace zrodlo informacji o ogloszeniach upadlosciowych, wezwaniach wierzycieli, likwidacjach i restrukturyzacjach w Polsce. Portal nie udostepnia publicznego API - ten aktor zwraca wyniki w ustrukturyzowanym formacie JSON.

#### Dla kogo?

Dla **dzialow ryzyka kredytowego** monitorujacych kontrahentow, **kancelarii prawnych** sledzacych postepowania klientow, **syndykow** i **doradcow restrukturyzacyjnych** oraz kancelarii windykacyjnych weryfikujacych sytuacje prawna dluznikow.

#### Co mozna wyszukac?

Wyszukiwanie pelnotekstowe w tresci ogloszen, filtrowanie po nazwie podmiotu, KRS, NIP, sygnaturze sprawy oraz zakresie dat. Archiwum od 2001 roku. Wyszukaj konkretne frazy (np. "upadłości", "likwidacji", "wierzycieli") i otrzymaj pelna tresc ogloszenia w JSON. Uwaga: wyszukiwanie jest doslowne, wiec polskie znaki diakrytyczne sa wymagane. Bez subskrypcji - placisz wylacznie za uzycie.

***

### Monitor Sadowy i Gospodarczy - wyszukiwanie ogloszen

Przeszukiwanie archiwum Monitora Sadowego i Gospodarczego (MSiG) od 2001 roku. Ogloszenia o upadlosci, likwidacji, restrukturyzacji, wezwania wierzycieli. Wyszukiwanie pelnotekstowe. Ustrukturyzowany format JSON. Narzedzie do automatycznego monitorowania ogloszen sadowych bez publicznego API.

# Actor input Schema

## `searchType` (type: `string`):

A = Announcements database (bankruptcy, liquidation, restructuring, court notices). B = KRS entries database (company registrations, changes — being phased out since Nov 2025).

## `entityName` (type: `string`):

Search by entity/company name (partial match)

## `krs` (type: `string`):

Search by KRS number (10 digits)

## `nip` (type: `string`):

Search by NIP (Tax ID)

## `textInBody` (type: `string`):

Full-text search inside the announcement body (max 1000 chars). MATCHES LITERALLY, SO POLISH DIACRITICS ARE REQUIRED: "upadłości" returns hundreds of notices a month, "upadlosci" returns none. Case does not matter and phrases work. Try: upadłości, likwidacji, wierzycieli, syndyk, restrukturyzacji.

## `textInPosition` (type: `string`):

Search the announcement header line - the "Poz. NNNNN. NAME. KRS ... COURT ..." summary (max 1000 chars). Same literal matching as Text in Body, so Polish diacritics are required. Try: LIKWIDACJI, REJONOWY, GOSPODARCZY.

## `signatureOfCase` (type: `string`):

Search by court case signature (sygnatura)

## `dateFrom` (type: `string`):

Start of the publication date range. Required by the gazette - a search without both dates is rejected. Pick a date, or type a relative one such as "3 months".

## `dateTo` (type: `string`):

End of the publication date range. Required by the gazette - a search without both dates is rejected. Pick a date, or type a relative one such as "1 week".

## `fetchDetails` (type: `boolean`):

Fetch full announcement details (body text) for each result. Slower but returns complete content. If false, returns only list data (no body text).

## `maxResults` (type: `integer`):

Maximum number of announcements to return. Set to 0 for every match. Starts at 10 so a first run is cheap to try - raise it once the search looks right.

## `onlyNew` (type: `boolean`):

For scheduled checks of the same company or search. The first run returns every matching notice and remembers it; every later run of the SAME search returns only notices published since, each with changeType 'new'. Gazette notices never change once published, so nothing is reported as changed. A run with nothing new succeeds with an empty dataset and a status message. Use a rolling window such as Published from '1 month' and Published to '0 days' - the dates are not part of the memory. Set Max results to 0 so the first run records every match. The memory is kept in your own Apify account (a key-value store named regdata-msig-monitor); delete it to start again.

## `monitorKey` (type: `string`):

Just a label for your watchlist history, not a password or API key - it is shown masked. Optional name for this monitor's memory, e.g. 'client-acme'. Leave empty and the search itself is the name.

## Actor input object example

```json
{
  "searchType": "A",
  "dateFrom": "2026-01-01",
  "dateTo": "2026-12-31",
  "fetchDetails": true,
  "maxResults": 10,
  "onlyNew": false
}
```

# Actor output Schema

## `announcements` (type: `string`):

MSiG announcements with entity name, chapter, publication date, case signature, and full announcement text.

# 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 = {
    "dateFrom": "2026-01-01",
    "dateTo": "2026-12-31"
};

// Run the Actor and wait for it to finish
const run = await client.actor("regdata/msig-scraper").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 = {
    "dateFrom": "2026-01-01",
    "dateTo": "2026-12-31",
}

# Run the Actor and wait for it to finish
run = client.actor("regdata/msig-scraper").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 '{
  "dateFrom": "2026-01-01",
  "dateTo": "2026-12-31"
}' |
apify call regdata/msig-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,regdata/msig-scraper"
        }
    }
}
```

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/v8g2pQsHK5TecDmga/builds/uNO05SF4EIgRFarAQ/openapi.json
