mcp-gtm-hiring-signal-scraper
Detect go-to-market hiring activity from company career pages via a single MCP tool, scan_gtm_hiring_signals.
Scan a company domain (e.g.
stripe.com) for open sales, marketing, and revenue operations roles across Greenhouse, Lever, Ashby, Workable, SmartRecruiters, and Personio.Get back Clay-ready flat JSON: detected ATS platform, GTM role count, matched role titles/categories, a high/medium/low signal strength, and a seniority read (one row per company).
Batch mode: pass a list of
domainsto scan many companies in one run.Velocity mode: compare against
previous_gtm_role_countandprevious_run_dateto report role changes and days between runs on a schedule.Filter roles with a custom
role_filterkeyword list, or rely on the built-in GTM keyword list.Override the ATS board slug with
ats_slugwhen it differs from the domain (e.g.clay.com→claylabs).Optionally include full per-role details (title, department, location, URL) with
include_role_details.Cap spend per run with
max_charge_usd.Use it to qualify accounts before outreach or track GTM hiring ramps in a CRM/AI agent workflow (requires an
APIFY_TOKEN; consumes Apify credits).
Scans Greenhouse job boards for go-to-market roles, returning structured data on hiring signals.
GTM Hiring Signal Scraper MCP Server
An MCP server that detects go-to-market hiring activity from company career pages. It wraps the Mamba Labs GTM Hiring Signal Scraper on Apify and returns Clay-ready flat JSON to any MCP client.
What's Inside
Related MCP server: Job Lead Converter MCP
What it does
Give it a company domain and it scans that company's job board for sales, marketing, and revenue operations roles across Greenhouse, Lever, Ashby, Workable, SmartRecruiters and Personio. You get back a structured read on how hard that company is hiring for go-to-market, ready to drop into Clay, a CRM, or an AI agent workflow. All of the scraping runs on Apify. This package is a thin client that calls the actor and hands back the result.
Quick start
You need Node.js 18 or newer and an Apify account with an API token.
Add this to your Claude Desktop config:
{
"mcpServers": {
"mamba-gtm-hiring": {
"command": "npx",
"args": ["-y", "@mambalabsdev/mcp-gtm-hiring-signal-scraper"],
"env": {
"APIFY_TOKEN": "your-apify-token"
}
}
}
}Get your token at https://console.apify.com/account/integrations, paste it in, and restart Claude Desktop. The scan_gtm_hiring_signals tool will be available.
Prerequisites
Node.js 18 or newer
An Apify account with an API token
Example prompts
"Check if stripe.com is hiring for go-to-market roles right now."
"Scan openai.com for sales and revenue operations job postings."
"Is datadoghq.com ramping up GTM hiring? Use the GTM hiring scanner."
"Pull the GTM hiring signal for figma.com and list which roles are open."
"Scan stripe.com, figma.com, and notion.so for GTM hiring in one batch."
Inputs
domain(required): the bare company domain, nohttps://and no trailing slash. Example:stripe.comrole_filter(optional): a list of GTM role keywords to filter on. Leave it out to use the built-in keyword list.ats_slug(optional): override the ATS board slug when it differs from the domain. Example:clay.comusesclaylabson Ashby.domains(optional): a list of bare domains scanned in one run whenmodeisbatch, one row per company.domainis still required by the schema, so pass the first domain there too.mode(optional):single(default) scoresdomain;batchscores every entry indomains;velocitycompares this run againstprevious_gtm_role_countandprevious_run_dateto report role changes since the last run.include_role_details(optional): when true, adds the full per role array (title, department, location, URL). Default false.previous_gtm_role_count(optional): the GTM role count from your previous run for this domain. Used in velocity mode to compute the delta, which is what makes a scheduled run cheap.previous_run_date(optional): ISO date of your previous run for this domain, for example2026-07-15. Used in velocity mode to report the days between runs.max_charge_usd(optional): a cost cap in USD for this run. The actor stops before an item that could take its charges past this amount. Omit it to rely on the maximum cost per run set in Apify.
Output
The tool returns the actor's flat JSON for the scanned company. Fields include the detected ATS platform, the count of open GTM roles, the matched role titles and their categories, and a seniority read. Companies on an ATS outside those six come back with a null platform, a zero role count, and no error. See the Apify Store page for the full output schema.
Example output
{
"domain": "stripe.com",
"company_name": "Stripe",
"gtm_hiring_signal": true,
"ats_platform": "greenhouse",
"gtm_role_count": 12,
"signal_strength": "high",
"top_gtm_role": "Head of Revenue",
"career_page_url": "https://boards.greenhouse.io/stripe",
"run_date": "2026-05-28"
}Features
Cascading ATS detection: Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Personio
GTM role filtering with 3-tier signal strength (high, medium, low)
Flat JSON output designed for Clay column mapping
Optional role_filter and ats_slug inputs
Batch mode (
domains) and velocity mode for scheduled runs
Pricing
Price per event on the Apify FREE plan, from the live pricing record; paid Apify plans pay less per event.
Event | Price (USD) |
result ( | 0.05 |
Actor Start ( | 0.00005 |
Full actor documentation
This server is a thin client and holds no scraping logic. For the complete input and output reference, pricing, and run history, see the Apify Store page:
https://apify.com/mambalabs/gtm-hiring-signal-scraper
Mamba Labs GTM Suite
This server is one of 58 Mamba Labs MCP servers, each a thin client for one Mamba Labs actor on Apify. Every actor returns flat, Clay-ready rows that join on the company domain.
Browse every server: https://mambabuilt.com/servers
Browse every actor on the Apify Store: https://apify.com/mambalabs
Built by Mamba Labs | npm | Apify Store
License
MIT
Built by Mamba Labs. https://apify.com/mambalabs
Available Tools
1 toolscan_gtm_hiring_signalsScan GTM Hiring SignalsARead-onlyIdempotent
Scan company career pages to detect GTM hiring activity: open sales, marketing, and revenue operations roles, a role count, and a high, medium, or low signal strength. Reads the Greenhouse, Lever, Ashby, Workable, SmartRecruiters and Personio job boards; a company on any other board returns a null ats_platform and a zero count, not an error. Use it to qualify an account before outreach, or on a schedule in velocity mode to see whether a company is ramping its GTM team. Use mode batch with domains for a list in one call. Output is Clay-ready flat JSON, one row per company. Requires an APIFY_TOKEN and consumes Apify credits per call.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Processing mode. "single" scores the domain. "batch" scores every entry in domains in one run, one row per company. "velocity" compares this run against previous_gtm_role_count and previous_run_date to report role changes since last time. Default: "single". | |
| domain | Yes | Bare company domain without https:// and without a trailing slash. Example: stripe.com | |
| domains | No | List of bare domains to scan in one run when mode is "batch", for example ["stripe.com", "figma.com"]. One row per company. The run timeout is 1,800 seconds; a very large batch can still reach it. | |
| ats_slug | No | Optional ATS board slug override for when it differs from the domain. Example: clay.com uses claylabs on Ashby. If omitted, the scraper auto-probes common slug variants. | |
| role_filter | No | Optional list of GTM role keywords to filter on. Defaults to the built-in GTM keyword list if omitted. | |
| previous_run_date | No | ISO date of the previous run for this domain, e.g. 2026-07-15. Used in velocity mode to report days between runs. | |
| include_role_details | No | When true, include the full per-role detail array (title, department, location, url) in the output. Default: false. | |
| previous_gtm_role_count | No | GTM role count from the previous run for this domain. Used in velocity mode to compute the delta, which is what makes a scheduled run cheap. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/openWorld/non-destructive, but the description adds materially: unsupported boards return a null ats_platform and zero count rather than an error, an APIFY_TOKEN is required, Apify credits are consumed per call, and output is flat one-row-per-company JSON. These are exactly the operational facts annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, followed by capability limits, usage, and operational constraints in a logical order. The six-board enumeration and the dual mention of velocity mode add slight length but each sentence carries load.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by describing the return shape (Clay-ready flat JSON, one row per company, optional per-role detail). Auth requirements, cost, board coverage, and error semantics are all covered, leaving nothing an agent needs to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all eight parameters including mode enums and defaults. The description only restates the batch+domains pairing and velocity mode framing, adding no syntax or format detail beyond the schema; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (scan) and resource (company career pages), names the exact signal it extracts (GTM hiring activity, role count, signal strength), and even enumerates the supported ATS boards. There are no siblings to distinguish from, but the scope is unambiguous without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two concrete use cases ('qualify an account before outreach' and 'on a schedule in velocity mode') and routes batch work explicitly ('Use mode batch with domains for a list in one call'). No alternatives exist to exclude, so this is as complete as the context allows.
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 tool update
v1.0.7- Changed
scan_gtm_hiring_signals6 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / domainsAdded value: +{ + "description": "List of bare domains to scan in one run when mode is \"batch\", for example [\"stripe.com\", \"figma.com\"]. One row per company. The run timeout is 1,800 seconds; a very large batch can still reach it.", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / include_role_detailsAdded value: +{ + "description": "When true, include the full per-role detail array (title, department, location, url) in the output. Default: false.", + "type": "boolean" +} - added
Input schema / properties / modeAdded value: +{ + "description": "Processing mode. \"single\" scores the domain. \"batch\" scores every entry in domains in one run, one row per company. \"velocity\" compares this run against previous_gtm_role_count and previous_run_date to report role changes since last time. Default: \"single\".", + "enum": [ + "single", + "batch", + "velocity" + ], + "type": "string" +} - added
Input schema / properties / previous_gtm_role_countAdded value: +{ + "description": "GTM role count from the previous run for this domain. Used in velocity mode to compute the delta, which is what makes a scheduled run cheap.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" +} - added
Input schema / properties / previous_run_dateAdded value: +{ + "description": "ISO date of the previous run for this domain, e.g. 2026-07-15. Used in velocity mode to report days between runs.", + "type": "string" +}
1 tool update
v1.0.4- First observed
scan_gtm_hiring_signals
TDQS
Scored across 1 tool
With only one tool, there is no possibility of tool misselection or overlapping purposes. The single tool has a clearly defined scope and internal modes that do not create cross-tool ambiguity.
The tool name 'scan_gtm_hiring_signals' follows a clear snake_case verb_noun pattern. With only one tool, consistency is inherently perfect.
A single tool is borderline thin for the server's purpose. While it covers the core scanning operation, the rubric treats 1-2 tools as marginal, and there is no separate tool for configuration, result retrieval, or board management.
The tool covers scanning across multiple ATS platforms, batch mode, velocity mode, and outputs structured JSON. For the narrow purpose of detecting GTM hiring signals, the surface is largely complete, with only minor potential gaps like separate board listing or historical trend queries.
Maintenance
Related MCP Connectors
Find companies hiring for a role and geo, qualify them, and watch them for changes.
Open jobs and hiring signals for any company, from its public careers page or job board.
Is a company hiring? Domains to open roles, ATS, departments and seniority from public job boards.
Company hiring signals + open jobs from Greenhouse, Lever, Ashby boards, API + MCP. 20 free/day.
Related MCP Servers
- AlicenseAqualityAmaintenanceScans job boards for keyword patterns that indicate buying intent, technology adoption, or team expansion. Returns structured signal data for outbound targeting.1256 npm2MIT
- FlicenseNot gradedqualityDmaintenanceTransforms job postings into qualified sales leads by searching for active jobs, enriching company data, and identifying decision-maker contact information.-
- AlicenseAqualityAmaintenanceEnables monitoring of job postings by keyword, returning companies currently advertising those roles enriched with firmographics and LinkedIn URLs via Apify.1265 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables users to discover applicant tracking system job boards from company domains, list open roles, detect hiring changes over time, and generate hiring summaries across multiple ATS platforms.MIT