Career Site Jobs: Workday, Oracle, Greenhouse and 21 more

io.github.danielhageverPublished by GitHub account danielhageverv1.0.0Updated Nov 2, 2026

Open jobs from any company's careers site by name or domain, plus a search across 2.5M+ roles

VerifiedStreamable HTTPWeb executableWeb Search & ScrapingBusiness & Commerce

Overview

AI-generated overview

Apify-hosted MCP server that pulls every open job from a company's careers page by name or domain, across 24+ hiring systems.

What you can do
  • Look up companies by name or domain and read all their open jobs from the employer's own careers board
  • Filter results by title keywords, location keywords, remote-only, and per-company or per-run result caps
  • Optionally fetch full job description text, which is off by default because it is heavier
  • Return one normalized row per job with title, location, department, URL, posting date, employment type, work arrangement and the source hiring system
  • Report error rows explaining why a company returned nothing
When to use it
Useful when you want an assistant to answer questions about what a specific employer is hiring for, or to collect openings across many named companies without knowing which applicant tracking system each one uses.
Requirements
Remote MCP endpoint at mcp.apify.com with the tool scoped in the URL; OAuth sign-in to Apify or an Apify API token sent as an Authorization Bearer header; an Apify account, with usage billed per result.
Before you install
Requires an Apify API token or Apify sign-in, so the assistant acts under your Apify account. Runs are paid per result, though rows dropped by filters and error rows are not charged. Results come from third-party career sites and are sent through Apify's hosted service.

Installation

In SourceWeft

  1. Open Career Site Jobs: Workday, Oracle, Greenhouse and 21 more in the dashboard and add it to a workspace.
  2. Connect the required credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.danielhagever%2Fcareer-site-jobs/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config. The client completes OAuth sign-in on first connect.

{
  "mcpServers": {
    "career-site-jobs-workday-oracle-greenhou": {
      "type": "http",
      "url": "https://mcp.apify.com/?tools=glitchbound/ats-jobs-scraper,glitchbound/workday-jobs-scraper,glitchbound/ats-jobs-search"
    }
  }
}

README

Company Career Page Scraper: every open job from any company, by name or domain

