Tecnoempleo Scraper — Spain IT Jobs, Salaries & Full Text avatar

Tecnoempleo Scraper — Spain IT Jobs, Salaries & Full Text

Pricing

from $0.10 / 1,000 job results

Go to Apify Store
Tecnoempleo Scraper — Spain IT Jobs, Salaries & Full Text

Tecnoempleo Scraper — Spain IT Jobs, Salaries & Full Text

Spanish IT and developer jobs from Tecnoempleo.com: title, company, city, salary when published, work type, date, full description and apply URL. Filter by province, modality, category and keyword. Independent tool, not affiliated with Tecnoempleo. No login or API key.

Pricing

from $0.10 / 1,000 job results

Rating

0.0

(0)

Developer

Nomad Dev

Nomad Dev

Maintained by Community

Actor stats

0

Bookmarked

9

Total users

3

Monthly active users

5 days ago

Last modified

Categories

Share

Tecnoempleo Scraper — 2,400+ Spain IT & Tech Jobs

Start with one input and output

An Apify account is required. Use your Apify API token when calling the API; Console runs do not need that token pasted into the input. No user API-key field is required by this input schema.

Free-tier event rates checked 2026-10-04: actor-start $5e-05; result $0.0001.

Cost: Total = Actor event charges + platform usage if separately billed + any BYO-provider charges. See “Current costs” for your event rates, plan tiers and a calculation. A sample does not promise future billable volume.

Input and output below were read from the same successful run Obgf0UMTCMjzb380K (2026-10-03, immutable build WsqKCJYE0HnjAYMu6). This is an observed example, not a guarantee that repeating it returns this row. It used an earlier build; current-build execution has not been proved by this example.

Input JSON

{
"remote": "any",
"includeDescription": true,
"titleExclude": [],
"companyExclude": [],
"postedWithin": "any",
"maxItems": 80,
"cacheTtlSeconds": 1800
}

Matching output excerpt

Long strings and arrays are shortened for display; this is not a complete dataset fixture.

{
"schemaVersion": "nomad-agent-job-row-v3",
"source": "tecnoempleo",
"id": "rf-05fe1b9ab2d4730c014d",
"url": "https://www.tecnoempleo.com/net-developer-electronic-trading-cas-training/net-core-aspnet/rf-05fe1b9ab2d4730c014d",
"title": ".NET Developer – Electronic Trading",
"company": "CAS TRAINING",
"locations": [
"Madrid"
],
"postedAt": "2026-10-03",
"deadline": null,
"description": "Senior .NET Developer – Electronic Trading\n📍 Modalidad: 100% remoto\n💰 Tarifa máxima: 38000 a 42000 mil brutos anuales\n🌐 Inglés: Nivel avanzado imprescindible\n¿Eres Senior .NET Developer y te apetece trabajar en un proyecto greenfield, con arquitectura moderna y dentro de un entorno de Electronic Trading?\nEstamos incorporando 4 Senior Developers para particip… [truncated for display]",
"descriptionHtml": "\r\n\t\t\t\t\t\tSenior .NET Developer – Electronic Trading<br/>📍 Modalidad: 100% remoto<br/>💰 Tarifa máxima: 38000 a 42000 mil brutos anuales<br/>🌐 Inglés: Nivel avanzado imprescindible<br/><br/><br/>¿Eres Senior .NET Developer y te apetece trabajar en un proyecto greenfield, con arquitectura moderna y dentro de un entorno de Electronic Trading?<br/><br/>Estamos inc… [truncated for display]",
"workType": "remote",
"salary": "33000-42000 EUR/year",
"employmentTypes": [
"Full-time"
],
"hiringContacts": []
}

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 returns its vacancies — thousands of them, far beyond the ~80-item cap of the site's RSS feed — as 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.

Postings come from a store we refresh from Tecnoempleo every hour. Each one is kept only once its complete description has been read from the posting page, so every row carries the full text, never a teaser. If the store is briefly unavailable, the run returns no rows and its RUN-SUMMARY record says so; you are billed only the start.

What Tecnoempleo data does this scraper extract?

