Greenhouse Lever Ashby Job Scraper: GTM Hiring Signals avatar

Greenhouse Lever Ashby Job Scraper: GTM Hiring Signals

Pricing

from $42.50 / 1,000 results

Go to Apify Store
Greenhouse Lever Ashby Job Scraper: GTM Hiring Signals

Greenhouse Lever Ashby Job Scraper: GTM Hiring Signals

Detect companies actively hiring GTM teams. Scrapes Greenhouse, Lever, and Ashby 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 $42.50 / 1,000 results

Rating

0.0

(0)

Developer

Mamba Labs

Mamba Labs

Maintained by Community

Actor stats

1

Bookmarked

20

Total users

1

Monthly active users

6 days ago

Last modified

Share

🧑‍💼 What can GTM Hiring Signal Scraper do?

Give it a company domain and it tells you whether that company is actively building its go-to-market team: how many GTM roles are open, which functions they are in, and whether that number is rising or falling since your last run.

It reads the Greenhouse, Lever, Ashby, Workable, SmartRecruiters and Personio public job board APIs and filters to roles that signal pipeline investment. One flat row per domain.

📦 What you get⚙️ Features and integrations
🎯 gtm_hiring_signal, one boolean to gate on
🏷️ 20 signal tags, AE through CRO
📈 Velocity and change detection across runs
🧾 22 flat fields, snake_case, one row per domain
🔍 Three ATS platforms probed in parallel
Public APIs only, no auth and no proxy
🛟 Error-safe, one failure never stops the run
⬇️ Export to JSON, CSV, Excel, HTML or XML

Bought by outbound teams and Clay users who want hiring signals turned into pipeline: a company opening three AE roles is a company with budget and a number to hit.

🚫 ATS coverage is deliberately scoped to three platforms. Companies on Workday, Rippling, Teamtailor, SmartRecruiters, BambooHR or a custom careers page return ats_platform: null with gtm_role_count: 0 and no error. A zero here means "not found on these three boards", never "this company is not hiring".

💡 Why use GTM Hiring Signal Scraper?

If you wantRead these fields
One field to filter ongtm_hiring_signal
How hard they are hiringgtm_role_count, signal_strength
Which function is growinggtm_signals, gtm_roles_detected, top_gtm_role
Whether momentum is buildingvelocity_signal, role_count_delta, days_between_runs
What changed since last timechange_detected, change_type, new_gtm_roles, removed_gtm_roles
Where the roles arecareer_page_url, ats_platform

📈 Velocity is the signal, not the count

A company with four GTM roles open is unremarkable. A company that went from one to four since your last run is building a team right now.

Pass the previous run's output back as inputs and you unlock velocity_signal (growing, stable, shrinking or first_run) and change detection naming the specific roles that appeared or disappeared.

The first run works with no prior data. Velocity and change fields return a first_run state that you can use as a filter gate rather than an error to handle.

🔍 How ATS detection works

Layer 1, override map. Before any network request, the actor checks an internal map of pre-validated ATS slug assignments. A match returns immediately with no external calls.

Layer 2, live probe. Otherwise all six platforms are probed in parallel on the base slug. The first to return GTM roles wins, in the order below. If none return, slug variants ({base}labs, {base}-labs) are tried only on the platforms that missed on the base.

PlatformEndpointNotes
Greenhouseapi.greenhouse.io/v1/boards/{slug}/jobsPublic API, no auth
Leverapi.lever.co/v0/postings/{slug}Public API, no auth
Ashbyapi.ashbyhq.com/posting-api/job-board/{slug}Public API, draft jobs excluded
Workableapply.workable.com/api/v1/widget/accounts/{slug}Public widget API, no auth
SmartRecruitersapi.smartrecruiters.com/v1/companies/{slug}/postingsPublic API, no auth
Personio{slug}.jobs.personio.de/xmlPublic XML feed, rate limited

Workable, SmartRecruiters and Personio were added on 2026-08-22. A company on any of them returned nothing before that, silently, so this raises the hit rate of every example on this actor rather than adding a new axis.

Two platform notes worth knowing, because both are places where a naive adapter reports a wrong answer rather than no answer:

  • SmartRecruiters never returns 404. An unknown company identifier answers 200 with totalFound: 0, which looks exactly like a real company with no open roles. An empty answer is therefore treated as a miss so the remaining slug variants are still tried.
  • Personio rate limits an unauthenticated caller and answers 429. A 429 is reported as unknown, never as "this company is not on Personio", so a throttled probe can never be recorded as a platform that was ruled out.

