Greenhouse Lever Ashby Job Scraper: GTM Hiring Signals
Pricing
from $42.50 / 1,000 results
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
Maintained by CommunityActor stats
1
Bookmarked
20
Total users
1
Monthly active users
6 days ago
Last modified
Categories
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: nullwithgtm_role_count: 0and 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 want | Read these fields |
|---|---|
| One field to filter on | gtm_hiring_signal |
| How hard they are hiring | gtm_role_count, signal_strength |
| Which function is growing | gtm_signals, gtm_roles_detected, top_gtm_role |
| Whether momentum is building | velocity_signal, role_count_delta, days_between_runs |
| What changed since last time | change_detected, change_type, new_gtm_roles, removed_gtm_roles |
| Where the roles are | career_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.
| Platform | Endpoint | Notes |
|---|---|---|
| Greenhouse | api.greenhouse.io/v1/boards/{slug}/jobs | Public API, no auth |
| Lever | api.lever.co/v0/postings/{slug} | Public API, no auth |
| Ashby | api.ashbyhq.com/posting-api/job-board/{slug} | Public API, draft jobs excluded |
| Workable | apply.workable.com/api/v1/widget/accounts/{slug} | Public widget API, no auth |
| SmartRecruiters | api.smartrecruiters.com/v1/companies/{slug}/postings | Public API, no auth |
| Personio | {slug}.jobs.personio.de/xml | Public 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
200withtotalFound: 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. A429is 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
| Example | What it does |
|---|---|
| Find Companies Hiring SDRs and BDRs | Pipeline-building roles |
| Detect Companies Hiring AEs | Quota-carrying roles |
| Spot Companies Hiring RevOps | Operations investment |
| Track Weekly GTM Hiring Velocity | Momentum over time |
| Bulk Scan a Company List | Batch a whole list |
📋 What data can GTM Hiring Signal Scraper extract?
22 fields per domain.
| Field | What it holds |
|---|---|
gtm_hiring_signal | The boolean gate |
gtm_role_count | How many GTM roles are open |
gtm_signals | Standardized tags, for example ["AE", "SDR", "RevOps"] |
gtm_roles, gtm_roles_detected | The roles themselves |
top_gtm_role | The most senior or most indicative role |
signal_strength | high, medium or low, for triage language |
ats_platform, slug_source, career_page_url | Which board answered, and how the slug was found |
role_count_delta, velocity_signal, days_between_runs | Momentum, when prior-run inputs are supplied |
change_detected, change_type, new_gtm_roles, removed_gtm_roles | What moved since last time |
domain, company_name, run_date, scraped_at, error | Identity 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: 0withats_platform: nullis not the same as a company that is not hiring. It means the company was not found on any of the six supported boards. Checkats_platformbefore you read a zero as a negative signal, and passats_slugif you know the company uses an unusual slug.
🛠️ How to find companies hiring for GTM roles
- Open the Input tab and put a bare domain in
domain. - Narrow with
role_filterif you only care about some functions. - For a list, set
modeto batch and usedomains. - Click Start.
- Filter on
gtm_hiring_signaland sort bysignal_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.
| Plan | Per domain | Per 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_platformis on the row. No subscription, no seat license, no contract.
⌨️ Input
Everything is on the Input tab. The options worth explaining:
| Field | Type | Default | What it does |
|---|---|---|---|
domain | string | none | Bare company domain. |
domains | array | none | Batch mode input. |
mode | string | single | single for Clay row-by-row, batch for bulk lists. |
role_filter | array | none | Narrow to specific GTM functions. |
ats_slug | string | none | Override slug derivation for unusual boards. |
include_role_details | boolean | false | Return the full role list, not just counts and tags. |
previous_gtm_role_count | integer | none | Prior run's count, unlocks velocity. |
previous_run_date | string | none | Prior 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_signalfirst, then sort bysignal_strength. That is the whole triage. - Store each run's
gtm_role_countandrun_date. Velocity is worth more than the count and costs nothing extra to unlock. - Pass
ats_slugfor companies you know use an unusual board name. It skips the probe entirely. - Treat
ats_platform: nullas "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.
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.