Career Page Discovery & ATS Detector
Pricing
from $2.40 / 1,000 company-results
Career Page Discovery & ATS Detector
Discover company career pages and detect ATS/job-board platforms (Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Workable, and 14+ more) from company domains or URLs. Returns one flat company-level row with a 0-100 confidence. No login or cookies.
Pricing
from $2.40 / 1,000 company-results
Rating
0.0
(0)
Developer
Delowar Munna
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share

Turn a list of company domains or URLs into clean, company-level hiring-source intelligence. For each company you get one flat, CSV-ready row telling you where its jobs live (the public career page) and which ATS / job-board platform powers them — with a transparent 0–100 confidence and the evidence that produced it.
This is a lightweight discovery actor, not a full job scraper. It visits only a handful of public pages per company, so it is faster and cheaper than job scrapers when all you need is the career URL and the ATS.
Built for lead-generation teams, recruiters, sales teams, HR-tech vendors, and market researchers — and as a clean pre-enrichment step before any deeper job scraping.
- ✅ No login, no cookies, no API keys. Public data only.
- ✅ One row per company, not a raw job dump.
- ✅ 20+ ATS platforms detected with a transparent, non-AI confidence score.
- ✅ Optional lightweight jobs-presence signal (no job scraping).
What it does
For every company input the actor:
- Normalizes the input and detects its type (
domain,homepage_url, orcareer_url). - Fetches the homepage (or the provided career/ATS URL) and finds the career page — via homepage links, then a few likely career paths within the page budget.
- Detects the ATS / job-board platform from URL, link, script/embed, and HTML patterns, scoring a 0–100 confidence and recording the detection method.
- Optionally runs a lightweight jobs-presence check (visible job links, an open-roles count, or a public ATS listing) — never scraping individual jobs.
- Emits one flat row with the career URL, ATS, job-board URL, hiring status, reason tags, and request diagnostics.
It does not scrape job listings, descriptions, salaries, or applicant data; do deep crawling; use AI; require login/sessions; or call paid data vendors.
Supported ATS / career platforms
Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Workable, BambooHR, Recruitee, Breezy, JazzHR, Jobvite, iCIMS, Taleo, Teamtailor, Personio, Pinpoint, Rippling, ADP, Oracle Cloud Recruiting, SAP SuccessFactors — plus a generic custom careers page classification.
Input
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | array | [] | Direct company website or career-page URLs. Each is one company input. |
companies | array of strings | [] | Company domains or website URLs (e.g. canva.com). At least one company/URL required. |
maxResults | integer | 100 | Max unique company results to save (1–50000). |
maxPagesPerCompany | integer | 8 | Max public pages requested per company (1–20). |
includeLikelyCareerPaths | boolean | true | Probe /careers, /jobs, /join-us, … when no homepage link is found. |
checkJobsPresence | boolean | true | Lightweight detection of whether the career page visibly lists roles. |
atsFilter | array | [] | Save only companies on the selected ATS (by ats_key); custom/unknown valid. Empty = all. |
careerPageRequired | boolean | false | Save only companies where a career page was found. |
dedupe | boolean | true | One row per normalized company / career / job-board URL. |
requestTimeoutSecs | integer | 30 | Per-request timeout in seconds (10–90). |
proxyConfiguration | object | { "useApifyProxy": true } | Datacenter, no proxy, or custom proxy URLs. Apify Residential rejected at startup. |
Example inputs
1. Discover career pages & ATS for a list of company domains
{"companies": ["notion.so", "canva.com", "stripe.com", "sap.com"],"maxResults": 100,"maxPagesPerCompany": 8,"includeLikelyCareerPaths": true,"checkJobsPresence": true,"proxyConfiguration": { "useApifyProxy": true }}
2. Keep only Greenhouse & Lever companies that have a career page
{"startUrls": ["https://boards.greenhouse.io/airbnb","https://boards.greenhouse.io/coinbase","https://jobs.lever.co/palantir","https://jobs.lever.co/spotify"],"atsFilter": ["greenhouse", "lever"],"careerPageRequired": true,"checkJobsPresence": true}
3. Minimal run — just give it companies
{ "companies": ["canva.com", "https://jobs.ashbyhq.com/openai"] }
Output
One flat row per company. Fields:
- Identity:
input_value,input_type,company_domain,company_website_url - Career page:
career_page_found,career_page_url,career_page_source(input_url/homepage_link/footer_link/header_link/likely_path/ats_redirect/embedded_widget/not_found) - ATS:
ats_detected,ats_name,ats_key,ats_confidence(0–100),ats_detection_method(url_pattern/script_pattern/html_pattern/link_pattern/api_pattern/manual_unknown),job_board_url - Jobs presence:
jobs_presence_detected,jobs_presence_method(visible_job_links/job_count_text/ats_public_listing/not_checked/not_found),likely_hiring_status(active/possible/unknown/not_detected) - Status & diagnostics:
discovery_status(success/partial/not_found/failed),reason_tags,pages_checked,final_url,http_status,error_message,scraped_at
Career page & ATS discovery (table view)

