Tes.com UK Education Jobs Scraper
Pricing
from $4.00 / 1,000 serp results
Tes.com UK Education Jobs Scraper
Extract teaching jobs from Tes.com, the UK's leading education job board. Returns title, employer, salary, teaching stage (primary/secondary/sixth form), subject, position type, contract, start date, closing date, and school type across UK and international schools.
Pricing
from $4.00 / 1,000 serp results
Rating
0.0
(0)
Developer
NanoScrape
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Scrape teaching jobs from Tes.com, the UK's leading education recruitment platform. Paste a search URL or a keyword and location; get every listing back as structured JSON with employer, salary, teaching stage, subject, contract type, start date, closing date — and, unique to this actor, both the school-wide contact block AND the per-vacancy contact block that Tes exposes in its two on-page popups.
What it does
Pulls live UK and international teaching vacancies from Tes.com search results, deduplicates them, and pushes them to your Apify dataset. Handles pagination automatically up to your result cap. Optionally opens each job's detail page to add structured salary ranges, ISO closing dates, full descriptions, and both contact popups. Optionally follows the employer profile page for About-us text, gallery images, school phase/funding/gender/age range and a list of every other open role at that school.
Fields you get per job:
- Job title, employer name, employer logo
- Location, country, salary (min, max, currency, period)
- Teaching stage (primary, secondary, sixth form, nursery)
- Subject (Maths, English, SEND, MFL, etc.)
- Position type (leadership, classroom, support, HLTA, SEN)
- Contract type (permanent, fixed-term, supply, maternity)
- Start date, closing date, working pattern
- School type (state, independent, academy, faith, special)
- Ofsted rating where mentioned in the ad
- Direct application URL
- School / employer website (from schema.org sameAs +
School contact detailspopup) - School postal address: street, city, postcode, country (from schema.org jobLocation.address)
job_contact_email+job_contact_phone— per-vacancy contact info from the Job contact details popup (may differ from row to row at the same school)company_phone+company_website— employer-wide contact info from the School contact details popup- With
includeCompanyDetails=true: About-us text, gallery photos, school phase, funding status, gender intake, age range, denomination, and every other open role at the same employer
Two contact popups, both extracted (unique to this actor)
Tes.com exposes two distinct contact blocks on every vacancy page and most competitor scrapers only grab one (or neither). This actor extracts both:
- School contact details — employer-wide. Applies to every job posted by that school. Populates
company_websiteandcompany_phone. - Job contact details — per-vacancy. May be a different email/phone for each vacancy at the same school (schools often route vacancies to specific recruiters). Populates
job_contact_emailandjob_contact_phone.
If your outreach hits the wrong mailbox, applications get lost. Getting both means you can address the specific recruiter for a role and still fall back to the school's central contact when the per-vacancy one is blank.
Sample output
{"_type": "job","id": "2339227","title": "Primary Teacher","employer_name": "The School of Research Science - SRS Dubai","location": "Al Warqa 4, Dubai","country": "AE","salary_text": "Undisclosed","teaching_stage": "primary","position_type": "classroom","start_date": "2026-09-01","closing_at": "2026-08-30","job_url": "https://www.tes.com/jobs/vacancy/primary-teacher-united-arab-emirates-2339227","source_platform": "tes.com","job_contact_email": "recruitment@srs.ae","job_contact_phone": "4 6011011","company_name": "The School of Research Science - SRS Dubai","company_website": "http://www.srsdubai.ae/","company_phone": "+971 4 6011011","company_profile_url": "https://www.tes.com/jobs/employer/the-school-of-research-science---srs-dubai-1056353","company_address_street": "Noakchott Street","company_address_city": "Al Warqa 4","company_address_country": "United Arab Emirates","company_address_display": "Noakchott Street, Al Warqa 4, Dubai, United Arab Emirates","company_phase": "All-through","company_funding_status": "Independent","company_gender": "Mixed","company_age_range": "3 - 18 years","company_school_type": "Mainstream School","company_active_jobs_count": 4,"company_active_jobs": [{"title": "Curriculum Coordinator", "job_url": "https://www.tes.com/jobs/vacancy/curriculum-coordinator-united-arab-emirates-2338882"},{"title": "EYFS Class Teacher", "job_url": "https://www.tes.com/jobs/vacancy/eyfs-class-teacher-united-arab-emirates-2338912"}]}
Pricing
Pay-per-event, so you only pay for what you use.
| Event | Rate |
|---|---|
| Actor start | $0.001 per run |
| Job from search page | $0.004 per job |
| Job with detail-page enrichment | $0.006 per job |
Company detail per unique employer (when includeCompanyDetails: true) | $0.005 per employer (deduplicated within a run) |
Apify's free plan includes $5 monthly platform credit that covers roughly 800 enriched jobs on this actor before any charge.
Input
| Field | Type | Notes |
|---|---|---|
searchUrls | array | Copy any Tes.com search URL. Filters preserved. |
searchQueries | array | Keyword queries (for example SEND teacher, head of maths). |
location | string | UK city, county or postcode. Applied to keyword queries. |
maxResults | integer | Total cap across all queries. |
maxResultsPerQuery | integer | Cap per individual query. |
includeJobDetails | boolean | Open each PDP for structured salary, full description, and both contact popups. |
includeCompanyDetails | boolean | Also follow /jobs/employer/{slug}-{id} for About text, gallery, phase, funding, and every other open role at the same school. Deduplicated per employer (charged once per unique school). Implies includeJobDetails=true. |
maxConcurrency | integer | Concurrent detail requests (1 to 20). |
proxyConfiguration | object | Residential proxy recommended. |
Output fields
Every dataset row has a stable schema documented in the Output tab. Key derived fields:
teaching_stage: primary, secondary, sixth-form, nursery, all-throughsubject: Maths, English, Science, SEND, MFL, PE, Art, Music, Drama, Computing, Business, Design & Technology, RE, Psychology, Sociology, History, Geographyposition_type: leadership, classroom, support, HLTA, SENcontract_type: permanent, fixed-term, supply, maternityschool_type: state, independent, academy, faith, specialsalary_range: object withmin,max,currency,period
Per-vacancy contact (from Job contact details popup):
job_contact_email,job_contact_phone
Employer / school profile (from School contact details popup + optional employer page):
company_name,company_logo_url,company_website,company_phone,company_email,company_profile_urlcompany_about: full About-us text (requiresincludeCompanyDetails=true)company_address_street,company_address_city,company_address_postcode,company_address_country,company_address_displaycompany_phase,company_funding_status,company_gender,company_age_range,company_denomination,company_school_typecompany_gallery_images,company_header_imagecompany_active_jobs_count,company_active_jobs(requiresincludeCompanyDetails=true)
Use with an AI agent (MCP)
Connect this actor to Claude, Cursor, or any MCP client to have your agent pull UK teaching jobs on demand.
{"mcpServers": {"tes-uk-scraper": {"url": "https://mcp.apify.com/?actors=santamaria-automations/tes-uk-scraper"}}}
Example prompt: "Find 20 SEND teacher jobs in Kent from Tes.com, only permanent contracts starting in September 2026, and return the school name, the school's central phone, and the per-vacancy recruiter email for each."
Why this scraper
Built HTTP-only in Go for consistent speed and low cost. Uses schema.org JobPosting data on detail pages plus the Next.js hydration payload for the two contact popups, so both job_contact_email and company_phone come straight from Tes's own data model rather than screen-scraping rendered popups. Derives teaching stage, subject and school type from title and ad copy using UK curriculum vocabulary (KS1 through KS5, EYFS, SEND, MAT, faith).
Common use cases
- Recruitment agencies tracking new vacancies daily and reaching out to the exact per-vacancy recruiter
- MATs and school groups benchmarking competitor pay bands
- Ed-tech vendors building account lists of UK schools by size, type and phase
- Teaching supply pools monitoring maternity and supply openings
- Universities running graduate outcomes research on NQT placements
- Direct-mail campaigns to school-wide addresses using verified postal + phone data
Notes and limits
- Coverage: UK primary, secondary, sixth form, SEN and international schools that post on Tes.com
- Tes lists roles beyond the UK (Dubai, China, Cyprus, etc.); use the
locationfield to narrow to UK cities if you only want domestic jobs - Ofsted rating is only populated when the school explicitly names it in the ad
- Some employer branding pages return salary as "Undisclosed"; that carries through as a null salary range
job_contact_emailandjob_contact_phoneare only populated when the school has filled them in on that specific vacancy — some job types (e.g. leadership-recruiter-managed adverts) leave them blankincludeCompanyDetails=truededuplicates by employer within a single run: 25 jobs at 5 unique schools = 5company-detail-resultcharges, not 25- Start dates like "ASAP" or "Immediate" are preserved verbatim rather than forced into ISO format
Related Actors
- Reed.co.uk Scraper: UK jobs across all industries with salaries and full descriptions
- Indeed Scraper: Global job coverage with logos and benefits
- CV-Library Scraper: UK recruitment agency and direct employer roles
- NHS Jobs Scraper: NHS vacancies including clinical and non-clinical roles
- Website Email Scraper: Turn a school website into a contact email
Support
- Bug reports and feature requests: Issues tab
- Direct contact: contact@nanoscrape.com
We usually reply within 6 hours.