Tecnoempleo Scraper avatar

Tecnoempleo Scraper

Pricing

from $1.20 / 1,000 results

Go to Apify Store
Tecnoempleo Scraper

Tecnoempleo Scraper

[💰 $1.2 / 1K] Scrape IT & tech jobs from Tecnoempleo, Spain's largest technology job board. Get title, company, province, remote/hybrid, tech stack, contract type, salary & posted date. Filter by keyword, location, category & more.

Pricing

from $1.20 / 1,000 results

Rating

0.0

(0)

Developer

SolidCode

SolidCode

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Share

Pull live IT and tech job listings from Tecnoempleo — Spain's largest technology job board (~2,700 active openings) — with the full technology stack, work arrangement, contract type, salary range, and posted date on every row. Search by keyword with Boolean operators, narrow by any of 52 Spanish provinces and 38 role categories, and optionally enrich each job with its full description and external apply link. Built for tech recruiters, IT staffing agencies, and labor-market analysts who need structured Spanish tech-hiring data without copy-pasting listings one page at a time.

Why This Scraper?

  • Full technology stack on every job — each listing returns its own technologies array (Java, Python, Azure, Kubernetes, React…), scoped to the role itself and never polluted by the site's sitewide "most-demanded tech" widget.
  • 52 Spanish provinces + 38 professional-function categories — filter Madrid and Barcelona down to Ourense or Teruel, and target precise roles from Programmer/Developer and DevOps to Cybersecurity, AI/Machine Learning, and IT Architect.
  • 4 work-arrangement filters — 100% Remote, Hybrid, On-site, or Unspecified, classified per job so you can build a remote-only or on-site-only pipeline in one run.
  • 6 contract types + 6 work schedules — filter by Permanent (Indefinido), Temporary, Internship (Prácticas), Work/Service, Freelance/Self-employed, or To-be-determined, and by Full-time, Half-day, hourly, mornings, afternoons, or rotating shift.
  • Boolean keyword search — combine terms with OR / AND / AND NOT and wrap exact phrases in "quotes" to widen or tighten a search the way you would on the site itself.
  • Split salary output — when a listing discloses pay, you get salaryMin, salaryMax, and salaryCurrency as clean numbers alongside the raw salaryText, ready for benchmarking without regex.
  • Optional per-job detail enrichment — flip on includeDetails to add the full job description, minimum education level, and the external apply URL from each job's own page.
  • 9 experience bands + a 24-hour recency window — cap results at "No experience" through "More than 10 years", and pull only jobs posted in the last 24 hours — ideal for daily scheduled runs that catch just the newest postings.

Use Cases

Tech Recruitment & Sourcing

  • Build a live feed of remote Python or DevOps roles across all of Spain.
  • Track which companies are hiring for a specific stack (e.g. "machine learning" AND python) in Madrid and Barcelona.
  • Pull only last-24-hour postings each morning to reach candidates before competitors do.

Salary Benchmarking

  • Collect disclosed salary ranges by role category and province for compensation reports.
  • Compare pay bands for permanent versus freelance IT contracts.
  • Track how remote roles are priced against on-site equivalents.

Labor-Market Research

  • Measure demand for emerging technologies by counting jobs per stack over time.
  • Map hiring concentration across the 52 provinces to spot regional tech hubs.
  • Analyze the mix of contract types and experience requirements in the Spanish IT market.

Lead Generation & Sales Intelligence

  • Identify companies actively hiring engineers as prospects for staffing, training, or tooling.
  • Extract company names and profile links for outreach lists filtered by role category.
  • Feed fresh hiring signals into your CRM for account-based marketing.

Getting Started

{
"query": "python",
"maxResults": 100
}

Keyword + province + remote-only

{
"query": "devops OR kubernetes",
"provinces": ["263"],
"workModality": ["1"],
"maxResults": 200
}

Full filtered search with detail enrichment

