{
  "openapi": "3.0.1",
  "info": {
    "title": "EDJOIN Education Jobs Scraper",
    "description": "[💰 $0.9 / 1K] Extract K-12 school jobs from EDJOIN, the largest US education job board. Filter by keyword, location, state, category, 66 position types, employment type and posting date. Get title, district, city, county, salary range, deadline, full description and hiring contact email.",
    "version": "1.0",
    "x-build-id": "OLpVO9mUN0gZa50Fl"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/solidcode~edjoin-org-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-solidcode-edjoin-org-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/solidcode~edjoin-org-scraper/runs": {
      "post": {
        "operationId": "runs-sync-solidcode-edjoin-org-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/solidcode~edjoin-org-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-solidcode-edjoin-org-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "searchKeyword": {
            "title": "Job Keyword",
            "type": "string",
            "description": "Job title, keyword, or the name of a school district or county office (e.g. 'special education teacher', 'school psychologist', 'Mt. Diablo Unified'). Leave blank to collect every posting that matches the filters below."
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City, county or ZIP code to search near (e.g. 'Sacramento', 'Contra Costa', '94519'). EDJOIN matches this loosely, so a place name can also pull in districts with that word in their name. For a strict geographic filter use the State option instead."
          },
          "state": {
            "title": "State",
            "enum": [
              "24",
              "84",
              "46",
              "21",
              "57",
              "68",
              "38",
              "34",
              "52",
              "30",
              "47",
              "78",
              "25",
              "44",
              "55",
              "28",
              "33",
              "36",
              "59",
              "60",
              "70",
              "79"
            ],
            "type": "string",
            "description": "Restrict results to a single state or territory. Only the states that currently carry EDJOIN postings are listed — the board is overwhelmingly Californian, so states other than California usually hold just a handful of jobs. Leave blank to search everywhere."
          },
          "startUrls": {
            "title": "Start URLs",
            "uniqueItems": true,
            "type": "array",
            "description": "Paste EDJOIN search links (e.g. https://www.edjoin.org/Home/Jobs?keywords=teacher) or links to individual job postings (e.g. https://www.edjoin.org/Home/JobPosting/2214962). Each link is collected as its own task and the results are merged and de-duplicated. When you use this, the keyword, location, state and filters above are ignored — each link already carries its own search. Two things to know: Maximum Results applies to the whole run, so the first links can use up the budget before the later ones start; and a link to a single job posting returns that page's own fields, while a search link additionally carries position type, category, county and the structured pay range.",
            "items": {
              "type": "string"
            }
          },
          "jobCategory": {
            "title": "Job Category",
            "enum": [
              "1",
              "2",
              "3",
              "4"
            ],
            "type": "string",
            "description": "EDJOIN's top-level staffing category. 'Certificated' covers credentialed teaching and pupil-services roles; 'Classified' covers support staff such as aides, office, food service, custodial and transportation. Leave blank for all categories."
          },
          "positionTypes": {
            "title": "Position Types",
            "uniqueItems": true,
            "type": "array",
            "description": "Only collect these specific position types. Pick as many as you like — for example 'Teacher - Special Education' plus 'Counselor'. Leave empty to include every position type.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "48",
                "64",
                "4",
                "46",
                "5",
                "63",
                "55",
                "8",
                "6",
                "10",
                "11",
                "9",
                "56",
                "7",
                "16",
                "65",
                "19",
                "57",
                "18",
                "17",
                "47",
                "49",
                "59",
                "20",
                "12",
                "13",
                "52",
                "37",
                "38",
                "36",
                "39",
                "35",
                "40",
                "32",
                "14",
                "67",
                "66",
                "68",
                "51",
                "41",
                "15",
                "53",
                "23",
                "22",
                "24",
                "25",
                "26",
                "28",
                "27",
                "29",
                "31",
                "62",
                "34",
                "33",
                "58",
                "50",
                "30",
                "42",
                "45",
                "43",
                "44",
                "21",
                "54"
              ],
              "enumTitles": [
                "Teacher - Kindergarten",
                "Teacher - Grades 1-3",
                "Teacher - Grades 4-6",
                "Teacher - K-6",
                "Teacher - K-8",
                "Teacher - Middle Grades",
                "Teacher - Middle/High",
                "Teacher - High School",
                "Teacher - Pre-K",
                "Teacher - Children's Center",
                "Teacher - Head Start",
                "Teacher - Adult Education",
                "Teacher - Court/Community/Alternative",
                "Teacher - ROP",
                "Teacher - Special Education",
                "Teacher - Library Media",
                "Teacher - Other",
                "Counselor",
                "School Psychologist",
                "Nurses / Health Services",
                "Language, Hearing and Speech (certificated)",
                "Program Specialist",
                "Coordinator",
                "Coach (certificated)",
                "Substitute Teacher (certificated)",
                "Recruitment Event Registration",
                "Other Certificated",
                "Superintendent",
                "Assistant/Deputy/Associate Superintendent (certificated management)",
                "Principal / Superintendent",
                "Elementary School Principal",
                "Elementary School Vice Principal",
                "Middle School Principal",
                "Middle School Vice Principal",
                "High School Principal",
                "High School Vice Principal",
                "Assistant / Vice Principal",
                "Other Principal / Site Administrator",
                "Adult School Principal",
                "Adult School Vice Principal",
                "Adult School Director",
                "Manager, Director Level (certificated management)",
                "Manager, Supervisor Level (certificated management)",
                "Other Manager / Supervisor (certificated management)",
                "Management - Other (certificated management)",
                "Teacher Assistant / Aide / Paraprofessional",
                "Clerical / Secretarial / Office Tech",
                "Financial / Accounting / Business Staff",
                "Information Technology / Computer Services",
                "Custodial / Facilities / Maintenance",
                "Food Service Staff",
                "Health Service Staff",
                "Transportation Staff",
                "Librarian",
                "Instructor",
                "Community Development",
                "Coach (classified)",
                "Language, Hearing and Speech (classified)",
                "Substitute Teacher (classified)",
                "Other Classified",
                "Assistant/Deputy/Associate Superintendent (classified management)",
                "Confidential Employee",
                "Manager, Director Level (classified management)",
                "Manager, Supervisor Level (classified management)",
                "Other Manager / Supervisor (classified management)",
                "Management - Other (classified management)"
              ]
            }
          },
          "employmentType": {
            "title": "Employment Type",
            "enum": [
              "Full",
              "Part",
              "Temporary",
              "Remote",
              "Management"
            ],
            "type": "string",
            "description": "Only collect jobs advertised as this kind of engagement. Note that 'Remote' is very rare on EDJOIN — most school jobs are on-site — so that option can return only a couple of listings."
          },
          "applicationType": {
            "title": "Application Type",
            "enum": [
              "true",
              "false"
            ],
            "type": "string",
            "description": "Whether the district accepts an online application through EDJOIN. Leave blank to collect both kinds — that is the widest result set, and roughly three quarters of EDJOIN jobs do accept online applications."
          },
          "postedWithinDays": {
            "title": "Posted Within Last N Days",
            "minimum": 0,
            "maximum": 365,
            "type": "integer",
            "description": "Only collect jobs posted in the last N days — for example 1 for the past 24 hours, 7 for the past week, 31 for the past month. Set to 0 (or leave blank) to include postings of any age."
          },
          "includeJobDetails": {
            "title": "Include full job details",
            "type": "boolean",
            "description": "Open each posting to collect the full job description, application deadline, requirements, required skills, length of work year, street address, district logo and the hiring contact's name and email address. Turn this off for a faster, lighter run that keeps only the summary shown on the results list — title, district, city, county, salary range, employment type and posting date."
          },
          "sortBy": {
            "title": "Sort Results By",
            "enum": [
              "desc",
              "asc"
            ],
            "type": "string",
            "description": "How EDJOIN orders the postings before they are collected. 'Newest first' is the right choice when you also set a maximum, so you get the freshest jobs."
          },
          "maxResults": {
            "title": "Maximum Results",
            "minimum": 0,
            "type": "integer",
            "description": "Cap on how many jobs to collect. Default 100 — increase for bigger runs, or set to 0 to collect every job that matches your search. Jobs arrive from EDJOIN in pages, and the run always keeps the whole page it is on when the cap is reached, so you can receive slightly more than you asked for. Duplicates are removed, so if EDJOIN serves the same job on two pages you can also finish a few short of the cap. Any number from 10 up to 1,000 comes back exactly; EDJOIN's smallest page is 10 jobs, so a cap below 10 still returns 10. The cap covers the whole run, so if you paste several links into Start URLs the first ones can use it all up. EDJOIN itself refuses to serve past roughly 100,000 jobs in a single search — to go deeper, split your run by state, county or category."
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}