Company Jobs & Hiring Signals: Open Roles from Any Careers Page
Pricing
from $3.00 / 1,000 company summaries
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
an hour ago
Last modified
Categories
Share
At a glance (for AI agents)
- What it does: For each company you give it (website domain, job-board URL,
ats:slugor 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: falseto 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:slugor 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 tomaxJobsPerCompany). Each carriesinput,company,atsandboardSlugso 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
- Job-board URL or
ats:slug(e.g.https://job-boards.greenhouse.io/stripe,ashby:ramp): used directly (detectedVia: "input", confidence high). - 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). - Fallback: the obvious board name (
bunqfor bunq.com,huggingfacefor "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). CheckboardUrlfor 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
| Field | Meaning |
|---|---|
openRoles | All open roles on the board (before your filters) |
matchingRoles / newSinceCount | Roles matching your filters / posted since postedSince |
postedLast7Days, postedLast30Days, postedLast90Days | New roles by posting date |
medianPostingAgeDays, newestPostedAt, oldestPostedAt | How fresh the openings are |
hiringVelocity | high (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, workplace | Breakdowns (top 15) |
leadershipRoles, engineeringSharePct, goToMarketSharePct, salaryTransparencyPct | Mix signals |
newLocations30d | Locations where every open role was posted in the last 30 days (possible new office or market) |
newestPostings | 5 most recent roles with links |
growthHints | Plain-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
| Field | Type | Default | Description |
|---|---|---|---|
companies | array of strings | (required) | Websites, job-board URLs, ats:slug or names |
postedSince | string | (none) | "2026-10-01" or "7 days", "24 hours", "2 weeks" |
titleKeywords | array | (none) | Only jobs whose title contains any of these |
locationKeywords | array | (none) | Only jobs whose location/country contains any of these |
remoteOnly | boolean | false | Only remote-eligible jobs |
includeJobs | boolean | true | false = summaries only |
maxJobsPerCompany | integer | 200 | Cap on job records per company |
includeDescription | boolean | false | Plain-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.