Home / Guides / Hiring signals in Clay

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

Step 1: Create a Task in Apify

  1. Open the Actor on Apify Store, click Try for free, then Create task (or Save as a new task).
  2. Switch the input editor from Manual to JSON and paste the JSON below.
  3. 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:

Step 3: Add the "Run Apify Actor" enrichment

  1. In your table click Add enrichment (top right).
  2. Search for Apify and choose Run Apify Actor.
  3. 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:

Step 5: Control spend before you run

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:

FieldExample
openJobs37
newJobs / closedJobs2 / 1 (empty on the first check)
newJobsLast7d5 (works on the first check, from ATS posting dates)
topDepartmentsFinance (5); Group Internal Audit (5); Risk (3)
topLocationsBerlin, DE (20); Barcelona, ES (9)
newJobsTopDepartmentsSales (3); Engineering (1)
sampleTitles / newJobTitlesTreasury Trader; ICT Risk Assessment Manager
newJobUrlslinks separated by |
hiringSurgetrue when 5+ jobs and 10%+ of the previous open jobs were added
ats, boardUrlgreenhouse, https://job-boards.greenhouse.io/n26
statusok / 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:

Cost examples

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:

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.

North Loop Agents Weekly

One email a week: new agents, ranking changes, what's actually worth trying.