GTM Hiring Signal Scraper avatar

GTM Hiring Signal Scraper

Pricing

from $50.00 / 1,000 results

Go to Apify Store
GTM Hiring Signal Scraper

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

Mamba Labs

Maintained by Community

Actor stats

1

Bookmarked

13

Total users

5

Monthly active users

3 days ago

Last modified

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_signals array (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:

FieldTypeRequiredExample
domainstringyesstripe.com

Pass a bare domain. No https://, no www., no trailing slash.

Optional: ATS Slug Override

FieldTypeRequiredExample
ats_slugstringnoclaylabs

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:

  1. Override map lookup (no network call)
  2. Domain root probe across all three ATS platforms
  3. Common slug variants: {root}labs, {root}-labs
  4. If ats_slug is 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_roles
  • removed_gtm_roles
  • role_count_delta
  • days_between_runs
  • velocity_signal returns first_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

FieldTypeDescription
domainstringThe input domain
company_namestringDerived from domain (first segment)
ats_detectedstringgreenhouse, lever, ashby, or null
slug_sourcestringDetection method used: override_map or probe layer name
gtm_role_countintegerNumber of GTM roles detected
gtm_rolesarrayList of role objects (title, department, location, url)
gtm_signalsarrayDeduplicated signal tags, e.g. ["AE", "SDR", "RevOps"]
scraped_atstringISO timestamp of the run
errorstringError message if scraping failed, otherwise null
role_count_deltaintegerDifference between current and previous gtm_role_count. Null on first run.
velocity_signalstringgrowing, stable, shrinking, or first_run.
days_between_runsintegerDays elapsed since previous_run_date. Null on first run.
change_detectedbooleanTrue if any roles are new or removed since the previous run.
change_typestringnew_roles, roles_removed, both, no_change, or first_run.
new_gtm_rolesstringComma-separated roles present in this run but not the previous run. Null if none.
removed_gtm_rolesstringComma-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:

TagTriggered by
AEAccount Executive roles
SDRSales Development Representative
BDRBusiness Development Representative
BizDevBusiness Development (non-SDR)
RevOpsRevenue Operations
SESales Engineer
CSCustomer Success
AMAccount Manager
DemandGenDemand Generation
GrowthGrowth roles
PartnershipsPartnerships and Channel
ChannelSalesChannel Sales
FieldSalesField Sales
InsideSalesInside Sales
VPSalesVP of Sales
HeadOfSalesHead of Sales
CROChief Revenue Officer
SalesManagerSales Manager
SalesDirectorSales Director
SalesOpsSales Operations

Supported ATS Platforms

PlatformEndpoint UsedNotes
Greenhouseapi.greenhouse.io/v1/boards/{slug}/jobsPublic API, no auth required
Leverapi.lever.co/v0/postings/{slug}Public API, no auth required
Ashbyapi.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.

Open the Clay template

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:

  1. In your Clay table, add a new column
  2. Select Apify from the integrations panel
  3. Choose GTM Hiring Signal Scraper (mambalabs/gtm-hiring-signal-scraper)
  4. Map your domain column to the domain input field
  5. Set mode to single
  6. Run the enrichment

Constructing the Input Data field in Clay:

The Input Data field in Clay must be constructed in this exact order:

  1. Type the opening brace, key, colon, space, opening quote: {"domain": "
  2. Press / and insert your domain column as a pill
  3. 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 uses
  • gtm_role_count: number of open GTM roles (filter: greater than 0)
  • gtm_signals: use Clay's contains formula to filter for specific signals
  • gtm_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.

VolumeCost
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

PlanLimit
Free Apify plan25 results per calendar month (resets on the 1st)
Any paid Apify planUnlimited 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}labs and {base}-labs when the base slug returns 404. Companies with more unusual slugs (e.g. Clay uses claylabs on Ashby, caught by the variant probe) work automatically. For unusual patterns not covered by the variants, pass ats_slug as 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: null with gtm_role_count: 0 and 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.


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.

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" question
  • gtm_hiring_signal: boolean shortcut for filter logic
  • gtm_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, or null)
  • top_gtm_role: highest-priority role title to quote back to the user
  • signal_strength: high, medium, or low for quick triage language
  • velocity_signal: growing, stable, shrinking, or first_run for trend questions
  • career_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