freehire Jobs Scraper avatar

freehire Jobs Scraper

Pricing

Pay per usage

Go to Apify Store
freehire Jobs Scraper

freehire Jobs Scraper

Pull IT job postings from the freehire catalogue by country, skill, seniority and more.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Ilya Strelov

Ilya Strelov

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

2 months ago

Last modified

Categories

Share

Pull IT job postings from the freehire catalogue — ~4.4M normalised, deduplicated and AI-enriched vacancies gathered from Greenhouse, Ashby, Workable, Lever, Recruitee, Workday and hundreds of company boards — filtered by country, skill, seniority, category, work mode, recency and salary.

Every row comes back with structured fields: canonical skill tags, ISO country codes, cities, seniority, category, salary when stated, and a link both to the original posting and to freehire.

What you get

One dataset item per job, in freehire's own field names:

fielddescription
titleJob title
companyCompany name
company_slugStable company identifier
urlThe original posting on the company's board
freehire_urlThe posting on freehire (tagged utm_source=apify)
countriesISO 3166-1 alpha-2 codes, lowercase
citiesRecognised cities
regionsRegion tags, including remote variants
skillsCanonical skill tags (go, kubernetes, react)
sourceWhich board it came from
posted_atWhen the posting appeared
is_techWhether the role is a technical one
enrichmentSeniority, category, employment type, salary, language and more
collectionsCurated groupings the job belongs to

Input examples

Go backends in Germany, freshest first

{
"countries": ["de"],
"skills": ["go"],
"maxItems": 200
}

Remote senior roles posted this week

{
"workMode": ["remote"],
"seniority": ["senior", "lead"],
"postedWithinDays": 7
}

Text search with a salary floor

{
"query": "machine learning engineer",
"salaryMin": 120000,
"countries": ["us", "gb"]
}

All fields are optional. With no input at all, you get the freshest postings across the whole catalogue.

Limits

This actor returns at most 1000 jobs per run. That is deliberate: freehire is a free, independent project, and a shared catalogue stays fast only if nobody drains it.

Need more? The same data is available through the free freehire API with no such ceiling — this actor is a convenience wrapper around its public search endpoint, not a privileged path to it.

Input reference

fieldtypenotes
querystringFree-text search. Omit it to browse freshest-first.
countriesstring[]Lowercase ISO codes: de, pl, us.
skillsstring[]Canonical tags: go, kubernetes, react.
senioritystring[]junior, middle, senior, lead, principal.
categorystring[]backend, frontend, devops, data, mobile, qa, …
workModestring[]remote, hybrid, onsite.
postedWithinDaysintegerOnly jobs posted in the last N days.
salaryMinintegerAnnual salary floor; only jobs with a stated salary qualify.
maxItemsintegerUp to 1000. Defaults to 1000.

Unknown fields fail the run immediately, before any request is made. This is on purpose: the upstream API ignores parameters it does not recognise, so a typo like seniorty would otherwise return a page of unfiltered catalogue that looks like a successful, filtered run.

A single string is accepted wherever a list is expected — "countries": "de" works.

Development

pnpm install
pnpm test # unit tests
pnpm build # typecheck + compile

Run it locally against production with a small ceiling:

mkdir -p storage/key_value_stores/default
echo '{ "countries": ["de"], "skills": ["go"], "maxItems": 20 }' \
> storage/key_value_stores/default/INPUT.json
node dist/main.js

About freehire

freehire.me is an open-source IT job aggregator: many source parsers feed one pipeline that normalises postings into a single schema, deduplicates reposts, and enriches them with structured facets. Search, filters and the API are free.