Tecnoempleo Scraper
Pricing
from $1.20 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 days ago
Last modified
Categories
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
technologiesarray (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 NOTand 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, andsalaryCurrencyas clean numbers alongside the rawsalaryText, ready for benchmarking without regex. - Optional per-job detail enrichment — flip on
includeDetailsto 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
Simple keyword search
{"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
| Parameter | Type | Default | Description |
|---|---|---|---|
query | string | "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. |
startUrls | array | [] | 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
| Parameter | Type | Default | Description |
|---|---|---|---|
provinces | array | [] | 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". |
workModality | array | [] | Work arrangement: 100% Remote, Hybrid, On-site, or Unspecified. Empty means any. |
professionalFunctions | array | [] | Role categories such as Programmer/Developer, DevOps, Cybersecurity, AI/Machine Learning, IT Architect, and more. Empty means all categories. |
contractType | array | [] | Employment type: Permanent (Indefinido), Temporary, Internship (Prácticas), Work/Service, Freelance/Self-employed, or To be determined. Empty means any. |
workday | array | [] | Work schedule: Full-time, Half-day, By the hour, Mornings, Afternoons, or Rotating shift. Empty means any. |
experience | string | "" (Any) | Only jobs requiring at most this experience level, from No experience up to More than 10 years. |
postedSince | string | "" (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
| Parameter | Type | Default | Description |
|---|---|---|---|
includeDetails | boolean | false | Off 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). |
maxResults | integer | 100 | Hard 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
| Field | Type | Description |
|---|---|---|
jobId | string | Stable Tecnoempleo job identifier (rf-<code>, matches the job URL), identical in fast and detail mode. |
numericId | string | null | The site's short numeric job id (detail mode). |
title | string | Job title. |
url | string | Canonical job detail URL. |
technologies | array | Technology and skill tags required for this role. |
professionalFunction | string | Role category (Programmer/Developer, DevOps, Cybersecurity…). |
isUrgent | boolean | Whether the listing is flagged "Urgente". |
Company & Location
| Field | Type | Description |
|---|---|---|
company | string | Hiring company name. |
companyUrl | string | null | Company profile URL on Tecnoempleo, when shown. |
location | string | null | Location text as shown on the listing. |
province | string | null | Spanish province. |
country | string | Country code (ES for Spain). |
workModality | string | null | 100% Remote, Hybrid, On-site, or Unspecified. |
Employment Terms
| Field | Type | Description |
|---|---|---|
contractType | string | null | Employment type (detail mode). |
workday | string | null | Work schedule (detail mode). |
experience | string | null | Required experience band. |
education | string | null | Minimum education level (detail mode). |
Compensation
| Field | Type | Description |
|---|---|---|
salaryText | string | null | Raw salary string as shown, when disclosed. |
salaryMin | number | null | Parsed lower salary bound. |
salaryMax | number | null | Parsed upper salary bound. |
salaryCurrency | string | null | Currency code (EUR). |
Dates, Details & Provenance
| Field | Type | Description |
|---|---|---|
publishDate | string | null | Publication date in the site's format. |
publishDateISO | string | null | Publication date normalized to ISO (YYYY-MM-DD). |
description | string | null | Full job description text (detail mode). |
applyUrl | string | null | External apply link (detail mode, when the listing links out). |
scrapedAt | string | ISO timestamp of when the row was collected. |
searchQuery | string | null | The keyword or filter set that produced this row. |
Tips for Best Results
- Keep
includeDetailsoff 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
OR—python OR django OR flaskreturns any job mentioning any of the terms, whilepython AND awsnarrows 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/salaryMaxare often null — build benchmarking on the jobs that do publish pay rather than expecting it everywhere. - Use
postedSinceset 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
maxResultsto0only 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.
| Results | No discount | Bronze | Silver | Gold |
|---|---|---|---|---|
| 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
Legal & Ethical Use
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.