# K12 JobSpot Scraper \[$1.50/1K💰] | School Jobs (`ahmed_jasarevic/k12jobspot-scraper`) Actor

Scrape K12 JobSpot for teacher, principal, coach, aide and school-district jobs. Get district, location, salary, grade levels, subjects and apply links. $1.50 per 1,000 jobs.

- **URL**: https://apify.com/ahmed_jasarevic/k12jobspot-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## K12 JobSpot Scraper – K-12 School Jobs & District Hiring Data

Scrape **K12 JobSpot** for teacher, principal, coach, aide, substitute and school-support jobs across US districts. Get the hiring district, location, salary, grade levels, subjects, contract type and application links. **$1.50 per 1,000 jobs.**

### Build K-12 Hiring Lists By District, Role And State

K12 JobSpot collects openings from school districts nationwide. This Actor turns those public postings into a clean dataset for recruiting, sales and market research.

- **Teacher recruiting** — find subject-specific openings by state or district.
- **Ed-tech sales** — identify districts hiring for roles your product supports.
- **Staffing research** — track demand for aides, substitutes and support staff.
- **Compensation research** — compare posted salary ranges by role and region.

### How It Works

![How the K12 JobSpot Scraper works: from a school-job search to structured district hiring records.](https://api.apify.com/v2/key-value-stores/oeuA0kLOyhbRM4fzt/records/how-it-works-k12jobspot-scraper.webp)

The Actor searches public K12 JobSpot postings, reads each job record and normalizes it into one row. You can search by keyword and state, filter by role family, or pull specific job URLs and IDs.

- One row per posting with district, location and application details.
- Full descriptions are included by default.
- Up to 5,000 postings per run.

### Scrape Teacher, Principal, Coach And Aide Jobs

Start with a keyword such as `teacher`, `principal`, `coach` or `aide`, then narrow by state. Use `categories` to keep only the role families you care about:

- Teachers and special-education teachers
- Principals and assistant principals
- Coaches and athletic directors
- Aides, paraprofessionals and substitutes
- Student support and district support roles

The Actor also accepts direct posting URLs or job IDs when you already know what you need.

### Salary, Grade Levels And Application Links

Each record includes the district name, school site, city, state and coordinates. When the district publishes compensation, you get salary minimum, maximum, currency, unit and a readable salary string.

- Grade levels and subject areas
- Contract, assignment and employment type
- In-person, hybrid or remote designation
- Posting, closing and job-start dates
- District apply URL and K12 JobSpot posting URL

### Input – Configure A K12 JobSpot Search

| Field | Type | Default | Notes |
|---|---|---|---|
| `searchQuery` | string | `teacher` | Keyword such as `principal`, `coach`, `aide`; empty pulls the full feed |
| `state` | string | `""` | Two-letter code (`CA`) or full name (`California`); empty scans all states |
| `categories` | array | `[]` | Role filters such as `teacher`, `admin`, `aide`, `coach` or `special education` |
| `maxItems` | integer | `100` | Maximum postings saved; hard cap: 5,000 |
| `includeDescription` | boolean | `true` | Include the full posting description |
| `startUrls` | array | `[]` | Specific K12 JobSpot posting URLs |
| `jobIds` | array | `[]` | Specific 24-character K12 JobSpot job IDs |
| `proxy` | object | Apify Proxy off | Standard Apify proxy configuration |

### Output – Job Posting Fields

Each dataset item contains:

- `jobId`, `friendlyJobId`, `clientJobId`, `organizationId`
- `title`, `employer`, `employerWebsite`, `employerDescription`, `schoolName`
- `city`, `state`, `stateCode`, `postalCode`, `latitude`, `longitude`
- `category`, `jobCategory`, `positionAreas`, `subjects`, `subjectText`
- `gradeLevels`, `gradeLevelText`
- `employmentType`, `assignmentType`, `contractType`, `locationType`
- `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryUnit`, `salaryText`, `showCompensation`
- `postedAt`, `closingAt`, `jobStartDate`
- `applyUrl`, `externalApplyUrl`, `jobUrl`
- `description`, `descriptionText`, `requirements`, `benefits`
- `scrapedAt`

### Example Input – California Teacher Jobs

```json
{
  "searchQuery": "teacher",
  "state": "CA",
  "categories": ["teacher", "special education"],
  "maxItems": 100,
  "includeDescription": true
}
```

### Example Output – One Special-Education Job

```json
{
  "jobId": "6ae0d9dbf8419aebe4e1d3e0",
  "title": "Teacher: Special Education Instructional Support Provider",
  "employer": "Brentwood Union School District",
  "schoolName": "Brentwood Union School District",
  "city": "Brentwood",
  "state": "California",
  "stateCode": "CA",
  "jobCategory": "teacher",
  "category": "Certificated",
  "gradeLevelText": "06, 07, 08",
  "subjectText": "Special Education Instruction",
  "contractType": "Full-time · Permanent",
  "salaryText": "$66,860.27 – $122,987.45 / year",
  "postedAt": "2026-10-27T17:06:11.507Z",
  "closingAt": "2026-11-16T00:00:00Z",
  "applyUrl": "https://www.applitrack.com/brentwoodusd/onlineapp/",
  "jobUrl": "https://www.k12jobspot.com/en/job-postings/6ae0d9dbf8419aebe4e1d3e0",
  "scrapedAt": "2026-10-30T09:15:00.000Z"
}
```

### Export K-12 Job Data To JSON, CSV Or Excel And Schedule Runs

Download results as JSON, CSV, Excel or XML from the run page or through the Apify API. Schedule daily or weekly runs to catch new district openings, or trigger a run for a specific state or role.

### Related Actors

- [Indeed Job Scraper](https://apify.com/ahmed_jasarevic/indeed-job-scraper) — broad job-market coverage
- [HigherEdJobs Scraper](https://apify.com/ahmed_jasarevic/higheredjobs-scraper) — university and college openings
- [CalCareers Scraper](https://apify.com/ahmed_jasarevic/calcareers-scraper) — California state jobs
- [Google Maps Scraper](https://apify.com/apify/google-maps-scraper) — district and school locations

### FAQ

#### What is K12 JobSpot?

K12 JobSpot is a US job board for K-12 school districts. It lists teaching, administration, coaching, aide and support roles.

#### Do I need an account?

No. The Actor reads public job postings and does not require a K12 JobSpot account or login.

#### Why is salary missing on some jobs?

Salary fields are populated only when the district publishes compensation. `showCompensation` indicates whether the posting included pay information.

#### Does `state` accept two-letter codes?

Yes. Use `CA` or `California`; both work.

#### Can I scrape specific job postings?

Yes. Pass K12 JobSpot posting URLs in `startUrls` or 24-character IDs in `jobIds`.

#### How many jobs can I scrape?

Up to **5,000** per run with `maxItems`. Free Apify users get a 10-job preview.

### For AI Agents & LLM Apps

Returns one row per K12 JobSpot posting with district, location, salary and application data.

Minimal working input:

```json
{ "searchQuery": "teacher", "state": "CA", "maxItems": 24 }
```

Output fields: `jobId, title, employer, schoolName, city, state, stateCode, jobCategory, category, gradeLevelText, subjectText, contractType, salaryText, postedAt, closingAt, applyUrl, jobUrl, scrapedAt`.

Behaviors an agent should know:

- `maxItems` is capped at **5,000**.
- Free users are capped at **10** saved postings.
- `categories` matches role families and subject terms.
- `includeDescription: false` reduces payload size.
- `startUrls` and `jobIds` override the search filters.
- Missing salary fields stay `null` when the district does not publish pay.

Billing: **$0.0015 per saved posting** on FREE/BRONZE ($1.50 per 1,000), $0.00145 on SILVER and $0.0014 on GOLD+, plus a small actor-start event.

### Legal & Compliance Disclaimer

This Actor is an independent tool. It is not affiliated with, endorsed by or sponsored by K12 JobSpot or its parent company.

It collects publicly available job postings — no login and no private account. Job data may be subject to K12 JobSpot's terms and applicable law. Users are responsible for how they use district contact and application information. Nothing here is legal advice.

### SEO Keywords

k12jobspot scraper, k12 job spot, school jobs, teacher jobs, k12 jobs, school district jobs, principal jobs, coach jobs, teacher aide jobs, education jobs, k12 job board, teacher recruitment, school hiring data, district jobs, education staffing, k12 job listings, teacher salary data, school jobs api

# Actor input Schema

## `searchQuery` (type: `string`):

Keyword used for the K12 JobSpot search (e.g. teacher, principal, coach, aide). Leave empty to pull the full feed.

## `state` (type: `string`):

US state filter as a two-letter code (CA) or full name (California). Leave empty for all states.

## `categories` (type: `array`):

Optional client-side filter. Matches these terms against the posting category, title, subject and position area (e.g. teacher, admin, aide, coach, special education). Leave empty for no filtering.

## `maxItems` (type: `integer`):

Maximum number of job postings to save. Free users are capped at 10 items.

## `includeDescription` (type: `boolean`):

Include the full posting description text in each result.

## `startUrls` (type: `array`):

Scrape specific K12 JobSpot posting pages instead of searching, e.g. https://www.k12jobspot.com/en/job-postings/<jobId>. When provided, the search filters are ignored.

## `jobIds` (type: `array`):

K12 JobSpot internal job IDs (24-character hex) to scrape directly. When provided, the search filters are ignored.

## `proxy` (type: `object`):

Select proxies to be used by your crawler.

## Actor input object example

```json
{
  "searchQuery": "teacher",
  "state": "",
  "categories": [],
  "maxItems": 100,
  "includeDescription": true,
  "startUrls": [],
  "jobIds": [],
  "proxy": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQuery": "teacher",
    "state": "",
    "categories": [],
    "startUrls": [],
    "jobIds": [],
    "proxy": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/k12jobspot-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQuery": "teacher",
    "state": "",
    "categories": [],
    "startUrls": [],
    "jobIds": [],
    "proxy": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/k12jobspot-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQuery": "teacher",
  "state": "",
  "categories": [],
  "startUrls": [],
  "jobIds": [],
  "proxy": {
    "useApifyProxy": false
  }
}' |
apify call ahmed_jasarevic/k12jobspot-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ahmed_jasarevic/k12jobspot-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/2pWoagTKuk8FkEjr0/builds/9dXjf5t90c79l5MKq/openapi.json
