Company Jobs & Hiring Signals: Open Roles from Any Careers Page avatar

Company Jobs & Hiring Signals: Open Roles from Any Careers Page

Pricing

from $3.00 / 1,000 company summaries

Go to Apify Store
Company Jobs & Hiring Signals: Open Roles from Any Careers Page

Company Jobs & Hiring Signals: Open Roles from Any Careers Page

Get any company's open jobs from its website: auto-detects Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee & more. Normalized jobs plus a hiring summary: departments, locations, new roles, velocity. No API key. $0.003/company, $0.001/job, $0.0005/run.

Pricing

from $3.00 / 1,000 company summaries

Rating

0.0

(0)

Developer

Plainfold

Plainfold

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

Share

At a glance (for AI agents)

  • What it does: For each company you give it (website domain, job-board URL, ats:slug or name), it finds the company's public job board, returns every open job in one normalized format (title, department, team, location, remote/hybrid/onsite, seniority, posted date, URL, salary when published) and a hiring summary: open roles by department, location, seniority and workplace type, roles posted in the last 7/30/90 days, newest postings, hiring velocity and plain-language growth hints.
  • Job boards supported: Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Breezy HR, Personio, BambooHR. The board is auto-detected from the company website (homepage and careers page links/embeds), with a fallback that checks the obvious board name on each ATS and verifies it.
  • When to use it: sales and account research ("is this account hiring, and where?"), investment and market research (hiring velocity as a growth signal), recruiting and competitive intel, monitoring a list of companies for new roles (use postedSince), or enriching a company list with headcount-growth hints.
  • When not to use it: searching all jobs across the web by keyword (this works company by company), Workday/iCIMS/Taleo-only employers, LinkedIn or Indeed listings, or anything about people (it returns no personal data: no recruiter or hiring-manager names, emails or phone numbers).
  • Cost: pay-per-event: $0.003 per company summary (only when a board is found), $0.001 per job returned, plus $0.0005 per run (Actor start, at the default 512 MB memory). Companies with no board found are free. Set includeJobs: false to pay only for summaries. 10 companies with 50 jobs each cost at most about $0.53. Apify platform usage is included.
  • Speed: about 1 to 5 seconds per company (website detection adds a few seconds; ats:slug or board URLs are fastest). Three companies are processed in parallel.
  • Auth: none. It reads the official public job-board APIs that each ATS publishes for career sites. Agents can run it through the Apify API or Apify's MCP server.
  • Input: just companies. Everything else is optional.

Example input:

{
"companies": ["ramp.com", "https://jobs.lever.co/spotify", "greenhouse:stripe"],
"postedSince": "7 days",
"maxJobsPerCompany": 50
}

Example output: company summary (shortened, real data from a test run):

{
"recordType": "companySummary",
"input": "ramp.com",
"companyName": "Ramp",
"found": true,
"status": "ok",
"ats": "ashby",
"boardUrl": "https://jobs.ashbyhq.com/ramp",
"detectedVia": "slugGuess",
"detectionConfidence": "low",
"openRoles": 161,
"postedLast7Days": 9,
"postedLast30Days": 57,
"hiringVelocity": "high",
"byDepartment": [{ "name": "Sales", "count": 63 }, { "name": "Engineering", "count": 38 }],
"workplace": { "remote": 14, "hybrid": 131, "onsite": 16, "unspecified": 0, "remoteEligible": 48 },
"leadershipRoles": 7,
"growthHints": [
"Hiring fast: 57 roles posted in the last 30 days (35.4% of dated roles).",
"Most new roles (30 days) in: Sales (20), Engineering (11), People & Talent (6).",
"Go-to-market push: 39.1% of roles are sales, partnerships or customer success."
],
"summary": "Ramp: 161 open roles on Ashby (top: Sales 63, Engineering 38, People & Talent 14); 57 posted in the last 30 days."
}

Example output: job (shortened):

{
"recordType": "job",
"company": "Ramp",
"ats": "ashby",
"title": "Manager, Enterprise Solutions Consulting",
"department": "Sales",
"team": "Solutions Consulting",
"location": "New York, NY (HQ)",
"remote": false,
"workplaceType": "hybrid",
"seniority": "manager",
"postedAt": "2026-10-07T21:39:57.598Z",
"url": "https://jobs.ashbyhq.com/ramp/2e27ba79-c95d-44de-ab75-ea90200ec9c0",
"salary": { "min": 195000, "max": 298000, "currency": "USD", "interval": "1 YEAR", "text": "$195K - $298K" }
}

Output format

The dataset holds two kinds of records, told apart by recordType:

  • companySummary: one per input company, always first for that company. Charged only when a board is found (found: true).
  • job: one per open role (after your filters, newest first, up to maxJobsPerCompany). Each carries input, company, ats and boardSlug so you can join it to its summary.

