Build1 distinct publisher3 min readUpdated
A developer normalizing seven applicant tracking systems hit the failure mode that never pages anyone: a well-formed success response containing nothing at all.
The Engineer · Build desk
Compiled by The EngineerSomething wrong?How this is made
A developer who built a job-board normalizer across seven applicant tracking systems - Greenhouse, Lever, Ashby, Workday, Workable, SmartRecruiters and Recruitee - reports that the request which breaks Workday's public search does not fail loudly [1]. Raise `limit` from 20 to 100 on the POST search endpoint and you get 200 OK, a well-formed body, and an empty `jobPostings` array, with no error, no warning and no 400 [3][4].
That is the expensive shape of wrong. According to the writeup, a naive implementation does not crash; it concludes the employer has no open roles and moves on, so a run across hundreds of tenants emits zero rows for every Workday employer while looking perfectly healthy [6]. The author says every interesting bug in the project came from an API answering 200 OK while asserting something false [2], and that this one cost an afternoon before he thought to compare `limit: 20` against `limit: 100` on the same tenant [7].
The real ceiling is 20 [5]. Paginating at 20 instead of 100 is five times the round trips, which is exactly why someone raises the number in the first place [19]. There is a second wall behind it: on large tenants, pagination stops returning new results once `offset` passes 10,000, and nothing in the response distinguishes a wall from the end of the list [8]. At 20 postings per page that is 500 requests before the data quietly stops [20]. Without an explicit cap, the loop either terminates on an empty page and under-reports or spins; the author's fix is to cap at 10,000 and record that the cap was hit [9]. His general rule is worth stealing: an ATS saying "no more results" and an ATS refusing to give you more results are identical over HTTP, so you have to decide which one you are looking at and log the decision [10].
Discovery has the same honesty problem. Greenhouse, Lever and Ashby take a single slug you can guess from a company's domain, while Workday needs three values - host, tenant and site, as in `nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite` [11]. The `wd5` is whichever Workday cluster the customer landed on and the site name is free text the customer chose, with no registry and no lookup API to enumerate [12]. Six of the seven systems support auto-discovery from a domain; Workday does not, so the author has users paste the careers URL, parses it, and left Workday out of automatic discovery rather than ship a function that misses every Workday employer [13].
Absence lies elsewhere too. Ashby's public board endpoint returns `title`, `location`, `employmentType` and `descriptionHtml` with no compensation field at all - not null, absent - which reads like data that does not exist [14]. Add `includeCompensation=true` and every posting carries a compensation object with tier summaries, currency codes and min/max values [15]. On the board tested, 131 of 137 postings had compensation data the default response omits entirely [16], about 96% of the board [21].
The audit that caught the rest was internal: 30% of output rows had `companyName: null`, and the nulls were 100% of the rows from specific sources [17]. Ashby's response has two top-level keys, `jobs` and `apiVersion`; Lever returns a bare array with no envelope; neither carries the employer's display name at any level [18].
Two things to watch in your own pipeline. First, whether a per-source zero-row result raises an alert instead of being written as a value - that is the only defence against a silent 200. Second, whether your code comments about upstream fields were ever verified; the author's own comment claiming Ashby exposed `organizationName` on some boards was a guess, and wrong [22].
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
The author built a job-board normalizer across seven applicant tracking systems: Greenhouse, Lever, Ashby, Workday, Workable, SmartRecruiters and Recruitee.
Every interesting bug in the project came from an API that answered 200 OK while telling the client something false.
Workday's job search is a POST, not a GET: POST https://${host}/wday/cxs/${tenant}/${site}/jobs with a JSON body of appliedFacets, limit, offset and searchText.
Setting limit to 100 returns 200 OK and a well-formed response body in which jobPostings is an empty array; no error, no warning, no 400.
Workday's real limit ceiling is 20; higher values return an empty array.
A naive implementation does not crash on the empty array; it concludes the company has no open roles and moves on, so a run across hundreds of tenants silently emits zero rows for every Workday employer while the run looks healthy.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Reproducible in principle, unreplicated in practice
The core claims are stated with enough specificity to be checked by anyone with curl and no account: an exact POST path and JSON body, a named ceiling of 20, an offset wall at 10,000, an opt-in query parameter, and counted samples (131 of 137 postings; 30% null rows). That is well above anecdote. It is capped by structural limits: one publisher, one author, no vendor documentation or statement, no API version or observation dates, no tenant list, and no independent replication of the limit-20 behaviour.
One developer's project, no third-party uptake
The only usage evidence is the author's own normalizer: his output audit, his measured Ashby board, and his shipped decision to exclude Workday from auto-discovery. The underlying APIs belong to widely deployed ATS platforms, but nothing in the cluster shows other teams encountering, confirming or adopting these workarounds, and no download, deployment or customer numbers appear.
Slightly understated for its evidentiary weight
The headline claim ('ask for 100 jobs and you get zero, with no error') is exactly what the body demonstrates, and the piece repeatedly narrows rather than inflates: it flags what cannot be automated, discloses its own wrong code comment, and attributes low salary coverage to pay-transparency law rather than to its parser. The operational consequence — a silently empty run across every Workday employer — is arguably more serious than the low-key framing suggests, so claims sit marginally below the evidence rather than above it.
Personal-project promotion, no vendor stake evident
The author writes about a tool he built and mentions its user-facing behaviour (users paste a careers URL), so there is a mild self-promotional incentive on a developer-community platform where such posts build reputation. Nothing in the cluster indicates sponsorship, vendor affiliation, paid placement, or a commercial relationship with Workday, Ashby, Lever or the other ATS; the findings are unflattering to the vendors, which cuts against a vendor-aligned incentive.
Moderate: checkable specifics, single unreplicated source
Confidence is held mid-range because the claims are narrow, technical and falsifiable, and internally consistent with the author's own remediations — but the cluster contains exactly one item from one publisher, all numbers are self-reported, undocumented API behaviour like a limit ceiling can change without notice, and no vendor or second practitioner corroborates any figure.
product
The shortage is the schedule: AI capacity relief is not a 2027 line item1 distinct publisher
build
China's accelerator swap makes Cambricon supply, not export policy, your ship-date risk1 distinct publisher
product
Nebius funds $4.5bn of AI capacity on terms that pay lenders mostly in stock2 distinct publishers
build
NVIDIA put a number on agent skills: 300+ verified, two harnesses, baselines under 50/1001 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 18, 2026