Company Hiring Signals — Detect Any ATS & Pull Open Roles avatar

Company Hiring Signals — Detect Any ATS & Pull Open Roles

Pricing

$3.00 / 1,000 job postings

Go to Apify Store
Company Hiring Signals — Detect Any ATS & Pull Open Roles

Company Hiring Signals — Detect Any ATS & Pull Open Roles

Give it a company name or domain and it finds which applicant tracking system the company uses — Greenhouse, Lever, Ashby, SmartRecruiters, Teamtailor, Personio, Workable or Recruitee — then returns every open role from it. One actor instead of eight.

Pricing

$3.00 / 1,000 job postings

Rating

0.0

(0)

Developer

Berkan Kaplan

Berkan Kaplan

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

18 days ago

Last modified

Categories

Share

Company Hiring Signals — Detect Any ATS & Pull Open Roles 🎯

foXLabs hiring series: Greenhouse · Lever · Ashby · Workday · SmartRecruiters · Personio · Teamtailor · LinkedIn jobs

🎉 Give it a domain or a company name — it finds which applicant tracking system that company uses, then pulls every open role from it. One actor instead of seven. No key, no login. Built for recruiters, sales teams scoring hiring intent, and anyone who does not know in advance which ATS a target runs.

🔍 What is this Actor — and when should you use it?

Companies post jobs on whichever ATS they bought — Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Personio or Teamtailor. You usually do not know which. This Actor detects the ATS automatically from a domain or company name, then returns that company's open roles as clean rows, with the same schema whichever system it found.

Use it when you need: hiring signals across a list of companies whose ATS you do not know; a one-shot check of what a target is hiring for; or a headcount-growth signal for account scoring. Set detectOnly to just identify the ATS without pulling roles.

Use something else when: you already know the ATS and want its deepest fields — then use the dedicated Actor for it from the series above. They share this schema, so outputs concatenate.

🤖 Use with AI agents

Already on the Apify MCP server? Ask for this Actor by name: foxlabs/company-hiring-signal-multi-ats.

Your agent can pay for its own runs. This Actor is pay-per-event with agentic payments, so an agent can discover it, run it and settle the bill over x402 (USDC on Base) or Skyfire — no Apify account or API token of its own. Billing is the same either way: per delivered job row.

Otherwise paste this into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

Run the Apify actor foxlabs/company-hiring-signal-multi-ats with
{"queries":["stripe.com","ramp","monzo.com"],"maxResultsPerQuery":25}
and tell me which ATS each uses and what they are hiring for.

📋 Overview

SourceSeven applicant tracking systems, detected automatically
CoverageAny company running Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Personio or Teamtailor
Auth neededNone. No API key, no login, no proxy required
RowOne open role (or one detection result with detectOnly)
Measured run100 rows in 5.3 s for 4 companies (2026-09-20, build 0.1.8)
Pricing$0.003 per delivered row — $3 per 1,000

✨ Features

  • 🔍 ATS auto-detection — pass a domain or a name, it works out the system
  • 🧩 One schema across seven systems — outputs concatenate into a single hiring table
  • 📊 openRoleCount on every row — the company's total, not just the page you fetched
  • 🌍 Remote flag and location on every role
  • 🏷️ Department on every role — the growth signal that matters for account scoring
  • ⚡ detectOnly mode — identify the ATS without pulling roles
  • 🔗 Direct apply URL per role

🎬 Quick Start

curl -X POST "https://api.apify.com/v2/acts/foxlabs~company-hiring-signal-multi-ats/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"queries":["stripe.com","ramp","spotify","monzo.com"],"maxResultsPerQuery":25}'

🚀 Getting Started (3 steps)

  1. Put domains or company names into queries. The default run mixes both forms.
  2. Decide the depth. maxResultsPerQuery caps roles per company; detectOnly: true returns just the ATS.
  3. Run it. Rows arrive in the dataset; export to CSV/JSON/Excel or read them over the API.

📥 Input

FieldTypeDefaultDescription
queriesarray["stripe.com","ramp","spotify","monzo.com"]Company domains or names
detectOnlybooleanfalseOnly identify the ATS; do not pull roles
maxResultsPerQueryinteger25Cap on roles returned per company
maxConcurrencyinteger3Parallel requests
requestDelayMsinteger0Optional pause between requests
includeRawbooleanfalseAttach the untouched source record to each row
proxyConfigurationobjectproxy offThe boards answer direct requests

Example — which ATS does each company use?

