Tecnoempleo Scraper — 2,400+ Spain IT Jobs, Salaries & Empleo
Pricing
from $1.20 / 1,000 job results
Tecnoempleo Scraper — 2,400+ Spain IT Jobs, Salaries & Empleo
Scrape Tecnoempleo.com's full live catalogue — 2,400+ Spanish IT & developer jobs (empleo), far beyond the ~80-item cap of its RSS feed. Get title, company, province, EUR salary, tech stack, date & apply URL. Filter by province, work modality, category & keyword; delta mode for daily alerts.
Tecnoempleo Scraper — 2,400+ Spain IT & Tech Jobs
Scrape current IT and developer vacancies from Tecnoempleo.com, Spain's dedicated tech job board.
Claude / Codex skill to describe and setup this actor: SKILL.md
Tecnoempleo is one of Spain's largest specialist IT job boards, carrying developer, DevOps, data, QA and technical-management roles from Spanish employers and consultancies. This Actor crawls its live listing pages — thousands of vacancies, far beyond the ~80-item cap of the site's RSS feed — into clean, deduplicated JSON, so you can filter Spanish tech empleo by province, work modality, category and keyword and pipe it straight into your own tools. No login, no proxies.
If the HTML listing is ever unreachable, the Actor automatically falls back to the site's RSS feed instead of failing, so a run always returns the most recent postings it can.
What Tecnoempleo data does this scraper extract?
Published postings follow nomad-agent-job-row-v1. The shared fields carry
source identity, title and company, parsed locations, dates, the complete
plain-text body when available, source markup when usable, and work type.
Unavailable scalar facts are null; no parsed location is []. Source-only
facts appear in versioned custom.data only when mapped there. See the
Output example section for the exact dataset fields and diagnostic rows.
How to scrape Tecnoempleo with this Actor
- Click Try for free / Run — no login to the target site, no cookies, no proxies to configure.
- Adjust the input (keyword, filters,
maxItems) or keep the defaults. - Run it and export the dataset as JSON, CSV or Excel, or read it over the API.
Run it from your own code:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("nomad-agent/tecnoempleo-scraper").call(run_input={"maxItems": 50})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], "—", item["company"], item["url"])
Or a single HTTP call that runs the Actor and returns items in one response:
curl -X POST \"https://api.apify.com/v2/acts/nomad-agent~tecnoempleo-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"maxItems": 50}'
Input
| Field | Type | Default | Notes |
|---|---|---|---|
keyword | string | (empty) | Sent to Tecnoempleo's own search (narrows the crawl) and applied client-side against title, company, snippet and technologies. Leave empty to return everything. |
province | string | (empty) | Spanish province name (e.g. Madrid, Barcelona, Malaga). Accent/case-insensitive, resolved live against the site's province list. Unrecognised names are ignored. |
remote | string | any | Work modality: remote (100%), hybrid, on-site, or any. |
category | string | (empty) | Professional-function / category name (e.g. Programador, Analista, DevOps). Accent/case-insensitive, resolved live. Unrecognised names are ignored. |
includeDescription | boolean | false | Fetch each posting's detail page to fill the full description and structured salary (EUR). One extra request per returned posting. |
titleExclude | array | [] | Drop listings whose title contains any of these case-insensitive terms. |
companyExclude | array | [] | Drop listings whose company contains any of these case-insensitive terms. |
postedWithin | string | any | Keep only jobs published inside this window. Use any for no date filter, or a duration — 1h, 24h, 3d, 2w, 6m. Jobs the source published no date for are kept rather than dropped. Based on the posting date shown by Tecnoempleo. Replaces postedSince, still accepted for existing integrations. |
maxItems | integer | 80 | Maximum postings to return. HTML pagination goes well beyond the RSS feed's ~80-item cap. Set 0 for no limit. |
cacheTtlSeconds | integer | 1800 | (Advanced) Reuses fetched listing/detail pages for this many seconds so rapid re-runs don't hit Tecnoempleo again. Set 0 to always fetch live. |
Output example
Every row follows nomad-agent-job-row-v1, the one shape shared by all of
this fleet's job Actors. A row carries every field; null means the
source did not publish that fact, and locations: [] means no
usable location was parsed from the posting. Nothing is guessed.
{"schemaVersion": "nomad-agent-job-row-v1","recordType": "posting","source": "tecnoempleo","id": "a1b2c3","url": "https://example.com/tecnoempleo/jobs/a1b2c3","title": "Senior Backend Engineer","company": "Example Company","locations": ["Bilbao","Spain"],"postedAt": "2026-09-02T00:00:00Z","deadline": null,"description": "The complete posting body as plain text, exactly as the source published it — never truncated.","descriptionHtml": "<p>The complete posting body as the source's own markup.</p>","workType": null,"custom": {"schemaId": "nomad-agent-job-custom-tecnoempleo-v1","data": {"category": "…","technologies": "…"}},"category": null,"location": null,"salaryCurrency": null,"salaryMax": null,"salaryMin": null,"salaryPeriod": null,"snippet": null,"technologies": []}
| Field | Meaning |
|---|---|
schemaVersion | Always "nomad-agent-job-row-v1". |
recordType | "posting" for a job, "diagnostic" for a row reporting something about the run itself. |
source | Which job source the posting came from, from the collector registry's vocabulary — not the Actor name. |
id | Stable identifier for the posting within source. |
url | Canonical public URL of the posting on the source site. |
title | Job title exactly as the source publishes it, untruncated. |
company | Employer name as published. |
locations | Places the role is based, most specific first — e.g. ["Bilbao", "Spain"]. |
postedAt | When the source published the posting, ISO-8601 UTC (YYYY-MM-DDTHH:MM:SSZ). |
deadline | Closing date for applications as an ISO-8601 calendar date (YYYY-MM-DD). |
description | The complete posting body as plain text — never truncated, never summarised. |
descriptionHtml | The posting body as the source's own markup, preserving lists, headings and links. |
workType | Working arrangement: "remote", "hybrid" or "onsite". |
custom | Facts only this source publishes, as {"schemaId", "data"}. |
Deprecated fields
This Actor is on a paid integration contract, so the fields it published before this shape are still emitted alongside the ones above during a transition window, unchanged:
category location salaryCurrency salaryMax salaryMin salaryPeriod snippet technologies
They will be removed once the integrations reading them have moved. Nothing above changes when they go.
A run also emits diagnostic rows — recordType: "diagnostic" with a
warnings array — when it has something to report, such as a source
returning nothing. They are never billed and are easy to filter out on
recordType.
Integrations
Export results as JSON, CSV or Excel; connect via Make, Zapier or n8n; call directly with run-sync-get-dataset-items; or plug into AI agents through the Apify MCP server.
Pricing
Pay per event: $0.005 per Actor start and $1.50 per 1,000 job results ($0.0015 each), dropping to $1.20 / 1,000 on higher Apify plans.
| Jobs returned | You pay |
|---|---|
| 100 | ≈ $0.16 |
| 1,000 | ≈ $1.51 |
| 2,400 (the full live catalogue) | ≈ $3.61 |
A run that finds nothing pushes a single free diagnostic row explaining why — you are never billed for results you did not get. No subscription, no rental.
Use cases
- Spanish tech-job boards and alert bots
- Sourcing developers in Spain
- Tracking which companies are actively hiring IT talent in Spain
- Filtering the live feed for specific tech keywords via the
keywordinput
FAQ
Is it legal to scrape Tecnoempleo? This Actor reads only publicly available job postings — data any visitor can see without logging in. No personal data behind authentication is touched. Review the target site's terms and your local regulations for your specific use case.
Do I need an account on the target site? No. Postings are fetched from public pages/APIs — no login, cookies or session tokens.
How fresh is the data?
Every run fetches live listings. Results are cached for cacheTtlSeconds (default 30 min, set 0 to always hit the source live).
How many jobs can I get?
maxItems caps the run (set 0 where supported for no cap). Most sources paginate from newest to oldest.
Which roles does Tecnoempleo cover? Primarily IT and engineering — backend/frontend developers, DevOps, data, QA, IT support and technical management — mostly across Spain, with a growing share of remote-friendly listings.
Can I get only remote jobs?
Set remote to remote (100% en remoto), hybrid or on-site. You can also filter by province and category, or read the parsed locations array in each posting.
Can I get salaries and full descriptions?
Enable includeDescription to read each posting's detail data and fill the full description where available. The shared flat fields have no structured salary columns, but this paid Actor keeps its previous salaryMin/salaryMax/salaryCurrency/salaryPeriod columns as deprecated integration aliases during the transition. They are populated only when the source discloses pay.
Something broken or missing? Open an issue on the Actor's Issues tab — it is monitored and reliability fixes ship fast.
Getting fewer results than you expected?
The Actor tells you why: a run that matches nothing pushes one free diagnostic row instead of an empty dataset. Relax keyword, province, category, remote or postedWithin and re-run.
Found it useful?
Leave a rating on the Reviews tab — it takes ten seconds, and it is the single biggest thing that helps other people in Spain's tech-hiring niche find this Actor.
Related Actors
- Web Developer Jobs Scraper — 10 Boards in One
- InfoJobs Scraper — Ofertas de Trabajo y Empleo España — AI skill tags and structured salary
- JustJoin.it Jobs Scraper — Polish Tech & IT Jobs
From the maker of Oink — an open-source, AI-powered job-search bot for Telegram that runs on these Actors. Try the free bot, get a managed instance at oinkjobsearch.com, or browse the full catalog of 50+ Actors.