AI & ML Job Listings Scraper avatar

AI & ML Job Listings Scraper

Pricing

Pay per event

Go to Apify Store
AI & ML Job Listings Scraper

AI & ML Job Listings Scraper

Scrape the latest AI, ML, and data science job listings from foorilla.com/hiring (formerly aijobs.net). Extracts salary range, seniority, years of experience, remote policy, skills, education, tasks and apply URL. Covers the freshest ~105 public postings.

Pricing

Pay per event

Rating

0.0

(0)

Developer

BowTiedRaccoon

BowTiedRaccoon

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

2

Monthly active users

5 hours ago

Last modified

Share

Scrape AI, ML, data science, and related engineering job listings from foorilla.com/hiring — the career platform that now hosts the job board formerly published at aijobs.net. Extracts salary range, seniority, years of experience, remote policy, skills, education requirements, tasks and the apply URL for each posting.

What data does it extract?

Each record includes:

FieldDescription
job_idNumeric job ID
job_slugURL slug for the job
titleJob title
company_nameHiring company, as rendered (the site truncates this in the job view, e.g. G...)
location_rawLocation string as shown; semicolon-separated when a posting lists several
location_cityCity or region (first location when several are listed)
location_countryCountry (first location when several are listed)
is_remoteBoolean — remote-eligible
remote_policyremote / onsite
employment_typefull-time / part-time / contract / internship
seniorityentry / mid / senior / staff / principal
years_experience_rawYears-of-experience hint as shown (e.g. ~10yoe)
salary_minMinimum salary in salary_currency
salary_maxMaximum salary in salary_currency
salary_currencyCurrency code (USD, EUR, GBP, SEK, PLN, CHF, …)
salary_rawRaw salary string from the page
is_salary_estimatedBoolean — true when the site labels the range (estimate) rather than sourcing it from the employer
posted_atExact publication date (ISO YYYY-MM-DD)
role_categoryInferred: ai-engineer, ml-engineer, data-scientist, research, mlops, data-engineer, other
tech_tagsComma-separated skill / tech-stack tags
education_requirementsComma-separated education requirements
job_rolesComma-separated role taxonomy the site assigns
tasksPipe-separated responsibilities
perksPipe-separated perks and benefits
viewsView count the site reports
apply_clicksApply-click count the site reports
savesSave count the site reports
languageLanguage code of the posting
apply_urlDirect apply link
profile_urlCanonical job page URL

How does it work?

The actor pages the public job listing at foorilla.com/hiring/jobs/ to discover postings, then reads each job detail page and returns every field above — salary, seniority, skills, education and tasks — as one flat record per job, ready to load straight into a sheet or a database.

The maxItems input controls how many records to collect.

Coverage

This actor returns the freshest ~105 public postings, not the entire board. foorilla serves anonymous callers listing pages 1 and 2 (roughly 55 + 50 jobs) and answers page 3 onward with "Sign in to view more". There is no unauthenticated surface that reaches deeper — verified 2026-09-05 against paged and filtered listings, the "top" listing (which ignores paging), sitemap.xml, sitemap-jobs.xml, RSS and /api/jobs/, none of which expose the rest of the inventory.

Setting maxItems: 0 collects everything reachable, which is that ~105, not the full board.

Historical note: until 2026-09-03 this actor scraped aijobs.net via a ~48,000-URL sitemap. That domain now redirects to foorilla.com and the sitemap is gone. The much smaller number above reflects what the successor site exposes publicly, not a regression in the actor.

Input

{
"maxItems": 100
}
ParameterTypeDefaultDescription
maxItemsinteger10Maximum number of job records to collect. Set to 0 for everything reachable.

Use cases

  • AI talent market research — track demand across roles (AI engineer, ML engineer, MLOps, research scientist) over time
  • Salary benchmarking — compare compensation by role, seniority, and region, separating employer-published ranges from site estimates via is_salary_estimated
  • RecOps & ATS enrichment — bulk-import active job listings for sourcing workflows
  • Remote work signal monitoring — filter by remote_policy for location-agnostic hiring intelligence
  • Tech stack trend analysis — aggregate tech_tags to identify the fastest-rising skills

Notes

  • Salary values are annualized and reported in the posting's own currency; salary_currency carries the code and salary_raw the original string. Many ranges are the site's own estimates — check is_salary_estimated before treating one as employer-published.
  • posted_at is the exact publication date the site prints, not an estimate derived from a "posted N days ago" label.
  • company_name is truncated by the site in this view. The full name is only on the company index, which the site's robots.txt disallows, so it is emitted as rendered rather than guessed.
  • Because coverage is recency-ordered, repeated runs are the intended way to accumulate history — each run returns the newest postings.