{
"query": "\"machine learning\" AND python",
"provinces": ["263", "240"],
"professionalFunctions": ["53", "34"],
"contractType": ["1"],
"experience": "6",
"includeDetails": true,
"maxResults": 300
}

From your own search URLs

{
"startUrls": [
"https://www.tecnoempleo.com/ofertas-trabajo/?te=java&pr=,263,&en_remoto=,1,"
],
"includeDetails": true
}

Input Reference

What to Scrape

ParameterTypeDefaultDescription
querystring"python"Job title, technology, or keyword. Combine terms with OR / AND / AND NOT and wrap exact phrases in "quotes". Leave blank to collect all jobs matching the filters.
startUrlsarray[]Advanced: paste tecnoempleo.com search URLs built in the site's own search page. When provided, the keyword and filters are ignored for those URLs.

Filters

ParameterTypeDefaultDescription
provincesarray[]One or more of the 52 Spanish provinces (A Coruña, Madrid, Barcelona, Valencia…). Empty means the whole country. Multiple selections are combined as "any of".
workModalityarray[]Work arrangement: 100% Remote, Hybrid, On-site, or Unspecified. Empty means any.
professionalFunctionsarray[]Role categories such as Programmer/Developer, DevOps, Cybersecurity, AI/Machine Learning, IT Architect, and more. Empty means all categories.
contractTypearray[]Employment type: Permanent (Indefinido), Temporary, Internship (Prácticas), Work/Service, Freelance/Self-employed, or To be determined. Empty means any.
workdayarray[]Work schedule: Full-time, Half-day, By the hour, Mornings, Afternoons, or Rotating shift. Empty means any.
experiencestring"" (Any)Only jobs requiring at most this experience level, from No experience up to More than 10 years.
postedSincestring"" (Any time)Limit to jobs posted recently. Today and Last 24 hours both map to the site's single 24-hour recency window.

Output & Limits

ParameterTypeDefaultDescription
includeDetailsbooleanfalseOff for fast results. Turn on to also fetch each job's full description, minimum education, and external apply link from its own page (slower on large searches).
maxResultsinteger100Hard cap on total jobs returned across all searches and URLs. Set to 0 for no cap (the site tops out around 2,700 active listings).

Output

Every job is one flat row. Fast list mode fills the core fields below; turning on includeDetails adds the description, education, apply link, numeric ID, and any fields absent from the listing card. In the example below, contractType, workday, experience, education, description, applyUrl, and numericId are populated only when includeDetails is true.

{
"jobId": "rf-8f3a2b1c",
"numericId": "153604",
"title": "Senior Python Developer",
"url": "https://www.tecnoempleo.com/senior-python-developer/rf-8f3a2b1c",
"company": "Acme Tech Solutions",
"companyUrl": "https://www.tecnoempleo.com/empresa/acme-tech-solutions",
"location": "Madrid",
"province": "Madrid",
"country": "ES",
"workModality": "100% Remote",
"technologies": ["Python", "Django", "PostgreSQL", "AWS", "Docker"],
"professionalFunction": "Programmer / Developer",
"contractType": "Permanent (Indefinido)",
"workday": "Full-time",
"experience": "3-5 years",
"education": "Bachelor's degree",
"salaryText": "€45.000 - 55.000 b/a",
"salaryMin": 45000,
"salaryMax": 55000,
"salaryCurrency": "EUR",
"publishDate": "02/07/2026",
"publishDateISO": "2026-07-02",
"description": "We are looking for a Senior Python Developer to join our platform team...",
"applyUrl": "https://careers.acmetech.com/apply/12345",
"isUrgent": false,
"scrapedAt": "2026-07-03T09:14:00.000Z",
"searchQuery": "python"
}

Core Fields

FieldTypeDescription
jobIdstringStable Tecnoempleo job identifier (rf-<code>, matches the job URL), identical in fast and detail mode.
numericIdstring | nullThe site's short numeric job id (detail mode).
titlestringJob title.
urlstringCanonical job detail URL.
technologiesarrayTechnology and skill tags required for this role.
professionalFunctionstringRole category (Programmer/Developer, DevOps, Cybersecurity…).
isUrgentbooleanWhether the listing is flagged "Urgente".

