# IrishJobs.ie Scraper — Jobs, Salaries & Employer Leads (`scrapersdelight/irishjobs-ie-jobs-scraper`) Actor

Scrape IrishJobs.ie, Ireland's national job board: title, company, location, salary, exact posted date, employment type, industry, GPS coordinates and the full description. Filter by county, recency, direct-employer-only and salary. No login, no cookies.

- **URL**: https://apify.com/scrapersdelight/irishjobs-ie-jobs-scraper.md
- **Developed by:** [Scrapers Delight](https://apify.com/scrapersdelight) (community)
- **Categories:** Jobs, Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.60 / 1,000 per job returneds

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/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.ie Scraper — Jobs, Salaries & Employer Leads

**Turn Ireland's national job board into a clean spreadsheet of hiring companies.** Search IrishJobs.ie by keyword, county, contract type, recency, salary and advertiser type, and get back one structured row per live posting: job title, employer, employer ID, location, salary, the exact posting timestamp, employment type, industry, GPS coordinates and the full job description.

No login. No cookies. No account. Built on the site's own embedded result JSON, not brittle HTML scraping.

***

### Why people use it

- 🎯 **Recruitment & staffing agencies** — a live "who is hiring right now" list for Ireland, filtered to **direct employers only** so you are not prospecting your own competitors.
- 📈 **Sales & GTM teams** — hiring is the loudest public buying signal there is. "Posted in the last 24 hours" plus a job title is a qualified trigger event.
- 🧠 **Market & salary research** — 65 distinct industry labels, structured pay bands, and exact posted/expiry timestamps across the whole board.
- 🤖 **AI / RAG pipelines** — full job descriptions as clean text or HTML, averaging ~7,200 characters per posting.

***

### What each row contains

**From the search results (100% populated unless noted, n=240 measured 2026-09-04):**

- 🆔 `job_id` — the site's numeric job id, the stable dedupe key (100%)
- 🏷️ `title` (100%) · 🔗 `job_url` (100%) · ✂️ `snippet` (100%)
- 🏢 `company` (100%) · `company_id` — a **stable employer id** you can group on (100%) · `company_profile_url` (100%) · `company_logo` (100%)
- 📍 `location` (100%) · `post_code` (12% — mostly blank on this site, see Honest limits)
- 💶 `salary_raw` (100% present, but only **35%** carry a number — see Honest limits) plus parsed `salary_min` / `salary_max` / `salary_currency` / `salary_period` (35%) and a `salary_is_disclosed` flag so you can filter cleanly
- 📅 `date_posted` — an **exact ISO timestamp**, not "3 days ago" (100%) · `publish_from_date` · `publish_to_date` (listing expiry)
- 🧭 `section` — `main` vs the site's padded `semantic`/`regional` cards (see Billing integrity)

**From the job's own page (with "Fetch full job details" on — 240/240 parsed in the measured sample):**

- 📝 `description_text` and/or `description_html` (100%, avg 7,171 chars of text)
- 💼 `employment_type` (100%) — FULL\_TIME / CONTRACTOR / PART\_TIME / TEMPORARY / APPRENTICE / REMOTE\_WORKING
- 🏭 `industry` (99.6%) — e.g. "Accountancy, Accountancy-Accountancy"; 65 distinct labels in a 240-row sample
- ⏳ `valid_through` — the posting's expiry date (100%)
- 🗺️ `latitude` / `longitude` (100%) · `address_locality` (90%) · `address_region` (74%) · `address_country` (100%) · `address_postal_code` (12%)
- 🏠 `is_remote` + `job_location_type` — the site's **real** remote signal (9.6% of the sample were TELECOMMUTE)
- ✅ `direct_apply` (100%)

***

### Quick start

```json
{
  "searchTerms": ["accountant"],
  "sortBy": "date",
  "maxItems": 25,
  "scrapeJobDetails": true
}
```

**The whole board, newest first:** leave `searchTerms` empty — the actor sweeps `/jobs/all` (**9,869 live postings** measured 2026-09-04).

**The weekly "who just started hiring" list for an agency BD team:**

```json
{
  "postedWithin": "7",
  "companyTypes": "directEmployer",
  "dedupeByEmployer": true,
  "fullCoverageMode": true,
  "maxItems": 0
}
```

**A real hiring-trigger monitor** — schedule it daily with `"onlyNewSince": "lastRun"` and it returns only postings that are genuinely new since the previous run (the watermark lives in a named key-value store, so it survives across runs).

***

### Input reference

#### What to scrape

| Field | What it does |
|---|---|
| `searchTerms` | Keywords, one per line. Empty = the whole live board (`/jobs/all`). |
| `locations` | Irish city, county or province — `dublin`, `county-cork`, `munster`, `northern-ireland`. Crossed with every search term. |
| `startUrls` | Paste any irishjobs.ie search URL straight from your browser with facets already applied — the actor uses its path and query as-is. A single `/job/...` URL is also accepted. |

#### Filters (applied on the site, so you only pay for rows you asked for)

| Field | What it does |
|---|---|
| `jobType` | `permanent` · `work-from-home` · `contract` · `part-time` · `temporary` |
| `postedWithin` | `1` / `3` / `7` / `14` days. Board-wide today: **2,809** new in 24h, 6,087 in 3 days, 8,200 in 7 days, 9,620 in 14 days. |
| `companyTypes` | `directEmployer` (6,308 board-wide) or `agency` (3,561). `excludeAgencies` is a shorthand for the former. |
| `minSalary` + `salaryPeriod` | Minimum advertised pay, per year / day / hour. |
| `sortBy` | `relevance` · `date` · `salaryHigh` · `salaryLow` |

#### Scope & coverage

| Field | What it does |
|---|---|
| `maxItems` | Hard cap on rows returned **and charged**. 0 = as far as the crawl plan reaches. |
| `maxPagesPerQuery` | Pages of 25 per search. **Hard-capped at 4** — see The 100-row wall. |
| `fullCoverageMode` | Automatically slices an oversized search using the site's own facet counts and unions the results. |
| `includeRelatedJobs` | Keep the padded `semantic`/`regional` cards. Off by default — see Billing integrity. |

#### Output shaping

| Field | What it does |
|---|---|
| `scrapeJobDetails` | Fetch each job's own page for description, industry, employment type, GPS, expiry, remote flag. |
| `descriptionFormat` | `both` · `text` · `html` |
| `dedupeByEmployer` | One row per hiring company. Measured: 240 jobs collapse to **143 employers** (a 40% collapse). |
| `onlyNewSince` | An ISO date, or `lastRun` for a stateful "only what's new" monitor. |
| `employerNameFilter` / `excludeEmployers` | Case-insensitive company-name include / exclude. |
| `titleMustInclude` / `titleMustExclude` | Case-insensitive job-title include / exclude. |
| `outputFields` | Keep only these columns, in this order — narrow CSVs for a sales team. |
| `flattenOutput` | Flatten nested values for Excel / Google Sheets. |
| `includeRawJson` | Attach the untouched source records under `raw`. |

#### Advanced

`proxyConfiguration` (defaults to Apify **RESIDENTIAL, country IE** — required, see below) · `maxConcurrency` · `maxRequestRetries` · `diagnose`

***

### The 100-row wall, and how this actor gets past it honestly

IrishJobs **hard-resets the connection on `?page=5` and beyond.** This was measured on three different queries, from a home IP and from an Irish residential proxy, over HTTP/1.1 and HTTP/2, as the first request of a fresh process. One search therefore reaches **4 pages = 100 rows**, and this actor clamps there rather than logging errors on every run.

The site's own "next page" link advertises `?of=25`. **That parameter is a decoy.** It returns HTTP 200 with a full page of cards, and `pagination.page` stays 1 — a 20-request contiguous crawl of `of=0…475` returned 500 rows of which only 32 were unique (**93.6% duplicates**). An actor that trusts the site's next-link ships duplicates and bills you for them. This actor verifies every page against `pagination.page` and discards anything the site did not actually paginate.

**`fullCoverageMode`** goes wider the legitimate way. It crawls all four sort windows (measured near-disjoint: sort=2 overlapped relevance page 1 by 1/25, sort=3 by 1/25, sort=4 by 0/25), then reads each facet's **live count** from the site's own filter contract and splits the query into slices small enough to fit the window — location, then recency, then job type, then salary band.

**Measured on `/jobs/accountant`, a query the site reports as 442 results (423 of them `main`):**

| Mode | Rows returned | Requests | Wall time |
|---|---|---|---|
| Default | 92 | 4 | 9s |
| `fullCoverageMode: true` | **419 unique** (99.1% of the 423 real results) | 360 | 393s |

***

### Billing integrity — what this actor refuses to charge you for

1. **Padded rows.** IrishJobs injects `semantic` and `regional` cards into narrow searches. `/jobs/chef/in-galway` reports 20 results and renders 12 real + **8 padded**. Those 8 are dropped and never billed unless you ask for them with `includeRelatedJobs`.
2. **Duplicates.** Sort-window coverage deliberately re-fetches the same jobs. Measured: 100 raw cards collapsed to 50 unique rows in a duplicate-input test, and 650 raw rows to 419 unique in the coverage run. Deduplication by `job_id` happens **before** the charge, not after.
3. **Over-cap rows.** Rows are delivered and billed atomically, so hitting your `maxTotalChargeUsd` cap can never leave you holding rows you were not charged for, or charged for rows you did not receive.

***

### Pricing

| Event | Price | When it fires |
|---|---|---|
| Per job returned | **$0.0006** | Once per deduplicated job saved to your dataset |
| Per job detail fetched | **$0.0006** | Only when "Fetch full job details" is on |

A full-detail row costs **$0.0012** — cheaper than every IrishJobs actor on the store today, and there is no per-run start charge. 1,000 fully-enriched postings = **$1.20**.

***

### Honest limits

- **Salary is mostly not disclosed.** `salary_raw` is present on 100% of rows, but only **35%** (83/240 measured) contain an actual number — the rest read "€ Not Disclosed". There is **no structured salary anywhere on the wire**: the JobPosting JSON-LD carries no `baseSalary` even on postings that display a full €95,000–€105,000 range, so `salary_min`/`salary_max` are parsed from the displayed string. `salary_is_disclosed` tells you which rows are real.
- **`post_code` and `address_postal_code` are ~12% filled**, and `street_address` is empty on 100% of the sample. Use `latitude`/`longitude` (100%) for geography.
- **Fields we deliberately do NOT advertise.** `isSponsored`, `isHighlighted`, `isTopJob`, `isAnonymous`, `workFromHome`, `partnership.isBackfilled`, `isCrossPosted`, `skills[]` and `unifiedSalary` all exist in the source schema and were **0% populated** across 240 rows. They are passed through as-is rather than dressed up as features. The real remote signal is the detail page's `jobLocationType: TELECOMMUTE` (9.6% of the sample), surfaced as `is_remote`.
- **A residential Irish IP is required.** Measured: Apify's datacenter pool and shared `auto` pool both receive a 389-byte Akamai 403; Irish residential returns real data. The default `proxyConfiguration` handles this — if you override it, keep RESIDENTIAL.
- **Reliability.** Across the sustained validation runs: 359/360 SERP requests usable in the coverage run and 250/250 in the field-fill run. Transient `NGHTTP2_INTERNAL_ERROR` and proxy 5xx errors occur at roughly 5% and are cured by the built-in fresh-session retry; none reached the output.
- **This is live-listing data.** Postings expire — `publish_to_date` and `valid_through` tell you when. A run is a snapshot, not an archive.

***

### Legal & fair use

This actor reads only **public, unauthenticated** IrishJobs.ie pages — the same pages any visitor sees. No login, no account, no paywall, no anti-abuse control is touched.

`irishjobs.ie/robots.txt` has **no blanket `Disallow: /`** in its `User-agent: *` group (the blanket disallows sit in the named-agent groups for adidxbot/Twitterbot and Applebot/Bing/Slurp). Quoted verbatim, the wildcard-group directives that touch the paths this actor uses are:

```
User-agent: *

Allow: /jobs/work-from-home
Allow: /jobs/temporary
Disallow: /jobs/permanent
Allow: /jobs/contract
Allow: /jobs/part-time

Disallow: /jobs/work-from-home/*/in-*
Disallow: /jobs/temporary/*/in-*
Disallow: /jobs/contract/*/in-*
Disallow: /jobs/part-time/*/in-*

Disallow: /*&page=  # this is where there is a page parameter on a facited link - its a catch all
Disallow: /*?action=
Disallow: /*&action=
Disallow: /*salary=
Disallow: /*jobtype=
Disallow: /*postedwithin=
Disallow: /*/apply?
Disallow: /*/apply$
```

Note that `Disallow: /*&page=` covers a paged URL that also carries a sort or facet parameter (e.g. `?sort=2&page=3`), which this actor uses; `/jobs/permanent` and the `/jobs/<type>/*/in-*` combinations are likewise disallowed for the wildcard group. **Deciding whether to run this actor is your call, and complying with irishjobs.ie's Terms of Service is your responsibility.** The actor never touches `/apply` and strips the site's `action=` tracking parameter from every request it makes.

Job postings can contain personal data (named recruiters, contact details inside descriptions). Handling that data lawfully — GDPR included, since this is Irish and EU data — is the operator's responsibility.

***

### FAQ

**Do I need an IrishJobs account or login?**
No. Everything comes from public pages.

**Why is it capped at 4 pages per search?**
Because the site resets the connection at page 5 — reproduced from three networks and both HTTP versions. Turn on `fullCoverageMode` to reach the rest of a large result set through facet slicing instead.

**How do I get every job on the board?**
Leave `searchTerms` empty, set `maxItems: 0` and `fullCoverageMode: true`. Expect a long run and raise the run timeout accordingly.

**How do I get only new jobs each day?**
Set `onlyNewSince: "lastRun"` and add a daily schedule. The actor stores a per-search watermark in a named key-value store, so a second run minutes later returns 0 rows (verified).

**Can I get one row per company instead of per job?**
Yes — `dedupeByEmployer: true`. Measured: 240 jobs → 143 employers.

**Why do I sometimes get fewer rows than the site's result count?**
Because the site's count includes `semantic`/`regional` padding you did not search for. Those rows are dropped and not charged. Set `includeRelatedJobs: true` to keep them, tagged with their `section`.

**Is the salary reliable?**
Only ~35% of postings state one. Filter on `salary_is_disclosed` rather than assuming a number exists.

**Can I export to CSV / Google Sheets?**
Yes — the Dataset tab exports CSV, JSON, Excel and more. Use `outputFields` and `flattenOutput` for a narrow, spreadsheet-friendly file.

**Does it work for Northern Ireland?**
Yes — `locations: ["northern-ireland"]` is a valid facet on the site.

***

### Related actors

Same parser family, different national board: **Reed.co.uk Jobs Scraper** (UK), **Totaljobs Scraper** (UK), **Jora Jobs Scraper** (AU), **JobStreet Jobs Scraper** (SE Asia).

# Actor input Schema

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

Keywords to search, one per line (e.g. "accountant", "software engineer"). Each term becomes /jobs/<term>. Leave empty to sweep the WHOLE live board via /jobs/all (9,869 live postings measured 2026-09-04).

## `locations` (type: `array`):

Irish locations, one per line — city, county or province (e.g. "dublin", "county-cork", "munster", "northern-ireland"). Combined with every search term as /jobs/<term>/in-<location>. Leave empty for the whole country.

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

Paste any irishjobs.ie search URL straight from your browser — facets and filters already applied are preserved. A /job/... detail URL is also accepted and scraped as a single posting.

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

Contract type, applied as a path segment (the site's own facet).

## `postedWithin` (type: `string`):

Only postings published in the last N days. This is the highest-value filter for a recruitment or staffing buyer — the weekly "who just started hiring" delta. Measured board-wide 2026-09-04: 2,809 new in 24h, 6,087 in 3 days, 8,200 in 7 days, 9,620 in 14 days.

## `companyTypes` (type: `string`):

Direct employers only is the highest-value slice for an agency BD team; agencies only is the competitor-monitoring slice. Measured board-wide: 6,308 direct employer vs 3,561 agency postings.

## `excludeAgencies` (type: `boolean`):

Shorthand for Advertiser type = Direct employers only.

## `minSalary` (type: `integer`):

Only postings advertising at least this much (0 = no filter). Note that only ~29% of IrishJobs postings state a number at all — this filter drops the "Not Disclosed" majority.

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

Which salary scale the minimum applies to.

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

The site's own sort. In Full coverage mode all four sorts are crawled and unioned regardless of this setting.

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

Hard cap on the number of jobs returned AND charged. 0 = as many as the crawl plan can reach.

## `maxPagesPerQuery` (type: `integer`):

Pages of 25 to walk per search. HARD-CAPPED AT 4: irishjobs.ie resets the connection on ?page=5 and beyond, so one search reaches 100 rows. Use Full coverage mode to go past that.

## `fullCoverageMode` (type: `boolean`):

When a search has more results than the 100-row window can reach, automatically split it using the site's OWN facet counts (location, then recency, then job type, then salary band) and union the slices. This is the difference between "the first 100" and "the whole board". Costs more requests.

## `includeRelatedJobs` (type: `boolean`):

IrishJobs pads narrow searches with 'semantic' and 'regional' cards you did not ask for (measured: /jobs/sales-manager/in-galway reports 12 results and renders 3 real + 9 padded). They are dropped and NOT charged by default. Turn on to keep them — every row is tagged with its `section`.

## `scrapeJobDetails` (type: `boolean`):

Fetch each posting's own page for the full description, employment type, industry, expiry date, GPS coordinates, structured address, apply type and the remote-work flag. One extra request per job — billed as a separate event.

## `descriptionFormat` (type: `string`):

The source description is HTML. Choose plain text, HTML, or both.

## `dedupeByEmployer` (type: `boolean`):

Collapse to a single row per hiring company (measured: 130 employers behind 226 unique jobs — a ~43% collapse). Use this when you want the employer list, not the job list.

## `onlyNewSince` (type: `string`):

An ISO date (2026-09-01) or the word lastRun. With lastRun the actor remembers the newest posting date per search scope in a named key-value store, so a scheduled run returns only what is genuinely new. Posted dates are exact ISO timestamps from the source, so this is reliable.

## `employerNameFilter` (type: `array`):

Case-insensitive substring match on the company name. One per line.

## `excludeEmployers` (type: `array`):

Case-insensitive substring match on the company name. One per line.

## `titleMustInclude` (type: `array`):

Keep a row only if its title contains one of these (case-insensitive). One per line.

## `titleMustExclude` (type: `array`):

Drop a row if its title contains any of these (case-insensitive). One per line.

## `outputFields` (type: `array`):

Keep only these columns, in this order (e.g. title, company, location, job\_url). Leave empty for the full row. CSV width matters when you hand this to a sales team.

## `flattenOutput` (type: `boolean`):

Flatten nested objects and join arrays into single cells — friendlier for CSV, Excel and Google Sheets exports.

## `includeRawJson` (type: `boolean`):

Attach the untouched listing record and JobPosting JSON-LD under `raw`. Useful for debugging or for fields we do not surface.

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

MEASURED AS REQUIRED: irishjobs.ie serves a 389-byte Akamai 403 to Apify's datacenter and shared pools. An Irish residential exit returns real data. Change the country only if you know what you are doing — an IE exit is what makes the results locale-correct.

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

Parallel requests. Keep it low — the site is Akamai-fronted and punishes bursts.

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

Retries per request with a fresh proxy session. NGHTTP2\_INTERNAL\_ERROR is transient on this host and clears on one retry.

## `diagnose` (type: `boolean`):

Fetch one search page and one job page, dump both to the key-value store, log the parsed shape and exit without charging.

## Actor input object example

```json
{
  "searchTerms": [
    "accountant"
  ],
  "locations": [],
  "startUrls": [],
  "jobType": "any",
  "postedWithin": "any",
  "companyTypes": "any",
  "excludeAgencies": false,
  "minSalary": 0,
  "salaryPeriod": "annual",
  "sortBy": "date",
  "maxItems": 25,
  "maxPagesPerQuery": 4,
  "fullCoverageMode": false,
  "includeRelatedJobs": false,
  "scrapeJobDetails": true,
  "descriptionFormat": "both",
  "dedupeByEmployer": false,
  "onlyNewSince": "",
  "employerNameFilter": [],
  "excludeEmployers": [],
  "titleMustInclude": [],
  "titleMustExclude": [],
  "outputFields": [],
  "flattenOutput": false,
  "includeRawJson": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IE"
  },
  "maxConcurrency": 4,
  "maxRequestRetries": 3,
  "diagnose": false
}
```

# Actor output Schema

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

Title, company, company id, location, salary (raw + parsed), exact posted/expiry dates, employment type, industry, GPS coordinates, structured address, remote flag and the full job 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": [
        "accountant"
    ],
    "locations": [],
    "jobType": "any",
    "postedWithin": "any",
    "companyTypes": "any",
    "sortBy": "date",
    "maxItems": 25,
    "scrapeJobDetails": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapersdelight/irishjobs-ie-jobs-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": ["accountant"],
    "locations": [],
    "jobType": "any",
    "postedWithin": "any",
    "companyTypes": "any",
    "sortBy": "date",
    "maxItems": 25,
    "scrapeJobDetails": True,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapersdelight/irishjobs-ie-jobs-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": [
    "accountant"
  ],
  "locations": [],
  "jobType": "any",
  "postedWithin": "any",
  "companyTypes": "any",
  "sortBy": "date",
  "maxItems": 25,
  "scrapeJobDetails": true
}' |
apify call scrapersdelight/irishjobs-ie-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapersdelight/irishjobs-ie-jobs-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/J9Qi4xR5lsiXKQapn/builds/Sz6K7bs5Z1NpISxVs/openapi.json
