Hiring Intent Account Feed (Jobs to Accounts)
Pricing
from $10.00 / 1,000 ranked accounts
Hiring Intent Account Feed (Jobs to Accounts)
Turn job postings into ranked B2B outbound accounts with explainable scoring, fresh-signal deltas, and optional webhook alerts.
Pricing
from $10.00 / 1,000 ranked accounts
Rating
0.0
(0)
Developer

Alex, The Creator
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Hiring Intent Account Feed
Convert job postings into ranked B2B outbound accounts with explainable hiring-intent signals.
Why Teams Use This
- Prioritizes accounts with active hiring momentum.
- Works with both Greenhouse boards and existing Apify 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.
Quick Start (2 Minutes)
- Run with default input (already prefilled with
greenhouseBoardTokens: ["webflow"]). - Open dataset view
overviewfor ranked accounts. - Check key-value store record
SUMMARYfor run counters and ROI metrics.
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
greenhouseBoardTokens: ["webflow"]so first-time runs work without extra setup. - To use dataset mode, clear
greenhouseBoardTokensand setsourceDatasetId.
Processing Controls
| Field | Type | Default | Notes |
|---|---|---|---|
maxSourceItems | integer | 5000 | Max source jobs to read in a run (hard-capped at 20000). |
maxAccounts | integer | 200 | 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": ["webflow","airtable","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.