InfoJobs Spain Jobs Scraper avatar

InfoJobs Spain Jobs Scraper

Pricing

Pay per event

Go to Apify Store
InfoJobs Spain Jobs Scraper

InfoJobs Spain Jobs Scraper

Scrape job listings from InfoJobs.net, Spain's dominant job board, by keyword and optional province. Get title, company, city, salary if published, contract type, teleworking flag, posting date, and URL — deduplicated and ready to use.

Pricing

Pay per event

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

21 hours ago

Last modified

Categories

Share

InfoJobs Spain Jobs Scraper

💰 $2.70 / 1 000 results  ·  pay only for results  ·  no credit card to try

Captchas are our cardio. 😈

Scrape job listings from InfoJobs.net, Spain's dominant job board, keyed by keyword and an optional province. Get clean, deduplicated rows — title, company, city, salary if published, contract type, teleworking flag, posting date, and URL — ready for a recruiter pipeline or a hiring-intent feed.

🎯 What this scrapes

InfoJobs.net lists thousands of Spanish job postings across every industry, roughly 20-22 to a page, with no bulk export. This Actor searches by keyword and an optional province, walks the result pages, and returns one row per job: title, full description, city, absolute URL, contract type, salary (when published), workday, teleworking policy, posting timestamp, and the hiring company's name, logo, and InfoJobs profile URL.

🔥 Features

  • 🛡️ We rotate browser fingerprints (curl-cffi impersonation — Chrome and Firefox) so InfoJobs sees a real browser's TLS handshake, not a Python script.
  • 🔁 We retry with exponential backoff on rate limits and server errors, honouring Retry-After.
  • 🌐 We route every request through Apify Proxy, pinned to Spain (ES) by default to match InfoJobs' own market.
  • 🧊 Run-wide deduplication. The same job id never appears twice in your dataset, even across pages.
  • 🧾 Province resolution built in. Pass a plain name ("Madrid") or a numeric province id ("33") — both resolve against InfoJobs' own province table.
  • 💰 You pay only for results that land. No data → no charge (only the small actor-start warm-up fee).

💡 Use cases

  • Recruiters and staffing agencies — pull every open role matching a skill or title across Spanish employers, filtered to a province.
  • Job boards and aggregators — backfill Spain-region postings your existing sources miss.
  • Sales / BD teams — new job openings are a public hiring-intent signal; a company opening five engineering roles just funded a team.
  • Market research — track which titles, cities, and contract types a sector is hiring for over time.

⚙️ How to use it

  1. Set keyword — the search term to run, e.g. "developer".
  2. Optionally set province — a Spanish province name or numeric id.
  3. Set maxResults and maxPages to bound how much you pull per run.
  4. Run it, then export to JSON, CSV, or Excel — or pull the dataset straight from the Apify API.

📥 Input

FieldTypeRequiredDefaultNotes
keywordstringyes—Search term, e.g. "developer".
provincestring | nullnonullProvince name (e.g. "Madrid") or numeric id (e.g. "33").
maxResultsintegerno100Hard cap on total rows emitted (1-2000).
maxPagesintegerno10Safety cap on pages fetched, ~20-22 rows/page (1-100), independent of maxResults.
proxyConfigurationobjectno{"useApifyProxy": true, "apifyProxyCountry": "ES"}Apify Proxy configuration, ES-pinned by default.

Example input

{
"keyword": "developer",
"province": null,
"maxResults": 5,
"maxPages": 1
}

📤 Output

One row per deduplicated job matching your search.

FieldTypeNotes
job_idstringStable unique id, dedupe key.
titlestringJob title.
descriptionstringFull job description text.
citystring | nullCity, if published.
urlstringAbsolute https:// job URL.
contract_typestring | nulle.g. "Contrato indefinido".
salary_minnumber | nullSalary range minimum — null when salary is not published.
salary_maxnumber | nullSalary range maximum — null when salary is not published.
salary_periodstring | nulle.g. "YEAR".
salary_currencystring | nulle.g. "EUR".
workdaystring | nulle.g. "Jornada completa".
teleworkingstring | nulle.g. "Híbrido".
published_atstringISO-8601 UTC posting timestamp.
company_namestring | nullHiring company's name.
company_logo_urlstring | nullHiring company's logo URL.
company_urlstring | nullHiring company's InfoJobs profile URL.
statesarray<string>Offer state flags, e.g. ["published"]. May be empty.
is_executivebooleanExecutive-level listing flag.

Example output

{
"job_id": "857fba60ca48faa2976d0436cd55d4",
"title": "Developer Mainframe COBOL (Z/OS, inglés)",
"description": "Buscamos un desarrollador con experiencia en COBOL...",
"city": "Madrid",
"url": "https://www.infojobs.net/madrid/developer-mainframe-cobol.-ibm-z-.-ingles/of-i857fba60ca48faa2976d0436cd55d4",
"contract_type": "Indefinido",
"salary_min": null,
"salary_max": null,
"salary_period": null,
"salary_currency": null,
"workday": "Completa",
"teleworking": "Híbrido",
"published_at": "2026-09-24T10:15:00Z",
"company_name": "Grupo IBM Partner",
"company_logo_url": "https://static.infojobs.net/...",
"company_url": "https://www.infojobs.net/empresa/...",
"states": ["published"],
"is_executive": false
}

💰 Pricing

Pay-Per-Event — you pay only when these events fire:

EventUSDWhat it is
actor-start$0.20One-off warm-up charge per run
result-emitted$0.0025Per deduplicated job posting written to the dataset

Example: 1 000 job postings = $2.70 per run ($0.20 start + 1000 x $0.0025) — $2.70 / 1,000 results once you're pulling more than a handful of rows per run. No subscription, no minimum, no card required to try it.

🚧 Limitations

  • Single search per run. One keyword plus an optional province per run — no multi-keyword batching in this version.
  • maxResults vs maxPages are independent caps. Whichever fires first stops the run: hit your result budget, hit your page-fetch budget, or run out of pages InfoJobs actually has. The status message tells you which one applied.
  • List-page fields only. This returns the fields InfoJobs' search result page publishes — it doesn't follow through to any further detail page.
  • A narrow search can legitimately return zero rows. That's a successful run, not a failure — widen your keyword or drop the province filter.
  • Spain only. InfoJobs operates exclusively in the Spanish market.

❓ FAQ

Do I need an InfoJobs account or API key? No. This reads InfoJobs' public search result pages.

Why did my run return fewer rows than maxResults? Either the search genuinely has fewer matching jobs than your cap, or maxPages stopped the run first — the status message tells you which.

What happens if a job posting is malformed or missing a field? It's skipped and logged, and the rest of the page still comes through — one bad row never drops your whole run.

Can I filter by province? Yes — pass a plain Spanish province name ("Madrid", "Barcelona") or its numeric InfoJobs id ("33"); both resolve the same way.

Can I run this on a schedule? Yes — use Apify Schedules to re-run your keyword/province combination on a cadence and catch newly posted jobs.

Your feedback

Found a bug, or need a field we don't return yet? Contact us at https://apify.com/DevilScrapes — we read every message.