Career Change Signal Engine
Last updated October 14, 2026
Send the contacts you watch and get back only what changed: who left, who landed where, who replaced them, and who started after a role closed. Each row has evidence, a source date, a segment, a first line draft, and Slack, HubSpot, HeyReach, and Instantly payloads. Runs on your own data and keys.
Install
npx @mambalabsdev/mcp-career-change-signal-engineEvery tool here also runs hosted, with no install at all, through Apify's MCP endpoint.
Features
- Each row has evidence, a source date, a segment, a first line draft, and Slack, HubSpot, HeyReach, and Instantly payloads.
- Runs on your own data and keys.
- Pay per event: Contact checked at $0.02.
- Pay per event: Signal delivered at $0.068.
Input
peoplearrayrequiredYour watch list, one object per person: name, company domain and name, title, work email, relationship, optional ids, and an optional known role history.
watch_list_idstringoptionalNames the list. State is kept per watch list id when state_source is actor.
state_sourcestringoptionalactor: the engine keeps state between runs in a named store. caller: you send last_reading per person and keep state yourself.
read_modestringoptionalstored_first: your known_history first, then your keys. live_only: ignore known_history. stored_only: only known_history, no key calls.
first_run_modestringoptionalreport: the first run returns every change it finds. baseline: the first run stores state and returns nothing, charging only contact_checked.
max_people_per_runintegeroptionalA list longer than this fails the run before any read or charge.
providerKeysobjectoptionalYour own keys: serper or serpapi (web search), prospeo, bounceban (verifier), findymail, exa.
linkedin_reader_dataset_idstringoptionalOptional: the dataset id of a LinkedIn reader run on the same Apify account.
repliesarrayoptionalOptional reply texts: external_id or work_email or profile_url, text, received_at, channel, is_auto_reply.
bouncesarrayoptionalOptional bounces: work_email, bounce_type, smtp_code, smtp_text, bounced_at.
posting_changesarrayoptionalOptional Account Hiring Watch rows. A closed posting starts a new hire search at that company.
suppressionobjectoptionalemails, profile_urls, opted_out_emails, opted_out_profile_urls, company_domains, company_names.
icp_tiersobjectoptionalOptional map of company domain to tier, shown on landed rows.
featuresobjectoptionalSwitches: replacement, closed_posting, contact_data, first_line, icp, include_promotions.
sender_contextstringoptionalOptional topic phrase for the first line draft, for example: content production at scale.
max_replacement_candidatesintegeroptionalCandidates proposed per leaver. A person confirms each.
max_spend_usdintegeroptionalStops the run before a charge that would cross it.
sweep_interval_daysintegeroptionalWith state_source actor, a person read within this many days is skipped.
concurrencyintegeroptionalPeople read at once.
webhook_urlstringoptionalOptional: signed Standard Webhooks POST of up to 100 signal rows per request.
webhook_secretstringoptionalSigning secret; a whsec_ value is base64 decoded.
Output schema
{
"signal_id": "string",
"watch_list_id": "string",
"run_id": "string",
"signal_type": "string",
"segment": "string or null",
"row_status": "string",
"error_reason": "string or null",
"external_id": "string or null",
"person_key": "string or null",
"crm_id": "string or null",
"deal_id": "string or null",
"relationship": "string or null",
"person_name": "string or null",
"profile_url": "string or null",
"work_email_last_known": "string or null",
"previous_company_name": "string or null",
"previous_company_domain": "string or null",
"previous_title": "string or null",
"left_month": "string or null",
"employment_status": "string",
"current_company_name": "string or null",
"current_company_domain": "string or null",
"current_company_linkedin_url": "string or null",
"current_title": "string or null",
"start_month": "string or null",
"start_month_precision": "string or null",
"days_in_role": "string or null",
"in_first_90_days": "string or null",
"move_type": "string or null",
"move_type_reason": "string or null",
"open_to_work": "string or null",
"fractional_or_self": "string or null",
"leaver_confidence": "string or null",
"identity_match": "string",
"needs_confirmation": "boolean",
"evidence": "array",
"reply_class": "string or null",
"trigger": "string or null",
"trigger_ref": "string or null",
"replacement_for_person_key": "string or null",
"replacement_for_name": "string or null",
"replacement_for_profile_url": "string or null",
"replacement_for_title": "string or null",
"candidate_rank": "string or null",
"candidate_score": "string or null",
"match_reasons": "array",
"confirm_ref": "string or null",
"new_company_icp_tier": "string or null",
"new_company_icp_score": "string or null",
"icp_source": "string or null",
"work_email": "string or null",
"work_email_status": "string or null",
"phone": "string or null",
"contact_source": "string or null",
"first_line_draft": "string or null",
"first_line_method": "string or null",
"slack_card_json": "string or null",
"hubspot_properties_json": "string or null",
"instantly_custom_variables_json": "string or null",
"heyreach_custom_fields_json": "string or null",
"heyreach_tags": "array",
"instantly_tags": "array",
"webhook_status": "string",
"source": "string",
"source_detail": "string or null",
"source_date": "string or null",
"source_age_days_inferred": "string or null",
"read_at": "string",
"role_history": "array",
"state_mode": "string",
"billable_events_json": "string",
"people_in_input": "integer",
"people_due": "integer",
"people_read": "integer",
"contacts_checked": "integer",
"signals_emitted": "integer",
"suppressed_count": "integer",
"suppression_screened": "boolean",
"suppressed_by_reason_json": "string",
"estimated_charge_usd": "integer",
"stopped_at_cap": "boolean",
"errors": "array",
"provider_usage_json": "string"
}Pricing
Pay-per-event billing on the Apify platform. You are charged only when the actor returns a result. No subscription, no seat license.
Free-tier Apify accounts include monthly free compute. Upgrade for higher concurrency and volume.