Skip to main content

Job Object

Every API endpoint that returns jobs uses this unified schema.
FieldTypeNullableDescription
iduuidNoUnique job identifier
titlestringNoJob title as listed
normalized_titlestring | nullYesNormalized standard title (null if normalization not available)
companyobjectNoEmployer information (see Company)
descriptionstringNoCleaned job description (HTML — see note below)
summarystring | nullYesAI-generated summary (null for recently indexed jobs pending summarization)
listing_urlstringNoDirect URL to original posting
apply_urlstringNoDeep link to application form
locationsobject[]NoArray of job locations (see Location), empty array if unspecified
compensationobject | nullYesSalary/compensation details (null if not disclosed — see Compensation)
employment_typestring | nullYesEmployment type (see Employment Type)
workplace_typestring | nullYesWorkplace arrangement (see Workplace Type)
experience_levelstring | nullYesSeniority level (see Experience Level)
sourcestringNoATS platform identifier (see Source)
created_atdatetimeNoWhen first indexed by Jobo (ISO 8601)
updated_atdatetimeNoLast update time (ISO 8601)
date_posteddatetime | nullYesOriginal posting date (ISO 8601). Null if the ATS doesn’t expose it.
valid_throughdatetime | nullYesListing validity/expiry date. Null if no expiration set.
is_remotebooleanNoTrue if remote work offered
qualificationsobjectNoStructured qualifications (see Qualifications)
responsibilitiesstring[]NoKey responsibilities (empty array if not extracted)
benefitsstring[]NoBenefits and perks (empty array if not extracted)
is_work_auth_requiredboolean | nullYesWhether work authorization is required (null if not mentioned)
is_h1b_sponsorboolean | nullYesWhether H-1B sponsorship is offered (null if not mentioned)
is_clearance_requiredboolean | nullYesWhether security clearance is required (null if not mentioned)

HTML in Descriptions

The description field contains sanitized HTML (not plain text). Common tags include <p>, <ul>, <li>, <strong>, <em>, <br>, and <h3>. All potentially dangerous tags (e.g., <script>, <iframe>) are stripped during ingestion. If you’re rendering descriptions in a web UI, use an HTML sanitizer like DOMPurify as an additional safety layer.

Enum Fields

Employment Type

ValueDescription
Full-timeStandard full-time position
Part-timePart-time position
ContractContract or freelance work
InternshipInternship position
TemporaryTemporary position

Workplace Type

ValueDescription
RemoteFully remote position
HybridMix of remote and in-office
OnsiteFully in-office/on-site

Experience Level

ValueDescription
Entry LevelEntry-level or junior position
Mid LevelMid-level or intermediate position
Senior LevelSenior position
Lead/StaffLead or staff-level position
PrincipalPrincipal engineer/role
DirectorDirector-level position
VPVice president level
ExecutiveC-level or executive position

Source

The source field identifies the ATS (Applicant Tracking System) platform the job was scraped from. Examples include: greenhouse, lever, workday, ashby, bamboohr, icims, smartrecruiters, teamtailor, workable, rippling, personio, taleo, successfactors, paylocity, dayforce, phenompeople, jobvite, eightfold, jazzhr, breezy, recruitee, applicantpro, comeet, pinpoint, freshteam, gem, polymer, kula, homerun, careerplug, joincom, recooty, trakstar, hirehive, hiringthing, zohorecruit, gohire, jobscore, csod, adpmyjobs, adpworkforcenow, paycom, ultipro, isolved, oraclecloud, talnet, careerpuck New sources are added as we expand coverage. Use the value as an opaque identifier — do not hard-code assumptions about the set of possible values.

Nested Objects

Company

{
  "id": "b5e6f7a8-1234-5678-9abc-def012345678",
  "name": "Acme Corp",
  "website": "https://acme.com",
  "logo_url": "https://logo.clearbit.com/acme.com",
  "summary": "Leading technology company specializing in cloud infrastructure"
}
FieldTypeNullableDescription
iduuidNoUnique company identifier
namestringNoCompany display name
websitestring | nullYesCompany website URL
logo_urlstring | nullYesURL to company logo image
summarystring | nullYesBrief company description

Location

{
  "location": "San Francisco, CA",
  "city": "San Francisco",
  "region": "California",
  "country": "United States",
  "latitude": 37.7749,
  "longitude": -122.4194
}
FieldTypeNullableDescription
locationstring | nullYesRaw location string as parsed
citystring | nullYesCity name
regionstring | nullYesState/province/region
countrystring | nullYesCountry name
latitudenumber | nullYesLatitude coordinate
longitudenumber | nullYesLongitude coordinate

Compensation