Published postings follow nomad-agent-job-row-v3: 15 fields carrying source identity, title and company, the city, dates, the complete plain-text body and the source's markup, work type, salary, employment types and hiring contacts. Unavailable scalar facts are null; no usable location is []. There is no recordType, no custom object and no extra columns. See the Output example section for every field.

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)Case-insensitive text matched against title, company, description and technologies. Leave empty to return everything.
provincestring(empty)Spanish province or city name (e.g. Madrid, Barcelona, Malaga), matched accent/case-insensitively against each posting's location. A name no posting carries returns no postings.
remotestringanyWork modality: remote (100%), hybrid, on-site, or any. A posting whose page states no modality is left out when you choose one.
categorystring(empty)Professional-function / category name (e.g. Programador, Analista, DevOps), matched accent/case-insensitively against the categories the posting lists (a partial name also matches).
includeDescriptionbooleantrueKept for existing integrations and ignored. Every posting already carries its complete description and, where the employer discloses it, its salary.
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, newest first. The store holds the whole live catalogue, well beyond the RSS feed's ~80-item cap. Set 0 for no limit.
cacheTtlSecondsinteger1800(Advanced) Kept for existing integrations and no longer used: runs read the hourly-refreshed store, not Tecnoempleo itself.

Output example

Every row follows nomad-agent-job-row-v3, the one shape shared by 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-v3",
"source": "tecnoempleo",
"id": "rf-07d4125d3256f330754d",
"url": "https://www.tecnoempleo.com/programadores-junior-senior-java-seltime/springboot-angular/rf-07d4125d3256f330754d",
"title": "Programadores junior/senior Java",
"company": "Seltime",
"locations": ["Madrid"],
"postedAt": "2026-09-18",
"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,
"salary": "21000-33000 EUR/year",
"employmentTypes": ["Full-time"],
"hiringContacts": []
}
FieldMeaning
schemaVersionAlways "nomad-agent-job-row-v3".
sourceAlways "tecnoempleo". Together with id it identifies the posting.
idTecnoempleo's own posting id, rf- plus 20 hex characters. Stable across runs and unchanged from earlier versions of this Actor.
urlCanonical public URL of the posting on Tecnoempleo.
titleJob title exactly as published.
companyEmployer name as published; null when the posting names none.
locationsThe posting's city, e.g. ["Madrid"]. [] when the page published no city (a fully remote posting without one). Work arrangement is never a place; it is in workType.
postedAtThe posting date as the source publishes it, normally a calendar date (YYYY-MM-DD); null when the source published none.
deadlineApplication deadline when the posting states one (rare), else null.
descriptionThe complete posting body as plain text — never truncated, never summarised.
descriptionHtmlThe posting body as the source's own markup.
workTyperemote, hybrid or onsite when the page states exactly one arrangement, else null. Never defaulted.
salaryThe salary the employer published, as text: the stored range written out with its currency and period (21000-33000 EUR/year, 900-1200 EUR/month; one number when both bounds are equal, min …/max … when only one is published). null when no salary is published. These are the published numbers only, not a net/gross judgement.
employmentTypesFull-time, Part-time, Contract and/or Internship as stated by the posting, else null.
hiringContactsNamed people the posting lists as contacts; [] when none (Tecnoempleo lists none today).

A run that matches nothing, or whose store is briefly unavailable, returns an empty dataset: a dataset row is always a posting. The run's RUN-SUMMARY record (key-value store) says whether it was empty or degraded.

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

Check this Actor’s Pricing tab for the current charges for your Apify plan.

Pay per event, with actor-start and job-result events. You are not billed for results that were not returned; no subscription is required.

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? The store is refreshed from Tecnoempleo every hour, and a posting appears once its full description has been read. Results are newest first.

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? Every posting carries its complete description; there is nothing to enable. salary is text such as 27000-30000 EUR/year, filled only when the employer discloses pay (about one posting in six).

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? A run that matches nothing returns an empty dataset (its RUN-SUMMARY says why). Relax keyword, province, category, remote or postedWithin and re-run.

