# Ireland Open Data Scraper - data.gov.ie Portal (`parseforge/data-gov-ie-ireland-open-data-scraper`) Actor

Scrape all 22,666 datasets from Ireland's open data portal data.gov.ie: full DCAT metadata, distributions, 174 publishers, EU high-value flags, openness scores and DataStore column schemas.

- **URL**: https://apify.com/parseforge/data-gov-ie-ireland-open-data-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.23 / 1,000 datasets

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?

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

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner.jpg)](https://apify.com/parseforge?fpr=vmoqkp)

### Ireland Open Data Scraper - data.gov.ie Portal API

**Every one of the 22,666 datasets on data.gov.ie, Ireland's open data portal, with 69 fields on each row.** Each row carries the title, description, publishing body, DCAT theme, tags, licence, EU high-value flag, update frequency, dates, spatial and temporal coverage, contact point, harvest provenance and every downloadable file with its format and direct URL. No login, no API key, no rate limit to negotiate. Exports to CSV, JSON, Excel and XML.

data.gov.ie publishes a CKAN API, and you can talk to it yourself. What you cannot do from a single call is page 22,666 datasets without tripping its HTTP 409 on a second filter parameter, know that `res_format:csv` returns zero while `res_format:CSV` returns 20,237, or discover that the portal's 0 to 5 star openness rating only ever rides on the record view and never on the search results. This Actor already knows all of that, and adds four things the portal will not hand you in one place: the openness score, the real column schema and row count of every file loaded into the portal DataStore, a live check on whether each file still downloads, and a normalised publisher profile.

| Who uses it | What they scrape data.gov.ie for |
|---|---|
| Data engineers | Build a searchable mirror of Irish public data and refresh it from the change feed |
| Compliance and policy teams | Track which bodies meet the EU high-value dataset obligation under Regulation 2023/138 |
| Civic tech and journalists | Find the councils and agencies that publish, and the ones that publish and then let the links rot |
| AI and RAG builders | Feed 22,666 described, licensed, machine-readable Irish datasets into a retrieval index |
| Researchers | Pull publisher, theme, licence and frequency directories to measure how Irish open data actually behaves |

### What it does

- 📇 **Full dataset record**, 69 fields: id, slug, title, description in raw and plain-text form, publisher with its own description, theme, tags, licence with a plain-English label, dates, version, contact point, harvest collection and source.
- 🇪🇺 **EU high-value block**: the `high_value_dataset` flag, the Regulation (EU) 2023/138 category resolved from its data.europa.eu URI, and the applicable legislation the publisher cites.
- 🗺️ **Geospatial block**: spatial coverage name, bounding box computed from the stored geometry, coordinate reference systems, spatial resolution and vertical extent with its datum.
- 📄 **A row per file** with format normalised across 132 raw spellings, MIME type, byte size, checksum, direct download URL and whether the portal loaded it into its DataStore.
- ⭐ **Openness score**, the portal's own 0 to 5 star rating with the reason it was given, present on every dataset and reachable nowhere in the search API.
- 🧮 **DataStore column schemas**: for files the portal has loaded, the real column names, per-column SQL types, the true row count and a sample of rows.
- 🔗 **Live link check** on each file URL: HTTP status, redirect target, content type and byte size, because the portal harvests 31 external feeds and never revalidates them.
- 🏛️ **Twelve directory row types**: publishers, themes, EU high-value categories, licences, update frequencies, harvest collections, formats, tags, harvest sources, showcases, public data requests and the portal change feed.
- 🎛️ **Twenty-three filters** measured against live totals, plus free-text search, a raw Solr escape hatch and thirteen verified sort orders.

### What you can do with data.gov.ie data

**Audit EU high-value compliance.** Ireland flags 383 datasets as high value under Implementing Regulation (EU) 2023/138. Another 4,217 carry the Geospatial category URI from that same regulation while their high-value flag still says false. Filter to `onlyHighValue`, or to the Geospatial category, pull the publisher and the applicable legislation on each row, and you have the gap list in one run.

**Find the rot before your pipeline does.** Turn on the link check and every file URL is fetched from the publisher's own server. On 4,490 files checked across 1,531 datasets, 32 no longer downloaded. Those are ArcGIS Hubs and council portals the national portal copied years ago and never rechecked.

**Know what is inside a file before you download it.** 19.4% of files are loaded into the portal DataStore. For those, the DataStore probe returns the actual column names, their SQL types and the row count: 3,049 rows over 11 typed columns for the primary-school allocations CSV, without pulling a single byte of the file.

**Watch the portal instead of polling it.** The change feed row type returns recent dataset changes with timestamps. Run it on a schedule, diff against your last run, and refetch only what moved.

### Why choose this scraper

| | What you get |
|---|---|
| Coverage | All 22,666 datasets, 174 publishers, 31 harvest sources, 14 showcases, 112 public data requests, and the top 2,000 of the portal's 22,742 tags |
| Fields | 69 on the base dataset row, 85 with all four enrichment blocks on, 40 on a file row |
| Filters | 23 filters plus free-text search, every one measured against the unfiltered total before it shipped |
| Correctness | Format spellings expanded case-correctly, invalid sorts rejected instead of silently ignored, filters ANDed into one clause so the portal never answers 409 |
| Enrichment | Openness score, DataStore column schemas, live link checks, publisher profiles |
| Cost control | Fourteen row types and four enrichment blocks billed separately, so you pay for what you switch on |

### How it compares

Two other Actors cover data.gov.ie and one covers CKAN portals generically. All three are cheaper per row, at $2.00 to $2.50 per 1,000 against our $7.00, and all three had one user in the last 30 days. The difference is what a row is. `benthepythondev/ireland-data-gov-packages-scraper` takes one input, `maxResults`, and returns ids and names. `benthepythondev/ireland-open-data-scraper` takes two, a query and `maxResults`. `straightforward_hydra/ckan-open-data-scraper` is a generic CKAN reader that knows nothing Irish. None of them carry the EU high-value block, the openness score, the DataStore schemas or a link check, and none can filter by theme, publisher, licence, frequency, harvest collection or date range. If you want a list of dataset names, buy the cheap one. If you want the portal modelled, this is the one.

| | This Actor | benthepythondev/ireland-open-data-scraper | straightforward\_hydra/ckan-open-data-scraper |
|---|---|---|---|
| Price per 1,000 rows | $7.00 | $2.00 | $2.00 |
| Input fields | 47 | 2 | generic CKAN |
| Filters measured against totals | 23 | 1 free-text query | none Ireland-specific |
| Row types | 14 | 1 | 1 |
| EU high-value block | Yes | No | No |
| Openness score | Yes | No | No |
| DataStore column schemas | Yes | No | No |
| Live link check | Yes | No | No |

### What a dataset looks like

One real, unedited row from the verified run, with all four enrichment blocks switched on:

```json
{
  "datasetId": "735d61de-6400-4b81-832d-8ff6cc84fa4f",
  "name": "2026-2027-school-allocations",
  "url": "https://data.gov.ie/dataset/2026-2027-school-allocations",
  "title": "2026-2027 School Allocations",
  "titleIrish": "Not Disclosed",
  "description": "2026-2027 School Allocations. There are 3 files with allocations. Allocations are for Special Schools, Primary Schools and Post Primary Schools.",
  "descriptionText": "2026-2027 School Allocations. There are 3 files with allocations. Allocations are for Special Schools, Primary Schools and Post Primary Schools.",
  "descriptionIrish": "Not Disclosed",
  "sourceUrl": "Not Disclosed",
  "organization": "national-council-for-special-education",
  "organizationTitle": "National Council for Special Education",
  "organizationId": "46b1ba76-5e24-441e-91da-0d92e5c64616",
  "organizationDescription": "The National Council for Special Education (NCSE) was set up to improve the delivery of education services to persons with special educational needs arising from disabilities with particular emphasis on children. The Council was first established as an independent statutory body by order of the Minister for Education and Science in December 2003.",
  "theme": "Education and Sport",
  "themeLabel": "Education and sport",
  "tags": [
    "2026-2027",
    "SET",
    "SNA",
    "SNA Allocations",
    "School Allocations"
  ],
  "tagCount": 5,
  "groups": [],
  "licenceId": "CC-BY-4.0",
  "licenceLabel": "Creative Commons Attribution 4.0",
  "licenceUrl": "Not Disclosed",
  "isOpenLicence": "No",
  "isOpenDefinitionLicence": "Yes",
  "rights": "Not Disclosed",
  "isHighValueDataset": "No",
  "hvdCategoryUri": "N/A",
  "hvdCategory": "N/A",
  "applicableLegislation": [],
  "updateFrequency": "Daily",
  "updateFrequencyLabel": "Every day",
  "language": "en",
  "version": "43",
  "conformsTo": "Not Disclosed",
  "provenance": "Not Disclosed",
  "issued": "2026-06-09",
  "updated": "2026-08-27",
  "metadataCreated": "2026-06-09T16:40:10.095619",
  "metadataModified": "2026-08-27T18:10:08.981851",
  "temporalCoverage": "2026-2027 Academic Year",
  "temporalStart": "Not Disclosed",
  "temporalEnd": "Not Disclosed",
  "spatialCoverage": "Not Disclosed",
  "spatialUri": "Not Disclosed",
  "spatialResolution": "Not Disclosed",
  "boundingBox": "N/A",
  "coordinateSystems": [],
  "verticalExtentMin": "Not Disclosed",
  "verticalExtentMax": "Not Disclosed",
  "verticalDatum": "Not Disclosed",
  "contactName": "NCSE Allocations",
  "contactEmail": "allocations@ncse.ie",
  "contactPhone": "Not Disclosed",
  "author": "Not Disclosed",
  "authorEmail": "Not Disclosed",
  "maintainer": "Not Disclosed",
  "maintainerEmail": "Not Disclosed",
  "collectionName": "ncse-ckan",
  "harvestSourceTitle": "National Council for Special Education",
  "harvestSourceId": "43e35ce9-ae96-4e44-b26d-d43ff5913694",
  "isHarvested": "Yes",
  "resourceCount": 3,
  "resourceFormats": [
    "CSV"
  ],
  "hasMachineReadable": "Yes",
  "datastoreResourceCount": 3,
  "totalSizeBytes": 291789,
  "primaryDownloadUrl": "https://opendata.ncse.ie/dataset/735d61de-6400-4b81-832d-8ff6cc84fa4f/resource/f1f60760-d195-4be7-9a05-1a97159cbef6/download/sna-and-set-hour-allocations-primary-schools.csv",
  "state": "active",
  "rowType": "dataset",
  "opennessScore": 3,
  "opennessStars": "3 stars - structured data in a non-proprietary open format",
  "opennessReason": "One of the resource formats is 3-star data - machine-readable data in an open format.",
  "orgAcronym": "NCSE",
  "orgDescription": "The National Council for Special Education (NCSE) was set up to improve the delivery of education services to persons with special educational needs arising from disabilities with particular emphasis on children. The Council was first established as an independent statutory body by order of the Minister for Education and Science in December 2003.",
  "orgDatasetCount": 65,
  "orgFollowerCount": 0,
  "orgImageUrl": "https://data.gov.ie/uploads/group/2025-04-23-125021.575987ncse-logo.gif",
  "orgCreated": "2025-03-03T10:14:28.330747",
  "checkedDistributions": [
    {
      "resourceId": "f1f60760-d195-4be7-9a05-1a97159cbef6",
      "url": "https://opendata.ncse.ie/dataset/735d61de-6400-4b81-832d-8ff6cc84fa4f/resource/f1f60760-d195-4be7-9a05-1a97159cbef6/download/sna-and-set-hour-allocations-primary-schools.csv",
      "format": "CSV",
      "alive": "Yes",
      "status": 200,
      "reason": "OK",
      "contentType": "text/csv",
      "contentLength": 219592
    },
    {
      "resourceId": "46288931-2b8b-4dc8-907d-b18dacc471cd",
      "url": "https://opendata.ncse.ie/dataset/735d61de-6400-4b81-832d-8ff6cc84fa4f/resource/46288931-2b8b-4dc8-907d-b18dacc471cd/download/sna-and-set-hour-allocations-post-primary-schools.csv",
      "format": "CSV",
      "alive": "Yes",
      "status": 200,
      "reason": "OK",
      "contentType": "text/csv",
      "contentLength": 61602
    },
    {
      "resourceId": "c1acbfed-0adf-4322-b02b-52e390f09aef",
      "url": "https://opendata.ncse.ie/dataset/735d61de-6400-4b81-832d-8ff6cc84fa4f/resource/c1acbfed-0adf-4322-b02b-52e390f09aef/download/allocations-special-schools.csv",
      "format": "CSV",
      "alive": "Yes",
      "status": 200,
      "reason": "OK",
      "contentType": "text/csv",
      "contentLength": 10595
    }
  ],
  "distributionsChecked": 3,
  "distributionsAlive": 3,
  "distributionsDead": 0,
  "datastoreTables": [
    {
      "resourceId": "f1f60760-d195-4be7-9a05-1a97159cbef6",
      "name": "SNA And SET Hours Allocations Primary Schools",
      "rowCount": 3049,
      "columnCount": 11,
      "columns": [
        "County",
        "Dublin Area Codes",
        "Roll Number",
        "School Type",
        "School Name",
        "set_hours_26_27",
        "set_posts__26_27",
        "special_class_teaching_posts__26_27",
        "mainstream_sna_allocation__26_27",
        "special_class_snas__26_27",
        "total_sna_allocation_26_27"
      ]
    },
    {
      "resourceId": "46288931-2b8b-4dc8-907d-b18dacc471cd",
      "name": "SNA And SET Hours Allocations Post Primary Schools",
      "rowCount": 721,
      "columnCount": 11,
      "columns": [
        "County",
        "Dublin Area Codes",
        "Roll Number",
        "School Type",
        "School Name",
        "set_hours_26_27",
        "set_posts__26_27",
        "special_class_teaching_posts__26_27",
        "mainstream_sna_allocation__26_27",
        "special_class_snas__26_27",
        "total_sna_allocation_26_27"
      ]
    },
    {
      "resourceId": "c1acbfed-0adf-4322-b02b-52e390f09aef",
      "name": "Allocations Special Schools",
      "rowCount": 133,
      "columnCount": 12,
      "columns": [
        "Roll Number",
        "School Name",
        "Admin Principal",
        "Admin Deputy Principal",
        "teaching_posts_26_27",
        "exceptional_teaching_posts_26_27",
        "Department of Education and Youth Concessionary Post",
        "sna_posts_serc_26_27",
        "additonal_sna_allocation__26_27",
        "total_sna_posts_26_27",
        "Cooperation Hours - Historic and New",
        "Part-time Specialist Subject Hours"
      ]
    }
  ],
  "datastoreTablesProbed": 3,
  "datastoreTotalRows": 3903,
  "scrapedAt": "2026-08-27T19:58:06.625Z"
}
```

Fields the portal does not hold for a given dataset come back as `Not Disclosed`, fields that do not apply as `N/A`, and booleans as `Yes` or `No`. There are no literal nulls anywhere in the output.

### Configure the run

Leave everything empty and the Actor sweeps the whole portal, newest change first. Add filters to narrow it, tick a row-type box to get extra rows, tick an enrichment box to get extra columns. Filters combine with AND; each list inside a filter combines with OR.

Everything from the Central Statistics Office published since the start of 2026, as CSV:

```json
{
  "organizations": ["central-statistics-office"],
  "formats": ["CSV"],
  "modifiedFrom": "2026-01-01",
  "maxItems": 5000,
  "sortBy": "metadata_modified desc"
}
```

The EU high-value compliance picture, with the publisher directory alongside it:

```json
{
  "onlyHighValue": true,
  "includeOrganizations": true,
  "includeHvdCategories": true,
  "includeOpennessScore": true,
  "maxItems": 800
}
```

Three named datasets with every enrichment, including what is actually inside their files:

```json
{
  "startUrls": [
    { "url": "https://data.gov.ie/dataset/planning-permission" },
    { "url": "https://data.gov.ie/dataset/valuation-office-api" }
  ],
  "datasetSlugs": ["homelessness-report-june-2026"],
  "includeResources": true,
  "includeDatastoreProbe": true,
  "includeLinkCheck": true,
  "includeOpennessScore": true,
  "datastorePreviewRows": 5
}
```

### Pricing

Pay per event, so you are charged for the rows you actually receive and the extras you actually switch on. Nothing else.

| Event | Price | Charged when |
|---|---|---|
| Actor start | $0.020 | Once per run |
| Dataset | $0.007 | One dataset row |
| Portal page scanned | $0.007 | One index page of up to 200 datasets |
| File | $0.004 | One file row, only with the file rows box ticked |
| Publisher / Harvest source / Showcase / Data request | $0.004 | One directory row of that type |
| Theme / EU category / Licence / Frequency / Collection / Format / Portal change | $0.002 | One directory or change-feed row |
| Tag | $0.001 | One tag row |
| Openness score attached | $0.003 | Only when the portal returned a rating |
| DataStore table read | $0.005 | Only when the table answered |
| File link checked | $0.003 | Only when the link check ran |
| Publisher profile attached | $0.003 | Only when the profile came back |

Bronze, Silver and Gold plans pay 3.8%, 7.4% and 11% less per event.

| Datasets, metadata only | Events charged | Cost |
|---|---|---|
| 100 | 1 start, 100 datasets, 1 page | $0.73 |
| 1,000 | 1 start, 1,000 datasets, 5 pages | $7.06 |
| 10,000 | 1 start, 10,000 datasets, 50 pages | $70.37 |

### Free users

Apify free-plan accounts get 10 rows per run as a preview, enough to see every field and check the shape before you commit. Paid plans return up to 1,000,000 rows per run. [Upgrade here](https://apify.com/pricing?fpr=vmoqkp).

### Run it

1. Create a free Apify account. New accounts get $5 in platform credit, which covers about 700 dataset rows here.
2. Open the Actor, leave the input as it is for a 10-row preview, or paste one of the examples above.
3. Press Start. A 10-row preview finishes in about 4 seconds, a metadata-only sweep wrote 1,679 dataset rows in 5 seconds, and 1,531 datasets with every enrichment block on took 575 seconds.
4. Download the dataset as CSV, JSON, Excel or XML, or read it from the Apify API.

### Use with AI agents (MCP)

```
claude mcp add apify npx -- -y @apify/actors-mcp-server --actors parseforge/data-gov-ie-ireland-open-data-scraper
```

Then ask in plain language:

- "List every dataset the Environmental Protection Agency published on data.gov.ie since 2025, with its licence and file formats."
- "Which Irish public bodies publish EU high-value datasets, and how many each?"
- "Check the planning permission dataset on data.gov.ie: are its files still downloadable, and what columns does the CSV have?"

### Troubleshooting

**I get no results at all.** A filter value that does not exist upstream returns zero rows, not everything. Check the spelling of a publisher name or a tag against the portal, or tick the matching directory box to pull the real vocabulary first.

**I get fewer rows than I asked for.** `maxItems` is one budget shared by every row type in the run. Datasets and file rows are written first, then the directories smallest first, and the tag directory last, so a low `maxItems` with many boxes ticked spends itself before it reaches the tags. Raise `maxItems`, or run the directories in their own run.

**My format filter finds nothing.** The portal's index is case sensitive: `res_format:csv` matches zero datasets and `res_format:CSV` matches 20,237. The format list in the input already expands each choice to every spelling the portal uses, so pick from the list rather than typing a format in the custom Solr filter.

**A field I expected is "Not Disclosed".** That means the publisher did not supply it. Nine tenths of the portal is harvested from 31 external feeds and each one fills a different subset: `frequency` is present on 36% of datasets, `rights` on 7%, a spatial geometry on 6%. `N/A` means the field does not apply to that row type at all.

**The run is slower than I expected.** Metadata-only paging is fast: 1,679 dataset rows landed in 5 seconds on a measured run. Each enrichment block adds a network round trip per dataset or per file, so a run with the openness score, the link check, the DataStore probe and the publisher profile all switched on lands nearer 14 rows per second. Turn off the blocks you do not need.

### FAQ

| Question | Answer |
|---|---|
| Do I need a data.gov.ie account or API key? | No. The portal's CKAN API is fully anonymous and this Actor uses no proxy. |
| How many datasets are on data.gov.ie? | 22,666 as measured on 2026-08-27, across 174 publishing bodies and 14 themes. |
| Why does the tag directory stop at 2,000 rows? | The portal returns at most 2,000 values per facet, so the tag directory is the 2,000 most used tags out of a vocabulary of 22,742. The run logs a warning when it hits that ceiling. |
| Can I get the actual data inside a file, not just the metadata? | For the 19.4% of files loaded into the portal DataStore, yes: tick the DataStore probe for column names, SQL types, row counts and sample rows. For the rest you get the direct download URL. |
| What is the openness score? | The portal's own 0 to 5 star rating of how open a dataset is, following the five-star open data model. It is on every dataset but only reachable through the record view, so it is an opt-in block here. |
| Why does a CC-BY-4.0 dataset say `isOpenLicence: No`? | Because the portal says so. 732 CC-BY-4.0 datasets are flagged not open upstream. The row carries both the portal's flag and an independent Open Definition check in `isOpenDefinitionLicence`. |
| Can I filter by map area or bounding box? | Not by box. The portal has the spatial search extension installed but it answers HTTP 409 on any bounding box, so this Actor offers `onlyGeospatial` plus the spatial coverage name and computed bounding box on each row instead. |
| How do I monitor the portal for changes? | Tick the change feed box and run on a schedule. Each row is one dataset change with its timestamp, so you can diff against the previous run and refetch only what moved. |
| Is the data in Irish as well as English? | Rarely. 22,665 datasets are tagged English and one Irish. 373 of 400 sampled datasets carry a translation field, but only 20 hold an Irish title that actually differs from the English, and only those are shipped in `titleIrish`. |
| What happens if a dataset I ask for does not exist? | The run writes a single row with `rowType: "error"` naming the URL, and carries on with the rest. Error rows are never charged. |
| Can I sort by anything I like? | Only by the thirteen orders in the dropdown. The portal silently falls back to relevance for anything else, so an unsupported sort is rejected with a warning rather than quietly ignored. |

### Related actors

- [Italy Open Data Scraper - dati.gov.it CKAN Catalog](https://apify.com/parseforge/dati-gov-it-italy-open-data-scraper?fpr=vmoqkp)
- [GovData Germany Scraper - CKAN Open Data Portal](https://apify.com/parseforge/govdata-germany-scraper?fpr=vmoqkp)
- [data.gov.uk Datasets Scraper](https://apify.com/parseforge/data-gov-uk-scraper?fpr=vmoqkp)
- [Ireland CRO Companies Scraper](https://apify.com/parseforge/ireland-cro-companies-scraper?fpr=vmoqkp)
- [Irish Rail Realtime Scraper](https://apify.com/parseforge/irishrail-realtime-scraper?fpr=vmoqkp)

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.

Disclaimer: this is an unofficial scraper and is not affiliated with, endorsed by or connected to data.gov.ie, the Department of Public Expenditure, NDP Delivery and Reform, or any Irish public body. It reads only data the portal publishes anonymously to anyone. Dataset metadata is published under the licences named in each row, most commonly Creative Commons Attribution 4.0, and you are responsible for honouring the attribution those licences require. Contact fields in the output are the published contact points of public bodies rather than personal data, but if a record does carry personal information you remain the controller of what you collect and must handle it in line with GDPR, CCPA, PIPL and any other law that applies to you.

# Actor input Schema

## `searchTerms` (type: `array`):

Free-text search across the portal. Several terms are combined with OR. Fielded Solr syntax also works, for example title:housing or notes:census. Leave empty to sweep the whole portal.

## `startUrls` (type: `array`):

Individual data.gov.ie dataset pages, for example https://data.gov.ie/dataset/planning-permission. When any URL or slug is given the portal sweep is skipped and only those datasets are returned.

## `datasetSlugs` (type: `array`):

CKAN dataset names (planning-permission) or UUIDs. Same effect as Dataset URLs, without typing the host.

## `maxItems` (type: `integer`):

Free users: limited to 10 items (preview). Paid users: up to 1,000,000. Counts every row the run writes, datasets and directory rows together.

## `themes` (type: `array`):

Portal themes. Measured live: Government 11,725 datasets, Environment 4,228, Health 2,551, Justice 765.

## `organizations` (type: `array`):

CKAN organization names, for example central-statistics-office (12,849 datasets), meteireann (2,051), tusla (1,492), marine-institute (1,064). Tick Publisher directory below to pull the full list of 174.

## `collections` (type: `array`):

The upstream feed a dataset was harvested from. cso\_jsonrpc holds 13,780 datasets, isde 1,914, tusla-ckan 1,492, dublinked-ckan 924.

## `formats` (type: `array`):

Keep only datasets that publish at least one file in these formats. The index is case sensitive and carries 132 spellings, so each choice expands to every spelling the portal actually uses.

## `licences` (type: `array`):

The 12 licence ids in the portal. CC-BY-4.0 covers 21,925 datasets, CC-BY-SA-4.0 429, cc-by-nc-nd 56, cc-zero 28.

## `updateFrequencies` (type: `array`):

How often the publisher says the dataset changes. Monthly 2,600 datasets, Quarterly 882, Annual 513, Daily 40.

## `hvdCategories` (type: `array`):

The six categories of Implementing Regulation (EU) 2023/138. Geospatial covers 4,322 datasets, Companies 113, Mobility 78, Meteorological 46.

## `tags` (type: `array`):

Keyword tags exactly as the portal stores them, for example census-2022 or crime-and-justice. Tick Tag directory below to pull the full vocabulary of 22,742.

## `groups` (type: `array`):

CKAN groups. The portal currently runs exactly one, haleandhearty, with 431 datasets.

## `language` (type: `string`):

Metadata language. 22,665 datasets are tagged en and 1 is tagged ga.

## `minResources` (type: `integer`):

Keep only datasets with at least this many downloadable files. 1,354 datasets carry 5 or more.

## `modifiedFrom` (type: `string`):

Keep datasets whose metadata changed on or after this date. 5,912 datasets changed since 2026-01-01.

## `modifiedTo` (type: `string`):

Keep datasets whose metadata changed on or before this date.

## `createdFrom` (type: `string`):

Keep datasets first registered on the portal on or after this date. 4,655 arrived since 2025-01-01.

## `createdTo` (type: `string`):

Keep datasets first registered on the portal on or before this date.

## `issuedFrom` (type: `string`):

Keep datasets the publisher issued on or after this date. 1,151 were issued since 2024-01-01.

## `issuedTo` (type: `string`):

Keep datasets the publisher issued on or before this date.

## `onlyHighValue` (type: `boolean`):

Keep only the 383 datasets flagged as high value under Implementing Regulation (EU) 2023/138.

## `onlyGeospatial` (type: `boolean`):

Keep only the 4,009 datasets that carry a spatial geometry. The portal's bounding-box search is broken upstream, so this flag is the geographic filter it offers.

## `onlyOpenLicence` (type: `boolean`):

Keep only the 21,628 datasets the portal marks as openly licensed.

## `onlyWithRights` (type: `boolean`):

Keep only the 4,378 datasets that carry a full rights or reuse statement beyond the licence id.

## `onlyConforming` (type: `boolean`):

Keep only the 1,960 datasets that declare a standard they conform to, such as INSPIRE or DCAT.

## `customFilterQuery` (type: `string`):

Raw Solr fq clause ANDed with everything above, for example num\_tags:\[10 TO \*]. Use it for fields this schema does not expose.

## `sortBy` (type: `string`):

Result order. Only these values are honoured; the portal silently falls back to relevance for anything else.

## `includeResources` (type: `boolean`):

Write one extra row for every downloadable file, with its format, size, checksum and direct URL. Datasets average 3.4 files each.

## `includeOrganizations` (type: `boolean`):

Write one row for each of the 174 publishers, with acronym, description, dataset count and follower count.

## `includeThemes` (type: `boolean`):

Write one row per portal theme with its live dataset count. 14 themes.

## `includeHvdCategories` (type: `boolean`):

Write one row per EU high-value category with its live dataset count. 6 categories.

## `includeLicences` (type: `boolean`):

Write one row per licence with its live dataset count. 12 licences.

## `includeFrequencies` (type: `boolean`):

Write one row per declared update frequency with its live dataset count. 15 values.

## `includeCollections` (type: `boolean`):

Write one row per harvest collection with its live dataset count. 27 collections.

## `includeFormats` (type: `boolean`):

Write one row per file-format spelling with its live dataset count. 132 spellings.

## `includeTags` (type: `boolean`):

Write one row per keyword tag with its live dataset count. 22,742 tags, so raise Max Items before ticking this.

## `includeHarvestSources` (type: `boolean`):

Write one row per upstream feed the portal harvests, with its URL, harvester type, schedule and next run. 31 sources.

## `includeShowcases` (type: `boolean`):

Write one row per showcase, the applications and stories the portal features on top of its data. 14 showcases.

## `includeDataRequests` (type: `boolean`):

Write one row per public data request, what a citizen or company asked a body to publish and whether it was accepted. 112 requests, 9 still open.

## `includeActivity` (type: `boolean`):

Write one row per recent dataset change on the portal, with the timestamp and the dataset it touched. Use it to monitor what moved since your last run.

## `includeOpennessScore` (type: `boolean`):

Fetch the portal's own 0 to 5 star openness rating and the reason behind it for every dataset. Costs one extra API call per dataset, so it is off by default.

## `includeDatastoreProbe` (type: `boolean`):

For files loaded into the portal's DataStore (19.4% of them), read the real column names, per-column SQL types, the true row count and a sample of rows. Nothing in the metadata carries this.

## `includeLinkCheck` (type: `boolean`):

Send a HEAD request to each file URL and report the status, final URL, content type and byte size. The portal harvests 31 external feeds and never revalidates the links.

## `includeOrganizationProfile` (type: `boolean`):

Attach the publisher's acronym, description, dataset count and follower count to every dataset row. Profiles are cached, so one call per publisher, not per dataset.

## `maxResourcesPerDataset` (type: `integer`):

How many files per dataset the link check and the DataStore probe are allowed to touch. Raising it raises both the run time and the cost.

## `datastorePreviewRows` (type: `integer`):

How many real data rows to return from each DataStore table. Set 0 to get the column schema and row count with no sample data.

## Actor input object example

```json
{
  "searchTerms": [],
  "startUrls": [],
  "datasetSlugs": [],
  "maxItems": 10,
  "themes": [],
  "organizations": [],
  "collections": [],
  "formats": [],
  "licences": [],
  "updateFrequencies": [],
  "hvdCategories": [],
  "tags": [],
  "groups": [],
  "language": "any",
  "onlyHighValue": false,
  "onlyGeospatial": false,
  "onlyOpenLicence": false,
  "onlyWithRights": false,
  "onlyConforming": false,
  "sortBy": "metadata_modified desc",
  "includeResources": false,
  "includeOrganizations": false,
  "includeThemes": false,
  "includeHvdCategories": false,
  "includeLicences": false,
  "includeFrequencies": false,
  "includeCollections": false,
  "includeFormats": false,
  "includeTags": false,
  "includeHarvestSources": false,
  "includeShowcases": false,
  "includeDataRequests": false,
  "includeActivity": false,
  "includeOpennessScore": false,
  "includeDatastoreProbe": false,
  "includeLinkCheck": false,
  "includeOrganizationProfile": false,
  "maxResourcesPerDataset": 5,
  "datastorePreviewRows": 3
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `csv` (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 = {
    "searchTerms": [],
    "startUrls": [],
    "datasetSlugs": [],
    "maxItems": 10,
    "themes": [],
    "organizations": [],
    "collections": [],
    "formats": [],
    "licences": [],
    "updateFrequencies": [],
    "hvdCategories": [],
    "tags": [],
    "groups": [],
    "sortBy": "metadata_modified desc",
    "maxResourcesPerDataset": 5,
    "datastorePreviewRows": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/data-gov-ie-ireland-open-data-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 = {
    "searchTerms": [],
    "startUrls": [],
    "datasetSlugs": [],
    "maxItems": 10,
    "themes": [],
    "organizations": [],
    "collections": [],
    "formats": [],
    "licences": [],
    "updateFrequencies": [],
    "hvdCategories": [],
    "tags": [],
    "groups": [],
    "sortBy": "metadata_modified desc",
    "maxResourcesPerDataset": 5,
    "datastorePreviewRows": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/data-gov-ie-ireland-open-data-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 '{
  "searchTerms": [],
  "startUrls": [],
  "datasetSlugs": [],
  "maxItems": 10,
  "themes": [],
  "organizations": [],
  "collections": [],
  "formats": [],
  "licences": [],
  "updateFrequencies": [],
  "hvdCategories": [],
  "tags": [],
  "groups": [],
  "sortBy": "metadata_modified desc",
  "maxResourcesPerDataset": 5,
  "datastorePreviewRows": 3
}' |
apify call parseforge/data-gov-ie-ireland-open-data-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/data-gov-ie-ireland-open-data-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/Dcf6QtUNf9BheXYWd/builds/D7w4AVmbpwN6qbVIl/openapi.json
