Workday Jobs Lookup — Careers Site Job Postings API avatar

Workday Jobs Lookup — Careers Site Job Postings API

Pricing

from $3.00 / 1,000 successful lookups

Go to Apify Store
Workday Jobs Lookup — Careers Site Job Postings API

Workday Jobs Lookup — Careers Site Job Postings API

Look up any company's live Workday-hosted careers site and get its open roles — title, location, posted date, apply link. Filter by title, location, or remote, or watch for new postings since your last run. Charged once per company checked — none open costs nothing.

Pricing

from $3.00 / 1,000 successful lookups

Rating

0.0

(0)

Developer

Adrian Voss

Adrian Voss

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Workday Jobs Lookup

You give this actor a list of Workday careers-site URLs — the same link you'd paste into your browser, like https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite — and it calls Workday's own job-search API (/wday/cxs/<tenant>/<site>/jobs) directly, no login and no headless browser. You get back one row per company: job titles, locations, how long ago each was posted, and a working apply link, ready to drop into a spreadsheet, a Clay table, or a CRM.

Who it's for

The accountable_eel catalogue sells company intelligence columns for outbound. Each actor takes a list of domains or company identifiers and returns one flat, stably-named row per input — firmographics, registry IDs, tech stack, email route, hiring activity — the shape a Clay table, an n8n workflow, or an AI agent can consume without post-processing. Pricing is pay-per-event and per-domain: a few tenths of a cent for a row that was actually found, and nothing for a miss, so a list that doesn't enrich costs you next to nothing. Where an official source exists — VIES, GLEIF, SEC EDGAR, Brønnøysund, PRH, RDAP — it is queried directly instead of scraped. No seat licence, no monthly minimum, no credit system to decode. Here the identifier is a company's Workday careers-site URL and the "official source" is Workday's own CXS search endpoint, queried live on every run.

Why this one

  • Reads Workday's own API, not the rendered page. No headless browser, no waiting for client-side JavaScript to paint a job board — this calls the same JSON endpoint the careers site itself calls.
  • Works for any tenant. The tenant, pod (wd5, wd12, …), and site name are parsed generically out of the URL you paste — nothing is hardcoded to one employer.
  • Real filters, not a raw dump. Narrow by title keyword, excluded keyword, location, or remote-only, and combine them — see How to use.
  • A hiring-alert mode. Turn on onlyNewSinceLastRun, put the actor on a schedule, and every run after the first returns only postings you haven't seen before.
  • You only pay for a company that resolves. A URL that isn't a live Workday site, or a site with zero open roles, comes back found: false and is never charged.

What you get

One row per input URL by default, expanded into one row per job posting when the console's row expansion is on (each job row repeats the company-level fields and adds its own title/location/ posting/apply columns). Every field is stably named — safe to build a Clay column or an agent prompt around.

