# IrishJobs Ireland Scraper (`automation-lab/irishjobs-job-listings-scraper`) Actor

Search IrishJobs.ie by role and location and export vacancies, salaries, schedules, posting dates, descriptions, and application URLs.

- **URL**: https://apify.com/automation-lab/irishjobs-job-listings-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.01 / 1,000 item extracteds

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

## IrishJobs Ireland Scraper

Search public IrishJobs.ie vacancies by role and location and export structured job listings, salaries, schedules, posting dates, descriptions, employers, and application URLs.

The IrishJobs Ireland Scraper is built for repeatable recruiting research and Irish labor-market monitoring. It accepts keywords such as `software engineer` or `nurse`, an Ireland location such as Dublin or Cork, and public IrishJobs.ie search or job URLs.

### What can you do with this IrishJobs scraper?

- Search current IrishJobs vacancies by role and location.
- Export job titles, employers, locations, schedules, posting dates, and descriptions.
- Capture disclosed salary ranges and structured EUR salary bounds when available.
- Preserve stable job IDs for comparing scheduled runs.
- Process a precise IrishJobs search URL or individual public vacancy URL.
- Feed structured vacancy rows into spreadsheets, databases, dashboards, or recruiting workflows.
- Run lighter search-only exports by disabling full detail enrichment.

This Actor returns the current public source state. It does not log in, submit applications, retain historical snapshots, or send alerts by itself.

### Who is this Actor for?

#### Recruiters and talent teams

Build a current role-and-location vacancy feed, inspect hiring companies, and compare employer demand across repeat runs.

#### Labor-market analysts

Track stable job IDs, posting dates, locations, employment schedules, and disclosed salary bands for Irish market analysis.

#### Job-data and HR product teams

Export normalized IrishJobs rows into a warehouse, matching pipeline, search index, or internal dashboard.

#### Researchers and consultants

Create a reproducible dataset for a city, county, occupation, or supplied IrishJobs search page without manually copying listings.

### Extracted IrishJobs vacancy data

| Field | Meaning |
| --- | --- |
| `jobId` | Stable numeric IrishJobs vacancy ID |
| `harmonisedId` | Cross-platform identifier when supplied by IrishJobs |
| `title` | Advertised job title |
| `employer` | Employer shown on the listing |
| `employerId` | IrishJobs employer ID |
| `location` | Displayed city or county location |
| `region` | Region from structured detail data |
| `country` | `IE` |
| `latitude`, `longitude` | Job geocoordinates when disclosed |
| `salaryText` | Displayed search-result salary text |
| `salaryMin`, `salaryMax` | Parsed disclosed salary bounds |
| `salaryCurrency` | Salary currency, usually `EUR` |
| `salaryPeriod` | Salary period when structured |
| `schedule` | Employment type such as `FULL_TIME` |
| `workFromHome` | Search-result work-from-home signal |
| `postingDate` | Vacancy posting timestamp |
| `validThrough` | Vacancy expiry timestamp when available |
| `description` | Full plain-text description or a search snippet |
| `skills` | Structured skills when supplied |
| `jobUrl` | Canonical IrishJobs vacancy URL |
| `applicationUrl` | Public application entry URL |
| `employerUrl` | IrishJobs employer search/profile URL |
| `employerLogoUrl` | Public employer logo URL |
| `sourceSearchUrl` | Input/search page that produced the row |
| `scrapedAt` | Actor extraction timestamp |

Unavailable source values are returned as `null` or an empty array rather than invented.

### How to scrape IrishJobs Ireland vacancies

1. Open the Actor in Apify Console.
2. Enter one or more roles in **Roles or keywords**.
3. Optionally enter an Ireland city or county.
4. Choose the maximum number of jobs.
5. Keep **Fetch full job details** enabled for full descriptions, schedule, salary details, expiry dates, and geocoordinates.
6. Click **Start**.
7. Open the Dataset tab to inspect or download the results.

A useful first input is:

