Job posting schema for web extraction
A job posting schema captures the fields recruiters, job boards, and labor-market analysts care about: the role title, hiring company, location, whether it is remote, the salary range, employment type, and how to apply. People extract this to aggregate openings into a single board, track hiring trends across companies, benchmark compensation, or alert candidates when roles that match their criteria appear. A schema turns each posting into a clean, comparable record instead of free-form prose. Job listings vary a lot in wording, which is exactly where describing fields beats hand-tuning selectors per site. You define what a salary range or an employment type is, and the model reads it from the rendered page regardless of how that page lays it out. Fields that a posting omits, like a salary that the employer chose not to publish, come back as null rather than a fabricated number, so your compensation data stays trustworthy and you can clearly separate "not disclosed" from "not found".
Fields in a Job posting schema
The fields teams most often extract for a job posting, what type each one is, and whether it is usually present.
| Field | Type | Required | Notes |
|---|---|---|---|
| title | string | yes | The job title as advertised, such as Senior Backend Engineer. This is the primary field for matching, search, and grouping, so it is required rather than optional. |
| company | string | yes | The name of the hiring organization as shown on the posting. Used to group openings by employer and to join postings against company records you already hold. |
| location | string | optional | Where the role is based, typically a city and region or country. Returned as written on the page, which preserves details like a specific office or a multi-city listing. |
| remote | boolean | optional | Whether the role is offered as remote, expressed as a true or false flag. Lets you filter for remote-friendly openings without parsing varied phrasing like hybrid or work from home. |
| salaryRange | string | optional | The advertised pay range, kept as text because postings phrase it many ways, like 90,000 to 120,000 USD per year. Returns null when no salary is disclosed rather than an estimate. |
| employmentType | string | optional | The contract shape, such as Full-time, Part-time, Contract, or Internship. Normalizing this helps you compare openings and filter by the kind of work arrangement on offer. |
| datePosted | string | optional | When the listing was published, ideally as an ISO 8601 date. Lets you sort by freshness and drop stale postings, which is important since old roles linger on many boards. |
| applyUrl | string | optional | The link to apply for or learn more about the role. Gives candidates a direct path and lets your aggregator send applicants straight to the source posting. |
The schema
Copy this and send it with any URL.
{
"title": "string",
"company": "string",
"location": "string",
"remote": "boolean",
"salaryRange": "string",
"employmentType": "string",
"datePosted": "string",
"applyUrl": "string"
} Example output
Validated JSON back, matching the schema.
{
"title": "Senior Backend Engineer",
"company": "Northwind Labs",
"location": "Austin, TX",
"remote": true,
"salaryRange": "140,000 to 180,000 USD per year",
"employmentType": "Full-time",
"datePosted": "2026-05-30",
"applyUrl": "https://example.com/careers/senior-backend-engineer"
}