FieldType / formatWhat it is
querytextThe Workday careers-site URL you submitted.
foundbooleantrue if the URL resolved to a live Workday site.
statustextOK, NOT_FOUND, BLOCKED, BAD_FORMAT, or REQUEST_FAILED.
messagetextPresent only on a miss row (found: false) — a short explanation of why.
tenanttextThe Workday tenant name, parsed from the URL.
sitetextThe careers-site name, parsed from the URL.
totalReportednumberWorkday's own count of the company's entire open-role total — independent of pagination or filters.
totalJobCountnumberHow many postings were on the fetched page (up to 20, Workday's own page size) before any filtering.
jobCountnumberHow many of that page's postings matched your filters.
newJobsnumber or nullPostings new since your last run — only populated when onlyNewSinceLastRun is on.
firstRunboolean or nullWhether this was the baseline run of a delta watchlist — only populated when onlyNewSinceLastRun is on.
notetextA human-readable caveat, e.g. "Showing first 20 of 2000 — Workday's default page size."
jobsarrayThe full list of matching postings for this company, each with title, location, postedOn, remote, applyUrl.
titletextJob title (present on each expanded job row).
locationtextJob location as Workday reports it (present on each expanded job row).
postedOntextWorkday's own relative posting age — "Posted Today", "Posted 30+ Days Ago" — kept verbatim. There is no separate absolute-date field; see the FAQ.
remotebooleanBest-effort remote flag, matched against the location and title text.
applyUrllinkThe direct apply link for that posting.
scrapedAttext (ISO datetime)When this row was fetched.

Price

$5.2 per 1,000 companies, plus a $0.0001 start fee. Misses (found:false) are never charged.

1,000 companies through this actor: ~$5.20 if every one resolves to a live Workday site with open roles, less if some don't. The same 1,000 rows through a credit-based enrichment platform typically runs $80–$400. A company with no Workday careers site, or with zero open roles, costs nothing either way here — you're only billed for a company that actually answers.

How to use

  1. In the Apify Console. Open the actor page and click Start — the companies field is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found.
  2. Via the API. Call it directly with a POST request — no Console needed once you have an API token:
    curl "https://api.apify.com/v2/acts/accountable_eel~workday-jobs-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
    -X POST \
    -H "Content-Type: application/json" \
    -d '{"companies":["https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"]}'
  3. On a schedule. Save this actor as an Apify Task with the input you want, then add a Schedule (hourly, daily, weekly) so it runs on its own — no server of your own required.

Paste one Workday careers-site URL per line into companies — the full URL as it appears in your browser, locale prefix and all (en-US is accepted and ignored):

{
"companies": [
"https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite",
"https://salesforce.wd12.myworkdayjobs.com/en-US/External_Career_Site"
],
"maxConcurrency": 5
}

maxConcurrency (default 5, max 20) caps parallel requests. This target has no browser fallback, so getting rate-limited costs you more than going slow — a lower value is safer than pushing it high. proxyConfiguration lets you set Apify Proxy options directly; residential proxies help if you see blocked or empty responses.

Filters (all optional, all under 🎯 Job filters in the Input tab):

InputWhat it does
titleKeywordsKeep only roles whose title contains at least one of these — case-insensitive, partial words count ("engineer" matches Engineering Manager).
excludeTitleKeywordsDrop any role whose title contains one of these, applied after titleKeywords.
locationsKeep only roles whose location contains one of these.
remoteOnlyKeep only roles that read as remote — matches remote, anywhere, work from home, wfh, distributed in the location, and the literal word remote in the title.

Different filters combine with AND; values inside one filter combine with OR. Filtering happens before the row is built, so it applies the same whether you're reading one row per company or one row per job.

Two counts protect you from ambiguous zeros: totalJobCount is what was on the fetched page before filtering, jobCount is what matched your filters, and totalReported is Workday's own count of the company's whole open-role total, independent of both. A company whose roles all get filtered out still returns a found: true row with jobCount: 0 — you asked, and got a real answer, so it's charged like anything else. Only a URL with no live Workday site, or zero open roles company-wide, comes back found: false and free.

Watching for new jobs. Turn on onlyNewSinceLastRun and put the actor on a schedule to get a hiring alert instead of a full dump each time. The first run returns everything matching your filters and remembers it; every run after returns only what's new, with newJobs telling you how many and firstRun telling you whether this was the baseline. A quiet run still returns a row (jobCount: 0, newJobs: 0) so you can tell "nothing changed" from "this broke." The seen-list lives in a named key-value store in your own Apify account (workday-jobs-lookup-state), keyed by tenant and site, and your filters are part of that identity — change titleKeywords and you start a fresh watchlist.

Input

{
"companies": [
"https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
]
}

One company per line — paste the full Workday careers-site URL you'd see in your browser. Accepted formats: https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite, https://salesforce.wd12.myworkdayjobs.com/en-US/External_Career_Site.

Sample output

queryfoundstatustenantsitetotalReportedjobCounttotalJobCountnewJobsfirstRunnotejobstitlelocationpostedOnremoteapplyUrlscrapedAt
https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSitetrueOKnvidiaNVIDIAExternalCareerSite200020<open jobs on this page (before filters)><first run of this watchlist?>Showing first 20 of 2000 — Workday's default page size.<all jobs (full list)>Senior Software Engineer, Cloud-Native Stack – CSP Engagements5 LocationsPosted Today<remote? (best-effort)>https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite/job/US-CA-Santa-Clara/Senior-Software-Engineer--Cloud-Native-Stack---CSP-Engagements_JR20010982026-08-23T23:07:36.711Z

A found row, unexpanded:

{
"query": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite",
"found": true,
"data": {
"tenant": "nvidia",
"site": "NVIDIAExternalCareerSite",
"totalReported": 2000,
"jobCount": 20,
"totalJobCount": 20,
"newJobs": null,
"firstRun": null,
"note": "Showing first 20 of 2000 — Workday's default page size.",
"jobs": [
{
"title": "Senior Software Engineer",
"location": "Santa Clara, CA",
"postedOn": "Posted 3 Days Ago",
"remote": false,
"applyUrl": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite/job/..."
}
]
},
"scrapedAt": "2026-08-20T12:00:00.000Z"
}

A URL that isn't a valid Workday careers-site link, doesn't resolve, or resolves with zero open postings comes back as {"found": false, ...} and is never charged.

Use it from Clay, n8n, Make, or an AI agent

This actor runs synchronously over plain HTTP — call it directly from a script, a workflow tool, or an AI agent, no Apify Console needed once you have an API token.

curl "https://api.apify.com/v2/acts/accountable_eel~workday-jobs-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
-X POST \
-H "Content-Type: application/json" \
-d '{"companies":["https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"]}'

n8n. Add an HTTP Request node: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~workday-jobs-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body Content Type JSON, JSON Body {"companies":["https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"]} (swap in an expression from an earlier node for a real value).

Clay. Add an "HTTP API" column: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~workday-jobs-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body {"companies":["{{company}}"]}, mapping the row's company into the companies array.

MCP. In Claude, Cursor, or any MCP client with the Apify MCP server, ask for "Workday Jobs Lookup | Apify" — the agent will find and run this actor.

Tips

  • Paste the exact browser URL. The parser expects the tenant/pod/site pattern (<tenant>.<pod>.myworkdayjobs.com/<site>) as it appears in the address bar, locale prefix optional. A shortened or redirected link won't parse.
  • Keep concurrency modest on a big batch. There's no browser fallback here, so a blocked response costs you a retry, not a silent recovery — start at the default (5) and raise it only if you're not seeing blocks.
  • Use totalReported, not totalJobCount, for headcount comparisons across companies. totalJobCount is capped at the 20-per-page limit; totalReported is the company's real total.
  • Set filters once, then schedule. Combine titleKeywords/locations/remoteOnly with onlyNewSinceLastRun for a running "new roles matching X" alert instead of re-reading a full dump each week.
  • Don't pair delta mode with "only keep rows containing." A row-level keyword filter can drop the jobCount: 0 heartbeat row that tells you the watchlist is alive and just quiet.

vs. alternatives

What it costsWhat you getTrade-off
This actor (workday-jobs-lookup)$0.0052 per company whose Workday site is found (less on paid tiers), $0.0001 actor start, nothing for a company with no live Workday siteEvery open posting on the first page of a company's Workday careers site — title, location, relative post age, apply URL — filtered by title keyword, location, or remote, with onlyNewSinceLastRun for a hiring-alert scheduleWorkday only. v1 reads only the first page (up to 20 postings, though totalReported shows the real total), and there's no absolute posted date — Workday's own listing endpoint never provides one.
TheirStack$0.005–$0.03 per companyA job-postings dataset with history, normalised across many ATS platforms and job boardsBroader coverage than one platform, and it keeps history. This reads Workday's own API live, at the bottom of that price range.
Workday's own API (DIY)FreeThe same JSONIt's the same source, but you handle the tenant/pod/site parsing from a careers-site URL, the CXS request shape, title/location/remote filtering, the delta seen-list, and the retries — this hands you a flat, filtered table instead.
Clay$0.08–$0.40 per enriched row in credits, on top of a seatA whole enrichment workspace — waterfalls across dozens of providers, plus the table and the sequencing around itIf you want one place that does everything and you're not counting rows, that's Clay. This is one column, priced per column, callable from Clay via its HTTP step.

Prices for third-party tools are their published list prices as of August 2026 and are not tracked here — check the vendor before relying on the comparison.

FAQ

What input format do I need? The full careers-site URL as it appears in your browser, e.g. https://<tenant>.<pod>.myworkdayjobs.com/<site>. A locale prefix like en-US is also accepted.

What if my input isn't a valid Workday URL? It comes back found: false and is never charged — one bad item doesn't fail the whole run.

Why was I charged for a company that returned 0 jobs? Because its careers site resolved and had open roles on the fetched page — they just didn't match your filters, or weren't new since your last run. totalJobCount shows how many were actually on that page before filtering, and totalReported shows the company's whole open-role count regardless of the page or your filters. A company with no Workday site, or nothing open at all, comes back found: false and free.

Why is there no postedDate field? Workday's own job-search endpoint — the one this actor calls — only ever reports posting age as relative text ("Posted Today", "Posted 30+ Days Ago"). The absolute calendar date lives on a separate per-job detail endpoint this actor doesn't call (one extra request per posting, per company). Rather than fabricate a date from that text or ship a column that's always empty, that field was dropped: postedOn carries Workday's own text verbatim, and there's no postedAfter filter, because it couldn't actually filter on anything real.

How does the "new since last run" state work, and can I reset it? Turn on onlyNewSinceLastRun and schedule the actor; the seen-list is kept in a named key-value store (workday-jobs-lookup-state) inside your own Apify account, one entry per tenant+site, so nobody else can see it. Delete that store to reset every watchlist. The identity it tracks is derived from each posting's externalPath (its URL path) — Workday's listing has no native job id to use instead. Changing your filters starts a fresh watchlist automatically.

Does this paginate beyond the first 20 jobs? No — v1 reads Workday's own default first page (up to 20 postings) per query, plus totalReported so you know the real total.

Should I use a proxy, and is there a rate limit to worry about? Residential proxies help if you're querying many tenants in one run or see blocked/empty responses — set this via proxyConfiguration. There's no published Workday rate limit; maxConcurrency (default 5, max 20) is the lever you control, and lower is safer since there's no browser fallback to recover a block.

Is this GDPR-safe to run against EU companies? The actor only reads what a company already publishes on its own public careers site — job titles, locations, and apply links, no personal data about applicants or employees. You're responsible for how you use the output, same as with any public-web lookup.

Can I call this from an AI agent instead of the Console? Yes — it runs synchronously over the Apify API, and it's discoverable through the Apify MCP server (ask for "Workday Jobs Lookup | Apify"). See Use it from Clay, n8n, Make, or an AI agent.