Watch career changes
watch_career_changesTrack a contact watch list and return only what changed since the last run: departures, new employers, replacements, and hires after a role closed, with evidence and outreach payloads.
Instructions
Read a watch list of contacts and return only what changed since the last run: who left, who landed where, who replaced them, and who started after a role closed. Each row carries evidence, a source date, a segment, a first line draft, and Slack, HubSpot, HeyReach, and Instantly payloads. Pass people (required) and, optionally, replies, bounces, posting changes, suppression, and your own provider keys in providerKeys; it never fetches LinkedIn and holds no key of its own. State is kept per watch_list_id. A run that does not succeed is returned as an error with its run ID. Requires an APIFY_TOKEN and consumes Apify credits per call.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| people | Yes | Your watch list, one object per person: person_name, profile_url (optional), company_domain, company_name, title, work_email, relationship (prospect, mgl, deal_contact, customer_champion), external_id, crm_id, deal_id, known_history (a HeyReach copy, a Proofed LinkedIn reader row, or generic roles), last_reading (with state_source caller). The engine reads only these people. At most max_people_per_run per run. | |
| bounces | No | Optional bounces: work_email, bounce_type, smtp_code, smtp_text, bounced_at. | |
| replies | No | Optional reply texts: external_id or work_email or profile_url, text, received_at, channel, is_auto_reply. Text is classified and dropped; only its sha1 is kept. | |
| features | No | Switches: replacement, closed_posting, contact_data, first_line, icp, include_promotions. Defaults on except include_promotions. | |
| icp_tiers | No | Optional map of company domain to tier, shown on landed rows. Never blocks a row. | |
| read_mode | No | stored_first: your known_history first, then your keys. live_only: ignore known_history. stored_only: only known_history, no key calls. | |
| concurrency | No | People read at once. | |
| suppression | No | emails, profile_urls, opted_out_emails, opted_out_profile_urls, company_domains, company_names. Suppressed people are dropped before the read and cost nothing. | |
| webhook_url | No | Optional: signed Standard Webhooks POST of up to 100 signal rows per request. | |
| providerKeys | No | Your own keys: serper or serpapi (web search), prospeo, bounceban (verifier), findymail, exa. Never written to state, output, logs, or the webhook. Your own key, sent as a run input; never stored by the actor. | |
| state_source | No | actor: the engine keeps state between runs in a named store. caller: you send last_reading per person and keep state yourself. | |
| max_spend_usd | No | Stops the run before a charge that would cross it. | |
| watch_list_id | No | Names the list. State is kept per watch list id when state_source is actor. | |
| first_run_mode | No | report: the first run returns every change it finds. baseline: the first run stores state and returns nothing, charging only contact_checked. | |
| sender_context | No | Optional topic phrase for the first line draft, for example: content production at scale. | |
| webhook_secret | No | Signing secret; a whsec_ value is base64 decoded. Your own key, sent as a run input; never stored by the actor. | |
| posting_changes | No | Optional Account Hiring Watch rows. A closed posting starts a new hire search at that company. | |
| max_people_per_run | No | A list longer than this fails the run before any read or charge. Default 150, at most 1,000. | |
| sweep_interval_days | No | With state_source actor, a person read within this many days is skipped. | |
| linkedin_reader_dataset_id | No | Optional: the dataset id of a Proofed LinkedIn reader run on the same Apify account. Rows join to people by profile URL. | |
| max_replacement_candidates | No | Candidates proposed per leaver. A person confirms each. |