GTM Hiring Signal Scraper
Pricing
from $50.00 / 1,000 results
GTM Hiring Signal Scraper
Detect companies actively hiring GTM teams. Scrapes Greenhouse, Lever, Ashby, Workday, and Rippling for Sales, RevOps, and Growth roles. Flat JSON with role counts and velocity signals. Built for Clay enrichment columns. MCP-ready for Claude Desktop, Cursor, and AI agents.
Pricing
from $50.00 / 1,000 results
Rating
0.0
(0)
Developer
Mamba Labs
Maintained by CommunityActor stats
1
Bookmarked
13
Total users
5
Monthly active users
3 days ago
Last modified
Categories
Share
Detect which companies are actively building their GTM teams before your competitors do.
This Actor scrapes Greenhouse, Lever, and Ashby ATS job boards to identify companies posting Sales, RevOps, and Growth roles. Built for outbound teams and Clay users who want to turn hiring signals into pipeline.
Pass your previous run's output fields as inputs to unlock velocity tracking (how role counts are trending over time) and change detection (which specific roles are new since your last run). First run works with no prior data: velocity and change fields return a first_run state and can be used as a filter gate in Clay.
ATS coverage is intentionally scoped to Greenhouse, Lever, and Ashby. These three cover the majority of venture-backed, SaaS, and GTM-heavy companies, and all three expose stable public APIs that return complete job lists without bot blocking. Workday and Rippling were evaluated and removed in v0.0.17: Workday careers pages hide the board URL behind JS-rendered scripts or bot checks on two out of three tested companies, and the myworkdayjobs.com API endpoint shape has shifted enough that the third returned empty postings. Rippling uses undocumented internal endpoints that are not reliable for production. Companies on unsupported ATSes return ats_platform: null with gtm_role_count: 0 and no error.
What's New
- Free tier. Free Apify-plan users get 25 results per calendar month (resets monthly); upgrade for unlimited: https://apify.com/pricing
- Pricing reduced. $0.05 per result, down from $0.07. No subscription, no contract.
- Clay table template available. Pre-built table with enrichment column, formula columns, and a reusable Clay Function. Open the template
Why Hiring Signals Matter
When a company posts for an Account Executive, Sales Development Rep, or VP of Sales, they are signaling pipeline investment. That is one of the strongest buying triggers for:
- Sales tools and infrastructure (CRM, sequencing, RevOps tooling)
- GTM agencies and consultants
- Recruiting and staffing firms
- Sales training and coaching platforms
This Actor handles signal detection for you, at scale, across three major ATS platforms. Output is designed to map directly into Clay columns.
Features
- Three ATS platforms in one call. Greenhouse, Lever, and Ashby checked in parallel. Stops at first match to minimize cost.
- GTM-specific filtering. Only returns roles that signal pipeline investment (AE, SDR, BDR, RevOps, CS, Growth, VP Sales, CRO, and more). No noise from engineering or finance postings.
- Signal tags included. Every result includes a
gtm_signalsarray (e.g.["AE", "SDR", "RevOps"]) for easy Clay formula filtering. - Two input modes. Single domain for Clay enrichment row-by-row, or batch mode for bulk list processing.
- Flat JSON output. Every field is a top-level key. No nested objects to unwrap in Clay.
- Error-safe. Each domain is wrapped in try/catch. One failure never stops the run.
Input
The actor takes a single required field:
| Field | Type | Required | Example |
|---|---|---|---|
domain | string | yes | stripe.com |
Pass a bare domain. No https://, no www., no trailing slash.
Optional: ATS Slug Override
| Field | Type | Required | Example |
|---|---|---|---|
ats_slug | string | no | claylabs |
Use this when the company's ATS handle does not match their domain root. The actor normally derives the slug from the domain (e.g. stripe.com to stripe), which works for most companies. Some use a different handle on Greenhouse, Lever, or Ashby.
Leave blank for automatic detection. If automatic detection fails and you know the correct slug, enter it here.
Slug detection order:
- Override map lookup (no network call)
- Domain root probe across all three ATS platforms
- Common slug variants:
{root}labs,{root}-labs - If
ats_slugis provided, skips steps 2-3 and uses it directly
Scope
This actor detects GTM hiring on three ATS platforms: Greenhouse, Lever, Ashby. Companies using proprietary careers systems (HubSpot, Workday-hosted, custom pages) will return zero results. This is not an error, it is out of scope for this actor.
First-run fields
The following fields return null on the first scrape for a given domain and populate on subsequent runs via change detection:
new_gtm_rolesremoved_gtm_rolesrole_count_deltadays_between_runsvelocity_signalreturnsfirst_run
This is by design.
Output
One result object per domain, pushed to the Apify dataset.
{"domain": "stripe.com","company_name": "Stripe","ats_detected": "greenhouse","gtm_role_count": 12,"gtm_roles": [{"title": "Enterprise Account Executive","department": "Sales","location": "San Francisco, CA","url": "https://boards.greenhouse.io/stripe/jobs/10001"},{"title": "Revenue Operations Manager","department": "Revenue Operations","location": "Remote","url": "https://boards.greenhouse.io/stripe/jobs/10002"}],"gtm_signals": ["AE", "RevOps", "CS"],"scraped_at": "2026-04-03T12:00:00Z","error": null}
If no GTM roles are found:
{"domain": "example.com","company_name": null,"ats_detected": null,"gtm_role_count": 0,"gtm_roles": [],"gtm_signals": [],"scraped_at": "2026-04-03T12:00:00Z","error": null}
Output Fields
| Field | Type | Description |
|---|---|---|
domain | string | The input domain |
company_name | string | Derived from domain (first segment) |
ats_detected | string | greenhouse, lever, ashby, or null |
slug_source | string | Detection method used: override_map or probe layer name |
gtm_role_count | integer | Number of GTM roles detected |
gtm_roles | array | List of role objects (title, department, location, url) |
gtm_signals | array | Deduplicated signal tags, e.g. ["AE", "SDR", "RevOps"] |
scraped_at | string | ISO timestamp of the run |
error | string | Error message if scraping failed, otherwise null |
role_count_delta | integer | Difference between current and previous gtm_role_count. Null on first run. |
velocity_signal | string | growing, stable, shrinking, or first_run. |
days_between_runs | integer | Days elapsed since previous_run_date. Null on first run. |
change_detected | boolean | True if any roles are new or removed since the previous run. |
change_type | string | new_roles, roles_removed, both, no_change, or first_run. |
new_gtm_roles | string | Comma-separated roles present in this run but not the previous run. Null if none. |
removed_gtm_roles | string | Comma-separated roles present in the previous run but not this run. Null if none. |
How ATS Detection Works
The actor uses a two-layer detection approach:
Layer 1: Override map lookup Before making any network requests, the actor checks an internal map of pre-validated ATS slug assignments. When a match is found, the actor returns the result immediately with no external calls. This reduces latency and API load for known companies.
Layer 2: Live ATS probe If the domain is not in the override map, the actor runs a live probe cascade against Greenhouse, Lever, and Ashby career page endpoints. Results from successful live probes are candidates for future override map updates.
GTM Signal Tags
The gtm_signals array uses these standardized tags:
| Tag | Triggered by |
|---|---|
AE | Account Executive roles |
SDR | Sales Development Representative |
BDR | Business Development Representative |
BizDev | Business Development (non-SDR) |
RevOps | Revenue Operations |
SE | Sales Engineer |
CS | Customer Success |
AM | Account Manager |
DemandGen | Demand Generation |
Growth | Growth roles |
Partnerships | Partnerships and Channel |
ChannelSales | Channel Sales |
FieldSales | Field Sales |
InsideSales | Inside Sales |
VPSales | VP of Sales |
HeadOfSales | Head of Sales |
CRO | Chief Revenue Officer |
SalesManager | Sales Manager |
SalesDirector | Sales Director |
SalesOps | Sales Operations |
Supported ATS Platforms
| Platform | Endpoint Used | Notes |
|---|---|---|
| Greenhouse | api.greenhouse.io/v1/boards/{slug}/jobs | Public API, no auth required |
| Lever | api.lever.co/v0/postings/{slug} | Public API, no auth required |
| Ashby | api.ashbyhq.com/posting-api/job-board/{slug} | Public API, draft jobs excluded |
The Actor probes all three platforms in parallel on the base slug. The first one to return GTM roles wins, with Greenhouse taking priority on ties, then Lever, then Ashby. If none return, slug variants ({base}labs, {base}-labs) are tried only on ATSes that returned 404 on the base. Companies on other ATS platforms (Workday, Rippling, Teamtailor, SmartRecruiters, BambooHR, custom) return ats_platform: null.
Velocity and Change Detection
Run this actor on a schedule (weekly or monthly) and pass the previous run's output back as inputs to track GTM hiring momentum over time. In Clay, add a second enrichment column that maps previous_gtm_role_count, previous_run_date, and previous_gtm_roles_detected from your stored prior-run columns to the new input fields.
Use velocity_signal = growing as a trigger for high-priority outreach timing. Use change_detected = true to identify companies that have recently shifted their GTM hiring posture. Filter on change_type = new_roles to surface companies that just opened new GTM positions since your last refresh.
Clay Table Template
A pre-built Clay table template is available with the enrichment column, formula columns, and views ready to use.
The template includes:
- A Run Apify Actor enrichment column wired to mambalabs/gtm-hiring-signal-scraper
- Formula columns for signal_strength, gtm_hiring_signal, gtm_role_count, and top_gtm_role
- A ready_to_send view filtered on gtm_hiring_signal = true and signal_strength = high or medium
A reusable Clay Function (fn_gtm_hiring_signal) is also available: Open the function. It takes nine inputs and returns a single structured output column. Use the function when you want the signal logic to update automatically across tables. Use the template when you want a static copy to modify.
Manual setup
This Actor is built to work natively as a Clay enrichment column.
Setup:
- In your Clay table, add a new column
- Select Apify from the integrations panel
- Choose GTM Hiring Signal Scraper (
mambalabs/gtm-hiring-signal-scraper) - Map your
domaincolumn to thedomaininput field - Set
modetosingle - Run the enrichment
Constructing the Input Data field in Clay:
The Input Data field in Clay must be constructed in this exact order:
- Type the opening brace, key, colon, space, opening quote:
{"domain": " - Press
/and insert your domain column as a pill - Type the closing quote and closing brace:
"}
The final expression looks like: {"domain": " + [pill] + "}
At runtime Clay substitutes the pill value, producing valid JSON: {"domain": "stripe.com"}.
Common mistakes:
{{company_domain}}placeholders typed as text are not substituted. The actor receives the literal string.- Inserting the pill alone (no braces, no quotes) sends a bare string, not JSON.
- Inserting the pill without wrapping quotes sends unquoted JSON, which fails validation.
Output mapping in Clay:
After the run, map these output fields to named Clay columns:
ats_detected: which ATS the company usesgtm_role_count: number of open GTM roles (filter: greater than 0)gtm_signals: use Clay's contains formula to filter for specific signalsgtm_roles[0].title: top GTM role title
Example Clay filter: gtm_role_count > 2 AND gtm_signals contains "AE" identifies companies aggressively building an AE team.
Pricing
$0.05 per result. Pay per event, billed per domain processed. No subscription, no seat license, no contract.
| Volume | Cost |
|---|---|
| 100 domains | $5.00 |
| 1,000 domains | $50.00 |
| 10,000 domains | $500.00 |
We recently reduced pricing across the Mamba Labs actor suite to bring more value to GTM teams running enrichment at scale.
Free tier vs paid usage
| Plan | Limit |
|---|---|
| Free Apify plan | 25 results per calendar month (resets on the 1st) |
| Any paid Apify plan | Unlimited results, no cap |
Free-plan usage is counted cumulatively across all of your runs in a month, not per run, so single-domain Clay runs and larger batches both draw from the same monthly allowance. Only successfully processed domains count toward the limit; error or empty rows do not. How it behaves when you hit the limit:
- Within the monthly allowance: every submitted domain is processed normally.
- A run that crosses the limit: the remaining allowance is delivered, then one final notice row explains the cap and how to upgrade. The run still finishes successfully.
- Already at the limit: the run exits immediately with no results and an upgrade message in the run status.
Upgrade to any paid Apify plan for unlimited processing: https://apify.com/pricing. Paid-plan runs are never capped and incur no usage tracking.
Known Limitations
- ATS slug derivation is based on the first segment of the domain (e.g.
stripe.com->stripe), with automatic probing of{base}labsand{base}-labswhen the base slug returns 404. Companies with more unusual slugs (e.g. Clay usesclaylabson Ashby, caught by the variant probe) work automatically. For unusual patterns not covered by the variants, passats_slugas input to override. - Role detection is keyword-based. Unusual job title formats may not be classified.
- No proxy required: all sources are public APIs.
- Companies on ATSes outside Greenhouse, Lever, and Ashby return
ats_platform: nullwithgtm_role_count: 0and no error. Scope was narrowed in v0.0.17 after Workday and Rippling detection failed verification testing. See the overview for the full rationale.
Issues and Feature Requests
Found a bug or want to request a feature? Open an issue in the Issues tab above. Response time: typically within 48 hours.
Related Actors
All Mamba Labs actors output flat, Clay-ready JSON. Use them together or individually.
- GTM Tech Stack Signal Enrichment, $0.015/result. Detects CRM, sequencer, and marketing automation from a company's public-facing scripts. Flat boolean output.
- GTM Signals Aggregator, $0.09/result. Runs hiring and tech stack detection in one call. Returns a composite score, recommended action, and plain-English summary.
- Job Board Keyword Signal Scanner, $0.05/result. Scans Greenhouse, Lever, Ashby, Workday, and Rippling for any role category you define. GTM, Engineering, Finance, or custom keywords.
- Domain to LinkedIn URL Resolver, $0.006/result. Resolves company domains to LinkedIn URLs with confidence scoring, firmographics, and social links in one flat row.
- ICP Fit Scorer, $0.05/result. Scores companies against your ICP using weighted signals. Returns icp_score 0-100, icp_tier A-D, and per-signal breakdown.
Use with MCP (AI Agents)
This actor is callable as a tool over MCP (Model Context Protocol) by AI clients like Claude Desktop, Cursor, VS Code (GitHub Copilot), Windsurf, and any other MCP-compatible client. Apify hosts the MCP server at mcp.apify.com, so no custom server code is needed.
What this actor does in an MCP context
When an AI agent calls this tool, it returns a flat snapshot of a company's current GTM hiring activity: how many Sales, RevOps, Customer Success, and Growth roles are open right now, which ATS the company uses, and which signal tags (AE, SDR, RevOps, etc.) those roles map to. The agent gets a single JSON row per domain it can reason over without scraping career pages or stitching together Greenhouse, Lever, and Ashby APIs itself.
Example prompts a user might type into Claude Desktop:
- How many GTM roles is stripe.com hiring for right now, and which categories?
- Is notion.so actively building a sales team, or only customer success?
- Show me the hiring velocity signals for clay.com and tell me whether to prioritize outreach this week.
Supported MCP clients
Claude Desktop, Cursor, VS Code (GitHub Copilot), Windsurf, and any MCP-compatible client.
Setup: Hosted server (recommended)
Add this entry to your MCP client config. The OAuth variant prompts you to authorize on first connect, so no token sits in your config file.
OAuth (recommended):
{"mcpServers": {"mamba-labs-hiring-signals": {"url": "https://mcp.apify.com?tools=mambalabs/gtm-hiring-signal-scraper"}}}
Bearer token:
{"mcpServers": {"mamba-labs-hiring-signals": {"url": "https://mcp.apify.com?tools=mambalabs/gtm-hiring-signal-scraper","headers": {"Authorization": "Bearer YOUR_APIFY_TOKEN"}}}}
Setup: Full Mamba Labs GTM Suite
Load all 6 Mamba Labs GTM actors as tools in a single MCP server entry.
OAuth:
{"mcpServers": {"mamba-labs-gtm-suite": {"url": "https://mcp.apify.com?tools=mambalabs/gtm-hiring-signal-scraper,mambalabs/gtm-tech-stack-signal-scraper,mambalabs/gtm-signals-aggregator,mambalabs/job-board-keyword-signal-scanner,mambalabs/domain-to-linkedin-url-resolver,mambalabs/icp-fit-scorer"}}}
Bearer token:
{"mcpServers": {"mamba-labs-gtm-suite": {"url": "https://mcp.apify.com?tools=mambalabs/gtm-hiring-signal-scraper,mambalabs/gtm-tech-stack-signal-scraper,mambalabs/gtm-signals-aggregator,mambalabs/job-board-keyword-signal-scanner,mambalabs/domain-to-linkedin-url-resolver,mambalabs/icp-fit-scorer","headers": {"Authorization": "Bearer YOUR_APIFY_TOKEN"}}}}
Setup: Local server (for development and testing)
Run the Apify MCP server locally via npx. Single actor:
npx @apify/actors-mcp-server --tools mambalabs/gtm-hiring-signal-scraper
Full suite:
npx @apify/actors-mcp-server --tools mambalabs/gtm-hiring-signal-scraper,mambalabs/gtm-tech-stack-signal-scraper,mambalabs/gtm-signals-aggregator,mambalabs/job-board-keyword-signal-scanner,mambalabs/domain-to-linkedin-url-resolver,mambalabs/icp-fit-scorer
What the output looks like
The LLM receives a flat JSON object, one row per domain, well under 2KB. Every field is a top-level key, so the agent can reason over it without unwrapping nested objects or running post-processing. The most important fields for AI-agent use:
gtm_role_count: integer count of open GTM roles, the headline number for any "is this company hiring" questiongtm_hiring_signal: boolean shortcut for filter logicgtm_signals: deduplicated tags like["AE", "SDR", "RevOps"]so the agent can answer "what kind of GTM team are they building"ats_platform: which ATS was detected (greenhouse,lever,ashby, ornull)top_gtm_role: highest-priority role title to quote back to the usersignal_strength:high,medium, orlowfor quick triage languagevelocity_signal:growing,stable,shrinking, orfirst_runfor trend questionscareer_page_url: clickable link the agent can hand back to the user
Billing
MCP runs use the same pay-per-event pricing as direct API or Console runs. Each successful result costs $0.05.
Part of the Mamba Labs GTM Suite
This actor is part of the Mamba Labs GTM Suite. See all 6 actors at https://apify.com/mambalabs
Built by Mamba Labs