Hiring signals in Clay: new and closed jobs for every company domain
A company that just opened 8 sales roles in Berlin is in a buying window. This guide adds that signal to any Clay table in about 10 minutes, using Clay's built-in Run Apify Actor enrichment and the Jobs API: Greenhouse, Lever, Ashby + Hiring Signals for Clay Actor on Apify Store (a Greenhouse jobs API that also covers Lever, Ashby, Workday and 5 more ATSs).
What you get per domain (one flat row): open jobs, new jobs and closed jobs since your last check, jobs posted in the last 7 and 30 days, top departments, top locations, sample titles, links to the new jobs, the ATS, and a one-sentence summary you can drop into an email opener.
What it costs: $0.025 per domain that changed (or its first check, if it has open jobs). Domains with no change, no jobs or no detectable ATS return a free row. Apify also charges $0.00005 per run (Actor start). Need every open job instead? Mode jobs costs $0.0015 per job ($1.50 per 1,000). In Clay it costs one action and 0 Clay data credits, because it runs on your own Apify account.
Works with: Greenhouse, Lever, Ashby, Workday, Workable, Personio, SmartRecruiters, Teamtailor and Recruitee. The ATS is detected from the domain.
What you need
- A Clay account. Any plan, Free included: the Apify integration is available on all plans.
- An Apify account and its API token (Apify Console → Settings → API & Integrations).
- A Clay table with a company domain column (for example
stripe.com).
Step 1: Create a Task in Apify
- Open the Actor on Apify Store, click Try for free, then Create task (or Save as a new task).
- Switch the input editor from Manual to JSON and paste the JSON below.
- Save the task, for example as "Hiring signal for one domain". Clay will override the domain per row.
{ "mode": "signals", "domains": ["stripe.com"] }Step 2: Connect Apify to Clay (one time)
Either:
- Settings → Connections → Add connection → Apify and paste your Apify API token, or
- add the account from the enrichment panel the first time you use it (Step 3).
Step 3: Add the "Run Apify Actor" enrichment
- In your table click Add enrichment (top right).
- Search for Apify and choose Run Apify Actor.
- Select your Apify account, then the task from Step 1.
Step 4: Map your domain column into the input
In Input Data enter the JSON body and insert your domain column as a token (type / and pick the column):
{ "mode": "signals", "domains": [ /Company Domain ] }Clay's rule for tokens in JSON: the key stays in quotes, the token gets no quotes. If Clay reports invalid JSON for your column type, wrap the token in quotes instead.
Optional filters you can add to the same JSON:
"departments": ["sales", "engineering"]: count only jobs in these departments"countries": ["DE", "FR", "GB"]: count only jobs in these countries (ISO codes)"keywords": ["account executive", "SDR"]: count only matching titles
Step 5: Control spend before you run
- Turn auto-update off while testing. Otherwise every new row in the table triggers a run.
- Add a conditional run, for example only when *Company Domain* is not empty, or only for your Tier-1 accounts.
- Test on 5–10 rows first.
Step 6: Run and turn fields into columns
Run the column, open a result cell and click the fields you want as columns. Every field is a plain string, number or boolean, so each one is a single click:
| Field | Example |
|---|---|
openJobs | 37 |
newJobs / closedJobs | 2 / 1 (empty on the first check) |
newJobsLast7d | 5 (works on the first check, from ATS posting dates) |
topDepartments | Finance (5); Group Internal Audit (5); Risk (3) |
topLocations | Berlin, DE (20); Barcelona, ES (9) |
newJobsTopDepartments | Sales (3); Engineering (1) |
sampleTitles / newJobTitles | Treasury Trader; ICT Risk Assessment Manager |
newJobUrls | links separated by | |
hiringSurge | true when 5+ jobs and 10%+ of the previous open jobs were added |
ats, boardUrl | greenhouse, https://job-boards.greenhouse.io/n26 |
status | ok / not-found / error |
summary | "N26 opened 2 and closed 1 job(s) since 2026-10-22; most new roles in Treasury." |
Step 7: Make it a weekly signal
Re-run the column once a week (scheduled re-runs on Clay's paid plans, or manually). The Actor remembers each domain's last check in your own Apify account, so each re-run shows only what changed that week, and you only pay for domains that changed.
Good triggers to build on top:
newJobs >= 3: expansion, reach out nownewJobsTopDepartmentscontains "Sales": they're building a sales team (sell sales tools, recruiting, enablement)newJobsTopDepartmentscontains "Engineering" andtopLocationscontains your city: hiring tech locallyhiringSurge = true: priority accountclosedJobs > newJobsfor two weeks in a row: slowing down, deprioritise
Cost examples
- One-off enrichment of 200 rows (Clay Free table limit) where 160 domains have open jobs: 160 × $0.025 = $4.00.
- Weekly re-check of 1,000 accounts where about 300 change each week: 300 × $0.025 = $7.50/week.
- Domains with no change, no open jobs or no ATS: $0.
You can also cap every run with Maximum cost per run in the Apify task settings.
Alternative for Clay Growth: the HTTP API column
On Clay's Growth plan you can call Apify directly from an HTTP API column:
- Method:
POST - URL:
https://api.apify.com/v2/acts/northloop-hq~jobs-api-ats-feed/run-sync-get-dataset-items?maxTotalChargeUsd=0.05 - Header:
Authorization: Bearer <your Apify API token> - Body:
{ "mode": "signals", "domains": [ /Company Domain ] }
The response is the row itself. Synchronous calls must finish within 300 seconds; one domain takes a few seconds.
FAQ
Where does the data come from? From the public job-board APIs of each company's ATS: the same endpoints their own careers page uses. No LinkedIn scraping, no login, no personal data.
What if a domain isn't found? You get a free row with status: "not-found". Pass the job-board URL instead (for example https://jobs.lever.co/company) in the companies field.
Why is the first check charged? It's a full snapshot of the company's open roles (counts, departments, locations, recent postings), which is already a usable signal. After that you pay only when something changes.
Does it work for AI agents? Yes. The Actor is pay-per-event with limited permissions, so agents can call it through the Apify API or MCP server.
Where do I get the Actor? On Apify Store: apify.com/northloop-hq/jobs-api-ats-feed. It is built by North Loop Agents.