Company & Location

FieldTypeDescription
companystringHiring company name.
companyUrlstring | nullCompany profile URL on Tecnoempleo, when shown.
locationstring | nullLocation text as shown on the listing.
provincestring | nullSpanish province.
countrystringCountry code (ES for Spain).
workModalitystring | null100% Remote, Hybrid, On-site, or Unspecified.

Employment Terms

FieldTypeDescription
contractTypestring | nullEmployment type (detail mode).
workdaystring | nullWork schedule (detail mode).
experiencestring | nullRequired experience band.
educationstring | nullMinimum education level (detail mode).

Compensation

FieldTypeDescription
salaryTextstring | nullRaw salary string as shown, when disclosed.
salaryMinnumber | nullParsed lower salary bound.
salaryMaxnumber | nullParsed upper salary bound.
salaryCurrencystring | nullCurrency code (EUR).

Dates, Details & Provenance

FieldTypeDescription
publishDatestring | nullPublication date in the site's format.
publishDateISOstring | nullPublication date normalized to ISO (YYYY-MM-DD).
descriptionstring | nullFull job description text (detail mode).
applyUrlstring | nullExternal apply link (detail mode, when the listing links out).
scrapedAtstringISO timestamp of when the row was collected.
searchQuerystring | nullThe keyword or filter set that produced this row.

Tips for Best Results

  • Keep includeDetails off for fast, high-volume runs — the listing card already carries title, company, location, work arrangement, technologies, salary (when shown), and posted date. Turn it on only when you specifically need the full description, education level, or apply link, since each job then needs an extra page visit.
  • Widen a search with Boolean ORpython OR django OR flask returns any job mentioning any of the terms, while python AND aws narrows to jobs that mention both.
  • Select multiple provinces at once — they combine as "any of", so ["263", "240"] (Madrid + Barcelona) returns roles in either without running two separate searches.
  • Salary is disclosed on only a minority of Spanish tech listings, so salaryMin / salaryMax are often null — build benchmarking on the jobs that do publish pay rather than expecting it everywhere.
  • Use postedSince set to Last 24 hours on a daily schedule to capture only new openings — pair it with a downstream dedup step to maintain a rolling feed.
  • Combine a role category with a province to build a tight sourcing list — for example DevOps roles in Valencia, or Cybersecurity roles across Madrid and Bizkaia.
  • Set maxResults to 0 only when you truly want the whole board; the site holds around 2,700 active listings and each returned row is billed at the per-result rate.

Pricing

From $1.20 per 1,000 results — undercutting other Tecnoempleo extractors while returning a richer, ready-to-use flat schema. Bronze, Silver, and Gold subscribers pay progressively less; the table below shows total cost at each discount tier.

ResultsNo discountBronzeSilverGold
100$0.14$0.135$0.13$0.12
1,000$1.40$1.35$1.30$1.20
10,000$14.00$13.50$13.00$12.00
100,000$140.00$135.00$130.00$120.00

A "result" is one job row pushed to your dataset. No compute or time-based charges — you pay per result, plus a small fixed per-run start fee.

Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps:

  • Zapier / Make / n8n — Workflow automation
  • Google Sheets — Direct spreadsheet export
  • Slack / Email — Notifications on new results
  • Webhooks — Trigger custom APIs on run completion
  • Apify API — Full programmatic access

This scraper collects publicly available job-listing data from Tecnoempleo for legitimate business purposes such as recruitment, market research, and analytics. You are responsible for using the collected data in compliance with Tecnoempleo's terms of service, applicable data-protection laws (including the GDPR), and any rules governing the processing of personal data. Do not use the data for spam, unsolicited contact, or any purpose that infringes the rights of listed companies or individuals. Always review and respect the target website's terms before running large-scale collections.