HiJobs.net Scraper at a glance
HiJobs.net Scraper is a ready-to-run Apify actor from abotapi for collecting jobs data. Its documented output includes job id, change type (incremental mode), title, company and location, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.00 per 1,000 results on the Apify Free plan and from $1.20 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Jobs, Automation, Developer Tools
- Pricing
- $2.00 per 1,000 results (Free plan), from $1.20 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 24 options
Scrape hijobs.net job listings via the official mobile API: title, employer, salary range, location, hours, sector, contract, closing date, apply email and full description, plus employer record, industries and geo. Search by keywords, location and filters, or paste hijobs.net URLs. Includes.
What HiJobs.net Scraper can do
- Richer output than the rendered site. Every listing carries a real structured salary range, structured hours, sector and specialism, and the closing date. Detail lookup adds the full description, apply contact and the employer's profile and website.
- Superset of competitor fields. Every field the market leader exposes, plus the nested employer record, industries, specialisms and geo coordinates from the detail source.
- Search and URL modes. Build a search from keywords, location, employer type, hours, contract type, sort order and salary range, or paste any hijobs.net search, location facet or single job link and walk it forward.
- Incremental change monitoring. Run the same search on a schedule and get NEW and UPDATED jobs on later runs. Turn on Emit expired to also see EXPIRED jobs once a run has confirmed, with a full scan, that a tracked job is gone; a job that comes back after that is marked REAPPEARED.
- Resume support. Continue a large interrupted pull from a pasted run or dataset ID without returning or charging for jobs already collected.
- A refused connection never masquerades as an empty search. A search that genuinely has no jobs finishes successfully with zero rows. A run that could not load a single page (every connection was refused or failed) ends as failed with a clear status message instead of reporting a successful empty run.
Choose what to collect
These inputs let you configure HiJobs.net Scraper - Jobs, Salaries, Employers & Locations. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | search = build a search from keywords, location and filters. url = paste one or more hijobs.net search or job URLs and walk them forward. |
keywordsstring | Free-text keyword search across job title, skills and employer. Example: support worker, chef, nurse. Blank returns all jobs. |
wherestring | Town, region or area to search within. Examples: Inverness, Scotland, Oban, Skye. Blank returns all locations. |
employerTypestring | Filter by who is hiring. |
hoursstring | Full-time or part-time. |
contractTypestring | Contract / employment type. |
sortstring | How to order results. 'Newest first' is best for daily monitoring and pairs with the recency filter. |
Show 17 more inputs
| Input | What it controls |
|---|---|
salaryFrominteger | Only return jobs advertised at or above this annual/hourly figure. Leave blank for any. |
salaryTointeger | Only return jobs advertised at or below this annual/hourly figure. Leave blank for any. |
featuredOnlyboolean | Only return jobs the employer has promoted as featured on the board. Default off. |
postedWithinHoursinteger | Only return jobs posted in the last N hours (24 = last day, 72 = last 3 days). Empty or 0 = all. Because results are sorted newest-first this also early-stops pagination once it passes the cutoff, ideal (and cheap) for daily monitoring runs that only want fresh postings. |
urlsarray | Paste any hijobs.net URL. Supported shapes: https://hijobs.net/jobs (newest listing; add ?pg=2 to start at a later page of 100 jobs), https://hijobs.net/jobs/ (e.g. /jobs/oban), https://hijobs.net/search/results?Keywords=chef (keyword search), https://hijobs.net/search/results?employers=charity-cic&where=Scotland&sort=relevance (filtered search, every chip honoured), and https://hijobs.net/job// (single job). Employer pages are not supported. If none of the links can be scraped, the run ends FAILED. Left untouched, the list scrapes one example of each shape. Multi-URL supported. Keywords/filter fields are ignored in this mode. Pagination starts at the page in the URL and walks forward. |
fetchDetailsboolean | Open each job's detail endpoint to add the full description, apply contact (name + email), external application URL, employer record, industries, specialisms and geo coordinates. Adds one request per job (billed as a detail-enrichment surcharge). Turn off for a lighter, faster run using only the listing fields. |
maxItemsinteger | The sole soft cap on the run: stop after this many jobs across all searches/URLs. Defaults to 20 so a run stays small unless you raise it. 0 = the hard cap of 100000 jobs per run, which is also the highest accepted value. |
maxPagesinteger | How many result pages to walk per search (the listing API returns up to ~100 jobs per page). 0 (default) means no page cap of your own: the walk stops naturally once a page comes back empty, the source reports no further pages, or three pages in a row return no job this run had not already collected, or sooner once Max jobs is reached. A hard cap of 1000 pages per search always applies. Set a number only for a lower page cap. |
resumeFromRunIdstring | Paste a previous run ID or dataset ID to continue a large crawl of job listings without returning or charging for jobs already collected there. Use this after an interrupted run, or when continuing a catalogue pull in another run. For recurring daily monitoring of the same search, use Incremental mode below instead. |
incrementalModeboolean | Turn this on for daily or recurring monitoring. The first run returns all matching jobs as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED jobs. Turn on "Emit unchanged" or "Emit expired" only when you also want those jobs returned (and billed). State is kept separately for each search/URL and detail-mode setup; use State key when you want to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above. |
stateKeystring | Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the search/URL and detail settings, so different searches never mix state with each other. |
emitUnchangedboolean | Off by default. Turn on to also return jobs that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you specifically want the full snapshot every run. |
emitExpiredboolean | Off by default. Turn on to also return jobs that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search, not when Max jobs capped it, when Resume was used, or when a link started at a later page (?pg=). This returns, and bills, extra synthetic rows, so leave it off unless you need expiry tracking. |
ignoreFieldsForChangesarray | Field names that must NOT count as a change in Incremental mode, e.g. salaryRaw or companyLogo. They stay in the output but never make a job UPDATED or appear in changedFields. Names match at any depth. Always ignored (see the README section Changes that do not count): the relative-time texts postedFriendly and postedRelative, the bump and popularity values lastBumpedAt, numberBumps and isOnFire, and inside rawDetail last_bump, number_bumps, weighting_date, IsOnFire, the neighbouring-job pointers and isInShortlist / isHidden. Everything else, including rawDetail.questions, counts. Changing this list does not re-emit jobs you already have. |
mcpConnectorsarray | Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON. The complete record always stays in the dataset. Leave empty to skip. Supported: Notion, Linear, Airtable, Apify. |
notionParentPageUrlstring | URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on items written to each connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
jobIdJob ID (text)changeTypeChange type (incremental mode) (text)titleTitle (text)companyNameCompany (text)locationLocation (text)salarySalary (text)hoursHours (text)contractTypeContract type (text)employmentTypesEmployment types (array)sectorSector (text)specialismSpecialism (text)postedDatePosted (date)Show 21 more fields
closingDateClosing (date)remoteRemote (text)applyTypeApply type (text)applyUrlApply URL (link)externalApplyUrlExternal apply URL (link)contactNameContact name (text)applyEmailApply email (text)recruiterTypeRecruiter type (text)companyWebsiteCompany website (link)descriptionTextDescription (text)descriptionTeaserTeaser (text)referenceReference (text)requiresCvRequires CV (text)numberVacanciesVacancies (number)changedFieldsChanged fields (incremental mode) (array)firstSeenAtFirst seen (incremental mode) (date)lastSeenAtLast seen (incremental mode) (date)descriptionDescription (HTML) (text)companyDomainCompany domain (text)employerEmployer record (object)jobUrlJob URL (text)Example output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"type": "job",
"source": "hijobs.net",
"sourceProvider": "hijobs",
"jobId": "702451",
"slug": "seasonal-visitor-centre-assistant",
"jobUrl": "https://hijobs.net/job/702451/seasonal-visitor-centre-assistant",
"scrapedAt": "2026-02-15T09:00:00.000Z",
"title": "Seasonal Visitor Centre Assistant",
"description": "<p>Full description of the role appears here.</p>",
"descriptionText": "Full description of the role appears here.",
"descriptionTeaser": "A short teaser of the role.",
"postedDate": "2026-02-01T08:30:00",
"postedFriendly": "15 February 2026",
"postedRelative": "2 weeks ago",
"closingDate": "2026-03-15T23:59:00",
"companyName": "Glensparrow Community Projects",
"recruiterType": "charity-cic",
"recruiterSlug": "glensparrow-community-projects",
"companyWebsite": "https://www.glensparrowprojects.example",
"contactName": "Recruitment Team",
"employer": {
"client_name": "Glensparrow Community Projects",
"web_url": "https://www.glensparrowprojects.example"
},
"location": "Fort William",
"city": "Fort William",
"country": "Scotland",
"remote": false,
"latitude": 56.8198,
"longitude": -5.1052,
"salary": {
"currency": "GBP",
"min": 22000,
"max": 27500,
"unit": "year",
"raw": "£22,000 to £27,500 per annum"
},
"salaryMin": 22000,
"salaryMax": 27500,
"categories": [
"Charity & Voluntary",
"Community Outreach"
],
"sector": "Charity & Voluntary",
"specialism": "Community Outreach",
"contractType": "Temporary",
"hours": "35 per week",
"hoursValue": 35,
"applyType": "email",
"applyEmail": "recruitment@glensparrowprojects.example",
"externalApplyUrl": null,
"flags": [
"Promoted"
],
"keywordsList": [
"visitor",
"centre",
"seasonal"
],
"reference": "Job Number: 7042",
"requiresCv": true,
"numberVacancies": 2,
"prerequisites": "Full UK driving licence preferred.",
"industries": [
{
"industry_id": 12,
"industry_name": "Charity & Voluntary"
}
],
"specialisms": [
{
"specialism_id": 34,
"specialism_name": "Community Outreach"
}
],
"rawDetail": {}
}Ways to use this data
- Recruiters and staffing agencies: monitor new postings and pay bands across the Highlands and Islands to benchmark against other agencies.
- Relocation and regional job boards: aggregate current openings for people considering a move to the Highlands, Islands or Argyll.
- Rural labour market research: track sector mix, contract types and salary bands over time in a remote UK jobs market.
- Charity and public sector recruiters: compare pay and hours for similar roles advertised by other local employers.
- Career sites and aggregators: keep a feed of Highlands and Islands vacancies current with scheduled Incremental mode runs.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does HiJobs.net Scraper return?
The documented output for HiJobs.net Scraper includes job id, change type (incremental mode), title, company, location, salary, hours and contract type. Availability of each field depends on the source page and the selected mode.
How much does HiJobs.net Scraper cost?
It costs $2.00 per 1,000 results on the Apify Free plan and from $1.20 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
Can I get only new or changed jobs on a schedule?
Yes. Schedule the actor and turn on Incremental mode. Later runs return NEW and UPDATED jobs by default; unchanged ones are not billed unless Emit unchanged is on. EXPIRED jobs, and the REAPPEARED jobs that can follow them, only start appearing once a run has Emit expired on and completes a full, uncapped scan of the tracked search.
Does the recency filter stop the run early?
postedWithinHours currently affects how Incremental mode automatically separates state for differently scoped searches; it does not filter which jobs are returned or shorten a run in this build. Use Max jobs and Max result pages to bound a run's size, and Incremental mode to see only what changed since the last run.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
