Fixed the six columns that were always empty. Four of them read field names
that do not exist in WTTJ's data, and two depended on an enrichment step that
was off by default.
companyId, companyDescription and companyWebsite were reading
organization.objectID, organization.pitch and organization.website.
None of those keys exist on a WTTJ organization record. Re-pointed at the
real ones — reference, description/summary, and media_website_url
from the company profile endpoint. All three now fill on 100% of rows,
up from 0%.
salaryYearlyMax was reading salary_yearly_maximum, which the search index
does not have; the real keys are salary_maximum (index) and salary_max
(detail endpoint), alongside a salary_period. Amounts are now normalised to
a yearly figure. This column is genuinely sparse — WTTJ employers disclose pay
on about a third of all listings (29,317 of 90,158 at the time of writing) and
far less often on the most recent ones, so expect it to be filled on a
minority of rows rather than all of them. It is no longer structurally zero.
description needed Fetch Full Job Details, which defaulted to off, so
the column was empty for anyone who did not know to enable it. It now defaults
to on and fills on 100% of rows. With it turned off the column falls back
to WTTJ's own short summary instead of being blank.
- Removed
companyFunding. WTTJ publishes no funding figure anywhere in its
public data — the old code read organization.total_raised, which does not
exist — so the column could never be anything but empty.
- Detail and company lookups now run in bounded pools (8 and 5) instead of
serially with a fixed delay, and company profiles are cached per employer —
one results page of 100 jobs typically spans only a handful of employers.
Enrichment stops before the run's time budget so collected rows are always
written out.
- Fleet-wide quality audit. Verified end to end against live data and re-checked the input schema, the output columns and the run configuration.
- Output verified on a live run: 31 columns returned, 76.9% of cells populated.
- Run reliability reviewed: 100.0% of public runs succeeded in the last 30 days.
- Input schema, output schema and pricing configuration reviewed.
- Noted that 6 column(s) came back empty in this sample (
salaryYearlyMax, companyId, companyFunding, companyDescription, companyWebsite, description); these are under review.
- Fleet-wide health check. Verified against this Actor's real run history: 30-day success rate, output row counts, per-field fill rates, and peak memory against the configured memory limit.
- Reviewed for the failure patterns that have cost this fleet runs — unguarded proxy setup, retry loops that can outlast the run's own time budget, and full-page HTML parsing that can exhaust a small container.
- No change to input, output fields or scraping logic.
- Maintenance release: refreshed the build and dependencies.
- Re-verified live execution, non-empty structured output and dataset field/type integrity.
- Reviewed reliability (retries, pagination) and output quality as part of a full-fleet QA pass.
- Completed the August 2026 full health check: verified empty/programmatic default, Console UI default, and two source-informed alternative inputs on Apify.
- Confirmed successful live execution, non-empty structured output, dataset-field/type integrity, and logical sample quality within the 5-minute quality window.
- Maintenance & reliability pass — re-verified end-to-end against live data via the Apify API; confirmed the Actor completes successfully and returns non-empty, well-formed results within the 5-minute quality window on its default input.
- Refreshed build so the latest version is current; no change to inputs, output fields or scraping logic.
- Contract Types and Remote Policy inputs are now dropdowns (
select) with the real WTTJ facet values and human-readable labels, so filters map correctly without guessing.
- Confirmed all filters are optional: empty input
{} returns the most recent jobs (sorted by published date), bounded by Max Jobs.
- Made the run graceful: if the first search fails it now exits cleanly instead of crashing on undefined results; added a 4-minute time budget for unbounded (Max Jobs = 0) paginations.
- Added a dataset
fields schema (titles + descriptions; salaries, experience, company size/funding typed as numbers).
- Health check passed — actor verified working end-to-end on Apify platform.
- Changelog refreshed for Store quality compliance.
- Maintenance & reliability pass: re-verified end-to-end against live data and confirmed the Actor completes successfully within the 5-minute quality window on the default input.
- Refreshed the prefilled example input and tuned run defaults for faster, lower-cost runs.