```json
{
  "keywords": ["software engineer"],
  "location": "Dublin",
  "maxItems": 10,
  "includeDetails": true
}
```

### Input parameters

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `keywords` | string array | — | Roles or search phrases; up to 20 |
| `location` | string | — | Optional Ireland city, county, or location |
| `startUrls` | URL array | — | Public IrishJobs.ie search or individual job URLs |
| `maxItems` | integer | `25` | Maximum unique vacancy rows, from 1 to 5,000 |
| `includeDetails` | boolean | `true` | Fetch full detail fields using Irish residential traffic |
| `maxRequestRetries` | integer | `2` | Bounded transient retries, from 0 to 4 |

Provide at least one keyword or start URL. When keywords/location are supplied with explicit URLs, emitted records must also match those filters.

### Search URLs and individual job URLs

You can pass a public search page:

```json
{
  "startUrls": [
    { "url": "https://www.irishjobs.ie/jobs/in-cork" }
  ],
  "maxItems": 10,
  "includeDetails": true
}
```

You can also pass an exact `/job/...-job123456789` URL. Individual job URLs are useful for refreshing known vacancies or enriching URLs stored by another workflow.

Only HTTPS IrishJobs.ie `/jobs` and `/job` URLs are accepted. Other domains and unrelated site paths fail validation.

### Example output

A current enriched result has this shape:

```json
{
  "jobId": "107764802",
  "harmonisedId": "4e6ea7ee-5636-4cb2-b857-b3f7d09a6693",
  "title": "Software Engineer III, WAN Core, Network Engineering",
  "employer": "Google Ireland Ltd",
  "location": "Dublin, County Dublin",
  "region": "Dublin",
  "country": "IE",
  "latitude": 53.33306,
  "longitude": -6.24889,
  "salaryText": null,
  "salaryMin": 100000,
  "salaryMax": 102000,
  "salaryCurrency": "EUR",
  "salaryPeriod": null,
  "schedule": "FULL_TIME",
  "postingDate": "2026-07-29T11:08:07.597Z",
  "validThrough": "2026-08-28T22:00:00Z",
  "description": "Minimum qualifications: Bachelor's degree or equivalent practical experience...",
  "jobUrl": "https://www.irishjobs.ie/job/software-engineer/google-ireland-ltd-job107764802",
  "applicationUrl": "https://www.irishjobs.ie/job/software-engineer/google-ireland-ltd-job107764802",
  "sourceSearchUrl": "https://www.irishjobs.ie/jobs/software-engineer/in-dublin",
  "scrapedAt": "2026-08-24T12:00:00.000Z"
}
```

Salary values depend on what the employer discloses. A listing may include salary text inside its full description even when the search card says “Not Disclosed”; detail enrichment parses a clear EUR range when present.

### How much does it cost to scrape IrishJobs vacancies?

The Actor uses pay-per-event pricing:

- a one-time **Start** event costs **$0.005**;
- each saved vacancy uses the plan-specific **Item processed** price;
- Apify platform usage can vary because full detail enrichment uses Irish residential proxy traffic.

Current per-item tiers are:

| Plan tier | Price per saved vacancy |
| --- | ---: |
| Free | $0.0019412 |
| Bronze | $0.0016880 |
| Silver | $0.0013166 |
| Gold | $0.0010128 |
| Platinum | $0.0006752 |
| Diamond | $0.00047264 |

At Bronze, event charges are about $0.0219 for 10 jobs, $0.0472 for 25 jobs, and $0.1738 for 100 jobs, including one start event. Platform resource and proxy usage is shown separately by Apify; Console is the final estimate for a run.

Only successfully saved unique jobs trigger item events. Detail enrichment is included in the job row and does not have a separate event charge.

### Monitoring new or changed IrishJobs vacancies

Use an Apify schedule with the same input, then compare datasets by `jobId`.

A typical monitoring workflow is:

1. Run the Actor daily or weekly.
2. Store `jobId`, `postingDate`, and fields important to your analysis.
3. Mark unseen IDs as new vacancies.
4. Compare salary, schedule, employer, location, and description fields for changes.
5. Mark previously observed IDs that disappear from the current source set as candidates for closure.

The Actor does not maintain history internally. Your dataset, database, or automation controls retention and comparison policy.

### Salary and schedule analysis

Full detail mode reads structured JobPosting data and visible description text. It can return:

- search-card salary text;
- structured minimum and maximum salary;
- currency and period when available;
- clearly displayed EUR ranges in full descriptions;
- structured employment type such as `FULL_TIME`.

Do not treat `null` salary as zero. It means the source did not provide a value the Actor could safely normalize.

### Export IrishJobs data to a spreadsheet or database

Open the run Dataset to download JSON, CSV, Excel, XML, or RSS.

Common destinations include:

- Google Sheets through Make or Zapier;
- Airtable or a recruiting operations table;
- PostgreSQL, BigQuery, Snowflake, or a data lake;
- an internal vacancy search index;
- a labor-market dashboard;
- a role taxonomy or salary-analysis pipeline.

Use stable `jobId` values as natural source keys and `scrapedAt` as extraction metadata.

### Run with the Apify API

#### cURL

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~irishjobs-job-listings-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keywords":["software engineer"],"location":"Dublin","maxItems":25,"includeDetails":true}'
```

Keep tokens in environment variables or a secret manager rather than source code.

#### JavaScript

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/irishjobs-job-listings-scraper').call({
  keywords: ['software engineer'],
  location: 'Dublin',
  maxItems: 25,
  includeDetails: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("automation-lab/irishjobs-job-listings-scraper").call(
    run_input={
        "keywords": ["nurse"],
        "location": "Ireland",
        "maxItems": 25,
        "includeDetails": True,
    }
)
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
```

### Use IrishJobs data with MCP and AI agents

Add the Actor to Claude Code:

```bash
claude mcp add --transport http apify \
  "https://mcp.apify.com?tools=automation-lab/irishjobs-job-listings-scraper"
```

