Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

You can use Greenhouse, Lever, and Ashby’s public job-posting APIs to monitor companies you already know about and spot postings that are new to your tracker or have recently changed. To tell whether a company has truly just started hiring, you also need a company list, past snapshots, and a check that each role is still publicly listed. A first-seen job or fresh timestamp is a lead to verify—not proof of a newly opened role.

What these APIs can—and cannot—tell you

Each API returns job-board data for an employer whose board identifier you already have. The official documentation reviewed for these platforms does not describe a universal endpoint that discovers every company using one of these systems or maps company names to board identifiers. Finding the boards is a separate step: assemble a company list, then identify each employer’s career-board URL and its platform-specific token, name, or slug.

The APIs can help you detect changes in the postings returned by those boards. They do not, by themselves, establish when a company began hiring, whether a posting represents a newly created requisition, or whether an employer is actively accepting applications. Use precise labels such as “newly observed by this tracker” and “recently updated” unless you have evidence for a stronger claim.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

What each platform provides

Platform Board identifier and endpoint Timestamp Visibility and useful fields
Greenhouse Employer’s Job Board URL token. GET https://boards-api.greenhouse.io/v1/boards/{board_token}/jobs updated_at indicates a job post was updated; it does not prove the job is new. The public Job Board API returns published jobs. Each job includes an id, internal_job_id, location, and absolute_url. Add ?content=true for full post content, departments, and offices.
Lever Employer’s Lever board identifier. List endpoint: GET https://api.lever.co/v1/postings Returned objects use createdAt and updatedAt. Incremental filters are named updated_at_start and updated_at_end, in inclusive Unix milliseconds. Filter for published postings and the public distribution channel. Records include state, distribution channels, categories, and job URLs such as urls.show and urls.apply.
Ashby Job-page name, the final path segment of the employer’s hosted board URL. GET https://api.ashbyhq.com/posting-api/job-board/{JOB_BOARD_NAME} publishedAt is the ISO datetime when the job was last published. The API returns currently published postings. Check isListed; a false value means the listing is accessible only by direct link. Fields can include location, remote status, workplace type, jobUrl, and applyUrl. Add includeCompensation=true to request compensation when available.

Greenhouse’s Job Board API documentation describes public GET endpoints that do not require authentication; its API overview distinguishes the public job-board data from authenticated internal-data APIs. Lever documents posting states and filters in its developer documentation. Ashby’s Job Postings API, labeled v2026-01-01, says it provides data for an organization’s currently published postings.

Build a tracker that can identify changes

  1. Collect boards. Maintain a list of employers and record each one’s ATS, board token or name, and career-page source URL. The API references start with a known employer board; they do not provide a complete company directory.
  2. Poll each board. Request its public postings endpoint on a schedule appropriate for your use. The cited documentation does not establish a universally suitable polling interval or promise a particular feed-update time.
  3. Normalize records. Map each provider’s identifiers, title, location, public URL, visibility fields, and timestamps into a consistent structure. Preserve the original provider fields or payload so you can audit a change later. Convert comparable timestamps to UTC while retaining their original values and formats.
  4. Save dated snapshots. Store each successful response with the time you observed it. Compare it with the previous successful snapshot, rather than treating a single response as a history.
  5. Deduplicate carefully. Use stable provider identifiers, but keep their meanings distinct. In Greenhouse, id identifies the job post, while internal_job_id identifies the job; prospect posts may have a null internal ID. A changed identifier may signal a repost, not necessarily a brand-new opening.
  6. Check visibility and link to the employer. Apply the platform-specific public/listed checks below, then use the employer’s job or application URL so readers can confirm the details and apply directly.

Apply the right public-listing checks

Greenhouse: distinguish the post from the job

The Job Board API is a public export of an organization’s job-board information. Compare a post’s id and updated_at across snapshots, and link to its absolute_url. A changed updated_at means the post changed since an earlier observation; it does not show that the underlying requisition was created at that time. The distinction between post and internal job identifiers also matters when interpreting prospect posts.

Lever: filter by state and distribution

The /postings endpoint can list all posting states unless you filter it. For a public openings tracker, include published postings distributed to the public channel; do not present internal, draft, or closed records as public openings. Lever also documents pending and rejected states for organizations using approvals. A published posting’s visibility can depend on its distribution configuration.

Lever returns camel-case timestamp fields—createdAt and updatedAt—but uses snake-case names for the incremental filters: updated_at_start and updated_at_end. Supply those filter values as inclusive Unix-millisecond timestamps. The filters help retrieve changes within a time window; they are not a definitive new-job detector. Filters for team, department, location, commitment, and tag are case-sensitive. Follow urls.show or urls.apply to the employer’s listing or application page.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Ashby: exclude unlisted direct-link postings

Ashby’s public Job Postings API returns currently published postings for an organization’s board. Include jobs with isListed: true when building a directory intended to reflect normally listed openings. The documentation says a posting with isListed: false is available only by direct link, so it should not be represented as a normally listed public opening. Use publishedAt as a last-published timestamp, not as proof that the role or company began hiring then.

Responses may contain empty employer data fields, and compensation is optional rather than guaranteed. Ashby’s guide to using the Job Postings API describes using the lightweight JSON API to populate an external careers page and link to Ashby’s hosted application form. If you build custom tracking links, Ashby says to copy the utm_source parameter from the hosted job-board URL into them.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Interpret “new” without overstating the evidence

  • First seen in your snapshot history: call it “newly observed by this tracker.” It may have existed before monitoring began.
  • Same stable identifier, later timestamp: call it “recently updated.” An update may reflect an edit rather than a new requisition.
  • New identifier or repeated title: investigate a possible repost, duplicate location, or changed identifier before counting it as a new role.
  • Evergreen or prospect listing: treat it cautiously. Its presence does not necessarily mean the employer has opened a specific, current vacancy.
  • Public status has changed or freshness matters: revisit the employer’s job page before presenting the role as open.

Keep the wording attached to the evidence: a tracker can establish when it first observed a record, and provider fields can show the timestamps and public-listing status they document. Those signals alone do not prove when hiring began or whether the employer is still accepting applications.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.