Job Change Tracker
Pricing
from $21.25 / 1,000 person reads
Job Change Tracker
Checks whether your contacts still work where your CRM says. Returns current employer, title, start month, role history, and left, landed, or promoted status, with a namesake check and a source date on every row. Runs on your own data and your own search, Prospeo, and verifier keys.
Pricing
from $21.25 / 1,000 person reads
Rating
0.0
(0)
Developer
Mamba Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 hours ago
Last modified
Categories
Share
Send the contacts in your CRM. Get one row back per person: where they work now, their title, when they started, their role history, and whether they left the company you know them at, landed somewhere new, or moved up inside the same company.
Every row says how the person was matched, which source the answer came from, and how old that source is.
What it does
For each person you send (a name plus the company your records place them at), the actor:
- Reads any role history you already hold, such as a stored copy from your outreach tool or your own CRM. This costs nothing extra.
- Finds the person's LinkedIn profile URL with your web search key when you did not send one. A namesake check accepts a profile only when the name matches and the history or the search result shows your company.
- Reads the search result line for that profile, which usually names the current title and company.
- Reads the role history with start and end months from Prospeo on your key.
- Checks the company's own team and about pages, and Google News, for free.
- Verifies the old work address with BounceBan on your key, only while the person still reads as at the company.
It then works out the status against the company you sent. Career Break and "Open to work" entries never count as a job. A move to a new employer is a new hire. A new role at the same employer, with the earlier role open or ended within 3 months, is a promotion.
The actor never opens linkedin.com and never calls another developer's actor. Paid lookups run on your own provider keys and bill your provider accounts.
What you get
| Field | Example |
|---|---|
employment_status | current, between_roles, unknown |
leaver_status | still_at_company, left, unknown |
landing_status | landed, not_landed, not_applicable, unknown |
current_company_name, current_title | AccuWeather, VP, AI Partnerships |
start_month, start_precision, days_in_role | 2026-08, month, 74 |
move_type, move_type_reason, seniority_change | new_hire, different_company_name, same |
previous_company_name, previous_title, left_month | Dataminr, Sr. Director, 2026-07 |
role_history | array of roles with company, title, start and end month |
match_method, match_confidence, match_evidence | name_search, high, ["name","company_domain"] |
source, source_detail, source_date, source_age_days | byod, heyreach, 2026-10-07, 7 |
evidence, sources_tried | why the status was set, and what was tried |
read_status, error_reason | ok, or why there is no reading |
billable_events_json | the events charged for this row |
input_id, person_name | your row ID and the name you sent, returned unchanged |
input_company_domain, input_company_name, input_title | the last known company and title you sent |
profile_url, candidate_profile_urls | the profile used as the identity, and every profile considered during the lookup |
employment_confidence, leaver_confidence | high, low, or null when unknown |
current_company_domain, current_company_linkedin_url | the current employer's domain and LinkedIn URL, when a source gives them |
open_to_work, career_break, concurrent_open_roles | false, false, 0 |
role_count | number of roles read, kept when includeRoleHistory is off |
source_date_method | how source_date was set |
read_at, cache_hit | when the row was read, and whether it came from the cache (never charged) |
Every row carries the same 45 fields per person. Rows are flat and snake_case, so they load into Clay, a sheet, or a CRM as they are. Two dataset views come with every run: Overview and Evidence.
Input
One person:
{"person_name": "Jane Doe","company_domain": "acme.io","company_name": "Acme","last_known_title": "Head of Growth","profile_url": "https://www.linkedin.com/in/janedoe","email": "jane@acme.io","input_id": "crm-48213","serperApiKey": "...","prospeoApiKey": "...","bouncebanApiKey": "..."}
Many people go in people, each with the same keys. A person can carry known_history, a role history you already hold:
{ "source": "heyreach", "source_date": "2026-10-07", "experiences": "[{\"companyName\":\"Acme\",\"title\":\"Head of Growth\",\"start\":{\"year\":2021,\"month\":3},\"end\":{\"year\":2026,\"month\":7}}]" }
All inputs:
| Input | Type | Default | What it does |
|---|---|---|---|
person_name | string | none | Full name of the person to check |
company_domain | string | none | Domain of the company your records place the person at |
company_name | string | none | Name of that company |
last_known_title | string | none | The title your records hold, echoed as input_title |
profile_url | string | none | Optional LinkedIn profile URL, used as the identity and never opened |
email | string | none | Optional old work address, checked with BounceBan |
company_linkedin_url | string | none | Optional company LinkedIn URL, the strongest company match |
location | string | none | Optional, echoed for your records |
input_id | string | none | Optional row ID, returned unchanged |
known_history | string (JSON) | none | Optional role history you already hold |
people | array | [] | Many people at once, each with the keys above |
serperApiKey | string | none | Optional Serper key for web search |
serpApiKey | string | none | Optional SerpAPI key, used only when no Serper key is set |
prospeoApiKey | string | none | Optional Prospeo key for role history with months |
bouncebanApiKey | string | none | Optional BounceBan key for the old work address check |
maxSourceAgeDays | string | 30 | A history you send older than this is treated as lagging |
checkCompanySite | string | true | Free check of up to 4 team and about pages |
checkNews | string | true | Free Google News check, evidence only |
verifyOldEmail | string | true | With a BounceBan key, one check per person still at the company |
includeRoleHistory | string | true | false keeps role_count and drops the role_history array |
cacheTtlDays | string | 7 | Reuse a reading from the last N days, uncharged; 0 turns it off |
maxPeople | string | 1000 | Stop after this many people |
max_charge_usd | string | none | The run stops before any row that would pass this amount |
roles (with company_name, title, start_month, end_month) and a LinkedIn reader row (linkedin_reader) are read too. A history newer than maxSourceAgeDays (default 30) skips the Prospeo call for that person.
Keys and what each one costs you
| Key | Used for | Calls per person |
|---|---|---|
| Serper or SerpAPI | Profile lookup and the current role line | 1 with a profile URL, 1 to 3 without |
| Prospeo | Role history with months | 0 or 1 (0 when your fresh history is used) |
| BounceBan | Old work address check | 0 or 1, only when the person still reads as at the company |
With no key at all, the actor still reads your own history, the company team pages, and Google News.
Pricing
Pay per event. You pay for results, plus a small start fee per run.
| Event | Fires when | Free | Bronze | Silver | Gold |
|---|---|---|---|---|---|
person_read | A person comes back with read_status ok | 0.025 USD | 0.02375 USD | 0.0225 USD | 0.02125 USD |
profile_resolved | You sent no profile URL and the run found and accepted one at high or medium match | 0.006 USD | 0.0057 USD | 0.0054 USD | 0.0051 USD |
apify-actor-start | Once per run, per GB of memory (one at the 256 MB default) | 0.001 USD | 0.001 USD | 0.001 USD | 0.001 USD |
Not charged: not found, ambiguous, error, and skipped rows; cache hits; and a person repeated in the same run. Set max_charge_usd and the run stops before any row that would pass it. On the free Apify plan the actor reads up to 60 people a month (1.50 USD of evaluation).
Limits
- Your sources decide coverage. In a 60 person test (39 leavers, 21 still employed), keys alone caught 12 of 39 leavers with 0 false flags in 17; adding a fresh history of the buyer's own raised it to 28 of 39, still with 0 false flags. Prospeo lags for people who left, which is why a "still at company" answer from it carries low confidence.
- The search result line is a summary, not a full profile. Start months come from your own history or Prospeo.
left_monthneeds a dated history. A leaver found only by the search line or the email check has no month.- Two profiles that both pass the namesake check return
ambiguousand nothing is charged.
Pairs with
- New Hire Finder: from a company, find who started a matching role.
- Career Change Signal Engine: watches a contact list over time and delivers only the changes.
More from Mamba Labs
| Actor | Actor ID |
|---|---|
| Account Hiring Watch | gRAZA5WBi1r6L0gy7 |
| Agent Accessibility Auditor | anxbRv0lKrpQ1pnua |
| AI Tooling Detector | EwkHhmqiuJgRoVEbE |
| Bluesky Brand Presence Mapper | eLpxzP4IuXznlFVND |
| Career Change Signal Engine | vX2Yga1a6wGaXaP14 |
| Company Change Event Feed | oX44rS0fkEJ3rXLWe |
| Company Contact Details Extractor | 4mMncKaJykiq94grz |
| Company Discovery List Builder | jch0HdaZnpbMqlcGS |
| Company Firmographic Enricher | YlUtLWjfPpqykmB8g |
| Company Funding Record | OFS4Mt1gyYNtGfUbE |
| Company Identity Resolver | lr8fTRAmZCBZmuwwh |
| Company Social Presence Mapper | 4k6CCemkgBDz18m2h |
| Contact Classifier | 0lGSeYJmniXhGANnO |
| Domain Deliverability Checker | 0tVgxI7A6o9jMlxmc |
| Domain to LinkedIn URL Resolver | 3HtnSaqPHOg1Qg5gx |
| Ecommerce Platform Profiler | 5G2NeYjBbQTjaTn9L |
| Event Presence Index | WLhMy8fMDgsxdYxv5 |
| Expert Witness Directory | LIpwlgfE3LaQBaXd4 |
| Funding and Press Signal Scanner | FS13X6dhQVgX3XOM6 |
| GitHub Organization Signal Scanner | ahF8RRpv5mzPao5CN |
| Government Contract Award Monitor | zhEtllASykOcx9hJ8 |
| GTM Hiring Signal Scraper | D7O1SA2EqwHGsGr1P |
| GTM Signals Aggregator | xKdRfnfFNkdMpFuNs |
| ICP Fit Scorer | W161DT8W4kW55dMFh |
| Influencer Change Monitor | d2VVgahNL6UmcLkhg |
| Influencer Finder | tpkedmloIIWtXx6sg |
| Influencer Lead List Builder | KnmByszcv135yM30G |
| Influencer Profile Scraper | EqEnklDVMIcB1V499 |
| Influencer Talent Agency Lookup | zCuX4Mgyg6JvXgGzd |
| Job Board Keyword Signal Scanner | 4DvqpvhMR74NLcDDY |
| Job Posting Monitor | QCfICD9kOPiOdj5iI |
| Legal Entity Resolver | KHFyPCDIx7CyqULYm |
| Link in Bio Scraper and Newsletter Detector | OorucdheTIgu7RFzK |
| LinkedIn Company Page Mapper | zOPm6A9JEhUGcIdFW |
| LinkedIn Post Tracker | oiGLNPuaf5BRaz9K5 |
| Meta Ad Library Monitor | J1GWlSXfSGU3u8Wng |
| Instagram Facebook Brand Presence Mapper | HXh65I0JBjPsunbY8 |
| New Hire Finder | cKuc38p4nYHNF3IW8 |
| Outbound Stack Detector | v43UJC8r7qW7cBSTG |
| Page Finder and Extractor | TpurgcOZbVnknlaiC |
| People Finder and Email Verifier | LEgloG7tWgQl4o6TD |
| Pinterest Brand Presence Mapper | d1HvjZfKhgvWsoEwn |
| Prospect Engine | q9rT6v64nUJdPexOQ |
| Publishing Frequency Tracker | TbLwaUUATdYb6wp4N |
| Reddit Brand Presence Mapper | pKQZmDaT70SEb54bZ |
| Reporting Window Finder | uINxR7a1IW8qUTRUX |
| Sequencer Lead Push | 0Jv27VeWM5tSZQs9x |
| Team Page People Extractor | j8a9zX0k4mNbvDbWK |
| Tech Stack Signal Detector | qyd7nNyqFPelQViBx |
| TikTok Brand Presence Mapper | fco8FvoJcSafbeyd1 |
| Trustpilot Reputation Enricher | 3lIqfCt61j4hqE1xz |
| Website Traffic Rank Estimator | GnOFUzlNVIoXgeJjH |
| Work Email Waterfall | OT6xqTFThC0Rjf7Zj |
| Workplace Program Detector | Li6pPDhqbdzFz3h7G |
| X Brand Presence Mapper | oLOgadhHUkNAyDA3w |
| YouTube Channel Stats Extractor | 6hSpD3kd2s2IQ4VSs |
Built by Mamba Labs.