Tecnoempleo Scraper — 2,400+ Spain IT Jobs, Salaries & Empleo avatar

Tecnoempleo Scraper — 2,400+ Spain IT Jobs, Salaries & Empleo

Pricing

from $1.20 / 1,000 job results

Go to Apify Store
Tecnoempleo Scraper — 2,400+ Spain IT Jobs, Salaries & Empleo

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.

Pricing

from $1.20 / 1,000 job results

Rating

0.0

(0)

Developer

Nomad Dev

Nomad Dev

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

3

Monthly active users

7.5 days

Issues response

2 days ago

Last modified

Categories

Share

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

  1. Click Try for free / Run — no login to the target site, no cookies, no proxies to configure.
  2. Adjust the input (keyword, filters, maxItems) or keep the defaults.
  3. 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 ApifyClient
client = 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

FieldTypeDefaultNotes
keywordstring(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.
provincestring(empty)Spanish province name (e.g. Madrid, Barcelona, Malaga). Accent/case-insensitive, resolved live against the site's province list. Unrecognised names are ignored.
remotestringanyWork modality: remote (100%), hybrid, on-site, or any.
categorystring(empty)Professional-function / category name (e.g. Programador, Analista, DevOps). Accent/case-insensitive, resolved live. Unrecognised names are ignored.
includeDescriptionbooleanfalseFetch each posting's detail page to fill the full description and structured salary (EUR). One extra request per returned posting.
titleExcludearray[]Drop listings whose title contains any of these case-insensitive terms.
companyExcludearray[]Drop listings whose company contains any of these case-insensitive terms.
postedWithinstringanyKeep 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.
maxItemsinteger80Maximum postings to return. HTML pagination goes well beyond the RSS feed's ~80-item cap. Set 0 for no limit.
cacheTtlSecondsinteger1800(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": []
}
FieldMeaning
schemaVersionAlways "nomad-agent-job-row-v1".
recordType"posting" for a job, "diagnostic" for a row reporting something about the run itself.
sourceWhich job source the posting came from, from the collector registry's vocabulary — not the Actor name.
idStable identifier for the posting within source.
urlCanonical public URL of the posting on the source site.
titleJob title exactly as the source publishes it, untruncated.
companyEmployer name as published.
locationsPlaces the role is based, most specific first — e.g. ["Bilbao", "Spain"].
postedAtWhen the source published the posting, ISO-8601 UTC (YYYY-MM-DDTHH:MM:SSZ).
deadlineClosing date for applications as an ISO-8601 calendar date (YYYY-MM-DD).
descriptionThe complete posting body as plain text — never truncated, never summarised.
descriptionHtmlThe posting body as the source's own markup, preserving lists, headings and links.
workTypeWorking arrangement: "remote", "hybrid" or "onsite".
customFacts 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 returnedYou 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 keyword input

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.


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.