Teaching Vacancies GOV UK Scraper (DfE) avatar

Teaching Vacancies GOV UK Scraper (DfE)

Pricing

from $3.00 / 1,000 serp job (fast)s

Go to Apify Store
Teaching Vacancies GOV UK Scraper (DfE)

Teaching Vacancies GOV UK Scraper (DfE)

Extract UK teaching jobs from teaching-vacancies.service.gov.uk, the official DfE board for state schools and academies. Returns title, school, trust, local authority, phase, key stage, subject, salary scale, ECT suitability, closing date and apply URL. Pay-per-result.

Pricing

from $3.00 / 1,000 serp job (fast)s

Rating

0.0

(0)

Developer

NanoScrape

NanoScrape

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Teaching Vacancies UK Scraper (DfE)

Extract UK teaching jobs from teaching-vacancies.service.gov.uk, the UK Department for Education's official jobs board for state schools, academies, and Multi-Academy Trusts. No login. No captcha. Pay-per-result.

What it does

Scrapes live vacancies from the official DfE Teaching Vacancies service and returns clean, structured JSON. Coverage includes classroom teachers, teaching assistants, HLTAs, SENCOs, subject leads, deputy and headteachers across nursery, primary, secondary, 16-19, all-through, and special schools.

Works with:

  • Search keywords (e.g. "primary teacher", "SENCO", "maths").
  • Any search URL copy-pasted from the site (all filters preserved).
  • Location or postcode filter.
  • Phase filter and "ECT suitable" filter.

Sample output

{
"_type": "job",
"id": "headteacher-st-john-fisher",
"title": "Headteacher",
"school_name": "St John Fisher Roman Catholic Primary School",
"company_name": "St John Fisher Roman Catholic Primary School",
"local_authority": "Manchester",
"location": "St John Fisher Roman Catholic Primary School, Manchester, M14 6RB",
"postcode": "M14 6RB",
"country": "GB",
"phase": "primary",
"religious_character": "Roman Catholic",
"key_stage": null,
"position_type": "headteacher",
"pay_min_pence": null,
"pay_max_pence": null,
"pay_scale": "L18-L24",
"pay_text": "L18-L24 (£65,286-£75,675)",
"employment_type": "full-time",
"working_pattern": "full-time",
"ect_suitable": false,
"visa_sponsorship": null,
"start_date": "1 September 2026",
"closing_at": "12 September 2026 at 12:00pm",
"listed_at": "20 August 2026",
"posted_at_text": "20 August 2026",
"posted_at_datetime": "2026-08-20T00:00:00Z",
"application_url": "https://schools.stoccat.org.uk/vacancies",
"job_url": "https://teaching-vacancies.service.gov.uk/jobs/headteacher-st-john-fisher",
"source_url": "https://teaching-vacancies.service.gov.uk/jobs/headteacher-st-john-fisher",
"source_platform": "teaching-vacancies.service.gov.uk",
"scraped_at": "2026-08-22T14:30:00Z",
"description": "St John Fisher Roman Catholic Primary School is seeking to appoint an inspirational Headteacher...",
"description_full": "St John Fisher Roman Catholic Primary School is seeking to appoint an inspirational Headteacher...\n\nThe successful candidate will be a practising Catholic with a proven track record of school leadership.\n\nFor an informal discussion, please contact afidler@sjcmat.co.uk.",
"description_html": "<p>St John Fisher Roman Catholic Primary School is seeking to appoint an inspirational Headteacher...</p><p>The successful candidate will be...</p>",
"description_md": "St John Fisher Roman Catholic Primary School is seeking to appoint an inspirational Headteacher...\n\nThe successful candidate will be a practising Catholic with a proven track record of school leadership.\n\nFor an informal discussion, please contact afidler@sjcmat.co.uk.",
"contact_emails": ["afidler@sjcmat.co.uk"],
"contact_phones": [],
"contact_urls": ["https://schools.stoccat.org.uk/vacancies"],
"school_size": 210,
"age_range": "4 to 11",
"company_about": null,
"company_phone": null,
"company_email": null,
"company_website": "https://www.stjohnfisher.stoccat.org.uk/",
"company_address_street": null,
"company_address_city": null,
"company_address_postcode": "M14 6RB",
"company_address_country": "United Kingdom",
"company_active_jobs_count": 2,
"company_active_jobs": [{"title": "Class Teacher (Y3)", "job_url": "https://teaching-vacancies.service.gov.uk/jobs/class-teacher-y3-st-john-fisher"}]
}

Pricing

$0.001 per actor start + $0.005 per full-detail row (or $0.003 per SERP-only row) + optional $0.005 per unique school profile enriched. About $5 per 1,000 jobs in full mode.

You only pay for rows that successfully return data. Failed fetches are not charged.

New to Apify? Every account gets a $5 free monthly platform credit, enough for around 1,000 full-mode results on this actor before you commit to paying anything. Test extensively first.

Input

