Workday jobs into Google Sheets every day: a measured run
A company's Workday careers page (an address ending in myworkdayjobs.com) loads its job list as JSON in every visitor's browser. This guide puts one of those pages on a daily schedule and into Google Sheets, and reports what the first run and a week of daily runs actually read, took and cost.
The task
The example is Workday's own careers site, so the only company named here is the source itself. The input for Workday Jobs Scraper, saved in Apify Console as a task:
{
"boards": ["https://workday.wd5.myworkdayjobs.com/Workday"],
"maxResults": 1000,
"incremental": true,
"stateKey": "guide-workday-sheets",
"includeDescription": false
}
incrementalis what makes a daily run cheap: each run after the first saves only postings that are new, changed, back again or gone, and skips the rest without charging for them.stateKeynames the monitor, so this task's memory is its own even if another task reads the same careers site.maxResultsis a cost cap as well as a row cap. This site listed 362 roles, so 1,000 never bit.- Descriptions are off to keep the sheet narrow. On Workday, turning them on costs no extra requests: the text comes from the same record as each posting's date and country.
The first run
Started from the task on Thursday 1 October 2026 (Melbourne time), on Apify's datacentre proxy at the default pace of 4 requests at a time and 90 a minute:
- 362 open roles in 24 countries, every one labelled
NEW, because a monitor's first run has nothing to compare with. - 381 requests, every one answered at the first attempt: 19 pages of Workday's job list, 20 roles a page, and one record per role for its posted date, country and time type, which the list leaves out.
- 4 minutes 21 seconds from start to finish, almost all of it those 362 records at 90 requests a minute.
How often each fact was there, as a share of the 362 rows:
| Field | Rows with it | Notes |
|---|---|---|
| Country | 100% | 24 countries: the United States 157, Ireland 27, Canada 24, India 24, the United Kingdom 20, Australia 16, and 18 more |
| City | 72% | 92% with the change of 2 October, below |
| Pay range | 65% | 235 ranges as numbers in four currencies: USD 155, EUR 55, CAD 24, GBP 1. None says per what, so the period stays empty |
| Work arrangement | 100% | Hybrid 314, on-site 35, remote 13 |
| Posted date | 100% | 255 of the 362 were posted in September 2026 |
| Hiring entity | 100% | The legal entity each posting names, such as Workday, Inc. or Workday Australia Pty Ltd |
Of the 103 rows without a city, 76 lead with a place in Workday's coded form: a three-letter country code and the place after a dot, such as USA.VA.Reston or IND.Pune. The build both runs used (0.1.13) kept those whole in location.raw. A change dated 2 October 2026 in the Actor's changelog splits them into country, region and city; re-read that way, the same 362 rows have a city on 334 (92%). The other 28 name only a country, a remote role or a home office.
The schedule
In Console, Schedules → Create new: the cron expression 45 4 * * * in the time zone Australia/Melbourne (any time and zone will do), then Add → Task and pick the task. Leave "Don't start if still running" ticked. The schedule runs the task as saved, so the state key carries from one day to the next.
The second day: what a monitor pays for
The schedule's first run, at 04:45 on Friday 2 October 2026:
- 34 requests and 1 minute 15 seconds, against 381 requests and 4 minutes 21 seconds the day before. The job list is read in full every day, 19 pages again; a posting's own record is requested only when the posting is new or has changed, 15 of them this time.
- 22 rows saved: 14 new, 1 changed, 7 gone. The changed one had a longer title and a new posted date. A gone row carries the posting's id, link, title and when it was first seen, and its other fields are empty, so it is matched to the row saved when the posting was new.
- 354 unchanged postings skipped and not charged. The site listed 369 roles that morning: the 362, plus 14 new, less 7 gone.
| At the Free and Starter plans' price on 1 October 2026 (US$1.75 per 1,000 postings saved, US$0.005 a run) | Cost |
|---|---|
| First run: 362 postings | US$0.6385 |
| Second day: 22 postings | US$0.0435 |
| Seven mornings measured, 2–8 October: 165 postings | US$0.32375 |
| Illustration, not a measurement: 30 days at the week's average | US$1.39 |
A busier careers site changes more each day and costs more; the rate is set by how many postings are new, changed or gone, not by how many are listed.
The first week
The schedule ran every morning at 04:45 for seven days, 2 to 8 October 2026, and was then switched off. Workday's list went from 369 roles to 380: 80 postings appeared, 69 went, 9 changed and 7 came back after going. Every one of the 229 requests was answered at the first attempt.
| Morning | Listed | New | Changed | Back | Gone | Saved | Cost |
|---|---|---|---|---|---|---|---|
| Fri 2 Oct | 369 | 14 | 1 | 0 | 7 | 22 | US$0.0435 |
| Sat 3 Oct | 377 | 16 | 3 | 0 | 8 | 27 | US$0.0523 |
| Sun 4 Oct | 373 | 3 | 0 | 1 | 8 | 12 | US$0.0260 |
| Mon 5 Oct | 372 | 1 | 0 | 0 | 2 | 3 | US$0.0103 |
| Tue 6 Oct | 374 | 15 | 3 | 2 | 15 | 35 | US$0.0663 |
| Wed 7 Oct | 379 | 16 | 2 | 0 | 12 | 30 | US$0.0575 |
| Thu 8 Oct | 380 | 15 | 0 | 4 | 17 | 36 | US$0.0680 |
| Seven mornings | 369 → 380 | 80 | 9 | 7 | 69 | 165 | US$0.3238 |
The cost is the Free and Starter plans' price on 1 October 2026: US$0.005 a run and US$1.75 per 1,000 postings saved, rounded to four places. A quiet Monday cost a cent; the busiest morning, Thursday, seven cents. What sets the bill is how many postings are new, changed, back or gone, never how many are listed: the 354 to 371 unchanged postings each morning were skipped and not charged.
Into Google Sheets
Three ways, from no setup to a sheet that refreshes itself. What comes across is the same table: one row per posting, the columns of the job.v1 schema.
Once, by hand
Open the run, export its Output as CSV, and in Google Sheets use File → Import. The first run's CSV here was 362 rows by 36 columns, nested fields written with a slash, such as location/city.
A file for every run
On the task's Integrations tab, add Apify's Upload results to GDrive integration and connect a Google account. After each successful run a file lands in the Apify Uploads folder of that Drive, named and formatted as you choose (Apify's Google Drive integration page has the steps). With incremental mode on, each day's file holds that day's changes. We did not connect a Google account for this guide.
One sheet that refreshes itself
Google Sheets' IMPORTDATA can read the task's latest successful run straight from Apify's API. Put this in cell A1, with your task's ID and a token:
=IMPORTDATA("https://api.apify.com/v2/actor-tasks/YOUR_TASK_ID/runs/last/dataset/items?status=SUCCEEDED&format=csv&clean=1&flatten=company,location,salary&fields=changeType,title,company.name,location.city,location.country,workArrangement,postedAt,salary.min,salary.max,salary.currency,url&token=YOUR_TOKEN")
- Use a scoped token. Anyone who can open the sheet can read the formula, so create a token in Console that can read this one task and its runs' storage and nothing else (Apify's API integration page covers scoped tokens).
flattenhas to come withfieldsfor nested columns: asked forlocation.citywithoutflatten=location, the API returns the column empty. Tested on 1 October against this guide's first run.- With incremental mode on, the latest run holds only that day's changes, so the sheet shows today's new, changed and gone roles, each labelled in
changeType. To keep every day, copy the day's rows to a second sheet, or send each run's rows on with Make, Zapier or n8n.
The formula is Google's own function reading a documented Apify endpoint; we did not put a token into a sheet for this guide.
Run it yourself
It reads the public job list that a company's Workday careers page loads in any browser, logged out. Not affiliated with Workday or with any company whose careers site it reads. The runs quoted here are ZSnKFj1HNi0j0F5TN and the schedule's seven, 7U9ifi7Zhk1vjR2bg to 6gSZwItL2bteQlF3y.
Published 2026-10-02, updated 2026-10-09.