Skip to main content
Glama
mambalabsdev

Job Change Tracker MCP Server

Job Change Tracker MCP Server

Smithery Glama score MCP Registry npm version npm downloads license mcpservers.org

An MCP server for the Mamba Labs Job Change Tracker actor on Apify. 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's Inside

Related MCP server: Team Page People Extractor MCP Server

What it does

Check whether one contact, or a list of contacts, still works at the company your records hold. Returns one flat, Clay-ready JSON row per person: current employer, title, start month, role history, status (left, landed, promoted, or still there), how the person was matched, the source of the answer, and that source's date, with a namesake check. Runs on data you send (known_history) and on your own Serper or SerpApi, Prospeo, and BounceBan keys passed as inputs; this tool never fetches LinkedIn and holds no key of its own. Provide person_name with company_domain or company_name, or a people list. A run that does not succeed is returned as an error with its run ID. Read-only; requires an APIFY_TOKEN and consumes Apify credits per call.

All of the work runs on Apify. This package is a thin client that starts the actor run, waits for it, and hands back the dataset rows.

Quick start

You need Node.js 18 or newer and an Apify account with an API token.

Add this to your Claude Desktop config (claude_desktop_config.json), Cursor, or any MCP client:

{
  "mcpServers": {
    "mamba-job-change-tracker": {
      "command": "npx",
      "args": [
        "-y",
        "@mambalabsdev/mcp-job-change-tracker"
      ],
      "env": {
        "APIFY_TOKEN": "your-apify-token"
      }
    }
  }
}

Restart the client. The track_job_change tool appears.

Prerequisites

Example prompts

  • "Check whether Jane Doe still works at example.com and where she went if she left."

  • "Run these 20 contacts and tell me who changed jobs in the last 6 months."

Tool

track_job_change. One tool. Example arguments:

{
  "person_name": "Jane Doe",
  "company_domain": "example.com",
  "company_name": "Example Inc"
}

Inputs

Every buyer facing input of the live actor, unchanged. Omitted inputs take the actor's own defaults.

Input

Type

Required

Description

person_name

string

no

Full name of the person to check.

company_domain

string

no

Website domain of the company your records place this person at, for example microsoft.com. Left, landed, and promoted are worked out against this company.

company_name

string

no

Name of that company. Used with or instead of the domain to match roles in the person's history.

last_known_title

string

no

The title your records hold. Echoed on the row as input_title.

profile_url

string

no

Optional. The person's LinkedIn profile URL, used as the identity. This actor never opens it. Without it, the run looks the profile up with your search key and charges profile_resolved when it finds and accepts one.

email

string

no

Optional. The person's work address at the last known company. With a BounceBan key, an undeliverable answer marks the person as left.

company_linkedin_url

string

no

Optional. The strongest company match when a role history carries LinkedIn company URLs.

location

string

no

Optional. Echoed for your records.

input_id

string

no

Optional. Returned unchanged on the row so you can join it back to your CRM or table.

known_history

string

no

Optional. A role history you already have, as JSON: {"source": "heyreach", "source_date": "2026-10-07", "experiences": [...]} or {"source": "crm", "roles": [{"company_name", "title", "start_month", "end_month"}]}. Read before any paid key; a history newer than Max source age skips Prospeo.

people

array

no

Many people at once. Each item takes the same keys as the single person fields: person_name, company_domain, company_name, last_known_title, profile_url, email, company_linkedin_url, location, input_id, and known_history (an object).

serperApiKey

string

no

Optional. Web search (serper.dev): finds profile URLs and reads the search result line for the current role. About 1 to 3 searches per person. Your own key, sent as a run input; never stored by the actor.

serpApiKey

string

no

Optional. Used for web search only when no Serper key is set. Your own key, sent as a run input; never stored by the actor.

prospeoApiKey

string

no

Optional. Prospeo enrich-person: the person's role history with start and end months. Skipped when you send a fresh history of your own. Your own key, sent as a run input; never stored by the actor.

bouncebanApiKey

string

no

Optional. Verifies the old work address only while the person still reads as at the company. Only an undeliverable answer is used. Your own key, sent as a run input; never stored by the actor.

