InfoJobs Spain Jobs — Ofertas, company & city
Pricing
from $2.00 / 1,000 jobs
InfoJobs Spain Jobs — Ofertas, company & city
Scrape InfoJobs Spain jobs from infojobs.net: title, company, city, contract, teleworking and offer URL. Salary only when InfoJobs publishes it on the card. Search URLs or keyword + geo. HTTP export, not a multi-board dump.
Pricing
from $2.00 / 1,000 jobs
Rating
0.0
(0)
Developer
Noah Adler
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
15 hours ago
Last modified
Categories
Share
InfoJobs Spain Jobs — InfoJobs scraper for ofertas
InfoJobs scraper for Spain’s #1 job board (infojobs.net). Export InfoJobs ofertas and InfoJobs Spain jobs as one clean Dataset row per listing: title, company, city, contract, teleworking, salary when published, offer URL.
HTTP-only (no Playwright): the public search page hydrates window.__INITIAL_PROPS__ with structured offers[]. Use Store-like search URLs or keyword + geo. Built as an InfoJobs API-style export for empleo Spain scraper workflows — not a bloated Indeed/LinkedIn multi-board.
InfoJobs returns ~22 ofertas per search page (
code,title,description,city,companyName,companyLink,contractType,workday,teleworking,publishedAt,link). This Actor paginates with?page=NuntilmaxItems. ES residential proxy is optional locally; enable it on Apify if you hit 403/captcha.
Why this Actor: Clean schema · company + salary when the card has them · search URLs you can paste from the site · cheap PPE per Job · no Playwright · no email-harvesting claims
Store icon: official InfoJobs mark (see Actor icon in Console).
Table of contents
- What this Actor does
- What you get
- Features
- Input
- Output example
- Output fields
- Quick start (API)
- Use cases
- Limitations
- FAQ
- Keywords
What this Actor does
| Step | Action |
|---|---|
| 1 | Accept searchUrls and/or keyword + geo + maxItems |
| 2 | Map geo (Madrid, Barcelona, …) to InfoJobs provinceIds when known |
| 3 | GET the search HTML (list.xhtml or your pasted URL) |
| 4 | Parse window.__INITIAL_PROPS__ → offers[] |
| 5 | Map each oferta → Dataset row (title, companyName, city, url, …) |
| 6 | Paginate ?page=N until maxItems or an empty page |
Input: InfoJobs search URLs, keyword, geo, max items, proxy.
Output: one Dataset row per job.
What you get
Job
title,description,offerIdcity,contractType,workday,teleworking
Company / pay
companyName,companyUrl,companyLogoUrlsalarywhen InfoJobs shows it on the card (otherwisenull)
Links / meta
url(absolutehttps://www.infojobs.net/…)publishedAt,keyword,geo,searchUrl,scrapedAt
Features
| Capability | Detail |
|---|---|
| Search URLs | Paste the same InfoJobs search you use in the browser |
| Keyword + geo | e.g. python in Madrid → provinceIds=33 |
| No browser | curl_cffi impersonate chrome124 + browserforge headers |
| Hydrated JSON | __INITIAL_PROPS__ offers — no CSS card scraping |
| Proxy-aware | Apify RESIDENTIAL + ES if antibot kicks in |
| PPE-friendly | One Job event per row — cheaper volume than a $3/1k blob |
Input
| Field | Required | Description |
|---|---|---|
searchUrls | No* | infojobs.net search pages only (Indeed/LinkedIn rejected) |
keyword | No* | e.g. python, comercial, enfermero |
geo | No | City or province (Madrid, Barcelona, Valencia) |
maxItems | No | Cap (default 40, max 500) |
proxyConfiguration | No | Default RESIDENTIAL + ES on Store Try it |
*Provide searchUrls and/or keyword (geo optional).
Example — keyword + Madrid
{"keyword": "python","geo": "Madrid","maxItems": 20,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "ES"}}
Example — paste an InfoJobs search URL
{"searchUrls": ["https://www.infojobs.net/jobsearch/search-results/list.xhtml?keyword=python&provinceIds=33"],"maxItems": 40}
Output example
{"title": "Desarrollador Senior Python (Híbrido)","description": "Como Desarrollador Senior Python, formarás parte de un equipo ágil…","companyName": "DEVOTEAM","companyUrl": "https://devoteam.ofertas-trabajo.infojobs.net","city": "Madrid","contractType": "Contrato indefinido","workday": "Jornada completa","teleworking": "Híbrido","salary": null,"publishedAt": "2026-09-17T08:16:28Z","url": "https://www.infojobs.net/madrid/desarrollador-senior-python-hibrido/of-i694a872eb84b0ba839fa86d91335d9","offerId": "694a872eb84b0ba839fa86d91335d9","keyword": "python","geo": "Madrid","scrapedAt": "2026-09-24T16:00:00Z","error": false,"errorMessage": null}
Output fields
| Field | Notes |
|---|---|
title, companyName | Must differ — title is the role, not the employer |
city | City label from the card (not a salary string) |
url | Absolute InfoJobs offer link (code in the path) |
salary | Present only when InfoJobs publishes pay on the listing |
description | Card/teaser text from offers[] (not a second detail crawl) |
error, errorMessage | Hard failure vs empty search |
Quick start (API)
curl "https://api.apify.com/v2/acts/noahadler~infojobs-spain-jobs/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"keyword": "python","geo": "Madrid","maxItems": 20}'
Then fetch the default Dataset items URL from the run object. Schedule it for daily InfoJobs ofertas monitoring.
Use cases
- Recruiters tracking open InfoJobs Spain jobs by skill and city.
- Salary / contract research when listings show
salary,contractType,teleworking. - Lead gen without spam claims — company name + company URL + offer URL (no email scrape).
- Empleo Spain scraper pipelines that already pull Fotocasa/Wallapop-style ES portals.
- Challenger export vs a generic $3/1k InfoJobs actor when you want a predictable schema.
Limitations
- Public search-list fields only — does not open every JD apply form.
- Does not harvest emails, phones, or CVs.
salaryis often missing on InfoJobs cards (“Salario no disponible”).- Structure depends on
__INITIAL_PROPS__; a front-end rewrite may need an Actor update. - 403/captcha → use Apify RESIDENTIAL + ES. After repeated WAF, the run fails honestly (no fake rows).
- Spain InfoJobs only (
infojobs.net). Not InfoJobs Brasil, Indeed, or LinkedIn.
FAQ
Do I need Playwright?
No. v0.1 is HTTP + Chrome TLS impersonation against the public search HTML.
Can I paste the URL from my browser?
Yes. searchUrls must be infojobs.net search pages.
What does geo=Madrid do?
It sets provinceIds=33 (InfoJobs Madrid). Barcelona is 9, Valencia 49, Sevilla 43, etc.
Why is salary null?
Many InfoJobs ofertas hide pay. The field is filled only when the hydrated JSON includes it.
What happens on hard failure?
One Dataset row with error: true and an actionable errorMessage (often “enable RESIDENTIAL + ES”).
Keywords
infojobs scraper, infojobs ofertas, infojobs spain jobs, infojobs api, empleo spain scraper, infojobs.net jobs, Madrid ofertas, Barcelona empleo, job listings Spain, recruiting lead generation, Apify Actor jobs