Use the Company summaries or Jobs dataset views for tables, or filter by recordType in code. The run's SUMMARY key-value record has totals.

How the job board is found

  1. Job-board URL or ats:slug (e.g. https://job-boards.greenhouse.io/stripe, ashby:ramp): used directly (detectedVia: "input", confidence high).
  2. Website domain (e.g. bunq.com): the homepage and careers pages (/careers, /jobs, links containing careers/jobs/join-us) are scanned for ATS links and embeds (detectedVia: "homepage" or "careersPage", confidence high).
  3. Fallback: the obvious board name (bunq for bunq.com, huggingface for "Hugging Face") is tried on each ATS's public API (detectedVia: "slugGuess"). Confidence is high when the job links point back to the company's own domain, medium when the board's company name matches, low when the ATS doesn't publish a company name to check against (Lever, Ashby). Check boardUrl for low-confidence matches with common names.

If several boards exist (e.g. an old and a new ATS), the best one is used and the others are listed in otherBoards.

Summary fields

FieldMeaning
openRolesAll open roles on the board (before your filters)
matchingRoles / newSinceCountRoles matching your filters / posted since postedSince
postedLast7Days, postedLast30Days, postedLast90DaysNew roles by posting date
medianPostingAgeDays, newestPostedAt, oldestPostedAtHow fresh the openings are
hiringVelocityhigh (25+ or half of roles posted in 30 days), moderate (5+ or 20%), low, none (no roles), unknown (board has no dates)
byDepartment, newRolesByDepartment30d, byLocation, bySeniority, workplaceBreakdowns (top 15)
leadershipRoles, engineeringSharePct, goToMarketSharePct, salaryTransparencyPctMix signals
newLocations30dLocations where every open role was posted in the last 30 days (possible new office or market)
newestPostings5 most recent roles with links
growthHintsPlain-language signals derived from the above

seniority and the engineering / go-to-market shares are keyword heuristics on job titles; treat them as signals, not exact counts.

Monitoring new roles

Schedule the Actor (for example daily) with postedSince: "24 hours" or "7 days": you'll get only new roles, while the summary still reports the full picture. With includeJobs: false you pay only $0.003 per company per check.

Input reference

FieldTypeDefaultDescription
companiesarray of strings(required)Websites, job-board URLs, ats:slug or names
postedSincestring(none)"2026-10-01" or "7 days", "24 hours", "2 weeks"
titleKeywordsarray(none)Only jobs whose title contains any of these
locationKeywordsarray(none)Only jobs whose location/country contains any of these
remoteOnlybooleanfalseOnly remote-eligible jobs
includeJobsbooleantruefalse = summaries only
maxJobsPerCompanyinteger200Cap on job records per company
includeDescriptionbooleanfalsePlain-text descriptions (contact details removed)

Data sources

Official public job-board APIs that each ATS publishes so companies can show jobs on their own sites: Greenhouse Job Board API, Lever Postings API, Ashby Job Posting API, Workable careers widget API, SmartRecruiters Posting API, Recruitee Careers Site API, Breezy HR, Personio and BambooHR career-site feeds. Data is live at run time. No scraping of logged-in pages, no LinkedIn, no Indeed.

Privacy: company data only

Job postings are company information. The Actor never returns recruiter, hiring-manager or contact names, emails or phone numbers, even when a feed includes them, and strips emails and phone numbers from descriptions.

Pricing

Pay-per-event:

  • $0.003 per company summary (a job board was found for the company)
  • $0.001 per job returned
  • $0.0005 per run (Actor start, at the default 512 MB memory; one start event per GB of memory)
  • No charge for companies with no board found, invalid input or errors

Set a maximum cost per run and the Actor stops cleanly when the budget is reached.

Use from code or an AI agent

Apify API, JavaScript/Python clients, or Apify's MCP server (https://mcp.apify.com/?actors=plainfold/company-hiring-signals). Synchronous call:

POST https://api.apify.com/v2/acts/plainfold~company-hiring-signals/run-sync-get-dataset-items with body {"companies": ["ramp.com"], "includeJobs": false}.

FAQ

Why "no board found" for a big company? It may use Workday, iCIMS, Taleo or an in-house system (not supported), or its careers page loads jobs only through JavaScript. Pass the job-board URL directly if you know it.

Are counts exact? openRoles is exactly what the board publishes. Some companies post one listing for several openings, or one listing per city.

Is the posted date reliable? It's the date the ATS reports as first published (Greenhouse first_published, Lever createdAt, Ashby publishedAt and so on). Reposted jobs may show a new date.

Support

Wrong board detected, or an ATS you need? Open an issue on the Actor's Issues tab.

More data tools from Plainfold, all usable by AI agents over MCP: plainfold.github.io/tools.