# IrishJobs.ie Scraper (`parsebird/irishjobs-scraper`) Actor

Scrape job listings from IrishJobs.ie by keyword, location, and county. Get titles, employers, salaries, full descriptions, company profiles, and incremental change tracking. Export as JSON, CSV, or Excel.

- **URL**: https://apify.com/parsebird/irishjobs-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.79 / 1,000 jobs

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.ie Scraper

Scrape job listings from **[IrishJobs.ie](https://www.irishjobs.ie)**, one of Ireland's largest job boards, into clean, structured JSON. The IrishJobs.ie Scraper searches by keyword, location, and county, pulls the job title, employer, salary, full description, and a structured company profile, and can track what changed between scheduled runs — without the IrishJobs.ie API.

<table><tr>
<td style="border-left:4px solid #0C7C59;padding:12px 16px;font-weight:600">
Search any keyword across any Irish city or county, apply 20+ filters (contract type, salary, posting date, remote, keyword rules, custom field rules), enrich each job with its full description, company size, industry and address, and turn on monitoring to get only NEW / UPDATED / EXPIRED jobs.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
Actor: parsebird/irishjobs-scraper (Apify). Scrapes job listings from irishjobs.ie (Ireland) by keyword, location and county. Call with ApifyClient.
Input JSON fields: mode: "auto"|"lightweight"|"full" (default auto); query: string or JSON array of strings — job keywords; location: string or JSON array — city/region; county: one of dublin,cork,galway,limerick,... (overrides location); startUrls: string[] — IrishJobs.ie search or job URLs (overrides query/location); sort: "relevance"|"date"|"salary_low"|"salary_high"; age: int days (1|3|7|14); remote: bool; radius: "5".."200" km; minSalary: int EUR/year; contractType: FULL_TIME|PART_TIME|CONTRACT|TEMPORARY|INTERNSHIP|APPRENTICESHIP|FREELANCE|...; workType: FULL_TIME|PART_TIME; experience: no|required|executive; companyId: int; language: e.g. "en"; applicationMethod: INTERNAL|EXTERNAL; excludeSponsored: bool; includeKeywords/excludeKeywords: {"keywords":[...],"matchTitle":true,"matchDescription":true,"matchSkills":true}; fromDate/toDate: YYYY-MM-DD; maxAgeMinutes: int; customFilters: [{"field":"salaryMin","op":"gte","value":50000}]; includeDetails: bool (default true); descriptionFormat: text|html|markdown|all; maxResults: int (default 50, 0=unlimited); maxPages: int (default 5); compact: bool; descriptionMaxLength: int; excludeEmptyFields: bool; outputFields: string[] (dot notation ok); datasetName: string; incrementalMode: bool; stateKey: string; emitUnchanged/emitExpired/skipReposts: bool; dedupStoreName: string; dedupKey: string (default jobId); proxyConfiguration: object (Irish RESIDENTIAL preset).
Output: one item per job — jobId, harmonisedId, legacyJobId, title, company, companyId, companyLogo, companyUrl, companyEmployees, companyIndustries, companyAddress, location, description, descriptionHtml, descriptionMarkdown, descriptionLength, textSections, textSnippet, textSnippetCleaned, salaryText, salaryCurrency, salaryMin, salaryMax, locationDetail{city,region,country,postalCode,lat,lng}, workFromHome, employmentType, contractType, directApply, industry, isSponsored, isTopJob, isPartnershipJob, isAnonymous, isHighlighted, partnership, metaData{positionOnPage,positionAbsolute}, section, skills, applicationMethod, language, datePosted, postedDaysAgo, publishFromDate, publishToDate, validThrough, canonicalUrl, url, portalUrl, sourceUrl, sourceDomain, searchQuery, scrapedAt, detailFetched, contentQuality, contentHash, similarJobCount, isRepost. Incremental mode adds changeType, firstSeenAt, lastSeenAt, repostOfId, repostDetectedAt.
Example: { "query": "software engineer", "location": "Dublin", "maxResults": 50 }
API: https://api.apify.com/v2/acts/parsebird~irishjobs-scraper  ·  Token: https://console.apify.com/account/integrations
```

### What does IrishJobs.ie Scraper do?

[IrishJobs.ie](https://www.irishjobs.ie) runs on The Stepstone Group's platform and lists tens of thousands of live vacancies across Ireland. There is no public IrishJobs.ie search API — this scraper reads the site's own search results and job pages and returns them as structured data. For every keyword, location, and county it extracts:

- 🏷️ **Job identity** — title, employer, location, remote flag, contract type, and a canonical `irishjobs.ie/job/...` link.
- 💰 **Pay** — the salary text as shown, plus a currency and (when the listing gives a range) parsed `salaryMin` / `salaryMax`.
- 📋 **Full description** (optional) — the complete job description as plain text, HTML, and Markdown, plus the structured text sections.
- 🏢 **Company profile** (optional) — company size, industries, head-office address, website, founding year, and the "About us" text.
- 📅 **Dates** — when the job was posted, how many days ago, and when the listing expires.
- 📊 **Placement signals** — sponsored / top-job / highlighted flags and the position the job held on the results page.

Turn on **incremental mode** and each run compares against the last one with the same state key, so you get only the jobs that are `NEW`, `UPDATED`, `REAPPEARED`, or `EXPIRED`.

### What data can you extract from IrishJobs.ie?

| Field | Description |
|-------|-------------|
| `jobId` | Stable content-hash identifier for the listing |
| `legacyJobId` / `harmonisedId` | IrishJobs.ie's own numeric and UUID identifiers |
| `title` | Job title |
| `company` / `companyId` | Employer name and numeric ID |
| `companyEmployees` / `companyIndustries` / `companyAddress` | Company profile (with `includeDetails`) |
| `location` / `locationDetail` | Display location, plus city / region / country / lat / lng |
| `salaryText` / `salaryCurrency` / `salaryMin` / `salaryMax` | Salary as shown and parsed where possible |
| `description` / `descriptionHtml` / `descriptionMarkdown` | Full description in three formats (with `includeDetails`) |
| `employmentType` / `contractType` | `FULL_TIME` / `PART_TIME` and the site's permanence label |
| `workFromHome` / `directApply` / `applicationMethod` | Remote flag and how to apply |
| `skills` | Skills tagged on the listing |
| `datePosted` / `postedDaysAgo` / `validThrough` | Posting and expiry timing |
| `isSponsored` / `isTopJob` / `isHighlighted` / `isPartnershipJob` | Placement and source signals |
| `similarJobCount` | Number of similar jobs IrishJobs.ie shows on the page |
| `url` / `canonicalUrl` / `sourceUrl` | Job link, canonical link, and the search page it came from |
| `changeType` / `firstSeenAt` / `lastSeenAt` | Added in incremental mode |

Not every listing has every field — salary, company profile, and exact skills vary by posting.

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| query | string / array | No\* | — | Job keyword(s). JSON array runs multiple searches. |
| location | string / array | No\* | — | City or region. JSON array for multiple. |
| county | string | No | — | Irish county (overrides `location`). |
| startUrls | array | No\* | — | IrishJobs.ie search or job URLs (overrides query/location). |
| mode | string | No | `auto` | `auto` / `lightweight` / `full` run strategy. |
| sort | string | No | `relevance` | `relevance`, `date`, `salary_low`, `salary_high`. |
| age | integer | No | — | Posted within N days (1/3/7/14). |
| remote | boolean | No | `false` | Remote / work-from-home only. |
| radius | string | No | — | Search radius in km around the location. |
| minSalary | integer | No | 0 | Minimum annual salary (EUR). |
| contractType / workType / experience | string | No | — | Employment-type filters (applied to each job). |
| companyId | integer | No | — | Restrict to one company by numeric ID. |
| language / applicationMethod | string | No | — | Posting language / apply method filters. |
| excludeSponsored | boolean | No | `false` | Drop promoted listings. |
| includeKeywords / excludeKeywords | object | No | — | Keyword rules on title / description / skills. |
| fromDate / toDate / maxAgeMinutes | string / integer | No | — | Date-window filters. |
| customFilters | array | No | — | Field-level rules (`gte`, `includes`, …). |
| includeDetails | boolean | No | `true` | Fetch each job's detail page. |
| descriptionFormat | string | No | `all` | `text` / `html` / `markdown` / `all`. |
| maxResults | integer | No | 50 | Max jobs to return (billed rows). 0 = unlimited. |
| maxPages | integer | No | 5 | Max result pages per search (25 jobs/page). |
| compact / descriptionMaxLength / excludeEmptyFields / outputFields | — | No | — | Output-shaping options. |
| datasetName | string | No | — | Push to a custom named dataset (`{DATE}` / `{TIME}` masks). |
| incrementalMode / stateKey / emitUnchanged / emitExpired / skipReposts | — | No | — | Change tracking across runs. |
| dedupStoreName / dedupKey | string | No | — | Cross-run deduplication. |
| proxyConfiguration | object | No | Irish RESIDENTIAL | Apify Proxy settings. |

\* Provide at least one of `query`, `location`, `county`, or `startUrls`.

### Example input

```json
{
  "mode": "auto",
  "query": "software engineer",
  "location": "Dublin",
  "contractType": "FULL_TIME",
  "minSalary": 60000,
  "maxResults": 100
}
```

Incremental tracking:

```json
{
  "query": "software engineer",
  "maxResults": 200,
  "incrementalMode": true,
  "stateKey": "software-engineer-tracker"
}
```

### Output example

```json
{
  "jobId": "c6ce4c03782bf50e39db918529ad1adcf0f0f52f68a99bd3e749748216584895",
  "harmonisedId": "709e9a8b-cd2c-480c-be9c-285f6fdf9122",
  "legacyJobId": 107179562,
  "title": "ServiceNow Developer",
  "company": "Conscia Ireland",
  "companyId": 1342289,
  "companyEmployees": "0 - 49",
  "companyIndustries": ["Technology"],
  "companyAddress": "3200 Lake Drive, Citywest Business Campus, Dublin, D24 YD63",
  "location": "Dublin, County Dublin",
  "description": "Job Description Who are we? Conscia is a leading provider of cybersecurity, networking, hybrid cloud...",
  "descriptionMarkdown": "**Job Description**\n\n**Who are we?**\nConscia is a leading provider of cybersecurity...",
  "descriptionLength": 3323,
  "salaryText": "€ Not Disclosed",
  "salaryCurrency": "EUR",
  "locationDetail": { "city": "Dublin, County Dublin", "country": "IE", "lat": 53.33306, "lng": -6.24889 },
  "workFromHome": false,
  "employmentType": "FULL_TIME",
  "contractType": "Permanent",
  "directApply": true,
  "industry": "IT, IT-Software Development",
  "isSponsored": false,
  "skills": [],
  "datePosted": "2026-04-24T09:26:51.327Z",
  "postedDaysAgo": 5,
  "validThrough": "2026-05-24T23:00:00Z",
  "canonicalUrl": "https://www.irishjobs.ie/job/servicenow-developer/conscia-ireland-job107179562",
  "sourceUrl": "https://www.irishjobs.ie/jobs/developer/in-Dublin",
  "sourceDomain": "irishjobs.ie",
  "searchQuery": "developer",
  "scrapedAt": "2026-05-16T20:01:12.955Z",
  "detailFetched": true,
  "contentQuality": "full",
  "similarJobCount": 10,
  "isRepost": false
}
```

Download the dataset as JSON, CSV, Excel, XML, or HTML from the **Storage** tab or the [Apify API](https://docs.apify.com/api/v2).

### How to scrape IrishJobs.ie

1. Open the **Input** tab of the IrishJobs.ie Scraper.
2. Enter a **search term** — a job title or skill such as `software engineer` or `accountant`.
3. Optionally set a **location** or **county**, a **contract type**, a **minimum salary**, and a **"posted within"** window.
4. Set **Max results** — start with 25–50 to keep the first run fast and cheap.
5. Click **Start**. Results stream into the dataset as they are scraped.
6. Export from the **Storage** tab, pull the data via API, or connect an [integration](https://docs.apify.com/platform/integrations) (Google Sheets, Slack, Zapier, Make, webhooks).

To scrape IrishJobs.ie on a schedule, use Apify [Schedules](https://docs.apify.com/platform/schedules) and turn on **incremental mode** so each run returns only what changed.

### Filtering and monitoring

- **Server-side filters** (handled by IrishJobs.ie's own search): keyword, location, county, contract prefix, posting date, minimum salary, radius.
- **Client-side filters** (applied to each parsed job): work type, experience, company ID, language, application method, sponsored, include/exclude keywords, date window, max age, and free-form `customFilters` on any output field.
- **Incremental mode**: set `incrementalMode: true` and a `stateKey`. The first run records a baseline; later runs emit only `NEW` / `UPDATED` / `REAPPEARED` jobs (add `emitUnchanged` / `emitExpired` for the rest). Reposts of expired jobs are detected and tagged.
- **Cross-run dedup**: set `dedupStoreName` (without incremental mode) to push only jobs never seen in previous runs with that store.

### How much does it cost to scrape IrishJobs.ie?

This actor uses **pay-per-result** pricing:

| Plan | Price per 1,000 jobs |
|------|----------------------|
| Free | **$0.99** |
| Bronze | $0.89 |
| Silver | $0.89 |
| Gold | $0.79 |

One event is charged per job row pushed to the dataset. Scraping 100 jobs with full details costs about **$0.10** on the Free plan. Apify platform usage (compute + Irish residential proxy) is billed separately per your plan.

### Use cases

- 📈 **Irish job-market research** — track vacancy volume and salaries for a role or sector over time.
- 🧭 **Recruiting and sourcing** — monitor new listings in a county and category every morning.
- 💶 **Salary benchmarking** — aggregate `salaryMin` / `salaryMax` by role, seniority, and location.
- 🔁 **Job-board aggregation** — feed IrishJobs.ie listings into your own product alongside other sources.
- 🔔 **Alerting** — schedule with `incrementalMode` + `maxAgeMinutes: 60` and route new jobs to Slack or a webhook.

### How it works

1. The actor builds an IrishJobs.ie search URL from your keyword, location/county, and the server-side filters, and requests it through Apify's Irish residential proxy.
2. It reads the listing data embedded in each results page and follows pagination up to `maxPages` (25 jobs per page), deduplicating by job ID.
3. With `includeDetails` on (or when a client-side filter needs it), it opens each job page for the full description, company profile, geo-coordinates, and similar-job count.
4. Client-side filters run, incremental diffing or cross-run dedup is applied, output is shaped, and each row is pushed and billed once.

### FAQ

**Do I need an IrishJobs.ie account?**
No. The scraper only reads public search results and job pages.

**Why do some jobs have no salary or company profile?**
Many Irish listings show "€ Not Disclosed", and company profiles exist only for employers with an IrishJobs.ie company page. Every other field is still returned.

**Can I scrape a whole county?**
Yes — set `county` (e.g. `cork`) with or without a keyword. Leave `query` empty to get every current vacancy in that county.

**How do the advanced contract types map?**
IrishJobs.ie's search supports five contract prefixes (permanent, part-time, contract, temporary, work-from-home). Values like `INTERNSHIP` or `FREELANCE` are mapped to the closest prefix and then enforced against each job's parsed type.

**Can I run this on a schedule?**
Yes. Use Apify [Schedules](https://docs.apify.com/platform/schedules) with `incrementalMode` on, and [webhooks](https://docs.apify.com/platform/integrations/webhooks) or [integrations](https://docs.apify.com/platform/integrations) to route new jobs into your tools.

**Something looks wrong or a field is missing.**
Open an issue on the **Issues** tab with your input and the run ID.

### Is it legal to scrape IrishJobs.ie?

Scraping publicly available data is legal in most jurisdictions, and this actor only reads pages any visitor can load without logging in. It does not bypass authentication and does not collect personal data about individuals. You are responsible for how you use the data — review IrishJobs.ie's Terms of Use and Apify's guide on [the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/) before large-scale or commercial use.

### Related actors

- [Jobs.ie Scraper](https://apify.com/parsebird/jobs-ie-scraper) — the other big Irish job board, same structured output
- [Indeed Jobs Scraper](https://apify.com/parsebird/indeed-jobs-scraper) — Indeed listings across 60+ countries
- [NHS UK Jobs Scraper](https://apify.com/parsebird/nhs-uk-jobs-scraper) — UK healthcare jobs
- [Hiring.cafe Scraper](https://apify.com/parsebird/hiring-cafe-scraper) — aggregated job listings with 20+ filters

Browse all [ParseBird actors](https://apify.com/parsebird) for more job boards and data sources.

# Actor input Schema

## `mode` (type: `string`):

Strategy for the run. `auto` picks the best option for the requested size. `lightweight` has lower per-run overhead (best for small runs, under ~20 results). `full` has lower per-result cost (best for 20+ results).

## `query` (type: `string`):

Job search keywords, e.g. `software engineer`. Use a JSON array `["query1", "query2"]` to run multiple searches.

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

City or region, e.g. `Dublin` or `Cork`. Use a JSON array for multiple locations.

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

Direct IrishJobs.ie search URLs (e.g. `https://www.irishjobs.ie/jobs/developer/in-dublin`) or job-detail URLs (`https://www.irishjobs.ie/job/.../...job1234567`). Overrides query/location when provided.

## `county` (type: `string`):

Filter by Irish county. Overrides Location when set.

## `sort` (type: `string`):

Order results are returned in.

## `age` (type: `integer`):

Only show jobs posted within this many days. Supported buckets: 1, 3, 7, 14 (other values snap to the nearest).

## `remote` (type: `boolean`):

Only show remote / work-from-home positions.

## `radius` (type: `string`):

Search radius around the location in km. Requires a location or county.

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

Minimum annual salary filter, in euro.

## `contractType` (type: `string`):

Filter by contract / employment type.

## `experience` (type: `string`):

Filter by experience level (best-effort, applied to the parsed job).

## `workType` (type: `string`):

Filter by work schedule.

## `companyId` (type: `integer`):

Filter to a single company by its numeric IrishJobs.ie company ID (see the `companyId` output field).

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

Filter by job-posting language, e.g. `en` or `de`.

## `applicationMethod` (type: `string`):

Filter by how to apply. `INTERNAL` = apply on IrishJobs.ie, `EXTERNAL` = apply on the employer's site.

## `excludeSponsored` (type: `boolean`):

Skip sponsored / promoted listings (`isSponsored = true`).

## `includeKeywords` (type: `object`):

Require at least one of these keywords in the title / description / skills. Example: {"keywords":\["React","Node.js"],"matchTitle":true,"matchDescription":true,"matchSkills":true}.

## `excludeKeywords` (type: `object`):

Exclude jobs containing any of these keywords. Same config shape as includeKeywords.

## `fromDate` (type: `string`):

Only include jobs posted on or after this date. Accepts `YYYY-MM-DD` or ISO-8601.

## `toDate` (type: `string`):

Only include jobs posted on or before this date.

## `maxAgeMinutes` (type: `integer`):

Only include jobs posted within the last N minutes. 0 = no limit. Pairs well with hourly scheduled runs (e.g. 60).

## `customFilters` (type: `array`):

Rules applied to any output field. Each rule: {"field":"","op":"includes|notIncludes|equals|notEquals|gt|gte|lt|lte","value":...}. Example: \[{"field":"location","op":"includes","value":"Dublin"}, {"field":"salaryMin","op":"gte","value":50000}].

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

Fetch each job's detail page for the full description, structured company profile, employment type, geo-coordinates, and similar-job count. Slower but much richer.

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

Which description formats to include in output.

## `maxResults` (type: `integer`):

Maximum total job listings to return. This is the number of billed rows. 0 = unlimited.

## `maxPages` (type: `integer`):

Maximum search-result pages per search (25 jobs/page). Auto-raised when needed to satisfy Max results.

## `compact` (type: `boolean`):

Return only the essential fields (jobId, title, company, location, salary, skills, url, description) — for AI-agent and MCP workflows where token budget matters.

## `descriptionMaxLength` (type: `integer`):

Truncate the description to this many characters (appends '...'). 0 = no truncation.

## `excludeEmptyFields` (type: `boolean`):

Drop null, empty-string, and empty-array fields from each record. Smaller payloads for AI agents and dashboards.

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

Return only this subset of fields. Supports dot notation, e.g. `locationDetail.city`. Empty = all fields.

## `datasetName` (type: `string`):

Custom named dataset. Supports masks: {DATE} = YYYYMMDD, {TIME} = HHMMSS.

## `incrementalMode` (type: `boolean`):

Track changes between runs with the same state key. Emits NEW / UPDATED / REAPPEARED records; the first run records a baseline.

## `stateKey` (type: `string`):

Stable identifier for the tracked search. Leave empty to auto-derive one from your search inputs.

## `emitUnchanged` (type: `boolean`):

In incremental mode, also emit records that haven't changed since the last run.

## `emitExpired` (type: `boolean`):

In incremental mode, also emit records that are no longer found on the site.

## `skipReposts` (type: `boolean`):

Exclude listings detected as reposts of previously seen jobs.

## `dedupStoreName` (type: `string`):

Named key-value store for cross-run dedup. Same name across runs = only new jobs are pushed.

## `dedupKey` (type: `string`):

Field used as the unique key for dedup.

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

IrishJobs.ie blocks datacenter ranges and throttles by IP, so Irish residential routing is preset. Change it only for an account-specific setup.

## Actor input object example

```json
{
  "mode": "auto",
  "query": "software engineer",
  "startUrls": [],
  "sort": "relevance",
  "remote": false,
  "excludeSponsored": false,
  "maxAgeMinutes": 0,
  "includeDetails": true,
  "descriptionFormat": "all",
  "maxResults": 25,
  "maxPages": 5,
  "compact": false,
  "descriptionMaxLength": 0,
  "excludeEmptyFields": false,
  "outputFields": [],
  "incrementalMode": false,
  "emitUnchanged": false,
  "emitExpired": false,
  "skipReposts": false,
  "dedupKey": "jobId",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IE"
  }
}
```

# Actor output Schema

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

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

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

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "query": "software engineer",
    "location": "",
    "startUrls": [],
    "minSalary": 0,
    "language": "",
    "fromDate": "",
    "toDate": "",
    "maxResults": 25,
    "maxPages": 5,
    "outputFields": [],
    "datasetName": "",
    "stateKey": "",
    "dedupStoreName": "",
    "dedupKey": "jobId",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "IE"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/irishjobs-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 = {
    "query": "software engineer",
    "location": "",
    "startUrls": [],
    "minSalary": 0,
    "language": "",
    "fromDate": "",
    "toDate": "",
    "maxResults": 25,
    "maxPages": 5,
    "outputFields": [],
    "datasetName": "",
    "stateKey": "",
    "dedupStoreName": "",
    "dedupKey": "jobId",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "IE",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/irishjobs-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 '{
  "query": "software engineer",
  "location": "",
  "startUrls": [],
  "minSalary": 0,
  "language": "",
  "fromDate": "",
  "toDate": "",
  "maxResults": 25,
  "maxPages": 5,
  "outputFields": [],
  "datasetName": "",
  "stateKey": "",
  "dedupStoreName": "",
  "dedupKey": "jobId",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IE"
  }
}' |
apify call parsebird/irishjobs-scraper --silent --output-dataset

```

## MCP server setup

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