Changes

  • October 2026 — new row format (breaking). Rows are now nomad-agent-job-row-v3 (15 fields) instead of nomad-agent-job-row-v1. Removed: recordType (a dataset row is always a posting; the diagnostic row is gone, RUN-SUMMARY reports empty and degraded runs), custom and the deprecated aliases category, location (now locations), salaryMin, salaryMax, salaryCurrency, salaryPeriod (now one salary text), snippet (use description) and technologies. Added: employmentTypes, hiringContacts, and workType filled from the posting's stated arrangement. id keeps its rf- form, so integrations keyed on (source, id) are unaffected. Input, pricing and the keyword/province/category/remote filters are unchanged (keyword and category still match the posting's technology tags and categories).

  • 2026-09 — postings come from a store refreshed hourly. Inputs and output fields are unchanged. Runs no longer crawl Tecnoempleo themselves, so they are faster and every row carries the complete description. technologies now lists all of a posting's tags, not just the first three the listing card shows, and category comes from the posting page. descriptionHtml is filled with the posting's own markup. includeDescription and cacheTtlSeconds are accepted and no longer change anything.

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.

Fast setup and source code

Public repository · Agent setup skill.

Use the Actor’s current input form for filters, or start with its documented API example. Select latest for tecnoempleo-scraper and record the immutable build ID and number returned by your run. Inspect the dataset and any run summary the Actor documents together; a successful status alone does not establish complete source coverage.

Restrictive filters or repeat-delivery suppression can produce zero results. Diagnostics and demo records are not source records. Optional AI or translation stays explicit where supported.

Observed output example

Selected fields from a real source record inspected on 2026-10-03; consult the output schema for the full contract. Values change with the source.

{
"schemaVersion": "nomad-agent-job-row-v3",
"source": "tecnoempleo",
"id": "rf-000111fd524293cc894f",
"url": "https://www.tecnoempleo.com/programador-sap-abap-evolutivos-serem/sap/rf-000111fd524293cc894f",
"title": "Programador SAP ABAP - Evolutivos",
"company": "Serem",
"locations": [
"Madrid"
],
"postedAt": "2026-10-02",
"deadline": null,
"description": "Buscamos un Programador SAP ABAP con alrededor de 4 años de experiencia para incorporarse a un equipo especializado en mantenimiento y evolución de soluciones SAP.\nLa posición estará orientada al desarrollo de evolutivos y mejoras sobre sistemas críticos de negocio, participando también en el análisis, implantación y resolución de incidencias.\nFunciones principales\n- Desarrollo y mantenimiento de programas en SAP ABAP.\n- Análisis y desarrollo de evolutivos sobre soluciones SAP.\n- Participación en la implantación de mejoras.\n- Resolución de incidencias y soporte sobre las soluciones existentes.\n- Mantenimiento evolutivo y correctivo de aplicaciones SAP.\n- Colaboración con el equipo en la mejora continua de los sistemas.\nRequisitos\n- Al menos 4 años de experiencia en desarrollo SAP ABAP.\n- Experiencia en proyectos de mantenimiento y desarrollo de evolutivos.\n- Experiencia en desarrollo y mantenimiento de programas SAP ABAP.\n- Capacidad de análisis y resolución de incidencias.\nCondiciones\n- Perfil: Programador SAP ABAP.\n- Especialización: Desarrollo y evolutivos.\n- Tecnología: SAP ABAP.\n- Experiencia: +4 años.",
"workType": null,
"salary": null,
"employmentTypes": [
"Full-time"
],
"hiringContacts": []
}

Current costs

Current Actor event rates, checked 2026-10-04. USD; use the Pricing tab for your plan and later changes.

EventFreeBronzeSilverGoldPlatinumDiamond
Actor start (actor-start)$5e-05$5e-05$5e-05$5e-05$5e-05$5e-05
Job result (result)$0.0001$0.0001$0.0001$0.0001$0.0001$0.0001

For example, 1 × actor-start, 100 × result totals $0.01005 in Actor event charges on Free. This is an arithmetic example, before any waiver; actual charged events depend on the run and selected options. It is not a promise of output or a charge for simply setting an item cap.

Your total is the charged Actor events, plus platform usage only if this Actor’s Pricing tab bills it separately, plus any external provider you use with your own key. Do not add platform usage twice when it is included. Apify credits and plan discounts affect your invoice. Set a run cost limit in Console before starting.