Give it company names or websites (stripe.com, Marriott, Casey's) and get every open job on each company's careers page as one clean row, whichever hiring system the page runs on: Workday, Oracle, ADP, iCIMS, SAP SuccessFactors, Eightfold, Phenom, Greenhouse, Lever, Ashby and 14 more. No board tokens to look up, no API key for any of those systems, no proxy.

This repo is the quick start for the hosted Company Career Page Jobs Scraper on Apify: one HTTP call from the shell, a standard-library Python script, and the setup for using it as a tool in Claude, ChatGPT or Cursor.

Quick start: one curl

Get a free Apify API token at console.apify.com/settings/integrations, then:

bash
export APIFY_TOKEN=apify_api_...curl -s -X POST \  -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \  -d '{"companies": ["stripe.com", "Marriott", "Casey'"'"'s"], "titleKeywords": ["manager"], "maxItems": 20}' \  "https://api.apify.com/v2/acts/glitchbound~ats-jobs-scraper/run-sync-get-dataset-items"

The response is a JSON array, one object per job. Stripe is on Greenhouse, Marriott on Oracle, Casey's on ADP; you did not need to know any of that. For runs longer than five minutes, start the run and fetch the dataset when it finishes.

Quick start: Python

example.py uses only the standard library and writes a CSV:

bash
python3 example.py --company stripe.com --company Marriott --company "Casey's" --title manager --max 6python3 example.py inputs/security-roles.json

A real run of the first command:

6 jobs written to jobs.csv  Stripe: AEO and GEO Marketing Manager (Remote in the US)  Stripe: AI Solutions Program Manager, Finance (SEA, SF, NYC, CHI)  Marriott: Revenue Manager (LONDON, United Kingdom)  Marriott: Analytics Manager (Goa, India)  Casey's: Center Store Manager - Gardner, KS (Gardner, Kansas, United States)

Use it from an AI agent (MCP)

Add this as a connector in Claude or ChatGPT:

https://mcp.apify.com?tools=glitchbound/ats-jobs-scraper

In Cursor or VS Code, the same address goes in mcp.json:

json
{ "mcpServers": { "apify": { "url": "https://mcp.apify.com?tools=glitchbound/ats-jobs-scraper" } } }

The first call asks you to sign in to Apify or takes an API token. Then "what is Stripe hiring for in Dublin?" is one tool call.

It is also listed in the official MCP Registry as io.github.danielhagever/career-site-jobs, together with the Workday and Job Listings tools (server.json).

Input

FieldWhat it does
companiesCompany names or domains: NVIDIA, Home Depot, stripe.com. Each is looked up in a directory of career sites already read, and guessed (then verified against the live board) only when the directory has nothing.
boardsSkip discovery and read a board directly as platform:token, e.g. greenhouse:stripe or lever:palantir. Workday takes its careers URL: workday:https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite.
titleKeywordsKeep roles whose title contains any of these. Plain text, so c++ means c++.
locationKeywordsKeep roles whose location contains any of these, e.g. London.
remoteOnlyKeep remote roles only.
includeDescriptionAlso fetch the description text. Off by default, because some sources are many times heavier with it.
maxResultsPerCompanyCeiling per board (default 1,000).
maxItemsCeiling for the whole run.

Ready-made inputs are in inputs/. Rows your filters drop are not charged, and on large Workday, Oracle, Eightfold, Phenom and Amazon boards a title or city filter is sent to the employer's own search, so it finds every match rather than skimming the newest postings.

Output

Every system names things differently; every row comes back in one shape. One real row from each of the three systems in the run above is in sample-output.json:

json
{  "jobId": "5001234068100",  "title": "Center Store Manager - Gardner, KS",  "location": "Gardner, Kansas, United States",  "departments": ["Store / Field Leadership"],  "url": "https://myjobs.adp.com/caseysstore/cx/job-details?reqId=5001234068100",  "postedAt": "2026-10-25T13:02:33Z",  "employmentType": "full-time",  "company": "Casey's",  "atsPlatform": "adp",  "boardToken": "caseysstore",  "boardUrl": "https://myjobs.adp.com/caseysstore",  "workArrangement": "onsite",  "isRemote": false,  "country": "United States",  "region": "Kansas",  "city": "Gardner"}

atsPlatform says which system each row came from. Error rows ("recordType": "error") say why a company returned nothing and are not charged.

How a name becomes a board

Most scrapers that take a company name can only guess at a board token, which finds startups on Greenhouse or Lever and misses the employers people ask about first: Workday, Oracle, ADP and iCIMS addresses carry ids that no name or domain can be turned into.

So the Actor ships a directory of over 75,000 company names, each mapped to a career site it has already read real postings from, refreshed nightly. A name is looked up there first. Only when the directory has nothing does it derive candidate tokens from the domain, and then it checks each one against the live board: on the systems where a board that does not exist answers 404, a 200 is proof, not a guess.

Some companies run careers software of their own (Google, Apple, Meta, Tesla). For those the run says so and charges nothing, instead of returning some other company's board that happens to share the name.

The systems it reads

SystemExamples of employers it answers by name
WorkdayNVIDIA, Walmart, Salesforce, Disney, Wells Fargo
Oracle Recruiting CloudMarriott, Kroger, JPMorgan Chase, Hilton, Uber
ADPCasey's, PepsiCo Beverages North America
iCIMSCharles Schwab, Liberty Mutual, EMCOR
SAP SuccessFactors (on the employer's own site)EY, Compass Group, Aramark, Union Pacific
EightfoldMicrosoft, Starbucks, Lockheed Martin, Qualcomm
PhenomUPS, RTX, Eli Lilly, United Airlines
RadancyUnitedHealth Group, Comcast, Kaiser Permanente
JibeCostco, H&R Block, PetSmart, AMD
BrassRingHome Depot, Best Buy, Publix, Edward Jones
TaleoValero, Textron
Amazon (its own search)Amazon, AWS
Greenhouse, Lever, AshbyStripe, Airbnb, Palantir, OpenAI, Notion
Workable, Recruitee, Rippling, Teamtailor, Personio, BambooHR, Breezy, JazzHR, Paylocitythe long tail of small and mid-size employers, many in Europe

The raw public endpoint of each of these, with a tested curl, is in job-board-apis.

FAQ

How do I get every open job from a company's career page? Put its name or website in companies. The Actor works out which system the careers page runs on and reads that system's own job feed, so you never need the board's URL or token.

Does it work for the biggest employers? Yes, that is what the directory is for. Each board gives up to 1,000 roles by default; raise maxResultsPerCompany and a 20,000-job board such as Costco's is read in full. A title or city filter goes to the employer's own search, so it finds every match either way.

Why not just scrape Indeed or Glassdoor? They have no public jobs API and block automated requests at the edge. They also aggregate from these same career pages, so the source is fresher.

What does it cost? It is paid per result; rows dropped by your filters and error rows are not charged. The current rate for your plan is on the Actor page.

I want what is new, not everything. Job Listings API searches the whole index by title, place or salary, with newWithin for only the roles that appeared since the last daily refresh.

Related

Questions, or a company that does not resolve? Open an issue here or on the Actor page.

License

MIT

Source: README.md at commit d8e1d21

Tools

0
This server asks you to sign in, so SourceWeft could not read its tools without an account and has not indexed them. What a connected account sees can depend on that account and its permissions.

Version history

1
  1. v1.0.0LatestOct 26, 2026

Score

85% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts