Expired Jobs API for Career Site Job Listing API
Pricing
from $1.99 / 1,000 results
Expired Jobs API for Career Site Job Listing API
Track observed removals of public Greenhouse and Ashby job ads without an API key. Requires a genuine prior observation, two complete current collections and detail HTTP 404/410. Native board IDs; no claim of a filled vacancy or exact source expiry time.
Pricing
from $1.99 / 1,000 results
Rating
0.0
(0)
Developer
Jobs Scraper
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 days ago
Last modified
Categories
Security
Limited permissionsShare
What does this Actor do?
Track public ATS advertisement removals without a vendor API key. The public mode compares genuinely observed Greenhouse and Ashby posting IDs with current complete collections and verifies exact detail status. It emits an event only when a previously observed listing is missing from two matching complete ID collections and its detail returns HTTP 404 or 410.
The result means that the advertisement is no longer publicly available. It does not establish that the employer filled the vacancy, and it does not invent an exact source expiration timestamp. Native IDs and board coverage differ from the original Fantastic.jobs service. The original authorized vendor mode remains available through sourceMode=fantastic; it is never a fallback for public mode.
Sources and defaults
The Ashby public Posting API and Greenhouse Job Board API provide public job collections. Empty source input selects the OpenAI Ashby board and Duolingo Greenhouse board.
The bootstrap file contains 21 historical identities from actual live API runs captured on 23–24 October 2026, with capture paths and SHA-256 provenance. These identities are comparison inputs. They are never returned as static results: each emitted event requires new current collection/detail checks. The Actor learns all current IDs for selected boards on every successful run. A new board initially establishes its own baseline.
Input and operation
- Select sourceMode=public.
- Keep the starter boards or supply up to ten supported board URLs.
- Choose a maximum result count and observation window.
- Run the Actor. Inspect SOURCE_METADATA and RUN_SUMMARY alongside the dataset.
- Schedule subsequent checks against the same named observation store.
Example input:
{"sourceMode": "public","startUrls": [{"url": "https://jobs.ashbyhq.com/openai"},{"url": "https://boards.greenhouse.io/duolingo"}],"maxItems": 10,"timeRange": "1d","stateStoreName": "jobscrawler-expired-ats-public-v1"}
See the Input tab for all limits. timeRange filters when this tracker first confirmed a removal; it is not an exact publisher expiry date. 1w and 1m alias 7d and 30d. searchQuery filters the last genuinely observed title. New boards and quiet windows can produce zero events successfully. maxItems is a cap, not a promise that ten jobs expired.
The named KVS belongs to the running Apify user account. Run related workflows sequentially against the same state store. Give independent workflows distinct store names. Source failures and changing/incomplete collections fail without committing partial observation state. Source denial, server errors, redirects or a guessed URL alone never produce a removal event. Directly reachable detail pages are excluded.
Output
You can download the dataset in JSON, HTML, CSV or Excel. The following two anonymized records illustrate the contract only; they are not runtime evidence.
[{"recordId": "ashby/example/00000000-0000-4000-8000-000000000001","jobId": "00000000-0000-4000-8000-000000000001","jobTitle": "Example Engineer","jobTitleObservation": "last_observed_public_title","expirationStatus": "no_longer_publicly_available","lastSeenAt": "2026-01-01T10:00:00.000Z","firstObservedMissingAt": "2026-01-02T10:00:00.000Z","exactExpirationTimeKnown": false,"sourceVacancyFilledStatusKnown": false,"dataMode": "live_public_ats_comparison"},{"recordId": "greenhouse/example/1234567","jobId": "1234567","jobTitle": "Example Analyst","expirationStatus": "no_longer_publicly_available","lastSeenAt": "2026-01-01T11:00:00.000Z","firstObservedMissingAt": "2026-01-02T11:00:00.000Z","exactExpirationTimeKnown": false,"dataMode": "live_public_ats_comparison"}]
Real records also contain the current source URLs, provider, company handle, detail status, both complete collection hashes, verification timestamps and the provenance of the earlier observation. Missing source properties are omitted. The title is explicitly historical.
Costs, limitations and support
Public mode requires no Jooble, Exa, Fantastic.jobs or other vendor API key. Normal Apify compute, storage and any published event pricing still apply. Requests are bounded, sequential and spaced; no proxy identity rotation is used. The client stops on denied routes or quota/server errors. The provider's collection is the authority for currently published IDs.
This is selected-board observation history, not a global historical vendor feed or a guarantee about a vacancy's hiring status. Removing and later publishing a job again clears its current removal event when the native ID reappears. Input errors, malformed collections, corrupt state and request-budget limits produce diagnostics rather than fabricated rows. Contact the Actor maintainer with the run ID and sanitized diagnostic code when a supported source changes.