Career Page Discovery & ATS Detector avatar

Career Page Discovery & ATS Detector

Pricing

from $2.40 / 1,000 company-results

Go to Apify Store
Career Page Discovery & ATS Detector

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

Delowar Munna

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Career Page Discovery & ATS Detector

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:

  1. Normalizes the input and detects its type (domain, homepage_url, or career_url).
  2. 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.
  3. Detects the ATS / job-board platform from URL, link, script/embed, and HTML patterns, scoring a 0–100 confidence and recording the detection method.
  4. Optionally runs a lightweight jobs-presence check (visible job links, an open-roles count, or a public ATS listing) — never scraping individual jobs.
  5. 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

FieldTypeDefaultDescription
startUrlsarray[]Direct company website or career-page URLs. Each is one company input.
companiesarray of strings[]Company domains or website URLs (e.g. canva.com). At least one company/URL required.
maxResultsinteger100Max unique company results to save (1–50000).
maxPagesPerCompanyinteger8Max public pages requested per company (1–20).
includeLikelyCareerPathsbooleantrueProbe /careers, /jobs, /join-us, … when no homepage link is found.
checkJobsPresencebooleantrueLightweight detection of whether the career page visibly lists roles.
atsFilterarray[]Save only companies on the selected ATS (by ats_key); custom/unknown valid. Empty = all.
careerPageRequiredbooleanfalseSave only companies where a career page was found.
dedupebooleantrueOne row per normalized company / career / job-board URL.
requestTimeoutSecsinteger30Per-request timeout in seconds (10–90).
proxyConfigurationobject{ "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)

Career page & ATS discovery output table

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):

EvidenceConfidenceMethod
URL hosted on a known ATS95url_pattern
Apply/job link to a known ATS on page85link_pattern
ATS embed/script/marker in the HTML85script_pattern
ATS HTML/text pattern75html_pattern
Generic ATS keyword, no known provider55html_pattern
Generic/custom careers page, no ATS35manual_unknown (custom)
No signal0manual_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:12321
http://user:pass@proxy.brightdata.com:22225
http://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.