{
  "min": 150000,
  "max": 200000,
  "currency": "USD",
  "period": "yearly"
}
FieldTypeNullableDescription
minnumber | nullYesMinimum compensation amount
maxnumber | nullYesMaximum compensation amount
currencystring | nullYesISO 4217 currency code
periodstring | nullYesPay period (see below)
PeriodDescription
yearlyAnnual salary
monthlyMonthly salary
hourlyHourly rate
weeklyWeekly rate
dailyDaily rate

Qualifications

{
  "must_have": {
    "education": ["Bachelor's in Computer Science or equivalent"],
    "certifications": [],
    "skills": [
      { "name": "Python", "type": "hard" },
      { "name": "Kubernetes", "type": "hard" }
    ]
  },
  "preferred": {
    "education": [],
    "certifications": [],
    "skills": [
      { "name": "Terraform", "type": "hard" },
      { "name": "Leadership", "type": "soft" }
    ]
  }
}
The qualifications object contains two buckets — must_have and preferred — each with:
FieldTypeDescription
educationstring[]Required or preferred education (empty array if none)
certificationsstring[]Required or preferred certifications (empty array if none)
skillsobject[]Array of skill objects, each with name (string) and type ("hard" or "soft")

Skill Type

ValueDescription
hardTechnical skills — technologies, tools, frameworks, programming languages
softInterpersonal, behavioral, cognitive skills

Complete Example

A fully populated Job object showing all fields:
{
  "id": "a1b2c3d4-5678-9abc-def0-123456789abc",
  "title": "Senior Software Engineer",
  "normalized_title": "Software Engineer",
  "company": {
    "id": "b5e6f7a8-1234-5678-9abc-def012345678",
    "name": "Acme Corp",
    "website": "https://acme.com",
    "logo_url": "https://logo.clearbit.com/acme.com",
    "summary": "Leading technology company specializing in cloud infrastructure"
  },
  "description": "<p>We are looking for a <strong>Senior Software Engineer</strong> to join our platform team.</p><ul><li>Design and build scalable microservices</li><li>Mentor junior engineers</li><li>Collaborate with product and design teams</li></ul><p>You'll work on systems that serve millions of requests per day.</p>",
  "summary": "Senior Software Engineer role at Acme Corp focused on building scalable microservices, mentoring junior engineers, and collaborating cross-functionally on high-traffic platform systems.",
  "listing_url": "https://boards.greenhouse.io/acmecorp/jobs/4567890",
  "apply_url": "https://boards.greenhouse.io/acmecorp/jobs/4567890#app",
  "locations": [
    {
      "location": "San Francisco, CA",
      "city": "San Francisco",
      "region": "California",
      "country": "United States",
      "latitude": 37.7749,
      "longitude": -122.4194
    },
    {
      "location": "Remote",
      "city": null,
      "region": null,
      "country": "United States",
      "latitude": null,
      "longitude": null
    }
  ],
  "compensation": {
    "min": 150000,
    "max": 200000,
    "currency": "USD",
    "period": "yearly"
  },
  "employment_type": "Full-time",
  "workplace_type": "Hybrid",
  "experience_level": "Senior Level",
  "source": "greenhouse",
  "created_at": "2026-02-16T08:30:00Z",
  "updated_at": "2026-02-28T14:15:00Z",
  "date_posted": "2026-02-15T00:00:00Z",
  "valid_through": "2026-04-15T00:00:00Z",
  "is_remote": true,
  "qualifications": {
    "must_have": {
      "education": ["Bachelor's in Computer Science or equivalent"],
      "certifications": [],
      "skills": [
        { "name": "Python", "type": "hard" },
        { "name": "Kubernetes", "type": "hard" },
        { "name": "PostgreSQL", "type": "hard" },
        { "name": "REST APIs", "type": "hard" }
      ]
    },
    "preferred": {
      "education": ["Master's in Computer Science"],
      "certifications": ["AWS Solutions Architect"],
      "skills": [
        { "name": "Terraform", "type": "hard" },
        { "name": "Go", "type": "hard" },
        { "name": "Leadership", "type": "soft" },
        { "name": "Technical Writing", "type": "soft" }
      ]
    }
  },
  "responsibilities": [
    "Design and build scalable microservices using Python and Go",
    "Lead code reviews and establish engineering best practices",
    "Mentor junior and mid-level engineers",
    "Collaborate with product managers to define technical requirements",
    "Participate in on-call rotation for production systems"
  ],
  "benefits": [
    "Competitive salary with equity",
    "Unlimited PTO",
    "Health, dental, and vision insurance",
    "401(k) with 4% company match",
    "Annual learning & development budget ($5,000)",
    "Home office stipend"
  ],
  "is_work_auth_required": true,
  "is_h1b_sponsor": true,
  "is_clearance_required": false
}
Nullable fields — Fields marked as nullable in the schema above will be null (not absent) when no data is available. Your application should always handle null values gracefully. Array fields (locations, responsibilities, benefits) will be empty arrays [] rather than null when no data is present.