InfoJobs Spain Jobs Scraper
Pricing
from $1.00 / 1,000 results
InfoJobs Spain Jobs Scraper
Scrape job listings from InfoJobs.net (Spain) with titles, companies, descriptions, contract types, salaries, locations, and more. HTTP-only via embedded search JSON.
Pricing
from $1.00 / 1,000 results
Rating
5.0
(6)
Developer
Crawler Bros
Actor stats
6
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
Scrape job listings from InfoJobs.net — Spain's largest job board — including titles, companies, descriptions, contract types, salaries, locations, and more.
Output (per job)
type=job_infojobsid(of-xxx),jobId(bare code without prefix),urltitledescriptionHtml,descriptionTextcompanyName,companyLogo,companyUrlcompanySector,companySize(when present on the detail page)city,province,countrycontractType,workday,teleworking,remoteType(canonical:presencial/hibrido/teletrabajo)experienceMin,studyLevel,yearsOfContractExperiencecategory,subcategorysalary,salaryMin,salaryMax,salaryPeriod,salaryType,salaryCurrencyskills,languages,benefits,processPhase(lists, when the detail page advertises them)vacancies,applicationsCount/applicantCountpostedAt,closingDate/expiresAtexternalId(source reference / offer code used by the employer)isPromoted,isExecutive,isVisibleToCompany,promotions,statesscrapedAt
Fields are only included when a non-empty value is available — so datasets never contain nulls. If a run extracts zero jobs (for example, a bad URL or an aggressive anti-bot block), a single job_infojobs_blocked sentinel record is emitted so the dataset is never empty.
Input
| Field | Type | Description |
|---|---|---|
searchUrls | string[] | InfoJobs search URLs, or direct job detail URLs (…/of-<id>). Default: https://www.infojobs.net/jobsearch/search-results/list.xhtml?keyword=python. |
keyword | string | Fallback keyword used to build a search URL when searchUrls is empty. |
province | string | Client-side filter on the parsed city / province field (e.g. Madrid, Barcelona). |
category | string | Extra keyword appended as &category= when a search URL is synthesised. |
contractType | enum | any / indefinido / temporal / practicas / autonomo / otros. |
workday | enum | any / completa / parcial / indiferente. |
teleworking | enum | any / presencial / hibrido / teletrabajo. |
maxItems | integer | Maximum jobs per run. Default 3. |
proxyConfiguration | object | Apify proxy. Datacenter recommended; residential helps when Distil blocks the IP. |
How it works
- The actor fetches the listing URL with
curl_cffi(chrome131 TLS impersonation) and parses the embeddedwindow.__INITIAL_PROPS__JSON blob. - Each offer record already exposes title, description, city, company, contract type, workday, teleworking, salary, and posting date.
- Each job's detail page is then fetched best-effort to pick up
experienceMin,studyLevel,category,subcategory,province, andapplicationsCount— listings stay in the dataset even when the detail fetch is blocked. - Client-side filters (
contractType/workday/teleworking/province) run on the parsed Spanish labels.
FAQ
Do I need a proxy? Not strictly — InfoJobs often serves a 200 on the search page from datacenter IPs. When you see a captcha interstitial, switch the proxy group to residential.
Does it scrape beyond Spain? InfoJobs is a Spain-only platform — every posting is tagged country = "Spain".
Why do some fields disappear? Fields are omitted when empty rather than returned as null, so your dataset is always clean. Detail-page-only fields (experienceMin, studyLevel, category, subcategory, skills, languages, benefits, vacancies, processPhase, closingDate, externalId, companySector, companySize, applicationsCount) depend on the detail page being reachable; listing-level fields (title, company, salary, contract, city, remoteType, isPromoted, etc.) are always present when a job is returned.
What's the job_infojobs_blocked sentinel? A single row emitted when zero jobs were extracted — useful to tell the difference between "no results" and "scraper failed silently".