InfoJobs Jobs Scraper
Pricing
from $4.00 / 1,000 job scrapeds
InfoJobs Jobs Scraper
Scrape InfoJobs.net (Spain) job listings — title, company, salary range, contract, location, full description. MCP/API-ready.
Pricing
from $4.00 / 1,000 job scrapeds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
20 days ago
Last modified
Categories
Share
What is InfoJobs Jobs Scraper?
InfoJobs Jobs Scraper extracts job listings from InfoJobs.net, Spain's leading job board, and returns one dataset row per job. Each row has the job title, hiring company, company profile and logo, city, remote or hybrid mode, contract type, working hours, a structured salary range with currency and period, publication date and the full job description. Recruiters, salary-benchmarking analysts, HR-tech teams and AI agents use it to track hiring across Spain by keyword, province and category, with exports to JSON, CSV or Excel.
Why recruiters choose this InfoJobs scraper
- Structured salaries.
salaryMin,salaryMax,salaryPeriod,salaryCurrencyandsalaryTypeare separate fields, ready for benchmarking. - Full descriptions in every row.
descriptionholds the complete job text straight from the search results. - Spanish job attributes kept intact.
teleworking,contractTypeandworkdayuse InfoJobs' own labels such as "Híbrido" and "Contrato indefinido". - Fresh-job monitoring.
sortBy: "PUBLICATION_DATE"withpublishedSince: "_24_HOURS"returns only today's postings. - Power mode. Paste any InfoJobs search URL in
searchUrlsto reuse filters you built on the site. - Spanish residential routing by default. The default proxy uses Apify Residential in Spain for steady access.
Best fit for this Actor
- Best fit for Spanish job-market research, salary benchmarking, competitor hiring watch and recruiter sourcing lists.
- Designed for search-driven collection by keyword, province and category, or from InfoJobs search URLs.
- When you want the same roles from Indeed, LinkedIn and Glassdoor too, continue with Jobs Scraper — Indeed, LinkedIn & Glassdoor and merge the datasets on
companyName. - For a deeper LinkedIn view of the companies hiring in Spain, use LinkedIn Jobs Scraper with the same keywords.
Example workflow: from a daily search to a salary benchmark
An HR analyst at a Madrid software firm starts a scheduled search each morning with keyword "desarrollador", province "madrid", sortBy set to PUBLICATION_DATE and publishedSince set to _24_HOURS. The dataset returns each new posting's companyName, contractType, teleworking and salary fields. They export the rows to a spreadsheet, filter to jobs with salaryMin present, and compare the range against their own offers by seniority and remote mode. At the end of the month they feed the accumulated rows into a dashboard that shows which competitors are hiring and at what pay.
Input
{"keyword": "desarrollador","province": "madrid","category": "informatica-telecomunicaciones","sortBy": "PUBLICATION_DATE","publishedSince": "_7_DAYS","maxResults": 100,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "ES"}}
| Field | Type | What it controls |
|---|---|---|
keyword | string | Free-text search in Spanish, for example enfermera or marketing manager. |
province | string | Province slug such as madrid or barcelona. |
category | string | Category slug such as informatica-telecomunicaciones. |
sortBy | string | RELEVANCE (default) or PUBLICATION_DATE. |
publishedSince | string | ANY (default), _24_HOURS, _7_DAYS or _15_DAYS. |
maxResults | integer | Jobs to collect across all searches. Default 100. |
searchUrls | array of strings | Full InfoJobs list.xhtml search URLs for power users. |
proxyConfiguration | object | Defaults to Apify Residential in Spain. |
Output
| Field | What it contains |
|---|---|
url, code | Job-offer URL and InfoJobs offer code |
title | Job title |
companyName, companyUrl, companyLogo | Hiring company, profile link and logo |
city | Job location |
teleworking, contractType, workday | Remote mode, contract and working hours |
salaryMin, salaryMax, salaryPeriod, salaryCurrency, salaryType, salaryText | Structured salary when the employer publishes one |
publishedAt | Publication time |
description | Full job description |
isExecutive | Executive-role flag |
scrapedAt | Collection time |
{"url": "https://www.infojobs.net/madrid/analista-desarrollador-appian-teletrabajo/of-i523269c6884e328cfe72c53966c8ae","code": "523269c6884e328cfe72c53966c8ae","title": "Analista Desarrollador/a Appian (Teletrabajo)","companyName": "Factum IT","companyUrl": "https://www.infojobs.net/factum-it/em-i98565355555555709799111009035642114043","companyLogo": "https://multimedia-logos.infojobs.net/image/upload/0c/0cc264e9-0d27-4bef-a905-a34105e43889","city": "Madrid","teleworking": "Solo teletrabajo","contractType": "Contrato indefinido","workday": "Jornada completa","salaryMin": 54000,"salaryMax": 56000,"salaryPeriod": "YEAR","salaryCurrency": "EUR","salaryType": "GROSS","salaryText": "54.000–56.000 EUR/year","publishedAt": "2026-09-28T09:19:32Z","description": "Sobre nosotros\nEn Factum llevamos más de 15 años prestando servicios tecnológicos, de ciberseguridad, ciberinteligencia y servicios gestionados...","isExecutive": false,"scrapedAt": "2026-10-01T13:10:51.201Z"}
Pricing
This Actor uses Pay per event with Apify platform usage included in the event price. The events are Actor Start (once per run) and Job scraped (one per job row). For example, a search capped at maxResults 1,000 that fills the cap is one start event plus 1,000 job events; a daily _24_HOURS check that finds 40 new postings is one start event plus 40 job events. The live Pricing tab on this page shows the current price of each event.
API example
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~infojobs-jobs-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"keyword": "enfermera", "province": "barcelona", "maxResults": 50}'
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("khadinakbar/infojobs-jobs-scraper").call(run_input={"keyword": "desarrollador","sortBy": "PUBLICATION_DATE","publishedSince": "_24_HOURS","maxResults": 100,})for job in client.dataset(run["defaultDatasetId"]).iterate_items():print(job["title"], job["companyName"], job["salaryText"])
Use with AI agents (MCP)
The Actor is available through Apify MCP for Claude, ChatGPT, Cursor and other MCP clients. Example prompt:
Find developer jobs posted on InfoJobs in Madrid in the last 7 days, then give me the median published salary and the five companies with the most openings.
The agent sends keyword, province and publishedSince, reads rows with get-dataset-items, keeps rows with salaryMin, and groups by companyName. Keep url and publishedAt with each job for provenance. For cost and scope, set maxResults before starting and narrow with category when the keyword is broad.
Best results
| Starting situation | Helpful action | Expected outcome |
|---|---|---|
| Daily new-job monitoring | sortBy: "PUBLICATION_DATE" with publishedSince: "_24_HOURS" on a schedule | Only fresh postings each day |
| Salary research | Filter rows where salaryMin is present | Clean ranges by period and currency |
| A filtered search you built on InfoJobs | Paste the search URL into searchUrls | The exact same result set |
| A quick sample | Lower maxResults | A fast preview before a full export |
| Regional comparison | Repeat the input with different province slugs | Side-by-side regional hiring data |
Works with InfoJobs search results and search URLs, which already carry the full job description. Keep the default Spanish residential proxy for steady access.
Builder's note
I found that InfoJobs search results already contain everything a job row needs, including the full description and the structured salary, so the Actor reads search pages rather than visiting every job page. That design keeps it HTTP-only and quick, and it is why salary arrives as separate numeric fields instead of free text you would have to parse.
FAQ
Does it collect candidate data?
No. It collects public job-listing data only.
Why are some salary fields empty?
Many employers on InfoJobs leave salary unpublished. Rows carry salary fields whenever the posting includes them.
Which locations are covered?
All of Spain. Use province slugs to focus on a region.
Responsible use
This Actor collects publicly available job-listing data. Use it in line with InfoJobs' Terms of Service and applicable law, including the GDPR. InfoJobs is a trademark of its owner; this independent Actor is not affiliated with or endorsed by InfoJobs. For questions or new field requests, open a ticket in the Issues tab.