Greenhouse Job Monitor & Hiring Intent Signals
Pricing
from $2.00 / 1,000 ranked accounts
Greenhouse Job Monitor & Hiring Intent Signals
Greenhouse job board monitor for sales teams. Rank B2B outbound accounts by hiring intent with explainable scores, outreach angles, and new job signals. Starter pack included — click Start to try free.
Pricing
from $2.00 / 1,000 ranked accounts
Rating
0.0
(0)
Developer
Alex, The Creator
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
1
Monthly active users
10 days ago
Last modified
Categories
Share
Monitor public Greenhouse job boards and turn job postings into ranked B2B outbound accounts with explainable hiring intent signals — scores, matched keywords, outreach angles, and new-vs-seen job deltas.
Built for SDR/AE outbound, RevOps account prioritization, and lead generation teams that want hiring activity as a practical sales signal (not just a raw job list).
Quick Start (2 Minutes)
- Click Start with defaults — a curated Greenhouse starter pack (Stripe, Figma, Datadog, Discord, MongoDB, and more) is already loaded.
- Open dataset view Ranked Accounts (
overview) for a multi-company table with scores, categories, and outreach angles. - Check key-value store record
SUMMARYfor run counters and ROI metrics. - Replace
greenhouseBoardTokenswith your target companies for production runs.
Sample Output
Example ranked accounts from a default Greenhouse run:
| Company | Score | Categories | Outreach Angles | Matched Jobs | Total Jobs |
|---|---|---|---|---|---|
| Checkr | 157 | 2 | 4 | 16 | 59 |
| Discord | 145 | 2 | 4 | 11 | 70 |
| Launchpad Technologies | 131 | 3 | 4 | 4 | 12 |
| Webflow | 88 | 2 | 4 | 4 | 21 |
| Airtable | 82 | 4 | 4 | 4 | 29 |
Each row includes matched category names, keyword evidence, and ready-to-use outreach angles in the full dataset export.
Why Teams Use This
- Prioritizes accounts with active hiring momentum.
- Works with Greenhouse boards and existing Apify job datasets.
- Produces explainable scoring with matched categories and keywords.
- Tracks new-vs-seen changes so repeated runs surface fresh opportunities.
- Ships run-level ROI counters in
SUMMARYfor stakeholder reporting.
Greenhouse Job Board Monitor
Use this Actor as a Greenhouse job board monitor that goes beyond scraping:
- Ingests jobs from the public Greenhouse Job Board API (no login required for public boards).
- Aggregates and deduplicates postings by company.
- Ranks accounts using configurable hiring-intent rules (RevOps, security, data, growth, and more).
- Surfaces outreach angles you can paste into sequences or CRM notes.
Already have jobs from another Actor? Switch to dataset mode and pass an Apify dataset ID.
Hiring Intent Signals for Outbound Sales
Each ranked account row is a lead-generation signal, not just a job listing:
| Signal | Why it matters for outbound |
|---|---|
score | Prioritize accounts with the strongest hiring-intent match |
matchedCategories | See which themes fired (RevOps, security, growth, etc.) |
outreachAngles | Ready-made talk tracks tied to matched roles |
newMatchedJobCount | Focus on fresh opportunities vs stale boards |
signals[] | Evidence: titles, URLs, matched keywords per rule |
Export results as JSON/CSV, schedule recurring runs, or route output into CRM and outreach automation.
FAQ
Does this monitor Greenhouse job boards?
Yes. Greenhouse mode reads public boards via the official Job Board API. Add board tokens (for example stripe, figma) or full board URLs.
Is this a Greenhouse scraper?
It extracts and ranks Greenhouse job board data, but the output is ranked B2B accounts with hiring intent scoring — designed for outbound prioritization, not raw job dumps.
Can I use LinkedIn or Indeed jobs?
Not directly. Use dataset mode with job data from another Apify Actor (or your own dataset), then map fields with fieldMapping.
What makes this different from a job posting scraper?
Job scrapers return listings. This Actor scores and ranks companies by hiring intent, tracks new-vs-seen changes across runs, and returns outreach-ready angles.
Is there a free trial?
Apify free credits apply. Defaults use a starter pack and capped output (maxAccounts: 50) for a fast first run.
What It Does
- Ingests jobs from one of two sources:
- Apify dataset (
sourceDatasetId) - Greenhouse Job Board API (
greenhouseBoardTokens)
- Apify dataset (
- Normalizes and deduplicates jobs.
- Aggregates signals by company domain.
- Scores accounts using configurable role rules.
- Tracks new-vs-seen signals across runs using persisted state.
- Outputs ranked accounts to the default dataset.
- Writes run metrics and ROI metrics to
SUMMARYin default key-value store. - Optionally posts digest and failure alerts to webhooks.
Best-Fit Use Cases
- Outbound prospecting queues for SDR/AE teams.
- Weekly account prioritization for RevOps.
- Agency lead-list enrichment workflows.
- Signal-driven routing into CRM or outreach automation.
Input Contract
Use the Actor input schema in the Apify run UI.
Source Selection
Provide exactly one source mode.
| Field | Type | Required | Notes |
|---|---|---|---|
sourceMode | string | Yes | greenhouse_api or dataset. Runtime validation enforces consistency with source fields. |
sourceDatasetId | string | Yes (if greenhouseBoardTokens is empty) | Apify dataset ID with source job rows. |
greenhouseBoardTokens | string[] | Yes (if sourceDatasetId is empty) | Greenhouse board tokens or board URLs. Example: webflow or https://boards.greenhouse.io/webflow. |
greenhouseIncludeContent | boolean | No | Greenhouse mode only. Default true. Includes full job description content when enabled. |
Source selection is strictly XOR-validated at runtime (schema requires explicit sourceMode and mode guidance):
- dataset mode: non-empty
sourceDatasetIdand emptygreenhouseBoardTokens - greenhouse mode: non-empty
greenhouseBoardTokensand emptysourceDatasetId
Default public run behavior:
- The input UI is prefilled with a 10-company Greenhouse starter pack so first-time runs produce a compelling ranked overview without setup.
- Defaults are tuned for a fast demo:
maxSourceItems: 3000,maxAccounts: 50. - To use dataset mode, clear
greenhouseBoardTokensand setsourceDatasetId.
Processing Controls
| Field | Type | Default | Notes |
|---|---|---|---|
maxSourceItems | integer | 3000 | Max source jobs to read in a run (hard-capped at 20000). |
maxAccounts | integer | 50 | Max ranked accounts to output (hard-capped at 1000). |
minAccountScore | integer | 25 | Accounts below this score are dropped. |
Dataset Mapping (dataset mode)
fieldMapping supports custom source key lookup for:
companyNameFieldscompanyDomainFieldscompanyUrlFieldsjobTitleFieldsjobUrlFieldslocationFieldspostedAtFieldsdescriptionFields
Scoring Rules
roleRules[] entries:
nameweightkeywords[]negativeKeywords[](optional)outreachAngles[]
Delivery and Billing
| Field | Type | Default | Notes |
|---|---|---|---|
slackWebhookUrl | string | "" | Optional digest webhook. |
digestTopN | integer | 10 | Number of rows in digest. |
alertWebhookUrl | string | "" | Optional failure alert webhook. |
Billing note: pay-per-event charging uses a fixed internal event name (ranked-account) and is not configurable via Actor input.
Input Examples
Dataset Mode
{"sourceMode": "dataset","sourceDatasetId": "abc123XYZ","maxSourceItems": 3000,"maxAccounts": 150,"minAccountScore": 25,"fieldMapping": {"companyNameFields": ["company", "companyName"],"jobTitleFields": ["title", "jobTitle"],"jobUrlFields": ["url", "jobUrl"]},"slackWebhookUrl": "","digestTopN": 10,"alertWebhookUrl": ""}
Greenhouse Mode
{"sourceMode": "greenhouse_api","greenhouseBoardTokens": ["stripe","figma","datadog","https://boards.greenhouse.io/discord"],"greenhouseIncludeContent": true,"maxSourceItems": 3000,"maxAccounts": 150,"minAccountScore": 25}
Source Row Shape (dataset mode)
A typical source row:
{"companyName": "Acme Inc","companyUrl": "https://acme.com","jobTitle": "Senior RevOps Manager","jobUrl": "https://jobs.acme.com/revops-123","location": "San Francisco, CA","postedAt": "2026-02-01T12:00:00Z","description": "Own Salesforce administration and RevOps process improvements."}
Output Contract
Default Dataset
One row per account.
| Field | Type | Description |
|---|---|---|
accountKey | string | Stable account identifier used for state/dedupe/ranking. |
companyName | string | Account display name. |
companyDomain | string | null | Canonical website domain when available; null if unresolved. |
score | integer | Final account score (0-999). |
jobCount | integer | Total jobs after normalization/dedupe. |
matchedJobCount | integer | Jobs that matched at least one rule. |
matchedJobRatio | number | matchedJobCount / jobCount. |
newJobCount | integer | New jobs vs persisted seen-state. |
newMatchedJobCount | integer | New matched jobs vs seen-state. |
isNewCompany | boolean | Whether account was unseen in prior state. |
matchedCategories | string[] | Rule categories with hits, ordered by hit strength. |
outreachAngles | string[] | Up to 4 angle suggestions from matched categories. |
latestPostedAt | string | Latest posting timestamp observed for the account (ISO 8601 UTC). |
avgSignalConfidence | number | Mean confidence across matched rule events. |
recencyScore | integer | Recency factor (1-100). |
scoreBreakdown | object | Components used to build final score. |
signals | object[] | Up to 8 matched signals. |
generatedAtUtc | string | Run timestamp in UTC (Z). |
signals[] fields:
titlelocationpostedAtjobUrlmatchedRulessignalConfidencematchedKeywordsByRule
scoreBreakdown fields:
categoryScorevolumeComponentqualityComponentconfidenceComponentrecencyComponent
SUMMARY (default key-value store)
SUMMARY includes run counters plus ROI summary.
| Field | Type | Description |
|---|---|---|
sourceType | string | dataset or greenhouse_api. |
sourceDatasetId | string | Dataset ID (empty in Greenhouse mode). |
sourceItemsRead | integer | Jobs read from source ingestion. |
accountsMatched | integer | Accounts with non-zero matched score before cap. |
accountsOutput | integer | Accounts actually delivered to dataset (after score/output caps and PPE cost cap, if hit). |
generatedAtUtc | string | Run timestamp UTC. |
filteredMissingDomain | integer | Jobs dropped for missing domain. |
filteredMissingTitle | integer | Jobs dropped for missing title. |
filteredDuplicateJobs | integer | Duplicate job fingerprints dropped. |
filteredBelowMinScore | integer | Accounts dropped below minAccountScore. |
roiSummary | object | Aggregate output quality metrics. |
stoppedByMaxTotalCharge | boolean | True when PPE max total charge limit stopped output early. |
delivery | object | Delivery accounting for attempted vs delivered vs charged rows. |
ingestion | object | Present in Greenhouse mode; board-level ingestion stats. |
roiSummary fields:
outputMatchedJobsoutputNewMatchedJobsoutputHighConfidenceAccountshighConfidenceThresholdoutputAvgAccountScoreoutputAvgMatchedJobRatiooutputAvgSignalConfidence
delivery fields:
attemptedRowsdeliveredRowschargedRowschargedEventNamepricingModelisPayPerEventknownPayPerEventseventChargeLimitReachedstoppedByMaxTotalCharge
ingestion includes board-level success/failure detail:
succeededBoards[]:{ token, jobsFetched }failedBoards[]:{ token, reason, httpStatus?, message }
Processing Behavior
Normalization and Dedupe
- Domains are normalized from explicit domain, company URL, or job URL.
- Known aggregator hosts are re-keyed to account-level keys (for example
webflow.greenhouse). - Description text is cleaned (HTML/boilerplate removal) before scoring.
- Dedupe uses a deterministic fingerprint over domain/title/location/url (or description snippet fallback).
Scoring
- Rule hits come from keyword matches in title + cleaned description.
- A rule match requires either a title hit or at least two distinct keyword hits.
- Optional
negativeKeywordssuppress matches for known noisy contexts. - Rule-level confidence is computed from title/body hit mix and keyword coverage.
- Final score blends:
- weighted category hits
- match ratio quality
- confidence quality
- recency
- Accounts with no matched rules are not emitted.
State and Newness
- State stores seen fingerprints per
accountKey. newJobCountandnewMatchedJobCountare calculated against persisted state.- Seen-state is updated for all matched domains, not only capped output rows.
Failure Handling
- Failures are logged with pipeline stage context.
- If
alertWebhookUrlis set, a failure alert message is posted. - In Greenhouse mode, per-board failures are counted in
ingestion.greenhouseBoardsFailed; successful boards still process.
Changelog
See CHANGELOG.md.