InfoJobs Spain Jobs Scraper
Pricing
from $0.96 / 1,000 item extracteds
InfoJobs Spain Jobs Scraper
Search InfoJobs Spain and export normalized public vacancies with employers, locations, salaries, work modes, requirements, and application URLs.
Pricing
from $0.96 / 1,000 item extracteds
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Search InfoJobs Spain and export normalized public vacancies for recruiting research, hiring-market analysis, and recurring vacancy monitoring. The Actor collects stable offer IDs, titles, employers, locations, salary data, contract and work-mode details, publication dates, descriptions, requirements, skills, and application URLs.
It supports keyword searches, Spanish location filters, InfoJobs category IDs, remote/hybrid/on-site filters, public search URLs, and individual vacancy URLs. Results are ready for JSON, CSV, Excel, API, webhook, and scheduled-run workflows on Apify.
What can you do with this InfoJobs scraper?
- Build a current feed of InfoJobs Spain jobs for selected roles.
- Compare vacancy demand across Spanish cities and provinces.
- Monitor remote, hybrid, or on-site hiring patterns.
- Collect employer, salary, contract, and publication-date signals.
- Enrich search results with full descriptions, requirements, skills, and languages.
- Deduplicate recurring exports with the stable
offerIdfield. - Send normalized vacancy rows to a spreadsheet, database, BI tool, or ATS workflow.
The Actor uses public InfoJobs pages. It does not apply to jobs, access candidate accounts, reveal private recruiter information, or bypass login-only features.
Who is it for?
Recruiters and talent teams can build role-specific prospecting and market maps without copying listings manually.
Labor-market analysts can compare advertised salaries, work modes, contracts, employers, locations, and publication activity.
Job aggregators can ingest normalized public vacancy records with stable IDs and canonical application links.
Data and automation teams can schedule repeat runs, detect additions or changes downstream, and connect datasets to existing pipelines.
Researchers can produce bounded snapshots of public Spanish vacancy demand while retaining source URLs and collection timestamps.
Why use this Actor?
- Search and detail data in one workflow: list pages provide fast discovery; optional detail enrichment adds requirements and skills.
- Normalized fields: work mode, salary boundaries, locations, dates, and URLs use stable keys.
- Useful without enrichment: set
includeDetailstofalsefor faster search-result collection. - Input flexibility: combine keywords with real InfoJobs search or vacancy URLs.
- Safe limits:
maxItemsandmaxResultsPerSearchbound output and cost. - Source traceability: every row contains
sourceUrl,applicationUrl, andscrapedAt. - No proxy setup: the current implementation uses the public server-rendered InfoJobs surface directly.
What InfoJobs job data is extracted?
| Field | Meaning |
|---|---|
offerId | Stable InfoJobs vacancy identifier |
title | Public job title |
employer | Displayed employer name |
employerUrl | Public InfoJobs company profile when available |
employerLogoUrl | Public company logo URL when available |
location, city, province | Displayed and normalized location fields |
workMode | remote, hybrid, on-site, or unspecified |
salary, salaryMin, salaryMax | Displayed and numeric compensation fields |
salaryCurrency, salaryPeriod | Compensation currency and period |
contractType, workday | Contract and schedule information |
publicationDate | Vacancy publication timestamp |
description, descriptionHtml | Plain-text and original rich-text descriptions |
requirements | Combined stated requirements, skills, and languages |
minimumEducation, minimumExperience | Minimum qualification fields |
skills, languages | Structured public skill and language labels |
category, subcategory, industry | InfoJobs classification fields |
applications, vacancies | Public application and position counts when shown |
applicationUrl | Canonical public vacancy/application page |
sourceUrl | Input search or vacancy URL that produced the row |
scrapedAt | UTC collection timestamp |
Fields may be null or empty when InfoJobs or the employer does not display them. Detail-only fields require includeDetails: true.
How to get started
- Open the Actor in Apify Console.
- Add one or more values to Search keywords, such as
developeroranalista de datos. - Optionally set a Spanish province such as
Madrid. - Optionally select work modes or add InfoJobs category IDs.
- Keep Include full job details enabled when requirements and skills matter.
- Choose a small
maxItemsvalue for the first run. - Click Start.
- Open the Vacancies dataset view and export JSON, CSV, Excel, XML, or RSS.
- Save the task or schedule it for recurring monitoring when the result fits your workflow.
Input parameters
| Input | Type | Default | Description |
|---|---|---|---|
searchTerms | string array | ['developer'] prefill | Independent role or keyword searches |
location | string | empty | Spanish city or province name for keyword searches and output filtering |
categoryIds | string array | empty | Numeric category IDs copied from an InfoJobs search URL |
workModes | string array | empty | Any of remote, hybrid, or on-site |
startUrls | URL array | empty | Public InfoJobs search or vacancy URLs |
includeDetails | boolean | true | Fetch each vacancy page for full enrichment |
maxItems | integer | 100 | Maximum unique jobs across the run, up to 10,000 |
maxResultsPerSearch | integer | 100 | Maximum jobs accepted from each source, up to 10,000 |
When no keyword or URL is supplied, the Actor uses a small default developer search so the prefilled run produces useful output.
Example: Madrid hybrid data jobs
{"searchTerms": ["analista de datos"],"location": "Madrid","workModes": ["hybrid"],"includeDetails": true,"maxItems": 20,"maxResultsPerSearch": 20}
Example: use a public search URL
{"startUrls": [{"url": "https://www.infojobs.net/ofertas-trabajo?keyword=developer&provinceIds=33"}],"includeDetails": false,"maxItems": 50,"maxResultsPerSearch": 50}
Output example
A current enriched result has this shape:
{"offerId": "7636f407c7468da6721c6f4c6ec090","title": "Analista de datos","employer": "Mobius Group","location": "Alcobendas, Madrid","city": "Alcobendas","province": "Madrid","workMode": "hybrid","salary": null,"salaryMin": null,"salaryMax": null,"contractType": "Indefinido","workday": "Completa","publicationDate": "2026-08-20T09:29:34.000Z","description": "Public vacancy description...","requirements": "Skills: Análisis de datos, Visualización de datos...","skills": ["Análisis de datos", "Visualización de datos"],"languages": [],"category": "Administración de empresas","subcategory": "Análisis de datos","applicationUrl": "https://www.infojobs.net/alcobendas/analista-datos/of-i7636f407c7468da6721c6f4c6ec090","sourceUrl": "https://www.infojobs.net/ofertas-trabajo?keyword=analista+de+datos&teleworkingIds=3","scrapedAt": "2026-08-23T14:35:00.000Z"}
Public listings change continuously, so titles, counts, and available fields will differ between runs.
How much does it cost to extract InfoJobs Spain jobs?
The Actor uses pay per event: one Run started event and one Item extracted event for each dataset row. The current BRONZE rates are a $0.005 start event and $0.0016 per extracted job. Higher usage tiers receive lower per-job rates automatically.
| Jobs | Start event | Item calculation | Estimated BRONZE total |
|---|---|---|---|
| 10 | one | 10 × BRONZE item rate | $0.021 |
| 100 | one | 100 × BRONZE item rate | $0.165 |
| 1,000 | one | 1,000 × BRONZE item rate | $1.605 |
Only records saved to the default dataset receive the item event. Duplicate or rejected rows are not charged as jobs. Apify applies the tier associated with your account; Console shows the active tier and run budget before execution.
Detail enrichment does not have a separate charge event, but it makes one extra public request per vacancy and therefore takes longer than search-only extraction.
Search, pagination, and filtering behavior
Keyword searches use InfoJobs' public server-rendered search data. For location input, the Actor resolves the matching province from current InfoJobs aggregations and then applies its source ID to pagination.
categoryIds and workModes are sent with every search page. Explicit search URLs also receive configured category and work-mode filters. Location and work mode are checked again against normalized output where applicable.
The Actor deduplicates vacancies by offerId across every input. It stops when the total limit, per-search limit, or upstream final page is reached.
A direct vacancy URL returns one enriched record. Category filters cannot meaningfully be applied to one already-selected vacancy, so that combination fails with a clear input error rather than silently ignoring the filter.
Monitoring new or changed vacancies
Use an Apify schedule for recurring collection:
- Save a Task with narrow keywords and filters.
- Set a daily or weekly schedule.
- Send completed-run data through a webhook or integration.
- Compare
offerIdvalues with the previous dataset. - Treat a changed salary, work mode, description, or publication field as an update according to your own business rules.
The Actor exports snapshots. It does not maintain history, send alerts, or label changes inside a run. Apify schedules, webhooks, storage, and downstream automation provide those capabilities.
Integration ideas
- Google Sheets: append current vacancies for recruiter review.
- Airtable: upsert by
offerIdand track status over time. - Zapier or Make: trigger workflows after successful scheduled runs.
- Webhooks: send dataset IDs to a data warehouse loader.
- Power BI or Tableau: analyze employer, province, salary, and work-mode trends.
- ATS enrichment: attach source-attributed public market context to role research.
- Data lake: store dated JSON snapshots and compute changes downstream.
Run from the Apify API with cURL
Replace YOUR_APIFY_TOKEN with your token:
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~infojobs-spain-jobs-scraper/runs?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"searchTerms": ["developer"],"location": "Madrid","includeDetails": true,"maxItems": 20}'
To wait for completion and receive dataset items directly, use the run-sync-get-dataset-items endpoint for small bounded jobs.
Run with JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/infojobs-spain-jobs-scraper').call({searchTerms: ['analista de datos'],workModes: ['hybrid'],includeDetails: true,maxItems: 25,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Run with Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/infojobs-spain-jobs-scraper').call(run_input={'searchTerms': ['ventas'],'location': 'Barcelona','includeDetails': False,'maxItems': 50,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
Use with MCP and AI agents
Add the Actor to Claude Code through Apify MCP:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/infojobs-spain-jobs-scraper"
Claude Desktop, Cursor, and VS Code MCP setup
Claude Desktop, Cursor, and VS Code can use this equivalent HTTP MCP configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/infojobs-spain-jobs-scraper"}}}
Example prompts:
- “Find 20 current hybrid data analyst jobs in Madrid on InfoJobs and summarize the most common required skills.”
- “Collect 50 remote developer vacancies from InfoJobs Spain and group employers by contract type.”
- “Run my saved InfoJobs monitoring task and compare stable offer IDs with yesterday's export.”
Your MCP client still needs valid Apify authentication and permission to run the Actor.
Performance and cost tips
- Disable
includeDetailswhen search-card fields are sufficient. - Start with 10–20 items while validating a keyword or location.
- Use
maxResultsPerSearchto prevent one broad term from consuming the whole run. - Prefer specific role phrases over generic terms for cleaner data.
- Combine related searches in one run to share the start event.
- Deduplicate downstream by
offerId, not by title. - Avoid requesting thousands of enriched details when a smaller representative sample answers the analysis question.
Limitations and failure behavior
- InfoJobs controls page structure, filters, availability, and field completeness; source changes can require an Actor update.
- A search may naturally return no vacancies.
- Salary and requirements are often omitted by employers and remain
nullor empty. - Search-only mode cannot provide detail-only fields.
- A disappeared vacancy may fail detail enrichment; when a search row still exists, the Actor preserves its search fields and logs the degraded enrichment.
- A failed search page stops the run so incomplete pagination is not presented as complete coverage.
- Location resolution uses currently available province aggregations for the searched term.
- Output reflects public data at run time and is not guaranteed to represent every vacancy on InfoJobs.
- The Actor does not apply to vacancies or access login-only candidate features.
Troubleshooting
The search returned no jobs
Try the same keyword on InfoJobs, remove a location or work-mode filter, check the spelling, and lower the specificity. No-result searches complete normally with an empty dataset.
My location was not found
Use a province label shown by InfoJobs, such as Madrid, Barcelona, or Valencia. The Actor reports an error rather than silently broadening a location it cannot resolve.
Some requirement fields are empty
Enable includeDetails. If it is already enabled, the employer may not have published structured requirements. Check description, which may contain free-text requirements.
The run failed on an InfoJobs URL
Confirm that the URL uses HTTPS, belongs to infojobs.net, and points to /ofertas-trabajo or a public /of-i... vacancy. Remove tracking fragments if the source URL is malformed.
Why are there fewer records than maxItems?
The search may contain fewer matching jobs, filters may reject rows, duplicate offer IDs may appear across inputs, or maxResultsPerSearch may be lower than the global limit.
Responsible use and legality
InfoJobs pages and vacancy descriptions may be protected by terms of service and intellectual-property rights. Use the Actor only for lawful purposes and public data you are authorized to process.
Follow applicable privacy, database, employment, anti-discrimination, and data-protection rules, including GDPR where relevant. Minimize retention, preserve source attribution, secure exports, and avoid using scraped data for unlawful profiling, spam, or automated decisions about individuals.
You are responsible for your inputs, schedule, downstream processing, and compliance. This documentation is not legal advice.
Related Automation Lab Actors
- Company Career Page Jobs Scraper for supplied employer career sites.
- Computrabajo LATAM Jobs Scraper for public Computrabajo country sites.
- We Work Remotely Jobs Scraper for remote-first vacancy research.
Use this Actor when the target source is specifically InfoJobs Spain; use a related Actor only when its source and coverage match the required workflow.
FAQ
Does the Actor require an InfoJobs account?
No. It extracts public search and vacancy information without candidate login.
Can I search several roles in one run?
Yes. Add multiple searchTerms. maxResultsPerSearch applies independently and maxItems caps the combined unique output.
Can I provide a single vacancy URL?
Yes. Add the public InfoJobs URL to startUrls; the Actor returns the normalized enriched vacancy when it is still available.
Does it detect new or changed jobs?
It provides stable IDs and current snapshots. Schedule runs and compare datasets downstream to implement change detection.
Can I export to CSV or Excel?
Yes. Open the default dataset and choose any Apify-supported export format, or fetch items through the Dataset API.
Is every result charged separately?
Every unique accepted vacancy saved to the dataset emits one item event. Start, rejected, duplicate, empty, and failed rows do not add item events.
Does it use residential proxies?
No. The current HTTP route accesses public server-rendered pages directly. No automatic paid proxy fallback is enabled.
How fresh is the data?
Each run reads the source at execution time. publicationDate comes from InfoJobs, while scrapedAt records when this Actor saved the row.