For Claude Desktop, Cursor, or VS Code, use:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=automation-lab/irishjobs-job-listings-scraper"
    }
  }
}
```

Example prompts:

- “Find 20 current software engineer roles in Dublin from IrishJobs and summarize disclosed salary ranges.”
- “Export nursing vacancies across Ireland and group them by employer and county.”
- “Refresh these IrishJobs job URLs and identify records whose expiry date has passed.”

An AI-generated summary is not included in the Actor output; the MCP client or downstream model performs that step.

### Reliability, retries, and limits

Search uses IrishJobs' public structured result-list endpoint over direct HTTP. Full details use an Irish residential HTTP session because ordinary detail-page delivery is protected.

The Actor:

- validates recognizable structured search and detail responses;
- keeps cookies and sticky residential identity together;
- rotates an exhausted or challenged detail session;
- retries only bounded transient failures;
- deduplicates stable job IDs;
- stops if IrishJobs repeats a pagination page;
- does not report a challenge page as an empty valid result.

If an individual detail page fails, the Actor preserves the useful search row with its exact URL, employer, location, posting date, salary text, and description snippet. Detail-only fields remain null.

IrishJobs can change its public pages or structured interfaces. Use a moderate result limit and scheduled cadence rather than creating unnecessary traffic.

### Search-only mode

Set `includeDetails` to `false` when you need a lighter current-listing feed.

Search-only mode normally includes:

- IDs;
- title;
- employer;
- location;
- search salary;
- posting date;
- snippet;
- exact job URL.

It may omit full descriptions, schedule, expiry date, geocoordinates, and salary values displayed only on the detail page.

### Responsible use and legality

This Actor accesses public IrishJobs.ie vacancy information without login.

You are responsible for:

- following IrishJobs.ie terms and applicable laws;
- using a reasonable schedule and result limit;
- respecting intellectual-property and database rights;
- handling employer and vacancy data lawfully;
- avoiding discriminatory employment decisions;
- securing exported datasets;
- honoring deletion, retention, and access requirements that apply to your use case.

The Actor does not bypass login, submit applications, or collect private candidate information.

### Troubleshooting

#### Why are salary fields null?

Many employers do not disclose salary. Keep full detail enrichment enabled to capture a visible EUR range that may appear only in the description. Treat null as unavailable, not zero.

#### Why is the description shorter than expected?

The detail page may have failed after bounded retries, in which case the Actor returns the search snippet. Check logs for a detail-enrichment warning and retry later if the full text is essential.

#### Why did the run return fewer rows than `maxItems`?

`maxItems` is an upper bound. The source may have fewer current matches, filters may remove rows, listings may be duplicates, or IrishJobs may repeat a pagination page. The Actor stops repeated pages to avoid an infinite loop.

#### Can I search IrishJobs login-only data?

No. This Actor supports anonymous public job search and detail pages only. It does not use an IrishJobs login or candidate account.

#### Can I scrape another job board with `startUrls`?

No. Inputs are restricted to public HTTPS IrishJobs.ie search and job paths so that parsing and output semantics remain accurate.

### FAQ

#### Does it apply for jobs?

No. `applicationUrl` is an entry link for the public vacancy; the Actor never submits an application.

#### Can I run it on a schedule?

Yes. Apify schedules can trigger recurring runs. Compare results by stable `jobId` in your own storage or automation.

#### Does it monitor new and changed jobs automatically?

It returns the current source state. A scheduled workflow can compare current rows with prior rows to identify additions, changes, and disappearances.

#### Are all descriptions and salaries guaranteed?

No. The Actor exports what IrishJobs and the employer publicly disclose. Detail failures degrade to useful search rows, and undisclosed fields remain null.

#### What location formats work?

Use common Ireland places such as Dublin, Cork, Galway, Limerick, or Ireland. You can also supply a real IrishJobs location search URL.

#### Is the output available as CSV?

Yes. Apify Dataset supports CSV, Excel, JSON, XML, RSS, and API access.

### Related automation-lab Actors

Explore the [automation-lab Apify Store profile](https://apify.com/automation-lab) for other source-specific job, company, and labor-market Actors.

This Actor is intentionally IrishJobs.ie-specific. Source-specific validation preserves clearer vacancy fields and failure behavior than pretending unrelated job boards share the same contract.

# Actor input Schema

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

Job roles or keywords to search, such as software engineer or nurse.

## `location` (type: `string`):

Optional city, county, or location applied to keyword searches and emitted records.

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

Optional public IrishJobs.ie search-result or individual job-detail URLs.

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

Maximum number of unique vacancy records to save across all searches and URLs.

## `includeDetails` (type: `boolean`):

Fetch each job page for full descriptions, schedule, salary details, expiry date, and geocoordinates. Uses Irish residential proxy traffic.

## `maxRequestRetries` (type: `integer`):

Maximum retries after a transient IrishJobs response or network failure.

## Actor input object example

```json
{
  "keywords": [
    "software engineer"
  ],
  "location": "Dublin",
  "startUrls": [],
  "maxItems": 10,
  "includeDetails": true,
  "maxRequestRetries": 2
}
```

# Actor output Schema

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

Default dataset containing all scraped jobs.

# 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 = {
    "keywords": [
        "software engineer"
    ],
    "location": "Dublin",
    "startUrls": [],
    "maxItems": 10,
    "includeDetails": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/irishjobs-job-listings-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 = {
    "keywords": ["software engineer"],
    "location": "Dublin",
    "startUrls": [],
    "maxItems": 10,
    "includeDetails": True,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/irishjobs-job-listings-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 '{
  "keywords": [
    "software engineer"
  ],
  "location": "Dublin",
  "startUrls": [],
  "maxItems": 10,
  "includeDetails": true
}' |
apify call automation-lab/irishjobs-job-listings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automation-lab/irishjobs-job-listings-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/00qM2rk1Ko8tzOPp5/builds/saoFWLndgecgWXgiD/openapi.json
