Account Hiring Watch
Pricing
from $8.50 / 1,000 posting changes
Account Hiring Watch
Watch company domains and get only what changed since the last run: new, closed, and reposted job postings read live from 17 job boards, Greenhouse, Lever, Ashby, and Workday among them. Each row has the full job description, a stable posting key, and 30 day hiring velocity. Flat rows or a webhook.
Pricing
from $8.50 / 1,000 posting changes
Rating
0.0
(0)
Developer
Mamba Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 hours ago
Last modified
Categories
Share
๐ What can Account Hiring Watch do?
Account Hiring Watch reads the job boards of the companies you care about and tells you only what changed since your last run: postings that opened, closed, or were reposted. Every run also returns one summary row per company with 30 day hiring velocity, direction, and a surge flag.
- Only changes. The watch keeps its own state between runs, so run two returns new, closed, and reposted postings, not the whole board again.
- Read live from the company's own board. Greenhouse, Lever, Ashby, Workday, Workable, SmartRecruiters, Personio, and Recruitee, through their public job board endpoints. No job aggregator, no login.
- A stable posting key.
posting_keynames one role at one company and city across boards and across runs. A title edit keeps its key. - Full job descriptions on new and reposted rows, up to the length you set.
- Hiring velocity on every run, including the first: new postings in the last 30 days against the 30 days before, direction, and a surge flag.
- A signed webhook in the Standard Webhooks format. With a webhook set, you pay for a change only when your endpoint accepts it.
- First run postings are free. The first run sets the baseline and returns postings opened in the last 7 days, marked
is_backfill, at no charge.
๐ก Why use Account Hiring Watch?
- Catch a target account the week it starts hiring for sales, engineering, or any role category.
- Spot a role that closed (someone was hired: time to find them) or a role that came back (the hire did not stick).
- Feed velocity and surge into account scoring without storing job boards yourself.
- Load flat rows into Clay, a CRM, or a warehouse, or receive them on a webhook.
๐ ๏ธ How to watch accounts for hiring changes
- Paste company domains into Company domains to watch, one per line.
- Pick Role categories, or leave All roles.
- Run it. The first run sets the baseline and returns recent postings at no per posting charge.
- Schedule it daily or weekly with the same Watch name. Each run returns only what changed.
Use one Watch name per list or client. Two watch names never share state.
๐ What data does Account Hiring Watch return?
Two row types in one dataset. Every field is on every row, null where it does not apply.
posting_change, one per change:
| Field | Example |
|---|---|
change_type | new, closed, or reposted |
company_domain, company_name | vercel.com, Vercel |
posting_key, event_id | pk_e6c13ac023e8022984a3, ev_5d604061cc6829034a8c |
job_title, job_location, job_department, is_remote | IT Systems Engineer, San Francisco |
job_url, source_board, board_native_ids, opening_count | Greenhouse link, greenhouse, 6218743004, 1 |
matched_categories, matched_keyword, keyword_tier | GTM, account executive, 2 |
posted_at, first_seen_at, last_seen_at, closed_at, days_open | 2026-10-07 |
reposted_from_closed_at | when the earlier posting closed |
job_description, job_description_chars, job_description_truncated | full text, 4333, false |
is_backfill, delivery_status | true, dataset_only |
account_summary, one per company per run:
| Field | Example |
|---|---|
open_postings, open_postings_matched | 89, 54 |
new_postings_30d, prior_postings_30d (and _matched) | 20, 12 |
closed_postings_30d, reposted_postings_30d (and _matched) | 0, 0 |
velocity_change_pct, hiring_direction, surge_flag | 67, up, false |
velocity_basis, history_days, undated_postings | board_dates, 0, 0 |
changes_new, changes_closed, changes_reposted | this run's counts |
board_provider, board_slug, board_match_confidence | greenhouse, vercel, confirmed |
board_total, board_truncated, is_baseline | 89, false, true |
Every row also carries row_status, error_reason, degraded, degradation_reason, billable_events_json (what this row was charged for), source, source_date, and read_at.
๐ต How much does it cost?
You pay per posting change delivered.
| Plan | Per change | Per 1,000 changes |
|---|---|---|
| Free | $0.010 | $10.00 |
| Bronze | $0.0095 | $9.50 |
| Silver | $0.009 | $9.00 |
| Gold | $0.0085 | $8.50 |
- There is also an Actor start event at $0.002, charged once per run per GB of memory. The actor runs at 256 MB, so that is one start event per run.
- Summary rows are free. First run backfill rows are free. A change already charged is never charged again.
- With a webhook set, a change is charged only after your endpoint answers 2xx.
- Free Apify plans get 150 changes per calendar month, resetting on the 1st. Changes past the allowance wait in the watch and are delivered first on a later run.
๐ Your spending limit is respected. Set a maximum cost per run in Apify, or max_charge_usd on the Input tab. When the next change would go over, the remaining changes are held and delivered first on the next run. Nothing is lost and nothing is charged twice.
โจ๏ธ Input
| Field | Default | What it does |
|---|---|---|
domains | required | Company domains to watch, up to 2,000 per run |
watch_name | default | Keeps watch lists apart. A new name starts a new watch |
keyword_categories | All | Only matching changes are returned and charged: GTM, Engineering, Finance, Operations, Executive, Marketing, HR, CustomerSuccess, Data, Product, Legal, Design, Custom |
custom_keywords | none | Whole word title keywords, T1: or T3: prefix for tier |
board_hints | none | domain=provider:slug, for example acme.com=greenhouse:acmeinc |
first_run_mode | recent | recent, baseline_only, or all_open. First run rows are always free |
first_run_recent_days | 7 | Window for recent |
closed_after_misses | 2 | Complete reads without a posting before it closes |
repost_window_days | 30 | A closed posting back inside this window is reposted |
include_job_description | true | Full description on new and reposted rows |
description_max_chars | 20000 | Length cap per description |
webhook_url, webhook_secret | none | Signed delivery. HTTPS only; the secret is required |
webhook_batch_mode | batch | batch (up to 50 per request) or per_change |
state_store | none | Your own key value store for the watch state |
max_domains | 500 | Domains past this number are skipped |
max_charge_usd | none | Cost cap for one run |
Clay sends every field as text, and the actor reads numbers and true/false values from text.
๐ก Webhook format
Requests follow the Standard Webhooks specification, so any of its libraries verifies them.
- Headers:
webhook-id(the same id on a retry),webhook-timestamp,webhook-signature(v1,plus base64 HMAC SHA256 ofid.timestamp.body). - Body:
{ "type": "hiring.changes", "api_version": "1", "watch_name", "run_id", "sent_at", "changes": [...], "accounts": [...] }. Each change has the same fields as its dataset row. - Dedupe on
event_id. - Retries: 3 attempts in a run (2 s, 8 s, 30 s) on network errors, 408, 429, and 5xx. A change still not accepted waits and goes first on the next run. After 7 days it is dropped, never charged, and counted in
webhook_expired_changes.
๐งฎ How changes are decided
- new: a posting key the watch has not seen, or one closed longer ago than the repost window.
- closed: missing from
closed_after_missescomplete reads in a row. On Greenhouse, Lever, SmartRecruiters, Workable, and Recruitee, a 404 from the posting itself closes it on the first miss. - reposted: a key that closed inside the repost window comes back, or every board id under an open key is replaced in one read.
- A partial or failed board read never closes a posting.
- Reposts do not count as new hiring in velocity.
๐งฉ Use with Clay, the API, and agents
- Clay: run the actor from a Clay table with domains in one column, or point
webhook_urlat a Clay table webhook withwebhook_batch_modeset toper_change. - API:
POST https://api.apify.com/v2/acts/mambalabs~account-hiring-watch/runswith the input above, then read the default dataset. - Schedules: create an Apify schedule with a fixed
watch_name.
โ ๏ธ Error handling
| Situation | What you get |
|---|---|
| No job board found | Summary row with degraded true and the boards checked. Add a board_hints entry |
| Board names a different employer | Summary row says which employer; no rows from that board |
| Board unreachable or slow | Summary row with the reason; no posting is counted as closed |
| Board read cut short (Workday reads stop at 400) | board_truncated true; no posting outside the read is counted as closed |
| Description read fails | Change row still delivered, degraded true |
| Webhook refuses | Rows written as pending without description and URL, sent first next run |
| State store unavailable | Every domain runs as a first run (free) and the summary row says so |
โ ๏ธ Known limits
- Some company sites refuse requests from cloud servers, so the watch cannot find their board link. A
board_hintsentry fixes it. - Workday boards are read up to 400 postings per run.
velocity_basisreadsboard_datesuntil the watch holds 60 days of history. Until then, postings that closed before the watch started are not inprior_postings_30d, soupand surge read high.also_seen_onis reserved and null in this version.- Rippling has a reader that has not been confirmed on a live board yet.
โ FAQ
Why did my first run return so few changes? The first run returns postings opened in the last 7 days, free. Set first_run_mode to all_open to get every open posting, also free.
Does changing the role categories reset the watch? No. Every posting is tracked; categories only decide which changes are returned and charged.
Can I keep the state in my own storage? Yes, choose a key value store in state_store.
๐งฉ Want other GTM data?
Mamba Labs builds custom actors for B2B go-to-market teams. The public versions of that work live here on the Store, so our users get the same tooling we build under contract.
Every actor in the suite takes a domain or a company and returns one flat row, so they stack in the same Clay table without reshaping anything.
๐ ๏ธ Need something custom built for you or your team? Tell us what you are trying to find and we will build it. Talk to Mamba Labs.
Shared code: @mambalabsdev/gtm-core (job board readers, posting key, keyword categories).
๐ Support
Found a bug or need a board added? Open an issue on the Issues tab. Response time is typically within 48 hours.
โน๏ธ Sourcing and legal. Postings come from the public job board endpoints of Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Personio, Recruitee, and Workday, and from the company's own careers page. No authenticated portal is accessed. The actor returns companies and job postings, not people. You are responsible for how you use the output.
Built by Mamba Labs.