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
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:
- 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.
- 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.
- 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").
- Set Up: Open the EdJoin Scraper page in the Apify Console.
- Configure Input: Set the search
keyword(e.g., Special Education) andlocation(e.g., California). - Limit Output: Set
maxItemsto restrict results and control costs. - Choose Mode: Enable
includeDescriptionto visit detailed pages for direct emails and qualifications, or disable for a super-fast listing-only query. - Run: Click the Start button. Download your data in JSON, CSV, Excel, or HTML format.
| 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} |
{
"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"
}| 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. |
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.
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.
- CutShort Scraper - Indian tech jobs with salary data and recruiter contacts
- Kyujin Box Scraper - Japanese jobs with transit and walk times
- Zhaopin Scraper - Chinese jobs with CNY salaries and geolocations
- Tokyo Dev Scraper - English-speaking tech jobs in Japan
- Apna.co Scraper - Indian blue-collar and gig jobs
- Open an issue at https://github.com/getascraper/how-to-scrape-edjoin/issues
- Contact us through the Apify Console
Built with the Apify SDK and Cheerio. Optimized for education recruitment data extraction at scale.
