MyWorkdayJobs Scraper — Workday ATS Job Listings
Pricing
from $3.30 / 1,000 job-listings
MyWorkdayJobs Scraper — Workday ATS Job Listings
This actor scrapes job listings from any Workday-hosted career site (myworkdayjobs.com) and returns structured job records with title, location, full description, IDs, organization data, and parsed salary when disclosed.
Pricing
from $3.30 / 1,000 job-listings
Rating
0.0
(0)
Developer
Vitalii Bondarev
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
MyWorkdayJobs Scraper
MyWorkdayJobs Scraper extracts job listings from any Workday-hosted career site — domains such as company.wd5.myworkdayjobs.com — through the same public JSON endpoints the career site itself uses to render job search and job detail pages. It works out of the box for any employer running Workday's career-site product, including large enterprises like NVIDIA and Salesforce, so it is a good fit for recruiters, sales-intelligence teams, job boards, and researchers who need structured hiring data from one company or many.
Features
- Works against any Workday career site — just point it at the site's URL, no per-company configuration.
- Returns the full search result set plus, optionally, the full job detail page (description, salary parsing, organization data, similar jobs).
- Parses salary ranges out of free-text descriptions when the employer discloses them.
- Keyword filtering at the source (Workday's own search API), so you only pay for jobs you actually want.
- Built-in retry-safe pay-per-result billing — a failed retry never double-charges.
- Runs on Apify's RESIDENTIAL proxy by default for reliable access; no extra keys or accounts required.
How to use
- Find the Workday career site URL for the company you want (format:
https://<company>.<datacenter>.myworkdayjobs.com/<lang>/<SiteName>, e.g.https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite). - Paste one or more of these URLs into Company career site URLs.
- Optionally set a Search keyword to filter to specific roles (leave blank for all open jobs).
- Leave Fetch full job details on to get the complete description, salary, and organization fields; turn it off for a faster, cheaper listing-only pass.
- Set Max items to cap how many job records are returned, then run the Actor.
Input
companyUrls— Required list of Workday career site URLs to scrape.keyword— Search filter; leave empty to retrieve all jobs.fetchDetails— Fetches full job details for each listing; defaults totrue.maxItems— Maximum number of records to return across all URLs.proxyConfiguration— Apify proxy settings;RESIDENTIALis recommended.
Output
Every record contains the following fixed set of fields:
rowTypesourcejobReqIdpostingInternalIdjobPostingIdjobPostingSiteIdquestionnaireIdtitlejobUrlexternalPathpostedOnstartDatetimeTypepostedcanApplyincludeResumeParsinglocationTextcountryemployerNamedescriptiondescriptionTextsalaryapplyUrlapplyTypeexternalUrllocationemployerhiringOrganizationsimilarJobsscrapedAt
Salary is parsed from the description text and is null when it is not disclosed. When fetchDetails is false, detail-only fields are null.
Pricing
Billing uses a pay-per-result model: one charge of $0.0034 applies for each job listing delivered to the dataset. There is no charge for empty runs. Scraping 1,000 job listings costs approximately $3.40, plus a small one-time Actor-start fee and Apify's own platform/proxy usage (billed separately, standard Apify rates). Turning off Fetch full job details does not change the price but does make each run faster if you only need the listing summary.
FAQ / Support
Does this work for every company on Workday? Yes — any career site running on *.myworkdayjobs.com is supported; just supply that company's career-site URL.
Why is a field null? Workday does not require employers to publish every field (salary, questionnaire ID, etc.). A null means the source data itself was empty, not a parsing failure.
Found a career site that doesn't work? Open an issue on the Actor's Issues tab with the URL and we'll investigate.
Usage statistics
This Actor creates a small, content-free summary at the end of each run. It is used only to monitor reliability and improve this Actor. A copy is saved as USAGE_STATS in your own Apify key-value store, so you can see the exact record created for your run.
Set disableUsageStats to true in the input to opt out. Nothing is sent then; your USAGE_STATS record only says that statistics were disabled.
Only these fields are recorded:
- schema version, Actor name and build number;
- UTC start and finish hour (not a precise timestamp);
- run duration, number of results and time to the first result, each as a coarse range;
- whether the result was empty, the end status, and an error type from a fixed list;
- memory setting and counts of charged events;
- names of the input fields you set, never their values;
- the selected option for input fields that offer a fixed list of choices (for example a sort order).
We do not collect input text, search terms, URLs, domains, usernames, email addresses, names, proxy credentials, tokens, scraped records, output items, raw error messages, stack traces, or hashes of any of those values. Records are kept for no longer than 13 months, used only as aggregated operational statistics, and never sold or shared.
Additional fields (Phase 2)
This Actor also records your Apify user ID, whether Apify marks the account as paying, the size range of list inputs, the selected country when the input offers a fixed list of countries, and one category from a fixed Actor taxonomy. We use these fields only for aggregate reliability, repeat-use and cross-Actor analysis; reports suppress any cell with fewer than five distinct users.
The same disableUsageStats: true input flag turns these fields off too. The user ID is removed after 13 months; we do not export, sell, share, or attempt to re-identify this data.
Run-outcome signals (v2)
To learn whether a run did what it was asked to do, the record also holds a few more coarse ranges and yes/no flags. None of them contains content:
- the result limit you asked for (a range, when the input has one) and what share of it was delivered;
- results delivered per input item you listed (a range);
- output quality as ranges: how fully the result fields were filled, the share of rows that look like errors, the share of duplicate rows, and how many different fields appeared. These are counted in memory while results are saved; no result content is kept;
- how the run was started (console, API, schedule, webhook, another Actor);
- how it ended: stopped by you, timed out, reached the requested limit, stopped by the charge limit, and how many times the platform moved the run;
- if this Actor reports it: how many items to process worked or failed (ranges) and one failure reason from a fixed list;
- a short code made from the names of the input fields you set, never their values.
Repeat-run fingerprint (v2)
When your Apify user ID is recorded (see above), the record also holds an 8-character one-way code made from your input (proxy settings left out) and this Actor's name. It only lets us see that the same account ran the same input again soon after an unsatisfying run; we never see the input itself. It is stored only in the database, never published, and reports use it in aggregate with the same five-user minimum. It is the one exception to the statement above that no hashes are collected, and disableUsageStats: true turns it off.