InfoJobs Scraper - Spain Jobs, Full Descriptions & Companies
Pricing
from $1.75 / 1,000 results
InfoJobs Scraper - Spain Jobs, Full Descriptions & Companies
Scrape InfoJobs, Spain's #1 job board. Extract job offers by keyword, city or category: title, company, location, contract type, working day, remote/hybrid and the full job description. Export to JSON, CSV or Excel for recruiting, aggregation and lead generation.
Pricing
from $1.75 / 1,000 results
Rating
0.0
(0)
Developer
Haketa
Maintained by CommunityActor stats
0
Bookmarked
9
Total users
3
Monthly active users
4 days ago
Last modified
Categories
Features
Share
🇪🇸 InfoJobs Scraper — Spain Job Offers, Full Descriptions & Hiring Companies
Extract job offers from InfoJobs — Spain's largest employment marketplace — into clean, structured data. This InfoJobs scraper lets you scrape InfoJobs by keyword, city, province or filtered search URL and export hundreds to 1,000+ vacancies with job title, hiring company name, company profile URL, company logo, city, province, contract type, working day, remote/hybrid arrangement (teleworking), executive flag, publish timestamp and the complete full-text job description — no login, no coding.
Export every job offer to JSON, CSV, Excel, or API in one click for recruitment sourcing, B2B lead generation, and Spanish labor-market intelligence.
Built for recruitment agencies, technical sourcers, B2B sales & lead-generation teams, job-board aggregators, HR compensation analysts and labor-market researchers operating in Spain and the EU.
⚡ At a glance
| Feature | Details |
|---|---|
| Target platform | InfoJobs Spain (infojobs.net) |
| Search inputs | Any job keyword(s) (developer, marketing, comercial, enfermero…) and/or any InfoJobs search URL (startUrls) |
| Core data extracted | Offer ID (id), title, company, companyUrl, companyLogo, city, province, contractType, workday, teleworking, isExecutive, publishedAt, and full-text description |
| Remote / hybrid filter | Built-in onlyTeleworking toggle to keep only Teletrabajo / Solo teletrabajo and Híbrido roles |
| Pagination & 1,000+ scale | Automatic 22-offer/page pagination up to 1,000 pages per query + multi-keyword expansion (maxItems: 0 = unlimited, supports 1,000+ offers) |
| Deduplication | 100% deduplicated by unique InfoJobs offer id across pages, keywords and search URLs |
| Execution speed | Fast HTTP extraction with automatic proxy rotation — collects 100 offers in seconds and 500+ offers in ~1 minute |
| Export formats | Bulk export to JSON, CSV, Excel, XML, HTML, RSS, Webhook & Apify REST API |
🔎 Why scrape InfoJobs?
InfoJobs (infojobs.net) is the #1 employment portal in Spain, hosting hundreds of thousands of active job listings across Madrid, Barcelona, Valencia, Sevilla, Bilbao, Málaga, Zaragoza and every Spanish province. When Spanish enterprises, SMEs and international tech hubs hire in Spain, InfoJobs is where vacancies appear first — making it the premier source of live Spain job market data and hiring-company buying signals.
Collecting InfoJobs data manually is slow and restrictive: search results are paginated 22 offers per page, filters reset between searches, and naive scrapers get blocked or only capture short card snippets instead of the full job description. This InfoJobs data extractor solves all of those challenges automatically: it translates any keyword or /ofertas-trabajo/ URL, paginates deeply across result pages, extracts the complete 2,000+ character job description directly from the search feed without needing slow per-offer detail requests, and deduplicates every offer by its unique id.
Common reasons teams use this InfoJobs scraper:
- 🎯 B2B sales & lead generation — identify Spanish companies actively hiring (
company,companyUrl,city,isExecutive) as a high-intent trigger for HR tech, SaaS, staffing and B2B services outreach. - 🧲 Recruitment & candidate sourcing — monitor newly published roles (
publishedAt) across tech, healthcare, sales, engineering and finance before competitors react. - 📝 NLP skill, tech-stack & salary mining — analyze thousands of full-text
descriptionfields to extract required skills, languages, certifications and embedded salary bands. - 🗞️ Job boards & career aggregators — ingest clean, structured Spanish vacancies with direct
urlandcompanyLogolinks into vertical job portals or newsletters. - 📊 Regional & remote-work analytics — track
teleworking(Presencial,Híbrido,Solo teletrabajo),contractType(Contrato indefinido,temporal,autónomo) andworkdaytrends across Spanish cities.
✨ What this InfoJobs scraper does
- ✅ Search by keyword or full InfoJobs URL — enter keywords (
developer,data analyst,marketing,administrativo) or paste any filtered URL frominfojobs.net/ofertas-trabajo/...intostartUrls. - ✅ Complete job description included on every row — unlike basic scrapers that return a 150-character snippet, every record includes the entire job description text (typically 1,500–4,000 characters) without extra detail-page requests.
- ✅ Unlocked 1,000+ offer pagination — automatically walks through result pages (
22offers per page) and expands across multiple keywords whenmaxItemsis set to1,000+or0(unlimited). - ✅ Zero-config empty run support — running with empty input (
{}) automatically collects a diverse 100-offer sample across Spain's top job categories so runs never fail on empty parameters. - ✅ One-click remote/hybrid filter (
onlyTeleworking) — filter your dataset on the fly to keep only remote (Teletrabajo) and hybrid (Híbrido) positions. - ✅ Rich hiring-company metadata — captures
companyname, direct InfoJobscompanyUrlprofile link, andcompanyLogoimage URL. - ✅ Smart proxy rotation & resilience — runs on Apify Proxy out of the box with automatic session rotation and residential fallback if rate-limited.
- ✅ Streamed dataset + KVS
OUTPUTmirror — pushes batches live to the Apify Dataset as each page completes and writes the full array toOUTPUTin the Key-Value Store.
🎯 Use cases
| Persona | How they use this Actor |
|---|---|
| 🏢 Staffing & Recruitment Agencies | Track daily job postings in Madrid, Barcelona and Valencia by keyword (ingeniero, enfermero, comercial) to pitch contingency staffing services to hiring managers. |
| 🚀 B2B Growth & Outbound Teams | Build targeted account lists of companies expanding their teams (company, companyUrl, city) and personalize outreach based on the exact roles they are hiring for. |
| 🌐 Job Aggregators & Niche Portals | Populate remote-work or tech-focused job boards in Spain using onlyTeleworking: true and multiple tech keywords (developer, devops, data, cybersecurity). |
| 📈 Labor Economists & HR Analysts | Measure the share of permanent contracts (Contrato indefinido), full-time roles (Jornada completa), executive positions (isExecutive) and hybrid work across industries. |
| 🔍 Competitive Intelligence Teams | Monitor competitor hiring velocity and job descriptions to spot new product lines, tech-stack migrations or regional office openings across Spain. |
📥 Input configuration
All input fields are optional. With the default prefill (keywords: ["developer"], maxItems: 100), the Actor finishes in under a minute; with empty input ({}), it collects 100 offers across top Spanish job keywords.
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | array | Prefill developer URL | InfoJobs search URLs (https://www.infojobs.net/ofertas-trabajo/developer or .../list.xhtml?...). Supports all site filters. |
keywords | array | Prefill ["developer"] | One or more job keywords to search (e.g. developer, marketing, comercial, enfermero). Combined and deduplicated with startUrls. |
onlyTeleworking | boolean | false | Keep only offers marked as remote (Teletrabajo / Solo teletrabajo) or hybrid (Híbrido). |
maxItems | integer | 200 (prefill 100) | Maximum unique job offers to collect across all URLs and keywords. Set 0 for unlimited, or 1000+ for deep market sweeps. |
proxyConfiguration | object | { "useApifyProxy": true } | Apify Proxy configuration. Enabled by default with automatic IP rotation. |
Input example — multi-keyword 1,000+ offer sweep
{"keywords": ["developer","data engineer","devops","product manager","cybersecurity","marketing digital"],"onlyTeleworking": false,"maxItems": 1000,"proxyConfiguration": { "useApifyProxy": true }}
Input example — remote & hybrid jobs only via search URL
{"startUrls": [{ "url": "https://www.infojobs.net/ofertas-trabajo/marketing" },{ "url": "https://www.infojobs.net/ofertas-trabajo/diseno" }],"onlyTeleworking": true,"maxItems": 300,"proxyConfiguration": { "useApifyProxy": true }}
📤 Output & field reference
Each job offer is saved as a clean, flat JSON object. Below is a real record from an InfoJobs run:
{"id": "9a91be1d18418db6cf6393f7e87c4e","url": "https://www.infojobs.net/las-palmas-de-gran-canaria/tecnico-marketing-comunicacion-enfoque-comercial-./of-i9a91be1d18418db6cf6393f7e87c4e","title": "Técnico de Marketing & Comunicación (Enfoque Comercial).","company": "Globaenergy","companyUrl": "https://www.infojobs.net/globaenergy/em-i98515756505252711081111016194627800302","companyLogo": "https://multimedia-logos.infojobs.net/image/upload/cf/cf900a37-b3a8-4709-be38-84d4e06ff7da","city": "Las Palmas de Gran Canaria","province": null,"contractType": "Contrato indefinido","workday": "Jornada parcial - mañana","teleworking": "Presencial","isExecutive": false,"publishedAt": "2026-10-30T14:00:06Z","description": "Buscamos Técnico de Marketing & Comunicación (Enfoque Comercial). En Globa, empresa consolidada del sector energético con más de 12 años de trayectoria...","scrapedAt": "2026-11-10T02:50:12.410Z"}
💼 Job Offer & Role Identity
| Field | Type | Coverage | Description |
|---|---|---|---|
id | string | 🟢 High (100%) | Unique InfoJobs offer code (e.g. 9a91be1d18418db6cf6393f7e87c4e), used for automatic deduplication. |
url | string | 🟢 High (100%) | Direct https://www.infojobs.net/... link to the job posting (tracking query parameters stripped). |
title | string | 🟢 High (100%) | Job offer headline / role title. |
description | string | 🟢 High (100%) | Complete full-text job description (~2,000+ characters on average), including duties, requirements and benefits. |
isExecutive | boolean | 🟢 High (100%) | true when the role is classified as executive / senior management, otherwise false. |
publishedAt | string | 🟢 High (100%) | ISO 8601 publication / refresh timestamp (2026-10-30T14:00:06Z). |
scrapedAt | string | 🟢 High (100%) | ISO 8601 timestamp when the record was extracted. |
🏢 Company, Location & Work Arrangement
| Field | Type | Coverage | Description |
|---|---|---|---|
company | string | 🟢 High (100%) | Name of the hiring company or recruitment agency. |
companyUrl | string | 🟢 High (~99%) | Direct link to the employer's profile page on InfoJobs. |
companyLogo | string | 🟢 High (~75%) | Employer logo URL on multimedia-logos.infojobs.net when uploaded by the company. |
city | string | 🟢 High (100%) | Municipality / city where the job is located (Madrid, Barcelona, Valencia…). |
province | string | 🟡 Conditional (~29%) | Province label when explicitly populated in the search state array; otherwise null (use city). |
contractType | string | 🟢 High (100%) | Spanish contract classification (Contrato indefinido, De duración determinada, Autónomo, Formativo, Otros contratos). |
workday | string | 🟢 High (100%) | Working schedule (Jornada completa, Jornada parcial - mañana, Jornada intensiva, Jornada indiferente). |
teleworking | string | 🟢 High (~93%) | Work mode (Presencial, Híbrido, Solo teletrabajo), when specified by the employer. |
🔁 Pagination & 1,000+ scaling
InfoJobs returns 22 job offers per page and exposes the total matching count (totalElements). The InfoJobs scraper handles deep pagination automatically:
- Deep multi-page crawling: For each search URL or keyword, the Actor increments
?page=1, 2, 3, …up to 1,000 pages per query untilmaxItemsis reached or the search results end. - Automatic multi-keyword expansion: When
maxItemsis set to a large target (e.g.1,000+) or when the Actor is started with empty input ({}), it automatically queues additional high-volume Spanish job keywords (developer,marketing,comercial,administrativo,ingeniero,ventas,contable,logistica,mantenimiento,recursos humanos,data,soporte) if your initial keyword exhausts early. - Cross-query deduplication: Offers are deduplicated in memory by their unique
idcode across all pages, keywords and URLs so you never receive duplicate listings.
⚙️ How to use
- Open InfoJobs Scraper in the Apify Console and click Try for free.
- Enter one or more
keywords(e.g.developer,marketing,comercial) or paste filtered InfoJobs URLs intostartUrls. - Optionally enable
onlyTeleworkingto filter for remote/hybrid jobs, and setmaxItems(100for a fast test,500or1,000+for a large dataset, or0for unlimited). - Click Start and export your results to JSON, CSV, Excel, XML, or API.
🔌 API usage
Start a run via REST API
curl -X POST "https://api.apify.com/v2/acts/haketa~infojobs-scraper/runs?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"keywords": ["developer", "data analyst", "devops"],"onlyTeleworking": false,"maxItems": 300,"proxyConfiguration": { "useApifyProxy": true }}'
Call from Node.js (apify-client)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('haketa/infojobs-scraper').call({keywords: ['marketing', 'comercial'],onlyTeleworking: true,maxItems: 500,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Fetched ${items.length} InfoJobs offers`);
Call from Python (apify-client)
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run_input = {"keywords": ["developer", "data engineer", "cybersecurity", "marketing"],"onlyTeleworking": False,"maxItems": 500,"proxyConfiguration": {"useApifyProxy": True},}run = client.actor("haketa/infojobs-scraper").call(run_input=run_input)for offer in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{offer['title']} @ {offer['company']} ({offer['city']}) | {offer['contractType']} | {offer['teleworking']}")
Run synchronously and fetch JSON in one HTTP call
curl -X POST "https://api.apify.com/v2/acts/haketa~infojobs-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"keywords": ["developer"],"onlyTeleworking": true,"maxItems": 100}'
🔄 Integrations & recruitment automation workflows
Connect InfoJobs Scraper directly into your Spanish recruiting, B2B outbound or labor-analytics stack:
| Integration | Workflow example |
|---|---|
| 🏢 HubSpot, Salesforce & Pipedrive | Automatically create or enrich B2B prospect accounts whenever a Spanish company posts a new vacancy (company, companyUrl, city, title, isExecutive). |
| 📊 Google Sheets & Airtable | Schedule daily runs for your target niches (enfermero, ingeniero, comercial, developer) and append deduplicated offers (id) to a live sourcing tracker. |
| ⚡ Make, Zapier & n8n | Filter incoming offers by teleworking (Solo teletrabajo / Híbrido) or keywords in description, then route matching roles to Slack, Telegram or email digests. |
| 🗄️ Snowflake, BigQuery & PostgreSQL | Build a longitudinal warehouse of Spanish job postings to analyze hiring velocity by municipality (city), contract stability (contractType) and skill demand. |
| 🤖 AI Recruiting & NLP Pipelines | Pass the full-text description (~2,000+ characters per offer) to an LLM to extract structured salary bands, required tech stacks, years of experience and language requirements. |
⚠️ Limitations & data notes
- Salary disclosure in Spain: Most employers on InfoJobs do not populate a dedicated structured salary badge on search cards, or they embed compensation ranges inside the body text. The Actor captures the complete full-text
descriptionon every offer so you can parse disclosed salary figures (€30.000 - €45.000) directly from the text. - Province vs. City: InfoJobs' search feed consistently populates
city(100%coverage across Spanish municipalities), while theprovincestate array is only populated on a subset of offers (~29%). Always usecityas your primary geographic key. - Per-query pagination depth: Each individual keyword or search URL paginates up to 1,000 pages (~22,000 offers). For full nationwide sweeps, pass multiple sector keywords or regional search URLs in a single run.
💡 Pro tips for Spanish job data
- Combine multiple related keywords (e.g.
["python", "java", "react", "devops", "cloud"]) withmaxItems: 1000to build a comprehensive, deduplicated sector dataset in a single run. - Use InfoJobs' native web filters via
startUrls: filter by province, category or experience level oninfojobs.net, copy the browser URL, and paste it intostartUrls. - Mine
descriptionfor salary ranges and tech stacks: many Spanish employers include gross annual salary (€35.000 - €45.000 brutos/año) inside the body text rather than a separate badge — sincedescriptioncontains the full text, a simple regex extracts it cleanly. - Schedule daily runs and deduplicate on
idto feed real-time Spanish hiring alerts into Slack, HubSpot, Salesforce or Google Sheets.
❓ FAQ
How many job offers can I scrape per run?
From a 100-item sample up to 10,000+ unique job offers per run. Set maxItems to 1000 (or 0 for unlimited) and pass multiple keywords or broad search URLs.
Do I need an InfoJobs account or login? No. The Actor extracts publicly listed job offers without requiring any account or credentials.
Does it extract the full job description or just a summary snippet? It extracts the complete job description text (~2,000+ characters on average) directly from the search payload, giving you full detail-page text at search-page speed.
Do I need to configure special proxies?
No. Apify Proxy is enabled by default ({ "useApifyProxy": true }), and the Actor automatically rotates proxy sessions and escalates to residential IPs if a datacenter IP is ever challenged.
What happens if I run the Actor with completely empty input ({})?
Instead of failing or returning 0 items, an empty run automatically searches across a curated list of Spain's highest-volume job categories (developer, marketing, comercial, administrativo, ingeniero, ventas, contable, logistica…) and returns a ready-to-use 100-offer sample.
How can I filter by Spanish city, province, contract type or experience level?
Open InfoJobs (infojobs.net) in your browser, apply any combination of location, category, contract (Contrato indefinido, temporal), workday (Jornada completa, parcial) or experience filters, copy the resulting browser URL (either /ofertas-trabajo/... or /jobsearch/search-results/list.xhtml?...), and paste it into startUrls. The Actor preserves your URL query parameters while paginating through all matching pages.
How are duplicate job offers handled when searching multiple keywords?
Every InfoJobs vacancy has a unique alphanumeric offer code (id, e.g. 9a91be1d18418db6cf6393f7e87c4e). The Actor maintains an in-memory deduplication set across all pages, startUrls and keywords, guaranteeing 0 duplicate records in your exported dataset.
Can I fetch the entire output in a single Key-Value Store call?
Yes. Alongside incremental Dataset pushes, the Actor writes the complete deduplicated array to the OUTPUT key in the default Key-Value Store (.../key-value-stores/DEFAULT/records/OUTPUT), making it easy to consume from lightweight webhooks and serverless functions.
Sample Spanish job search playbooks
| Playbook | Recommended input configuration |
|---|---|
| 💻 Spain Tech & Software Engineering Sweep | keywords: ["developer", "frontend", "backend", "fullstack", "devops", "data engineer", "qa", "ciberseguridad"], maxItems: 1000 |
| 🏠 100% Remote & Hybrid Roles Across Spain | keywords: ["developer", "marketing", "diseño", "atencion al cliente", "ventas", "data"], onlyTeleworking: true, maxItems: 500 |
| 📈 B2B Commercial & Sales Hiring Signals | keywords: ["comercial", "account executive", "business development", "key account manager", "ventas b2b"], maxItems: 500 |
| 🏥 Healthcare, Engineering & Industrial Roles | keywords: ["enfermero", "medico", "ingeniero industrial", "mantenimiento", "prevencion riesgos", "logistica"], maxItems: 500 |
Spanish contract & teleworking values reference
| Field | Common Spanish values on InfoJobs | English equivalent |
|---|---|---|
contractType | Contrato indefinido | Permanent / full-term employment contract |
contractType | De duración determinada | Fixed-term / temporary contract |
contractType | Autónomo | Freelance / independent contractor |
contractType | Formativo | Internship / training contract |
contractType | Fijo discontinuo | Seasonal permanent contract |
workday | Jornada completa | Full-time schedule |
workday | Jornada parcial - mañana / tarde | Part-time schedule (morning / afternoon) |
workday | Jornada intensiva | Intensive / continuous shift schedule |
workday | Jornada indiferente | Flexible / unspecified schedule |
teleworking | Presencial | 100% On-site |
teleworking | Híbrido | Hybrid (remote + office) |
teleworking | Solo teletrabajo / Teletrabajo | 100% Remote work |
How to extract salary bands from description in Python
Because description contains the complete full-text job offer, you can extract disclosed gross annual salaries (€30.000 - €45.000) with a single regular expression:
import reSALARY_RE = re.compile(r"(\d{2}[.,]?\d{3})\s*(?:€|euros?)?\s*(?:-|a|hasta)\s*(\d{2}[.,]?\d{3})\s*(?:€|euros?)", re.I)def extract_salary_range(description: str):match = SALARY_RE.search(description or "")if not match:return Nonelow = int(match.group(1).replace(".", "").replace(",", ""))high = int(match.group(2).replace(".", "").replace(",", ""))return {"minSalaryEur": low, "maxSalaryEur": high}
🔗 Related scrapers
Building a European or global recruitment intelligence pipeline? Pair InfoJobs Scraper with these job-board scrapers by the same developer:
- StepStone Scraper — Germany & EU Job Listings
- Xing Jobs Scraper — DACH Job Listings & Salaries
- SEEK Scraper — Australia & NZ Job Listings with Salary
- ZipRecruiter Job Listings & Salary Scraper (US, UK, CA)
- GulfTalent Jobs Scraper — Gulf Jobs, Salaries & Leads
- Workana Jobs Scraper — Freelance Projects, Budgets & Skills
📋 Changelog
- v1.2 (2026-11) — Unlocked 1,000+ job offer pagination (up to 1,000 pages per query + automatic multi-keyword expansion), added zero-config empty-run default keyword fallback (
100offers), added automatic residential proxy fallback on retry, addedscrapedAttimestamp and Key-Value StoreOUTPUTmirror, and tuned fast 100-item prefill. - v1.1 (2026-11) — Upgraded HTTP extraction engine with Firefox TLS fingerprinting and embedded
__INITIAL_PROPS__parsing to clear interstitial challenges on standard proxies; verified 500-offer run with 100% core field coverage and 0 duplicates. - v1.0 (2026-10) — Initial release with keyword and URL search, full job description extraction, and remote/hybrid (
onlyTeleworking) filtering.