# Ireland Jobs Scraper: jobs.ie & IrishJobs.ie Combined + Salary (`getascraper/ireland-jobs-feed`) Actor

Combines jobs.ie and IrishJobs.ie, Ireland's two leading job boards, into one structured feed per run: full salary, employer, and location data. Includes a bonus Employers hiring-signal dataset for B2B prospecting, plus 5-state monitor mode. Pulls into n8n, Zapier, or Clay via API. $0.003/job.

- **URL**: https://apify.com/getascraper/ireland-jobs-feed.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.25 / 1,000 job postings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

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

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

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

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

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

# README

## Ireland Jobs Feed: jobs.ie + IrishJobs.ie Combined, Salary Data

<table width="100%" style="width:100%;min-width:100%;border-collapse:collapse;table-layout:fixed;margin-bottom:16px">
<tbody style="display:table;width:100%;min-width:100%;border-collapse:collapse;table-layout:fixed">
<tr style="width:100%">
  <td colspan="1" style="background:#0B3D2E;padding:20px 24px;border-radius:10px">
    <strong style="color:#FFFFFF;font-size:18px">Ireland's two biggest job boards, one call, one schema.</strong><br/>
    <span style="color:#CFE8DC;font-size:14px">jobs.ie and IrishJobs.ie are run separately today. This Actor searches both at once and returns one combined, structured feed, with automatic dedup for the rare role posted on both, so you get full coverage without running two tools and reconciling two formats yourself.</span>
  </td>
</tr>
</tbody>
</table>

