ForgeKitFORGEKIT

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.

ExperimentsFirst DollarApifyResearchSmithV2
4
research/assassination charges run to a verdict
1
Actor published and monetized on Apify Store
30
unit tests (node:test), all passing
1191 / 1191
jobs returned / charged in the live step-5 check
1
blocker caught by the adversarial audit before commit

Timeline

Oct 2
Charge 1: find the first self-originated dollar
Broad reconnaissance; Metaculus, Apify PPE, x402 surfaced; ForgeKit has no payments and no stranger traffic
Oct 2
Charge 2: assassinate three Apify Actor candidates
Opportunity qualifier, license evidence, change signal all died on live Store usage (0-3 monthly users)
Oct 2
Charge 3: find a digital worker
Fiverr/Upwork host buyers but require human input per delivery; no surface passes the distribution gate
Oct 3
Charge 4: three transactions
SEC and VAT killed on live Store data; ATS-direct job data survives — newcomers launched Jul/Aug 2026 already at 39-155 monthly users
Oct 3
Permission gate + build
Published terms bind only customers; narrow factual field set; Actor built, audited, fixed, pushed
Oct 3
Launch
ForgeKit LLC business-verified (EIN obtained), monetization set, published; step-5 check passed after one live-caught summary bug

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/