maxSourceAgeDays

string

no

A history you send that is older than this is treated as lagging, so the run also reads Prospeo and the search result. Default 30.

checkCompanySite

string

no

Free. Looks for the person on up to 4 team and about pages of the last known company domain.

checkNews

string

no

Free. Cites up to 3 headlines from the last year that name the person with a move word. Evidence only; a headline never sets the employer.

verifyOldEmail

string

no

With a BounceBan key: one check per person who still reads as at the company. Uses the address you send, or one Prospeo returns on the company domain.

includeRoleHistory

string

no

No keeps role_count and drops the role_history array.

cacheTtlDays

string

no

Reuse a reading made in the last N days, uncharged, from a store in your own Apify account. 0 turns it off. Rows with your own history are never cached. Default 7.

maxPeople

string

no

Stop after this many people. Default 1000.

max_charge_usd

string

no

Optional. The run stops before any row that would take its event charges past this amount.

Pricing

Pay per event on Apify, billed to your Apify account. Prices in USD.

Event

Free plan

Bronze

Silver

Gold

person_read, per person read

$0.025

$0.02375

$0.0225

$0.02125

profile_resolved, per profile resolved by web search

$0.006

$0.0057

$0.0054

$0.0051

apify-actor-start, per run start

$0.001

$0.001

$0.001

$0.001

Your keys

The actor holds no provider key of its own. Every paid provider key is yours, passed as an input and stored by Apify as a secret input. Without a key, the actor skips that step and says so in the run.

Full actor documentation

apify.com/mambalabs/job-change-tracker

License

MIT. See LICENSE.

Available Tools

1 tool
track_job_changeTrack job changeA
Read-onlyIdempotent

