AI & ML Job Listings Scraper
Pricing
Pay per event
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
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
2
Monthly active users
5 hours ago
Last modified
Categories
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:
| Field | Description |
|---|---|
job_id | Numeric job ID |
job_slug | URL slug for the job |
title | Job title |
company_name | Hiring company, as rendered (the site truncates this in the job view, e.g. G...) |
location_raw | Location string as shown; semicolon-separated when a posting lists several |
location_city | City or region (first location when several are listed) |
location_country | Country (first location when several are listed) |
is_remote | Boolean — remote-eligible |
remote_policy | remote / onsite |
employment_type | full-time / part-time / contract / internship |
seniority | entry / mid / senior / staff / principal |
years_experience_raw | Years-of-experience hint as shown (e.g. ~10yoe) |
salary_min | Minimum salary in salary_currency |
salary_max | Maximum salary in salary_currency |
salary_currency | Currency code (USD, EUR, GBP, SEK, PLN, CHF, …) |
salary_raw | Raw salary string from the page |
is_salary_estimated | Boolean — true when the site labels the range (estimate) rather than sourcing it from the employer |
posted_at | Exact publication date (ISO YYYY-MM-DD) |
role_category | Inferred: ai-engineer, ml-engineer, data-scientist, research, mlops, data-engineer, other |
tech_tags | Comma-separated skill / tech-stack tags |
education_requirements | Comma-separated education requirements |
job_roles | Comma-separated role taxonomy the site assigns |
tasks | Pipe-separated responsibilities |
perks | Pipe-separated perks and benefits |
views | View count the site reports |
apply_clicks | Apply-click count the site reports |
saves | Save count the site reports |
language | Language code of the posting |
apply_url | Direct apply link |
profile_url | Canonical 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}
| Parameter | Type | Default | Description |
|---|---|---|---|
maxItems | integer | 10 | Maximum 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_policyfor location-agnostic hiring intelligence - Tech stack trend analysis — aggregate
tech_tagsto identify the fastest-rising skills
Notes
- Salary values are annualized and reported in the posting's own currency;
salary_currencycarries the code andsalary_rawthe original string. Many ranges are the site's own estimates — checkis_salary_estimatedbefore treating one as employer-published. posted_atis the exact publication date the site prints, not an estimate derived from a "posted N days ago" label.company_nameis 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.