Workday and Rippling stay out. They were evaluated and removed in v0.0.17, and the removal was re-measured on 2026-08-22: the board URL was found on the careers page of one of six large Workday customers, and the one that was found then answered 400 from the myworkdayjobs.com jobs endpoint. Rippling still uses undocumented internal endpoints. Both are discovered from a careers page rather than from a slug, so each would cost a page fetch per company for that yield.

▶️ Ready-to-run examples

ExampleWhat it does
Find Companies Hiring SDRs and BDRsPipeline-building roles
Detect Companies Hiring AEsQuota-carrying roles
Spot Companies Hiring RevOpsOperations investment
Track Weekly GTM Hiring VelocityMomentum over time
Bulk Scan a Company ListBatch a whole list

📋 What data can GTM Hiring Signal Scraper extract?

22 fields per domain.

FieldWhat it holds
gtm_hiring_signalThe boolean gate
gtm_role_countHow many GTM roles are open
gtm_signalsStandardized tags, for example ["AE", "SDR", "RevOps"]
gtm_roles, gtm_roles_detectedThe roles themselves
top_gtm_roleThe most senior or most indicative role
signal_strengthhigh, medium or low, for triage language
ats_platform, slug_source, career_page_urlWhich board answered, and how the slug was found
role_count_delta, velocity_signal, days_between_runsMomentum, when prior-run inputs are supplied
change_detected, change_type, new_gtm_roles, removed_gtm_rolesWhat moved since last time
domain, company_name, run_date, scraped_at, errorIdentity and run bookkeeping

The 20 signal tags: AE, SDR, BDR, BizDev, RevOps, SE, CS, AM, DemandGen, Growth, Partnerships, ChannelSales, FieldSales, InsideSales, VPSales, HeadOfSales, CRO, SalesManager, SalesDirector, SalesOps.

⚠️ gtm_role_count: 0 with ats_platform: null is not the same as a company that is not hiring. It means the company was not found on any of the six supported boards. Check ats_platform before you read a zero as a negative signal, and pass ats_slug if you know the company uses an unusual slug.

🛠️ How to find companies hiring for GTM roles

  1. Open the Input tab and put a bare domain in domain.
  2. Narrow with role_filter if you only care about some functions.
  3. For a list, set mode to batch and use domains.
  4. Click Start.
  5. Filter on gtm_hiring_signal and sort by signal_strength.

🧪 Using it in Clay

Add an Apify enrichment column and map your domain column to domain. Every field is a top-level key, so there is nothing to unwrap.

There is a reusable Clay Function, fn_gtm_hiring_signal, that takes nine inputs and returns a single structured output column: open the function. Use the function when you want the signal logic to update automatically across tables.

⏱️ Setting up velocity tracking

Run the actor on a schedule, weekly or monthly. Add a second enrichment column that maps previous_gtm_role_count and previous_run_date from your stored prior-run columns into the new run's inputs.

Then use velocity_signal = "growing" as an outreach timing trigger, change_detected = true to find companies that shifted posture, and change_type = "new_roles" to surface companies that just opened GTM positions.

💵 How much does it cost to check GTM hiring signals?

Billed per domain processed.

PlanPer domainPer 1,000 domains
Free$0.05$50.00
Bronze$0.0475$47.50
Silver$0.045$45.00
Gold$0.0425$42.50

There is also an Actor start event at $0.00005, charged once per run per GB of memory.

💳 A domain that resolves to no ATS is still billed. The actor probed all three platforms and reported honestly that it found nothing, which is a real answer and the reason ats_platform is on the row. No subscription, no seat license, no contract.

⌨️ Input

Everything is on the Input tab. The options worth explaining:

FieldTypeDefaultWhat it does
domainstringnoneBare company domain.
domainsarraynoneBatch mode input.
modestringsinglesingle for Clay row-by-row, batch for bulk lists.
role_filterarraynoneNarrow to specific GTM functions.
ats_slugstringnoneOverride slug derivation for unusual boards.
include_role_detailsbooleanfalseReturn the full role list, not just counts and tags.
previous_gtm_role_countintegernonePrior run's count, unlocks velocity.
previous_run_datestringnonePrior run's date, unlocks days_between_runs.