FieldTypeDescription
searchUrlsarrayPaste one or more search URLs from the site. All filters preserved.
searchQueriesarrayKeywords like "primary teacher", "maths", "SENCO". Each runs as a separate search.
locationstringUK location or postcode, e.g. "London", "SW1A 1AA".
phaseselectFilter by phase: nursery, primary, secondary, 16-19, all-through, special.
ectSuitablebooleanOnly include jobs marked suitable for Early Career Teachers.
maxResultsintegerTotal row cap across all queries.
maxResultsPerQueryintegerRow cap per query.
modeselectfast (SERP only) or full (SERP + detail pages). Default full.
includeJobDetailsbooleanAlias for full mode. When true, forces mode=full.
includeCompanyDetailsbooleanFetch each school's /organisations/{slug} page for a snapshot of other roles at the school. Deduplicated per school. Implies includeJobDetails=true.

Output fields

Identity and title: id, title, job_url, source_url (alias of job_url), source_platform, _type.

School and organisation: school_name, company_name (fleet-standard alias of school_name), trust_name, local_authority, location, postcode, country, organisation_type_raw, religious_character, age_range, school_size.

Role classification: phase, key_stage, subject, position_type, job_role_raw, sen_specialism.

School profile (populated when includeCompanyDetails=true)

  • company_website: The school's own website URL — extracted from the "Website" row in the school-overview section on the PDP. Populated when the school included one in their listing (majority of secondary and academy trust listings; some primaries omit it).
  • company_about, company_phone, company_email, company_address_street, company_address_city: Usually null. Teaching-vacancies's /organisations/{slug} page is a filtered jobs view, not a school details page, so these fields rarely populate. Use contact_emails[] / contact_phones[] / contact_urls[] below for description-embedded contacts.
  • company_address_postcode, company_address_country: Aliased from the PDP-level postcode + fixed to United Kingdom.
  • company_active_jobs_count, company_active_jobs: Snapshot of other currently-open roles at the same school (title + URL).

Contract and pay: employment_type, working_pattern, pay_min_pence, pay_max_pence, pay_currency, pay_scale, pay_text, ect_suitable, visa_sponsorship.

Timeline and links: start_date, closing_at, listed_at, interview_date, application_url, ofsted_url.

Description (4-field standard): description (single-line whitespace-normalised, back-compat), description_full (multi-line with \n at paragraph/list/heading boundaries), description_html (raw HTML block), description_md (Markdown for LLM ingestion — h1-h6, paragraphs, lists, links).

Contact extraction (parsed from job description text):

  • contact_emails (array): Email addresses found in the description body, deduplicated and lower-cased. Populated on ~50-70% of headteacher and SEN listings where schools include a direct-contact address.
  • contact_phones (array): UK phone numbers (0-prefix, +44, spaced formats) found in the description body, deduplicated.
  • contact_urls (array): External http(s) URLs found in the description body, deduplicated. Self-referential teaching-vacancies.service.gov.uk service links are excluded.

Posted-at date fields: listed_at (raw display string as shown on the site), posted_at_text (same raw string, fleet-standard field name), posted_at_datetime (parsed ISO datetime).

Meta: search_query, scraped_at.

Contact extraction from description: contact_emails[] (deduplicated + lower-cased), contact_phones[] (UK 0-prefix, +44, spaced formats), contact_urls[] (external http(s) links; self-referential DfE service links are excluded).

Use with AI Agents (MCP)

Connect this actor to any MCP-compatible AI client: Claude Desktop, Claude.ai, Cursor, VS Code, LangChain, LlamaIndex, or custom agents.

Apify MCP server URL:

https://mcp.apify.com?tools=nanoscrape/teaching-vacancies-uk-scraper

Example prompt once connected:

"Use teaching-vacancies-uk-scraper to find all Early Career Teacher primary vacancies in London closing this week. Return as a table with school, closing date, and application URL."

Clients that support dynamic tool discovery (Claude.ai, VS Code) receive the full input schema automatically.

Why this scraper

  • Official DfE source. Every vacancy is real, verified, published by the school or MAT that hosts it.
  • Deep school metadata. Trust, local authority, religious character, Ofsted link, age range, and pupil count come out of the box.
  • UK-specific field parsing. Salaries in pence, pay-scale detection (Main Pay Scale / UPS / Leadership), Key Stage normalisation (EYFS, KS1..KS5).
  • ECT flag surfaced. Filter directly for jobs suitable for Early Career Teachers.
  • No login. No captcha. The DfE service is public.

Common use cases

  • Recruitment agencies aggregating live UK teaching vacancies for their candidate CRM.
  • EdTech firms building a live map of subject-specific demand (Maths, Science, SEND).
  • Journalists and researchers tracking headteacher turnover and pay scales across regions.
  • MAT central offices monitoring competitor vacancy volume and pay bands.

Notes and limits

  • When includeCompanyDetails=true, each unique school is fetched once per run (deduplicated by /organisations/{slug}). Teaching-vacancies renders schools as filtered jobs views, so extraction primarily fills company_active_jobs; company_about/_phone/_website stay null.

  • Some vacancies do not publish a numeric salary. pay_text will hold the scale name (e.g. "Teacher Main Scale") but pay_min_pence and pay_max_pence will be null.

  • trust_name is only populated when the vacancy page explicitly links a MAT.

  • Subject specialism is inferred from the Subject field on the vacancy page. Where the school leaves it blank, subject is null.

  • The service currently lists ~15,000 to 25,000 live vacancies at any time. Practical maximum per query is ~1,000 rows due to the site's own pagination cap.

Support

For issues, feature requests, or field gaps, please open an issue on the Issues tab. We typically respond within 24 hours.

Contact: contact@nanoscrape.com