{ "queries": ["stripe.com", "notion.so", "figma.com"], "detectOnly": true }

Example — deep pull for one company:

{ "queries": ["ramp"], "maxResultsPerQuery": 200 }

📤 Output

One row per open role. Fill rates from the measured run (100 rows, 4 companies, 2026-09-20):

FieldTypeFillDescription
companyNamestring100%Company
companyBoardstring100%Board token/slug on the detected ATS
atsstring100%Which system was detected
openRoleCountnumber100%Total open roles at the company
jobIdstring100%Role id on the source system
jobTitlestring100%Role title
departmentstring100%Department or team grouping
locationstring100%Location as the board publishes it
isRemoteboolean100%Remote flag
applyUrlstring100%Direct application link
descriptionstring95%Full role description
postedAtstring75%Posting date, where the ATS exposes it
employmentTypestring50%Full-time/contract, where the ATS exposes it
sourceUrlstring100%Source board URL
source / query / scrapedAtstring100%Provenance fields

postedAt and employmentType are not at 100% because not every ATS publishes them — those two fields are the honest cost of covering seven systems with one schema. Cross-ATS fields that no system in this set exposes (team, separate city/country, seniority, salary, last-updated) were removed rather than shipped permanently empty.

A real row from the default run:

{
"companyName": "Ramp",
"companyBoard": "ramp",
"jobTitle": "Security Engineer, Cloud",
"department": "Engineering",
"location": "New York, NY (HQ)",
"isRemote": true,
"employmentType": "FullTime",
"postedAt": "2026-04-07"
}

💼 Use cases

  • Hiring-intent scoring — openRoleCount and department mix tell you where a company is investing
  • Recruiter sourcing — open roles across a target list, regardless of ATS
  • Sales timing — a company staffing up a function is a company buying tools for it
  • Competitive watch — track a rival's engineering or sales headcount plans
  • ATS market research — detectOnly across a list shows which systems a segment runs

🔗 Integration

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('foxlabs/company-hiring-signal-multi-ats').call({
queries: ['ramp'], maxResultsPerQuery: 25,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("foxlabs/company-hiring-signal-multi-ats").call(
run_input={"queries": ["ramp"], "maxResultsPerQuery": 25}
)
items = client.dataset(run["defaultDatasetId"]).list_items().items

No-code: Make, n8n and Zapier reach this Actor through the Apify app — schedule it and push hiring signals into a CRM or a sheet.

📊 Pricing

Pay-per-event: job-posting — $0.003 per delivered row ($3 per 1,000). Compute and traffic are included; you pay for rows, not run time. Rows without a job id are not charged.

View current pricing.

❓ FAQ

What if the company is not on any of the seven systems? The run reports that it could not detect a supported ATS rather than inventing rows.

Domain or company name — which works better? A domain is more reliable because detection follows the careers page. Names work when the board slug matches.

Can I just find out which ATS a company uses? Yes — detectOnly: true.

Why is employmentType only on half the rows? Some ATS platforms publish it, others do not. The percentage above is measured, not estimated.

Does it include salary? No — none of the systems in this set expose salary consistently, so the column was removed rather than shipped empty.

Is the schema the same as the single-ATS Actors? Yes. Outputs from this Actor and the seven dedicated ones concatenate into one table.

🐛 Troubleshooting

Detection fails for a company you know is hiring. They may run an ATS outside this set (or a custom careers page). Try the domain rather than the name.

Fewer roles than the company's careers page shows. maxResultsPerQuery caps per company — openRoleCount on each row tells you the true total.

A role looks stale. Boards keep filled roles up for a while; postedAt helps where the ATS publishes it.

⚠️ Trademark

Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Personio and Teamtailor are trademarks of their respective owners. This Actor is an independent tool, is not affiliated with or endorsed by any of them, and reads only publicly published job boards.

Company job boards are published for candidates to read. The rows this Actor returns are role listings and company-level hiring signals — business information. Role descriptions occasionally name a hiring manager; that content comes from the employer's own public posting. You remain responsible for how you use the output.

🤝 Support & contact

Questions, a field you need, or a bug: info@foxlabs.com.tr — or open an issue on the Actor's Apify page.

Changelog

0.1.8

  • Removed permanently-empty columns (team, city, countryName, seniority, salary, updatedAt) — no ATS in this set exposes them. Row went from 23 columns to 17, with zero permanently-empty columns left.

0.1

  • Automatic ATS detection across seven systems, with a shared job schema and detectOnly mode.
  • Pay-per-event billing on delivered rows (job-posting).