Check whether one contact, or a list of contacts, still works at the company your records hold. Returns one flat, Clay-ready JSON row per person: current employer, title, start month, role history, status (left, landed, promoted, or still there), how the person was matched, the source of the answer, and that source's date, with a namesake check. Runs on data you send (known_history) and on your own Serper or SerpApi, Prospeo, and BounceBan keys passed as inputs; this tool never fetches LinkedIn and holds no key of its own. Provide person_name with company_domain or company_name, or a people list. A run that does not succeed is returned as an error with its run ID. Read-only; requires an APIFY_TOKEN and consumes Apify credits per call.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNoOptional. The person's work address at the last known company. With a BounceBan key, an undeliverable answer marks the person as left.
peopleNoMany people at once. Each item takes the same keys as the single person fields: person_name, company_domain, company_name, last_known_title, profile_url, email, company_linkedin_url, location, input_id, and known_history (an object).
input_idNoOptional. Returned unchanged on the row so you can join it back to your CRM or table.
locationNoOptional. Echoed for your records.
checkNewsNoFree. Cites up to 3 headlines from the last year that name the person with a move word. Evidence only; a headline never sets the employer.
maxPeopleNoStop after this many people. Default 1000.
serpApiKeyNoOptional. Used for web search only when no Serper key is set. Your own key, sent as a run input; never stored by the actor.
person_nameNoFull name of the person to check.
profile_urlNoOptional. The person's LinkedIn profile URL, used as the identity. This actor never opens it. Without it, the run looks the profile up with your search key and charges profile_resolved when it finds and accepts one.
cacheTtlDaysNoReuse a reading made in the last N days, uncharged, from a store in your own Apify account. 0 turns it off. Rows with your own history are never cached. Default 7.
company_nameNoName of that company. Used with or instead of the domain to match roles in the person's history.
serperApiKeyNoOptional. Web search (serper.dev): finds profile URLs and reads the search result line for the current role. About 1 to 3 searches per person. Your own key, sent as a run input; never stored by the actor.
known_historyNoOptional. A role history you already have, as JSON: {"source": "heyreach", "source_date": "2026-10-07", "experiences": [...]} or {"source": "crm", "roles": [{"company_name", "title", "start_month", "end_month"}]}. Read before any paid key; a history newer than Max source age skips Prospeo.
prospeoApiKeyNoOptional. Prospeo enrich-person: the person's role history with start and end months. Skipped when you send a fresh history of your own. Your own key, sent as a run input; never stored by the actor.
company_domainNoWebsite domain of the company your records place this person at, for example microsoft.com. Left, landed, and promoted are worked out against this company.
max_charge_usdNoOptional. The run stops before any row that would take its event charges past this amount.
verifyOldEmailNoWith a BounceBan key: one check per person who still reads as at the company. Uses the address you send, or one Prospeo returns on the company domain.
bouncebanApiKeyNoOptional. Verifies the old work address only while the person still reads as at the company. Only an undeliverable answer is used. Your own key, sent as a run input; never stored by the actor.
checkCompanySiteNoFree. Looks for the person on up to 4 team and about pages of the last known company domain.
last_known_titleNoThe title your records hold. Echoed on the row as input_title.
maxSourceAgeDaysNoA history you send that is older than this is treated as lagging, so the run also reads Prospeo and the search result. Default 30.
includeRoleHistoryNoNo keeps role_count and drops the role_history array.
company_linkedin_urlNoOptional. The strongest company match when a role history carries LinkedIn company URLs.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (readOnly/openWorld/idempotent/non-destructive) by disclosing the credit/charging model, the APIFY_TOKEN requirement, that it never fetches LinkedIn and holds no key of its own, that failures return an error with a run ID, and how caching behaves. With annotations already covering safety, this adds substantial operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first sentence and the return shape follows immediately; the second sentence packs cost, key, and error semantics. It is dense and list-like but every clause carries weight for a 23-parameter tool, with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 23-parameter tool with no output schema, the description compensates by describing the returned row (employer, title, start month, role history, status, match method, source and source date, namesake check) and the error behavior. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful semantics the schema does not: the required input combination (person_name + company_domain/company_name, or people list), that serpApiKey is only used when no Serper key is set, and that known_history is read before any paid key. That relationship-level guidance lifts it above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Check whether one contact... still works at the company your records hold') and enumerates the returned fields, so an agent knows exactly what the tool produces. No sibling tools exist to disambiguate against, but the scope is precise.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear invocation guidance: 'Provide person_name with company_domain or company_name, or a people list,' and explains which inputs drive which behavior (known_history read first, keys optional, 0 required params). It stops short of explicit when-not-to-use conditions, but with no alternatives to route between, the context is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev0.1.0
    • First observedtrack_job_change

TDQS

A4.4/5.0

Scored across 1 tool

Disambiguation5/5

There is only a single tool, so there is no possibility of misselection or overlapping purpose. Its scope (batch job-change verification for contacts) is clearly stated.

Naming Consistency5/5

The lone tool follows a clean verb_noun snake_case pattern (track_job_change). With one tool there is no convention mixing to penalize.

Tool Count3/5

A single tool is defensible for a narrow, one-shot enrichment service that accepts a list of people, but it is thin: there is no companion tool for retrieving async run results, checking credits, or inspecting history.

Completeness3/5

The core verification operation is covered and returns rich per-person output, but the surface has a dead end: failures return a run ID with no tool to fetch results by that ID, and there is no way to query past runs or validate configuration/keys separately.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    MCP server for the Mamba Labs People Finder & Email Verifier actor on Apify. Give it a company domain, name or LinkedIn URL and it returns the people at that company who match your role, seniority and department filters, each as a structured contact record with an optional verified business email.
    1
    241 npm
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Extracts people (names and titles) from a company's team, leadership, or about page given a domain. Uses Apify to crawl and return structured data, with optional filters for seniority and email inclusion.
    1
    217 npm
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Classifies job titles into department and seniority using deterministic rules, and optionally verifies if a person is listed on their employer's website via the Mamba Labs Contact Classifier Apify actor.
    1
    258 npm
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Find and enrich the right people from 750M professional profiles. Search by role, seniority, skills, industry, and location in plain English. Pull profiles with work history, education, and seniority, then see who's likely to change jobs next with Next Move Signal. Built for AI products and agents: sourcing candidates, building lead lists, and mapping markets and accounts.
    28 npm
    MIT