Sample records
1. A direct ATS board URL — high-confidence detection, company domain inferred from the board page:
{"input_value": "https://boards.greenhouse.io/airbnb","input_type": "career_url","company_domain": "careers.airbnb.com","company_website_url": "https://careers.airbnb.com","career_page_found": true,"career_page_url": "https://boards.greenhouse.io/airbnb","career_page_source": "input_url","ats_detected": true,"ats_name": "Greenhouse","ats_key": "greenhouse","ats_confidence": 95,"ats_detection_method": "url_pattern","job_board_url": "https://boards.greenhouse.io/airbnb","jobs_presence_detected": true,"jobs_presence_method": "ats_public_listing","likely_hiring_status": "active","discovery_status": "success","reason_tags": "career_page_found|ats_greenhouse|jobs_visible","pages_checked": 1,"final_url": "https://careers.airbnb.com/positions/","http_status": 200,"error_message": null,"scraped_at": "2026-06-17T04:24:50.658Z"}
2. A company homepage — career page discovered, ATS detected from a link on the page:
{"input_value": "https://www.notion.so","input_type": "homepage_url","company_domain": "notion.so","company_website_url": "https://notion.so","career_page_found": true,"career_page_url": "https://www.notion.com/careers","career_page_source": "footer_link","ats_detected": true,"ats_name": "Ashby","ats_key": "ashby","ats_confidence": 85,"ats_detection_method": "link_pattern","job_board_url": "https://jobs.ashbyhq.com/notion/753883ee-23a9-4150-804f-342d32743d56","jobs_presence_detected": true,"jobs_presence_method": "ats_public_listing","likely_hiring_status": "active","discovery_status": "success","reason_tags": "career_page_found|ats_ashby|jobs_visible","pages_checked": 2,"final_url": "https://www.notion.com/careers","http_status": 200,"error_message": null,"scraped_at": "2026-06-17T04:25:35.957Z"}
3. A company on a custom careers page — no recognizable ATS, but career page and visible jobs still reported:
{"input_value": "https://www.canva.com","input_type": "homepage_url","company_domain": "canva.com","company_website_url": "https://canva.com","career_page_found": true,"career_page_url": "https://www.lifeatcanva.com/en","career_page_source": "footer_link","ats_detected": false,"ats_name": "Custom careers page","ats_key": "custom","ats_confidence": 35,"ats_detection_method": "manual_unknown","job_board_url": null,"jobs_presence_detected": true,"jobs_presence_method": "job_count_text","likely_hiring_status": "active","discovery_status": "success","reason_tags": "career_page_found|custom_careers_page|jobs_visible","pages_checked": 2,"final_url": "https://www.lifeatcanva.com/en","http_status": 200,"error_message": null,"scraped_at": "2026-06-17T04:24:54.956Z"}
A run summary is stored in the default key-value store under RUN_SUMMARY with counters such as inputs_total, career_pages_found, ats_detected, jobs_presence_detected, results_saved, duplicates_removed, filtered_out, and charged_events.
ATS confidence score
A transparent 0–100 score (no AI), driven by the strongest available evidence (PRD §6/§7):
| Evidence | Confidence | Method |
|---|---|---|
| URL hosted on a known ATS | 95 | url_pattern |
| Apply/job link to a known ATS on page | 85 | link_pattern |
| ATS embed/script/marker in the HTML | 85 | script_pattern |
| ATS HTML/text pattern | 75 | html_pattern |
| Generic ATS keyword, no known provider | 55 | html_pattern |
| Generic/custom careers page, no ATS | 35 | manual_unknown (custom) |
| No signal | 0 | manual_unknown (unknown) |
Pricing
Pay Per Event. One event, company-result, is charged only after a valid, unique company row is successfully pushed to the dataset. Duplicate companies, filtered-out companies, failed inputs, and internal page requests are never charged. The actor honours your per-run spending limit and stops cleanly when it is reached.
🚦 Proxy policy
Use Apify Datacenter proxy or no proxy for normal runs — both work reliably for company websites and public ATS pages at this actor's conservative concurrency.
Apify Residential proxy is not supported. The actor fails at startup if apifyProxyGroups includes RESIDENTIAL. Reason: in pay-per-event actors, residential bandwidth (~$8/GB) is billed to the developer, not the run user, so a single bandwidth-heavy run could exceed the per-result event revenue.
If you genuinely need residential routing, supply your own residential provider via the proxy editor's Custom proxy URLs field — that traffic goes through your provider, not Apify, and is unaffected:
http://user:pass@proxy.iproyal.com:12321http://user:pass@proxy.brightdata.com:22225http://user:pass@proxy.oxylabs.io:7777
Notes & limitations
- Detection is strongest when a company links to or hosts on a recognizable ATS. A fully custom, JavaScript-only careers page with no ATS signal is reported as
custom(confidence 35) — still useful "they self-host" intelligence. - Jobs presence is a lightweight yes/no signal, not a job count. For the six ATS with public JSON endpoints (Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee, Workable) it is confirmed via
ats_public_listing; otherwise it relies on visible page signals. - Bare company names without a domain are not resolvable in V1 and are counted as failed inputs — supply a domain or URL.
- HTTP-only by design (no headless browser), which keeps runs fast and cheap.