**Ireland Jobs Feed** combines [jobs.ie](https://www.jobs.ie) and [IrishJobs.ie](https://www.irishjobs.ie), Ireland's two leading job boards, into one structured dataset in a single run. Every job comes with structured salary, full employer and location details, and a full description, pulled straight from the source. A role that happens to be posted on both boards is automatically matched and merged into one result rather than counted twice - built in as a data-hygiene safeguard, not because overlap between the two boards is common (it's checked on every run either way). Run it once for a snapshot, or schedule it and switch on monitor mode to see exactly what's new, updated, or gone since last time, via the Apify platform's built-in scheduling and API access.

### 🎯 Why use Ireland Jobs Feed?

**"I need both jobs.ie and IrishJobs.ie coverage, but I don't want to run two different scrapers and merge two different output formats myself."**
A recruiter, staffing agency, or job-board aggregator runs this Actor once and gets one combined, consistently-structured list from both boards, ready to publish or forward.

**"I need to know which companies are actively hiring in Ireland this week for outbound prospecting, not scroll two career sites by hand."**
A B2B sales or business-development team uses the bonus Employers dataset: one row per company across both boards combined, with open-role counts, counties, and sectors, a ready-made account-based prospecting list built from a wider net than either board alone.

**"I'm building a jobs dashboard or market-analysis tool and want full market coverage without stitching two raw feeds together myself."**
A job-market analyst or aggregator builder schedules this Actor via the Apify API and gets one clean, structured feed spanning both boards, with monitor mode tracking what changed.

<table width="100%" style="width:100%;min-width:100%;border-collapse:collapse;table-layout:fixed;margin:20px 0">
<tbody style="display:table;width:100%;min-width:100%;border-collapse:collapse;table-layout:fixed">
<tr style="width:100%">
  <td width="25%" style="width:25%;background:#EAF5EF;padding:16px;border-radius:8px;vertical-align:top">
    <strong style="color:#0B3D2E">🌐 Two boards, one feed</strong><br/>
    <span style="color:#2F4A3D;font-size:13px">jobs.ie and IrishJobs.ie searched together every run, returned in one consistent schema instead of two.</span>
  </td>
  <td width="25%" style="width:25%;background:#EAF5EF;padding:16px;border-radius:8px;vertical-align:top">
    <strong style="color:#0B3D2E">🏢 Who's hiring now</strong><br/>
    <span style="color:#2F4A3D;font-size:13px">A bonus Employers dataset: one row per company across both sites combined, with open-role counts and counties.</span>
  </td>
  <td width="25%" style="width:25%;background:#EAF5EF;padding:16px;border-radius:8px;vertical-align:top">
    <strong style="color:#0B3D2E">💶 Structured salary</strong><br/>
    <span style="color:#2F4A3D;font-size:13px">Minimum, maximum, currency, and pay period parsed out wherever the employer discloses one, not just raw text.</span>
  </td>
  <td width="25%" style="width:25%;background:#EAF5EF;padding:16px;border-radius:8px;vertical-align:top">
    <strong style="color:#0B3D2E">🔗 Automatic dedup</strong><br/>
    <span style="color:#2F4A3D;font-size:13px">The rare role posted on both boards is matched on employer, title, and date, then merged into one result carrying both links - checked on every run.</span>
  </td>
</tr>
</tbody>
</table>

### 🛠️ How to use Ireland Jobs Feed

<table width="100%" style="width:100%;min-width:100%;border-collapse:collapse;table-layout:fixed;margin:16px 0">
<tbody style="display:table;width:100%;min-width:100%;border-collapse:collapse;table-layout:fixed">
<tr style="width:100%">
  <td width="33%" style="width:33.333%;padding:14px;vertical-align:top">
    <strong style="color:#0B3D2E">1. Pick your categories</strong><br/>
    <span style="color:#2F4A3D;font-size:13px">Enter one or more category slugs, like <code>it</code>, <code>sales</code>, or <code>healthcare</code>, taken from either site's own job-category pages.</span>
  </td>
  <td width="33%" style="width:33.333%;padding:14px;vertical-align:top">
    <strong style="color:#0B3D2E">2. Run the Actor</strong><br/>
    <span style="color:#2F4A3D;font-size:13px">It searches both jobs.ie and IrishJobs.ie for every category and returns one combined feed, merging the rare cross-posted duplicate automatically.</span>
  </td>
  <td width="33%" style="width:33.333%;padding:14px;vertical-align:top">
    <strong style="color:#0B3D2E">3. Schedule it</strong><br/>
    <span style="color:#2F4A3D;font-size:13px">Turn on monitor mode and every future run tells you exactly what's new, updated, or gone since last time.</span>
  </td>
</tr>
</tbody>
</table>

### 📥 Input

| Field | Type | Required | Description |
|---|---|---|---|
| Categories | array of strings | No | Category slugs to search, e.g. `it`, `sales`, `healthcare`, `accountancy`, `hr`. Every category is searched on both sites. |
| Job type | enum | No | Any, Permanent, Part time, Contract, Temporary, or Work from home. A real site filter, not post-processing - narrows results at the source. |
| Company type | enum | No | Any, Direct employer only, or Agency only. Single-select: neither site's own filter reliably supports selecting both at once. |
| Posted within | integer | No | Only jobs posted in the last 1, 3, 7, or 14 days (the site's own real options). Leave blank for no date limit. |
| Minimum salary period | enum | No | Annual, Daily, or Hourly - which period Minimum salary amount is measured in. Leave as "No minimum" to skip salary filtering. |
| Minimum salary amount | integer | No | Only jobs paying at least this much (EUR), in the period chosen above. Ignored unless a salary period is also set. |
| Max items per source | integer | No | Maximum jobs fetched from each site, per category, before deduplication. |
| Include full description | boolean | No | Include the complete job description text in the output. |
| Monitor mode | enum | No | `Snapshot` returns the current feed with no history. `Changes` compares against the previous run and flags new, updated, reappeared, unchanged, and expired jobs. |
| Include unchanged jobs | boolean | No | Only used with Monitor mode set to Changes. Also emit jobs that have not changed since the last run. |
| Monitor state name | string | No | Optional label to keep separate change-history for different category sets run on different schedules. |
| Proxy configuration | proxy object | No | Residential Ireland proxy is the default and is required for this Actor to work. |
| Max concurrency | integer | No | Maximum parallel requests across both sites. |
| Max request retries | integer | No | How many times to retry a failed page before giving up on it. |

### 📤 Output

Every run gives you the deduplicated job feed as the default dataset, plus a bonus Employers dataset:

- **🔍 Jobs** (default dataset): one row per genuine job, deduplicated across both sites. A role found on only one board carries one source link; a role found on both carries both, plus the match evidence that justified merging them.
- **🏢 Employers** (bonus, Storage tab): one row per employer across both sites combined, with total open roles, counties, sectors, and which board(s) they're hiring on, a ready-made "who's hiring in Ireland right now" list.

Download either view as JSON, CSV, HTML, or Excel, or connect straight to your own pipeline via the Apify API, including n8n, Zapier, or Clay.

#### Sample Jobs record

```json
{
  "id": "jobs_ie:107876384",
  "title": "Assistant Manager - Computers and Technology",
  "employer": {
    "name": "Excel Recruitment",
    "url": "https://www.jobs.ie/jobs/excel-recruitment",
    "logoUrl": "https://www.jobs.ie/CompanyLogos/a6b0a39b-204e-4f11-9846-ece112ec1217.png"
  },
  "location": {
    "text": "Dublin, Dublin",
    "locality": "Dublin, County Dublin",
    "region": "Dublin",
    "country": "IE"
  },
  "salary": {
    "min": 31000,
    "max": 33000,
    "currency": "EUR",
    "period": "annum",
    "rawText": "€31,000 - €33,000 per annum"
  },
  "contractType": "Permanent",
  "datePosted": "2026-08-20T12:23:06.47Z",
  "category": "it",
  "sources": [
    { "site": "jobs_ie", "siteLabel": "jobs.ie", "url": "https://www.jobs.ie/job/assistant-manager-computers-and-technology/excel-recruitment-job107876384", "jobId": "107876384" }
  ],
  "isCrossPosted": false,
  "applyUrl": "https://www.jobs.ie/job/assistant-manager-computers-and-technology/excel-recruitment-job107876384",
  "scrapedAt": "2026-09-16T18:00:00.000Z"
}
```

### 🗂️ Data table

| Field | Type | Description |
|---|---|---|
| id | string | Stable ID for this deduplicated job. |
| title | string | Job title. |
| employer | object | Employer name, profile link, and logo. |
| location | object | County, locality, and coordinates where available. |
| salary | object | Minimum, maximum, currency, and pay period, parsed where the employer discloses one, plus the raw text. |
| contractType | string | Permanent, Contract, Temporary, or Part-time, as published. |
| datePosted | string | ISO posting date. |
| validThrough | string | Application deadline, when published. |
| industry | string | Industry classification, when published. |
| description | string | Full job description. |
| applyUrl | string | Link to apply. |
| category | string | The category this job was found under. |
| sources | array | Every source site this job was found on, one entry normally, two when cross-posted. |
| isCrossPosted | boolean | True when this job was matched and merged across both sites. |
| dedupMatch | object | Present on cross-posted rows: the title, date, and salary agreement that justified the merge. |
| changeType | string | With Monitor mode on: new, updated, reappeared, unchanged, or expired. |

### 💰 Pricing

Ireland Jobs Feed is pay per result: $0.0042 per job posting returned in your dataset. You are charged only for the jobs actually returned, an empty run costs nothing, and there is no subscription. The bonus Employers dataset is included at no extra charge.

### ⭐ Enjoying Ireland Jobs Feed?

If this Actor is saving you time, a quick review helps other buyers find it and tells us what to build next. [Leave a review](https://apify.com/getascraper/ireland-jobs-feed) right from the Actor's Store page.

### 💡 Tips

- Start with one category and a small max-items setting to see the field shape and dedup quality before scaling up to a full category list.
- Use monitor mode with a scheduled run to get a running "what's new this week" feed instead of re-downloading the full list every time.
- Give each category set its own monitor state name if you run more than one schedule, so their change history never mixes.

### ❓ FAQ

**Does this need a jobs.ie or IrishJobs.ie account or login?**
No. Every field comes from each site's own public job pages. No login, password, or API key is ever required.

**How does it know a job on jobs.ie and a job on IrishJobs.ie are the same role?**
It matches on employer name, job title, and posting date, and checks disclosed salary as a confirming signal where both sides show one. A genuinely uncertain match is left unmerged rather than guessed, so two different real jobs are never incorrectly combined into one. In practice, genuine cross-posts are uncommon - the two boards mostly carry different roles - so most output is one board's own listing with a single source link; dedup exists to handle the exception cleanly, not because it fires on every run.

**What happens to a job that's only on one site?**
It's still included, as a normal result with a single source link. Deduplication only affects jobs that genuinely appear on both boards.

**Will monitor mode double-count a job that moves from one board to both?**
No. Monitor mode compares against the already-deduplicated feed, so a job you already had from one site that simply also appears on the other site this run is correctly left unchanged, not flagged as new.

### 🔗 Other actors

- [CWJobs Scraper: UK tech jobs, salaries & employers](https://apify.com/getascraper/cwjobs-scraper) ↗ - UK tech and IT job listings from CWJobs, on the same job-board platform family as jobs.ie and IrishJobs.ie.
- [S1 Jobs Scraper: Scotland Jobs, Salaries & Employers](https://apify.com/getascraper/s1jobs-scraper) ↗ - Job listings, salaries, and employer data from Scotland's leading job board.
- [HIJOBS Scraper: Scotland's Highlands & Islands Jobs](https://apify.com/getascraper/hijobs-scraper) ↗ - Job listings from the Scottish Highlands and Islands' own regional job board.
- [Goodmoves jobs scraper: Scottish charity vacancies](https://apify.com/getascraper/goodmoves-jobs-scraper) ↗ - Charity and non-profit sector vacancies from Scotland's dedicated third-sector job board.
- [WTTJ Jobs Scraper: Raw JSON or RAG-Ready Chunks](https://apify.com/getascraper/welcome-to-the-jungle-jobs-scraper) ↗ - Tech and startup job listings from Welcome to the Jungle, covering companies across Europe.

# Changelog

This Actor's version history is a separate document: https://apify.com/getascraper/ireland-jobs-feed/changelog.md

# Actor input Schema

## `categories` (type: `array`):

Category URL slugs to search, taken from either site's /jobs/<slug> path. Verified identical on both sites: it, sales, healthcare, accountancy, hr - other slugs from either site's own category pages also work. One category keeps the mandatory default run fast; add more to widen the search.

## `jobType` (type: `string`):

Restrict to one employment type. Changes the site's own listing URL (e.g. /jobs/permanent/it) so it narrows results at the source, not after the fact.

## `companyType` (type: `string`):

Restrict to roles posted directly by the employer, or only by recruitment agencies. Single-select: both sites' own facet filter does not reliably support selecting both types at once (confirmed live - it silently falls back to unfiltered).

## `postedWithinDays` (type: `integer`):

Only show jobs posted in the last N days. Must be exactly 1, 3, 7, or 14 - the site's own real facet options; any other value is ignored (no date filter applied). Leave blank for no date limit.

## `salaryPeriod` (type: `string`):

Which pay period the Minimum Salary Amount below is measured in. Leave as "No minimum" to skip salary filtering entirely - both sites only expose these three periods (no weekly or monthly option exists on either platform).

## `salaryMin` (type: `integer`):

Only show jobs paying at least this much, in euro, measured in the period chosen above (e.g. 45000 with Annual salary = €45,000+ per year). Ignored unless Minimum Salary Period is also set.

## `maxItemsPerSource` (type: `integer`):

Maximum jobs to fetch from EACH source site per category (so up to 2x this many raw jobs before dedup). Kept at 10-15 by default: this Actor always fetches both sites at once and then runs cross-source matching on top, which adds real processing time beyond what a single-site scraper's equivalent limit would take.

## `includeDescription` (type: `boolean`):

Include the full job description text. Unlike a typical enrichment toggle this adds no extra request: every job already needs its detail page fetched for structured salary, employer, and location data, so the description comes along for free. Turn off only to shrink the dataset size.

## `monitorMode` (type: `string`):

"Snapshot" outputs the current deduplicated feed with no history. "Changes" computes NEW / UPDATED / REAPPEARED / UNCHANGED / EXPIRED status against the previous run of the same category set, over the ALREADY-DEDUPLICATED feed - so a job already seen on jobs.ie that simply also turns up on IrishJobs.ie this run is correctly left UNCHANGED, not wrongly flagged NEW the way a single-site monitor pointed at either board alone would.

## `includeUnchanged` (type: `boolean`):

Only applies when Monitor Mode is "Changes". Off by default so the dataset stays focused on what actually moved (NEW/UPDATED/REAPPEARED/EXPIRED); turn on to also emit every UNCHANGED job on every run.

## `stateName` (type: `string`):

Optional label that keeps this run's Monitor Mode history separate from another schedule using different categories. Leave blank unless you run this Actor on multiple schedules with different category sets and want each to track its own NEW/UPDATED/EXPIRED history independently.

## `proxyConfiguration` (type: `object`):

Residential proxy in Ireland is required: jobs.ie and IrishJobs.ie both return an Akamai edge-ACL "Access Denied" page to datacenter-proxy and unproxied requests on listing and detail pages (confirmed live during this build), so switching this to datacenter will silently return zero jobs.

## `maxConcurrency` (type: `integer`):

Maximum parallel requests across both sites. Lower this if the run log shows retries or blocked attempts; raise it to finish larger custom runs faster.

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

How many times to retry a failed page request, listing or detail, before giving up on it.

## Actor input object example

```json
{
  "categories": [
    "it"
  ],
  "jobType": "any",
  "companyType": "any",
  "salaryPeriod": "",
  "maxItemsPerSource": 12,
  "includeDescription": true,
  "monitorMode": "snapshot",
  "includeUnchanged": false,
  "stateName": "",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IE"
  },
  "maxConcurrency": 5,
  "maxRequestRetries": 3
}
```

# Actor output Schema

## `jobs` (type: `string`):

No description

## `runSummary` (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 = {
    "categories": [
        "it"
    ],
    "jobType": "any",
    "companyType": "any",
    "salaryPeriod": "",
    "maxItemsPerSource": 12,
    "includeDescription": true,
    "monitorMode": "snapshot",
    "includeUnchanged": false,
    "stateName": "",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "IE"
    },
    "maxConcurrency": 5,
    "maxRequestRetries": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/ireland-jobs-feed").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 = {
    "categories": ["it"],
    "jobType": "any",
    "companyType": "any",
    "salaryPeriod": "",
    "maxItemsPerSource": 12,
    "includeDescription": True,
    "monitorMode": "snapshot",
    "includeUnchanged": False,
    "stateName": "",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "IE",
    },
    "maxConcurrency": 5,
    "maxRequestRetries": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/ireland-jobs-feed").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 '{
  "categories": [
    "it"
  ],
  "jobType": "any",
  "companyType": "any",
  "salaryPeriod": "",
  "maxItemsPerSource": 12,
  "includeDescription": true,
  "monitorMode": "snapshot",
  "includeUnchanged": false,
  "stateName": "",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IE"
  },
  "maxConcurrency": 5,
  "maxRequestRetries": 3
}' |
apify call getascraper/ireland-jobs-feed --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/ireland-jobs-feed"
        }
    }
}
```

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/DeB89xGIdK3oFCaSH/builds/DCKwhYU1K5j76BHwS/openapi.json
