Hiring Signal
Pricing
from $1.00 / 1,000 results
Hiring Signal
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Mahruf Hossain
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
v0.3 fix (October 2026)
Fixes the false failure encountered with 193 live job listings: Apify's dataset metadata itemCount can lag behind newly written items for up to five seconds. The Actor now checks actual stored dataset items using paginated reads before deciding whether to commit a monitoring snapshot. Genuine incomplete dataset writes still fail safely, without advancing monitoring state.
Hiring Signals — deployable Apify Actor v0.2
This Actor reads published job listings from official public Greenhouse and Lever APIs. It supports two modes:
- scan (default, stateless and suitable for public use): returns all current postings as
changeType=current. Does not retain the user's watchlist or state. - monitor (private scheduled use): compare successive successful scans using a user-generated private UUID v4; first run emits a baseline and later runs emit new, updated, and confirmed removed listings. Removal requires two successful scans, because job feeds can be temporarily incomplete. The snapshots live in a named Apify KV store owned by the Actor publisher.
Prerequisites
- An Apify account, Node.js and the Apify CLI.
- Python 3.12+ for local runs (optional; cloud builds install Python).
- No AI API key and no Greenhouse/Lever password needed.
Local tests (offline, do not need API access)
$python -m unittest discover -s tests -v
Deploy from your computer
- Unzip project into its own folder (keep
.actor/andsrc/inside). - Open a terminal in that folder, run
npm install -g apify-cli. - Run
apify login(login using your own account; never share tokens in chats). - Run
apify push. This creates/builds the Actor in your account. - In Apify Console, open Development > My Actors > Hiring Signals; review the build log, then run it using
SAMPLE_INPUT_SCAN.jsonwith the example H1 (Lever) and IMC (Greenhouse) boards, then replace them with boards you want to monitor. - Inspect the output Dataset and
SUMMARYrecord in the default key-value store.
SAMPLE_INPUT_SCAN.json includes real employer board slugs (H1 on Lever and IMC on Greenhouse) observed from public employer pages on October 9, 2026. Sources can change or block access; if a board fails, inspect the run log and confirm its public URL before changing the token.
For monitor mode, create a private watchlist UUID on your PC:
$python -c "import uuid; print(uuid.uuid4())"
Use the generated value as monitorId in SAMPLE_INPUT_MONITOR.json; keep it unchanged on each run. Do not share it publicly. Save the complete input as an Apify Task, run once to establish baseline, then schedule that task daily. Don't run the same monitor concurrently. The first run outputs current jobs unless you set includeBaseline=false.
Quality/safety
- Invalid board tokens and network failures leave prior state unchanged. Suspiciously empty or drastically smaller responses do not trigger removals in monitor mode.
- Removals are reported only after two successful consecutive checks of the board that both lack the same posting. They mean the posting disappeared, not proof it was filled.
- The Actor exports only information supplied by job boards, never invents salary/location fields.
- Dataset record completeness is checked by actually reading stored item pages (not the delayed dataset metadata counter). If an Apify run's maximum spending budget genuinely truncates billed dataset output, the Actor does not advance the monitoring snapshot; partial output can still be billed and reappear next run, so set spending limits appropriately.
- Production use of shared
monitormode by unrelated paying customers needs a fully tenant-isolated state design. Do not publish monitor mode as a customer-data service without that redesign. Public paid users should usescanmode until tenant isolation is in place.
Monetization
Use Apify Console → Actor → Publishing → Monetization → Pay per event. Set only apify-default-dataset-item as a paid result event (start by testing $0.002 per scan result (and confirm you cover compute costs)), and disable or price apify-actor-start at $0 if you intend only per-row charges. The SDK automatically bills default-dataset items for this synthetic event. A 1,000-result scan at $0.002/item incurs $2 in gross user charges; calculate platform fees and run costs before publishing. Do not promise results or income.
The Actor is not publicly live until you finish Apify's publishing steps and account requirements. Payouts follow Apify's schedule, not instant cash.
Official docs: Actor deployment · Actor schedules · Pay per event · Publishing · Greenhouse · Lever