IrishJobs.ie Scraper — Jobs, Salaries & Employer Leads
Pricing
from $0.60 / 1,000 per job returneds
IrishJobs.ie Scraper — Jobs, Salaries & Employer Leads
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.
Pricing
from $0.60 / 1,000 per job returneds
Rating
0.0
(0)
Developer
Scrapers Delight
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
🇮🇪 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 parsedsalary_min/salary_max/salary_currency/salary_period(35%) and asalary_is_disclosedflag 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—mainvs the site's paddedsemantic/regionalcards (see Billing integrity)
From the job's own page (with "Fetch full job details" on — 240/240 parsed in the measured sample):
- 📝
description_textand/ordescription_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
{"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:
{"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
- Padded rows. IrishJobs injects
semanticandregionalcards into narrow searches./jobs/chef/in-galwayreports 20 results and renders 12 real + 8 padded. Those 8 are dropped and never billed unless you ask for them withincludeRelatedJobs. - 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_idhappens before the charge, not after. - Over-cap rows. Rows are delivered and billed atomically, so hitting your
maxTotalChargeUsdcap 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_rawis 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 nobaseSalaryeven on postings that display a full €95,000–€105,000 range, sosalary_min/salary_maxare parsed from the displayed string.salary_is_disclosedtells you which rows are real. post_codeandaddress_postal_codeare ~12% filled, andstreet_addressis empty on 100% of the sample. Uselatitude/longitude(100%) for geography.- Fields we deliberately do NOT advertise.
isSponsored,isHighlighted,isTopJob,isAnonymous,workFromHome,partnership.isBackfilled,isCrossPosted,skills[]andunifiedSalaryall 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'sjobLocationType: TELECOMMUTE(9.6% of the sample), surfaced asis_remote. - A residential Irish IP is required. Measured: Apify's datacenter pool and shared
autopool both receive a 389-byte Akamai 403; Irish residential returns real data. The defaultproxyConfigurationhandles 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_ERRORand 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_dateandvalid_throughtell 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-homeAllow: /jobs/temporaryDisallow: /jobs/permanentAllow: /jobs/contractAllow: /jobs/part-timeDisallow: /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 allDisallow: /*?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).