# Ireland CRO Company Registry + Monitoring (`nerolabs/ireland-cro-monitor`) Actor

Look up and monitor Irish companies on the official CRO Open Data Portal: identity, status, type, registered address, and filing dates, with a recurring monitor mode that flags status changes, new filings, and dissolutions.

- **URL**: https://apify.com/nerolabs/ireland-cro-monitor.md
- **Developed by:** [Adam Pearce](https://apify.com/nerolabs) (community)
- **Categories:** Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 company lookups

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

### What does Ireland CRO Company Registry + Monitoring do?

Need to verify an Irish counterparty, or know the moment something changes on their CRO record? This Actor looks up companies on Ireland's official Companies Registration Office (CRO) register and returns structured data: status, company type, registered address, and annual return/accounts filing dates. Point it at one CRO number for a single lookup, a list for bulk checks, a company name if you don't have the number yet, or turn on Monitor mode to schedule it daily and get flagged only when something on a watched company's record actually changes.

Data comes straight from the CRO's own **Open Data Portal** (opendata.cro.ie), a real, official API, licensed CC BY 4.0 for unrestricted reuse including commercial. This is a genuinely different, cleaner source than scraping the CRO's public search site: no anti-bot fight, no page structure to break, and no legal grey area, this is the CRO's own purpose-built machine-readable channel for exactly this kind of use. Run it via the Apify Console, the API, or on a schedule, and export results as JSON, CSV, or Excel.

### Why use this Actor?

- **KYB and compliance teams** verifying an Irish counterparty before onboarding: current status, type, and registered address in one call.
- **Accountants and company-formation agents** tracking a portfolio of client companies for annual return and accounts filing dates, so nothing slips past its deadline unnoticed.
- **Lenders and credit teams** watching for a status change (liquidation, examinership, administration, dissolution) the moment it appears on the register, instead of periodically re-checking by hand.
- **Sales and lead-gen teams** enriching a list of Irish companies with structured registry data, or finding a company's CRO number from just its name.

### How to use Ireland CRO Company Registry + Monitoring

1. Click **Try for free** or **Run** on the Actor page.
2. Enter a single `companyNumber` for a quick lookup, a list of `companyNumbers` for bulk checks, or a `searchName` if you only know the company's name.
3. To track companies over time, turn on `monitorMode`, keep the same `companyNumbers` and `watchlistId`, and schedule the Actor to run daily. Each run only charges for what actually changed.
4. View results in the Console table, or pull them via the API/dataset export.

### Input

See the Input tab for the full schema. Key fields:

| Field              | Description                                                                                   |
| ------------------ | --------------------------------------------------------------------------------------------- |
| `companyNumber`    | A single digits-only CRO company number to look up.                                           |
| `companyNumbers`   | A list of CRO numbers, for bulk lookup or Monitor mode (fetched in one batched request).      |
| `searchName`       | Find companies by name instead of number. Lookup mode only, not available with `monitorMode`. |
| `maxSearchResults` | Caps how many name-search matches are returned. Default 20.                                   |
| `monitorMode`      | When true, compares against the last run and only reports what changed.                       |
| `watchlistId`      | Keeps separate Monitor mode histories if you run more than one watchlist.                     |

### Output

Each result includes the company's identity, status, type, address, and filing dates. Example (a single record, trimmed):

```json
{
    "companyNumber": "249885",
    "registrationStatus": "active",
    "name": "RYANAIR HOLDINGS PUBLIC LIMITED COMPANY",
    "status": "Normal",
    "companyType": "Public limited company",
    "registrationDate": "1996-11-19T00:00:00",
    "lastAnnualReturnDate": "2025-11-19T00:00:00",
    "nextAnnualReturnDue": "2026-12-17T00:00:00",
    "lastAccountsDate": "2025-06-30T00:00:00",
    "dissolvedDate": null,
    "address": "AIRSIDE BUSINESS PARK, SWORDS, CO. DUBLIN",
    "eircode": "K67NY94",
    "sourceUrl": "https://opendata.cro.ie/dataset/companies"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

### Data table

| Field                                         | What it is                                                                                                          |
| --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| `name`, `companyType`                         | Registered company name and legal type.                                                                             |
| `status`, `statusDate`                        | Current CRO status (e.g. Normal, Liquidation, Examinership, Administration, Dissolved) and the date it took effect. |
| `registrationDate`                            | Date the company was first registered.                                                                              |
| `lastAnnualReturnDate`, `nextAnnualReturnDue` | Most recent annual return filed, and when the next one is due.                                                      |
| `lastAccountsDate`                            | Date of the most recently filed accounts.                                                                           |
| `dissolvedDate`                               | Set once the company has been dissolved.                                                                            |
| `address`, `eircode`                          | Registered office address.                                                                                          |
| `naceCode`, `principalObjectCode`             | Industry classification codes, where on file.                                                                       |
| `changeDetected`, `changeSummary`             | Monitor mode only: what changed since the last check.                                                               |

### Pricing / Cost estimation

Pay-per-event pricing, no subscription. A single lookup or bulk check costs $0.01 per company checked, including a company that isn't found on the register, a confirmed "not found" is still a real, useful result. Watching 20 companies daily in Monitor mode costs roughly $0.06 to $1/month depending on how often anything actually changes ($0.002 per no-change confirmation, $0.05 per real change caught).

### Tips

- Bulk lookups (`companyNumbers`) are faster than repeated single-number runs, they're fetched in one batched request and share one Actor start.
- Use `searchName` to find a company's CRO number first, then switch to `companyNumbers` with that number for ongoing Monitor mode, name search doesn't have a stable identity across runs.
- For ongoing monitoring, schedule the Actor (Apify's built-in Schedules) rather than running it manually. Monitor mode is designed for exactly that. The CRO Open Data dataset itself updates daily, so a daily schedule matches the source's own refresh rate.
- Keep `watchlistId` consistent across scheduled runs for the same list, changing it starts a fresh watch history.

### FAQ

**Is this legal? Doesn't CRO restrict scraping?**
This Actor never scrapes the CRO's public search site. It calls the CRO's own Open Data Portal (opendata.cro.ie), a separate, official API published specifically for reuse and licensed CC BY 4.0, which explicitly permits commercial use with attribution. Every result includes a link back to the source dataset for that attribution.

**What does "not found" mean here?**
Either the number was never valid, or it's a very recent registration not yet reflected in the dataset's daily snapshot (the CRO Open Data Portal updates once a day, not in real time). The register itself doesn't expose a reason code for a missing entry, so this Actor reports it honestly as "not found" rather than guessing why.

**Does this include directors or officers?**
No. The CRO's Open Data companies dataset is company-level (identity, status, type, address, filing dates), it doesn't include officer/director names. If that's what you need, get in touch via the Issues tab, it's worth knowing there's demand for it.

**How current is the data?**
The CRO Open Data Portal publishes a fresh daily snapshot. This Actor always reads that day's live snapshot, it never caches or bundles data of its own.

If this Actor saved you a manual CRO lookup, a review on the Actor page helps a lot and helps decide what to build next. Found a bug or have a request? Use the Issues tab, replies are personal, not automated.

***

*Contains Irish Public Sector Data licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) licence. Source: [CRO Open Data Portal](https://opendata.cro.ie/dataset/companies).*

# Actor input Schema

## `companyNumber` (type: `string`):

Digits-only Irish CRO company number, e.g. 249885. Use this for a single-record lookup.

## `companyNumbers` (type: `array`):

A list of digits-only CRO company numbers. Required for Monitor mode (that's what gives each record a stable identity to track over time). Also the fastest way to check many known companies in one run, they're fetched in a single batched request.

## `searchName` (type: `string`):

Find companies by name instead of number, useful when you don't have the CRO number yet. Not available in Monitor mode (name search results don't have a stable identity to track over time; look up the company number it returns and switch to that for ongoing monitoring).

## `maxSearchResults` (type: `integer`):

Caps how many matches a name search returns. Only applies when searchName is set.

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

When true, the Actor loads the last-seen status, name, type, address, and filing dates for each company number, compares against today's CRO Open Data snapshot, and returns only the change (or a cheap no-change confirmation). Schedule this Actor to run daily with the same companyNumbers and watchlistId for ongoing KYB monitoring. Requires companyNumber and/or companyNumbers.

## `watchlistId` (type: `string`):

Only needed if you're running more than one independent monitored watchlist from the same Apify account (e.g. one per client) and want their delta history kept separate. Leave as default otherwise.

## Actor input object example

```json
{
  "companyNumber": "249885",
  "companyNumbers": [],
  "maxSearchResults": 20,
  "monitorMode": false,
  "watchlistId": "default"
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# 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 = {
    "companyNumber": "249885"
};

// Run the Actor and wait for it to finish
const run = await client.actor("nerolabs/ireland-cro-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 = { "companyNumber": "249885" }

# Run the Actor and wait for it to finish
run = client.actor("nerolabs/ireland-cro-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 '{
  "companyNumber": "249885"
}' |
apify call nerolabs/ireland-cro-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nerolabs/ireland-cro-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/dPYFiwDf2lH9U6bmg/builds/bLZoJvlucAZgcz8dr/openapi.json