📤 Output

One flat row per domain, exportable as JSON, CSV, Excel, HTML or XML.

{
"domain": "stripe.com",
"company_name": "Stripe",
"ats_platform": "greenhouse",
"slug_source": "override_map",
"gtm_hiring_signal": true,
"gtm_role_count": 7,
"gtm_signals": ["AE", "SDR", "RevOps"],
"top_gtm_role": "VP of Sales",
"signal_strength": "high",
"career_page_url": "https://boards.greenhouse.io/stripe",
"role_count_delta": 3,
"velocity_signal": "growing",
"days_between_runs": 7,
"change_detected": true,
"change_type": "new_roles",
"new_gtm_roles": ["Enterprise AE, EMEA", "RevOps Manager"],
"run_date": "2026-06-18T16:12:51.759Z",
"error": null
}

💡 Tips

  • Gate on gtm_hiring_signal first, then sort by signal_strength. That is the whole triage.
  • Store each run's gtm_role_count and run_date. Velocity is worth more than the count and costs nothing extra to unlock.
  • Pass ats_slug for companies you know use an unusual board name. It skips the probe entirely.
  • Treat ats_platform: null as "unknown", not "no". It is the most common misreading of this actor.

⚠️ Known limits

Slug derivation is based on the first segment of the domain, for example stripe.com to stripe, with automatic probing of {base}labs and {base}-labs when the base returns 404. Clay, which uses claylabs on Ashby, is caught by the variant probe. For patterns the variants do not cover, pass ats_slug.

Role detection is keyword based. Unusual job title formats may not be classified.

Coverage is the six boards in the table above. Together they cover the majority of venture-backed, SaaS and GTM-heavy companies in North America and Europe, and all expose public APIs that return complete job lists without bot blocking. Everything else returns ats_platform: null and no error.

Ashby draft jobs are excluded, which is correct but means a company staging roles will read lower than its internal count.

No proxy is required or used. All sources are public APIs.

❓ FAQ

Why does a company I know is hiring return zero?

Almost always because it is not on any of the six supported boards. Check ats_platform. If it is null, the actor did not find a board rather than finding an empty one.

How do I get velocity on the first run?

You do not, and that is by design. The first run returns velocity_signal: "first_run", which is a filterable state rather than an error. Store the output and the second run has momentum.

Which platform wins when more than one has the company?

The first to return GTM roles, in the order Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Personio.

Does one bad domain break a batch?

No. Each domain is wrapped individually, and a failure lands in that row's error field.

Do I need a proxy or an API key?

Neither. All three sources are public APIs with no auth.

🧩 Want other GTM data?

Mamba Labs builds custom actors for B2B go-to-market teams. The public versions of that work live here on the Store, so our users get the same tooling we build under contract.

🧱 Tech Stack Detector📡 B2B Buying Signals Aggregator
🔑 Job Board Keyword Scanner🔗 Domain to LinkedIn URL Resolver
🎯 ICP Fit Scorer📋 Job Posting Monitor
📬 Domain Deliverability Checker🏢 Company Firmographic Enricher
🌐 Company Social Presence Mapper🪪 Company Identity Resolver
💰 Funding and Press Signal Scanner🔄 Company Change-Event Feed
👤 People Finder and Email Verifier🚀 Prospect Engine
🤖 AI Tooling Detector📮 Outbound Stack Detector
📝 Publishing Frequency Tracker✉️ Work Email Waterfall Finder
Sequencer Lead Push🏅 Workplace Program Detector
👥 Team Page People Extractor🧭 Company Discovery List Builder

Every actor in the suite takes a domain or a company and returns one flat row, so they stack in the same Clay table without reshaping anything.

🛠️ Need something custom built for you or your team? Tell us what you are trying to find and we will build it. Talk to Mamba Labs.

🆘 Support

Found a bug or want a field added? Open an issue on the Issues tab. Response time is typically within 48 hours.

ℹ️ Sourcing and legal. Every field comes from the public job board APIs of Greenhouse, Lever, Ashby, Workable, SmartRecruiters and Personio, which require no authentication. No proxy is used. The actor returns companies, role counts and role titles, not people: no recruiter names, no applicant data, no personal data of any kind. You are responsible for how you use the output.

Built by Mamba Labs.