DataSmithLab · Apify + n8n + Google Sheets

Track Company Career-Page Jobs in Google Sheets with Apify and n8n

Build a repeatable job log from selected public career pages. Validate each source response before writing rows, then use stable job IDs to keep repeat runs tidy.

A practical setup guide for hiring teams, founders, and recruiting operations.

Hiring teams often watch several company career pages at once. Listings can live on different applicant-tracking systems, and checking every board by hand makes changes easy to miss. This Apify and n8n workflow collects a bounded snapshot of public listings and stores a consistent job log in Google Sheets.

Scope: this workflow tracks selected boards. Source access, company configuration, filters, and row limits determine what each run can return; it is not a complete census of every open job.

What the workflow does

The starter reads an existing Jobs tab, starts one run of the Career Page Jobs Scraper on Apify, and waits for that run to finish. Before it writes anything, n8n checks the run status, the HEALTH and COMPANIES reports, and the dataset count. If a response is incomplete or inconsistent, the workflow stops before updating Google Sheets.

Accepted results are upserted using a stable key built from the input scope and job ID. Repeat observations update the matching row instead of creating a duplicate. The first snapshot establishes a baseline; later unseen IDs are logged with a first-seen timestamp.

Workday and other ATS boards

The Actor supports 10 public ATS platforms in one normalized schema, including Workday, Greenhouse, Lever, and Ashby. Start with a company name or enter an exact career-board URL. For Workday, use the complete myworkdayjobs.com board URL; a company name alone may not identify the right board.

Begin with one company, a small row limit, and optional filters turned off. Add companies or filters one at a time after checking the output. Missing salary or posting-date fields can exclude results under strict filters, and row limits can defer older listings to later runs.

Connect credentials safely

Import the inactive workflow, add your own Apify Header Auth credential, and connect Google Sheets with your own OAuth account. The public workflow includes no credentials or private spreadsheet ID. Create a Jobs tab with the included headers, run manually, and inspect the reports and saved rows before activating the daily schedule.

  1. Paste the supplied header row into a new Jobs tab.
  2. Import the inactive n8n starter and add your own Apify and Google credentials.
  3. Run one small snapshot and inspect HEALTH, COMPANIES, and the Sheet.
  4. Run again to check that stable IDs update without duplicate rows.
  5. Enable the daily schedule only after your manual checks pass.

What the test showed—and what it did not

In the verified Stripe demonstration, the Actor detected Greenhouse and returned a 10-job sample. Three runs each observed 10 jobs; the final Sheet contained 10 unique keys and no duplicates. The source reported 728 open jobs, so the demonstration was deliberately bounded and does not claim to list all 728. Repeat runs produced no newly observed IDs in that test window.

First-seen time is not publication time. A job missing from a later bounded snapshot is not proof that it closed. The starter retains prior rows and does not detect closed positions. Verify important openings on the employer's source page.

Try the workflow

Connect your own accounts, begin with one career board, and verify the first run before enabling a schedule.