# Ireland Personal Insolvency Arrangement Register Check (`malekh/ireland-personal-insolvency-arrangement-register-check`) Actor

Check names against Ireland's ISI registers: Personal Insolvency Arrangements, Debt Settlement Arrangements, Debt Relief Notices, Protective Certificates. Searches the spellings the register's own exact-match search misses — O'Brien returns 7 entries, OBrien returns 0.

- **URL**: https://apify.com/malekh/ireland-personal-insolvency-arrangement-register-check.md
- **Developed by:** [Malek H](https://apify.com/malekh) (community)
- **Categories:** Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.01 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Ireland Personal Insolvency Arrangement Register Check

Screen names against the **statutory registers the Insolvency Service of Ireland
publishes** — Personal Insolvency Arrangements (PIA), Debt Settlement
Arrangements (DSA), Debt Relief Notices (DRN) and Protective Certificates (PC) —
and get back every entry the register holds, with the court record number, the
date of birth, the address, the arrangement dates and the previous name.

The point of this Actor is not that it reads the register. It is that **it finds
the people the register's own search cannot find.**

***

### The register's search is an exact-string match, and it is worse than that sounds

The ISI's public search takes two mandatory fields and matches the exact whole
string in each. gov.ie says so in its own words: *"A value must entered in both
fields before a search can be performed. The search results will only contain
exact matches."*

Measured against the live register on 2026-07-30, across a grid of 15 given
names × 18 surnames:

| What a person types | What the register returns |
|---|---|
| `O'Brien` | 7 entries |
| `OBrien` | **0** |
| `O Brien` | **0** |
| `O'Connor` | 6 entries |
| `OConnor` | **0** |
| `O'Sullivan` / `OSullivan` | 5 / **0** |
| `O'Neill` / `ONeill` | 4 / **0** |
| `O'Reilly` / `OReilly` | 3 / **0** |

**32 of the 43 register entries found in that grid are reachable only through
the apostrophe spelling.** Drop the apostrophe — the way most CSV exports, HR
systems and typists write it — and a real person on Ireland's insolvency
register comes back clean.

It does not stop at apostrophes:

- **No prefix or fuzzy matching at all.** `Joh` returns 0 against a populated
  `John`. `Murph` returns 0 against `Murphy`.
- **No diminutives.** `Mike` returns 0 where `Michael` returns 2. Same for
  Pat/Patrick, Tom/Thomas, Jim/James, Jack/John.
- **No fada tolerance.** `Sean` and `Seán` are different strings to this search.
- **No compound-given-name tolerance.** The whole given-name string lives in one
  field, so `Mary` misses a person filed as `Mary Anne`, and vice versa.
- **Previous names are held but not searched.** 19 of 46 sampled entries (41%)
  carry a `previousName` — real examples include *Jack Kelly* for a John Kelly
  and *Jonnie McCarthy* for a John McCarthy. All 5 previous names tested
  returned **zero** results when searched. The register knows the former name.
  It will not let you search on it.

Every one of those is a **false clear**: a report that says "nothing found"
about somebody who is on the register.

***

### What this Actor does about it

1. **Expands each name into the spellings the register might have stored it
   under** — apostrophe present, absent and spaced; Mc / Mac / Mc-with-a-space;
   hyphen, space and joined double-barrels; fada stripped; compound given names
   split; and a conservative diminutive map (Mike ↔ Michael, Jack ↔ John,
   Bill ↔ Billy ↔ William). The map is symmetric, so recall does not depend on
   which form you happened to type, and deliberately **not** transitive, because
   chaining Jack → John → Sean → Shane starts returning strangers.
2. **Searches every spelling** and tells you, per match, **which spelling hit**
   and **how strong the claim is** — because "the same name with an apostrophe"
   and "a different given name the same person might use" are not the same
   finding, and a screening report that blurs them is unusable:

   | `matchType` | What it means |
   |---|---|
   | `EXACT` | Found under the name you supplied. |
   | `SAME_NAME_RESPELLED` | The same name, written differently (apostrophe, fada, Mc/Mac, hyphenation). **The register's own search misses these.** |
   | `PREVIOUS_NAME_SUPPLIED` | Found under a previous name you gave us. The register records previous names but will not search on them. |
   | `OTHER_GIVEN_NAME` | A *different* given name the same person may also be filed under (Mike for Michael, one half of a compound name). **Verify identity before acting.** |

   Matches are sorted strongest-claim-first, and the item carries
   `sameNameMatchCount`, `otherGivenNameMatchCount` and
   `foundOnlyViaAlternativeSpelling` so you can triage without walking the list.
3. **Searches any previous names you supply** in the same lookup, at no extra
   charge — because the register cannot.
4. **Pulls the full case record** for every match: register types in plain
   English, court record number, date of birth, structured address with
   Eircode, arrangement start and scheduled end dates, protective-certificate
   expiry, date of issue, creditors' meeting and court approval dates, court
   region and court type, and any s.63 / s.97 order.

***

### What it does not cover — stated on every output item

- **Court bankruptcy adjudications are not in these registers.** Irish
  bankruptcy is a High Court process; the ISI publishes recent adjudication
  notices separately. A clean result here is **not** a bankruptcy clearance.
- **Protective Certificates and Debt Settlement Arrangements appear only while
  current or ended within the last 3 months** (the ISI's own statement of
  scope). An older completed DSA will not be here.
- **A no-match is "not found under the spellings searched"**, never "clear".
  The verdict field says exactly that, and so does the guidance on the item.
- **`scheduledEndDate` is scheduled, not achieved.** Only `actualEndDate` and
  `closureReason` record an arrangement that has actually ended, so
  `arrangementStatus` is `ENDED` only when the register says so.
- **`protectiveCertificateExpiryDate` is historical.** It is populated on plain
  arrangement rows too, often years in the past while the arrangement is live.
  It is shipped verbatim with that warning attached; it is not an end date.

***

### Input

```jsonc
{
  "names": [
    "Sean O'Brien",                                   // plain string
    { "referenceId": "CAND-002",                      // or an object
      "firstName": "John", "lastName": "Murphy",
      "dateOfBirth": "1959-04-13" },                  // rules namesakes out
    { "referenceId": "CAND-003",
      "fullName": "Mary Byrne",
      "previousNames": ["Mary Kelly"] }               // searched, free
  ],
  "expandNameSpellings": true,                        // default true
  "maxSpellingsPerName": 24                           // default 24, max 60
}
```

Any extra field on an input object — `referenceId`, your own case number — is
echoed back on the result so it reconciles with your ATS, LOS or onboarding
system. A name too malformed to read is returned as `UNCHECKED`, never dropped
and never billed.

### Output, one item per person

```jsonc
{
  "input": "Sean OBrien",
  "verdict": "ON_REGISTER",
  "onRegister": true,
  "matchCount": 4,
  "sameNameMatchCount": 1,                  // EXACT + SAME_NAME_RESPELLED
  "otherGivenNameMatchCount": 3,            // review these against the DOB
  "foundOnlyViaAlternativeSpelling": 4,     // the register's own search: 0 hits
  "spellingsSearchedCount": 12,
  "matches": [{
    "registerTypeNames": ["Personal Insolvency Arrangement"],
    "fullName": "Sean O'Brien",
    "matchType": "SAME_NAME_RESPELLED",
    "matchedSpelling": { "firstName": "Sean", "lastName": "O'Brien" },
    "matchedYourSpelling": false,
    "courtRecordNumber": "C:IS:MILS:2023:001591",
    "dateOfBirth": "1957-03-05",
    "dateOfBirthMatchesYours": null,
    "previousNameOnRegister": null,
    "address": { "street1": "Derry Road", "city": "Durrow",
                 "region": "Laois", "eircode": "R32 V5R3" },
    "arrangementStartDate": "2024-06-13",
    "scheduledEndDate": "2026-09-13",
    "actualEndDate": null,
    "arrangementStatus": "ON_REGISTER_NOT_RECORDED_AS_ENDED",
    "courtRegion": "Laois", "courtType": "Circuit"
  }],
  "coverage": "…what this register does and does not contain…"
}
```

`verdict` is one of `ON_REGISTER`, `NO_MATCH_ON_SPELLINGS_SEARCHED` or
`UNCHECKED`. `onRegister` is **tri-state**: `true`, `false`, or `null` where the
register did not answer. A missing answer is never reported as a clear, and is
never billed.

***

### Identity is your job, and the Actor gives you what you need for it

A shared name is not a shared person. Every match carries the **date of birth**
and the **full address with Eircode** the register holds, and if you pass a
`dateOfBirth` the match is labelled `dateOfBirthMatchesYours`: `true`, `false`,
or `null` where either side is silent. It is deliberately not used to drop
matches silently — that decision is yours to make and to record.

### Source integrity — the run fails rather than quietly reporting nobody

The register cannot be enumerated (the search will not run without both fields),
so completeness is guarded by canaries measured against the live source:

- Four canary names must return at least 8 entries between them (11 measured).
- A search result must still carry `debtorId`, `caseRegisterTypes`, `fullName`,
  and the case detail must still carry `firstName`, `lastName`,
  `availableRegisterTypes`.
- A nonsense negative control must return **zero** — if it ever matches, the
  search has stopped filtering and no result this run produced is trustworthy.

Any of those failing aborts the run. Reporting "nothing found" because the
source broke is the one failure mode a screening tool must never have — and
**every one of these checks runs before a single billing event**, so a run that
aborts on an unreachable register costs you nothing.

### Source

The Insolvency Service of Ireland's own public register, at
`https://isi.jahs.ie/public/cases`, linked from
[gov.ie](https://www.gov.ie/en/insolvency-service-of-ireland/services/insolvency-service-of-ireland-registers/)
as the official access point. Public, keyless, no login. Bankruptcy adjudication
notices are published
[separately](https://www.gov.ie/en/insolvency-service-of-ireland/publications/bankruptcy-notices-of-adjudication/).

### Pricing

Pay per event: **$0.10 per run** plus **$0.30 per name checked**, with every
supplied previous name and every alternative spelling searched inside that one
charge. Names returned as `UNCHECKED` are not charged for. The nearest
commercial equivalent — a per-name Irish bankruptcy/insolvency check from a
background-screening vendor — runs to roughly **US$200 per name on a 10-day
manual turnaround**.

# Actor input Schema

## `names` (type: `array`):

One entry per person. Either a plain string ("Sean O'Brien") or an object with fullName, or firstName + lastName + optional middleName. Add dateOfBirth and the match is labelled against it so you can rule namesakes out, and add previousNames (maiden names, former names, other spellings) — they are searched in the same lookup at no extra charge, which the register's own search cannot do even though it holds the previous name. Any extra field, such as your own referenceId, is echoed back with the result so it reconciles with your ATS or onboarding system.

## `expandNameSpellings` (type: `boolean`):

On by default, and it is the whole point of this Actor. The ISI register matches the exact whole string in both fields: measured on the live register, O'Brien returns 7 entries and OBrien returns 0, O'Connor 6 and OConnor 0, Michael 2 and Mike 0. With this on, each name is also searched with the apostrophe added, removed and spaced, as Mc / Mac / Mc-with-a-space, with hyphens as spaces and joined, with fadas stripped, with compound given names split, and under common diminutives. Turn it off only if you want the exact strings you supplied and nothing else.

## `maxSpellingsPerName` (type: `integer`):

Upper bound on how many spelling combinations are sent to the register for each person. Your own spelling is always searched first, so lowering this trims the least likely variants rather than the one you typed. Raising it improves recall on unusual names at the cost of a slower run. It does not change the price — you are charged per name, not per spelling.

## Actor input object example

```json
{
  "names": [
    {
      "referenceId": "CAND-001",
      "fullName": "Sean OBrien"
    },
    {
      "referenceId": "CAND-002",
      "firstName": "John",
      "lastName": "Murphy",
      "dateOfBirth": "1959-04-13"
    },
    {
      "referenceId": "CAND-003",
      "fullName": "Mary Byrne",
      "previousNames": [
        "Mary Kelly"
      ]
    }
  ],
  "expandNameSpellings": true,
  "maxSpellingsPerName": 24
}
```

# 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 = {
    "names": [
        {
            "referenceId": "CAND-001",
            "fullName": "Sean OBrien"
        },
        {
            "referenceId": "CAND-002",
            "firstName": "John",
            "lastName": "Murphy",
            "dateOfBirth": "1959-04-13"
        },
        {
            "referenceId": "CAND-003",
            "fullName": "Mary Byrne",
            "previousNames": [
                "Mary Kelly"
            ]
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("malekh/ireland-personal-insolvency-arrangement-register-check").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 = { "names": [
        {
            "referenceId": "CAND-001",
            "fullName": "Sean OBrien",
        },
        {
            "referenceId": "CAND-002",
            "firstName": "John",
            "lastName": "Murphy",
            "dateOfBirth": "1959-04-13",
        },
        {
            "referenceId": "CAND-003",
            "fullName": "Mary Byrne",
            "previousNames": ["Mary Kelly"],
        },
    ] }

# Run the Actor and wait for it to finish
run = client.actor("malekh/ireland-personal-insolvency-arrangement-register-check").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "names": [
    {
      "referenceId": "CAND-001",
      "fullName": "Sean OBrien"
    },
    {
      "referenceId": "CAND-002",
      "firstName": "John",
      "lastName": "Murphy",
      "dateOfBirth": "1959-04-13"
    },
    {
      "referenceId": "CAND-003",
      "fullName": "Mary Byrne",
      "previousNames": [
        "Mary Kelly"
      ]
    }
  ]
}' |
apify call malekh/ireland-personal-insolvency-arrangement-register-check --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=malekh/ireland-personal-insolvency-arrangement-register-check",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

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