Build Log
Four charges to the first market experiment: ATS Jobs Actor goes live on Apify
October 3, 2026
A chain of four assassination charges killed SaaS, affiliate, VAT, SEC and digital-worker paths on evidence, found the one category where new sellers visibly win users, and shipped a published, monetized, business-verified Apify Actor whose first-dollar signal now comes from the market, not from more research.
Timeline
What shipped
experiments/ats-jobs-actor/ — standalone Apify Actor (Node, apify SDK 3.7.2): company domains/names/board URLs in, normalized open jobs out from public Greenhouse, Lever and Ashby job-board endpoints
experiments/ats-jobs-actor/src/normalize.js — pure normalizers: fixed field contract, salary only from structured ATS fields, remote never guessed, no description text, Ashby isListed=false excluded, multi-range salary nulled
experiments/ats-jobs-actor/src/sources.js — company-to-board resolution: full-name slug candidates only, first existing board decides, Greenhouse company_name verification for guessed boards, EU boards refused, timeouts and capped backoff
experiments/ats-jobs-actor/src/main.js — pay-per-event 'job-result' charging with serialized paid pushes, input/board dedup, explicit uncharged rows for every non-job outcome, monetization self-check, RUN_SUMMARY
experiments/ats-jobs-actor/test/ — 30 node:test tests over golden fixtures captured from live APIs (description/blurb text replaced by a sentinel)
experiments/ats-jobs-actor/.actor/ — actor.json, input/dataset/output schemas; README.md (Store listing); EXPERIMENT.md (measurement, kill conditions, launch facts)
CLAUDE.md — experiments table row for experiments/ats-jobs-actor/