Skip to content

getascraper/how-to-scrape-edjoin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EdJoin Scraper | K-12 Education Jobs | Apify Actor

Apify Actor TypeScript Cheerio JSON-LD Education Jobs

EdJoin scraper and K-12 education job data extraction API. Extract teaching, administrative, and classified school district jobs with HR contact emails, salary ranges, application deadlines, and certification requirements from edjoin.org with this Apify Actor. Fast API-driven crawling with Cheerio and JSON-LD detail extraction. No browser overhead. Free tier included.

Price: $1.99 per 1,000 results

EdJoin Scraper Apify Actor hero screenshot

What does EdJoin Scraper do?

The EdJoin Scraper is a fast web crawling tool that extracts complete education vacancy listings from EdJoin (edjoin.org), the largest job board for public and private K-12 school districts in the United States.

It pulls data from two sources:

  1. Listing Search API: Queries EdJoin's backend JSON search index directly to discover postings based on keywords and locations. High-concurrency, fast walks of thousands of records with zero browser overhead.
  2. Detail Page JSON-LD Parsing: Loads detail pages to extract structured Schema.org JobPosting JSON-LD blocks containing direct school contact emails, full credential requirements, and required skills.

With Apify, you can run this scraper via a simple REST API, schedule it daily or weekly, and integrate results with Google Sheets, Airtable, Make, or webhooks.

Why use EdJoin Scraper?

  • Find High-Intent HR & Recruiting Leads: For staffing agencies and recruiting firms looking to discover direct contact emails of hiring managers and school district coordinators.
  • Keep Your Education Career Board Updated: Complete vacancy metadata, direct links, salary structures, and expiration dates.
  • Benchmark Teacher Salaries & Benefits: Analyze salaries, work schedules, certifications, and posting volumes across districts, counties, and states.
  • Set Up Daily Automated Alerts: Schedule daily runs to detect fresh vacancies matching your criteria (e.g., "Special Education Teacher" in "Los Angeles").

How to use EdJoin Scraper

  1. Set Up: Open the EdJoin Scraper page in the Apify Console.
  2. Configure Input: Set the search keyword (e.g., Special Education) and location (e.g., California).
  3. Limit Output: Set maxItems to restrict results and control costs.
  4. Choose Mode: Enable includeDescription to visit detailed pages for direct emails and qualifications, or disable for a super-fast listing-only query.
  5. Run: Click the Start button. Download your data in JSON, CSV, Excel, or HTML format.

Input Parameters

| Field | Type | Description | Default | | startUrls | Array | Optional pre-filtered EdJoin search URLs to scrape. | [] | | keyword | String | Search keyword for role, specialty, or district (e.g., Teacher, Secretary). | Teacher | | location | String | Geographic area (e.g., California, San Diego, 90210). | California | | maxItems | Integer | Maximum number of job records to collect. | 100 | | includeDescription | Boolean | Fetch detailed pages for HR emails, requirements, and logos. | true | | dateWithinDays | Integer | Only include postings created within the last N days (0 = any time). | 0 | | maxConcurrency | Integer | Maximum parallel page requests. | 8 | | proxyConfiguration | Object | Proxy routing. Standard open WAF allows running without proxies. | {"useApifyProxy": false} |

Output Structure

{
  "posting_id": 2234074,
  "title": "Secretary II (School) at Cajon Park - Pos#30024578",
  "district_name": "Santee School District",
  "city": "Santee",
  "county_name": "San Diego",
  "state_name": "California",
  "postal_code": "92071-2674",
  "address": "9625 Cuyamaca St.",
  "job_type": "Clerical / Secretarial Staff / Office Tech.",
  "employment_type": "FULL_TIME",
  "salary_info": "Salary Classification: 27",
  "pay_range_from": "Salary Classification: 27/ Step A",
  "pay_range_to": "Salary Classification: Step E",
  "pay_range_unit": "Monthly",
  "contact_email": "brandi.medrano@santeesd.net",
  "date_posted": "2026-06-06T07:00:00.000Z",
  "deadline": "2026-06-12T23:00:00.000Z",
  "work_hours": "203 work days / 8.0 hrs. / 7:00 a.m. - 3:30 p.m.",
  "requirements": "MINIMUM QUALIFICATIONS / CERTIFICATIONS / AND APPLICATION PROCEDURE...",
  "required_skills": "First Aid, CPR and AED Certificate. Typing Certificate 50 nwpm.",
  "logo": "https://edjoinprodstoragewest.blob.core.windows.net/customerlogos/logo133892042317467324.png",
  "url": "https://www.edjoin.org/Home/JobPosting/2234074",
  "scraped_at": "2026-06-07T05:22:15.341Z"
}

Output Fields

| Field | Type | Description | | posting_id | Number | Unique identifier for the vacancy posting. | | title | String | Job position title. | | district_name | String | School district or hiring agency name. | | city | String | Primary city. | | county_name | String | County name where the position resides. | | state_name | String | State name (e.g., California). | | postal_code | String | Location ZIP or postal code. | | address | String | Physical street address of the district. | | job_type | String | Broad classification group. | | employment_type | String | Full Time, Part Time, or other employment status. | | salary_info | String | Raw salary text. | | pay_range_from | String | Lower bound of the pay schedule. | | pay_range_to | String | Upper bound of the pay schedule. | | pay_range_unit | String | Unit rate (Monthly, Hourly, Annually). | | contact_email | String | Direct HR contact email address. | | date_posted | String | ISO formatted publication date. | | deadline | String | ISO formatted application closing date. | | work_hours | String | Work shift, day, or calendar schedules. | | requirements | String | Detailed qualifications description. | | required_skills | String | Explicit certificates or typing requirements. | | logo | String | Hiring organization logo URL. | | url | String | Link to the original posting. | | scraped_at | String | Scraping execution timestamp. |

Cost Estimation & Pricing

Because this Actor uses an API-driven listing crawl and lightweight Cheerio detail fetch, it does not require running dynamic browser instances (Playwright or Puppeteer), which reduces compute overhead. It can be run successfully on standard datacenter IPs.

  • Standard platform rate: $1.99 per 1,000 results (excludes micro platform execution fees).
  • Running a 5,000 vacancy crawl will cost approximately $9.95 in bandwidth and compute units combined.

FAQ

Is scraping EdJoin legal? Yes. This scraper extracts publicly available recruitment listings that districts intend to share with the public. It does not access private applicant data or require logging in. Ensure you comply with local regulations and respect server load limits by setting standard concurrency.

Can I run this on a schedule? Yes. In the Apify Console, create a Schedule to trigger the actor daily, weekly, or monthly.

How can I submit suggestions or bugs? Open an issue in the Issues tab on this Actor's page, or contact us through the Apify Console.

Related scraping tools

Support


Built with the Apify SDK and Cheerio. Optimized for education recruitment data extraction at scale.

About

EdJoin scraper and K-12 education job data extraction API. Extract teaching, administrative, and classified school district jobs with HR contacts, salary data, and deadlines from edjoin.org with this Apify Actor. Free tier included.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors