Methodology · v1.0
A trend is only useful when its source, timestamp, and limits travel with it.
This page defines the collection, publication, and metric rules for the pilot archive. It will be versioned as additional ATS adapters and derived metrics become publishable.
Collection scope
Posted Band collects only public, unauthenticated JSON endpoints operated for employer job boards by Greenhouse, Lever, and Ashby. A configured endpoint must return a valid provider-shaped response before it enters the source registry.
Sources requiring login, circumventing technical controls, or depending on LinkedIn or Indeed are excluded. The current pilot cohort includes multiple boards from every supported provider so the same quality and publication rules are exercised across Greenhouse, Lever, and Ashby.
What a snapshot preserves
Each raw snapshot records the company, ATS provider, requested endpoint, UTC collection time, HTTP metadata, a SHA-256 checksum, and the source payload. Raw records are stored in a local SQLite database that is excluded from Git; published pages contain only the fields needed to explain an observation.
The private ingestion record retains the source job ID, title, location, department, office, public URL, provider update time when present, and original description HTML for later extraction. Published artifacts omit the complete description HTML and expose only the fields needed for source-backed observations.
Hiring velocity
The primary measure is active posting count at the company-day level. Net change is the latest active posting count minus the count in a dated comparison snapshot. A 7, 30, or 90 day comparison is published only when a successful snapshot exists on the exact start boundary.
A posting first appearing between consecutive successful daily snapshots is counted as appeared. A posting is counted as confirmed closed only after it is absent from two consecutive successful daily snapshots. The first snapshot and the first snapshot after a collection gap show unknown event counts rather than zero. These measures describe advertised hiring demand, not completed hires or headcount growth.
The company-page chart plots only successful UTC snapshot days and positions observations by their actual calendar dates. A line connects consecutive UTC dates only; collection gaps break the line rather than implying an interpolated path. The chart is a visual aid, while the adjacent HTML table remains the exact, crawlable record of dates and counts.
Department and location changes compare employer-provided labels on those same exact start and end snapshots. Each label reports its start count, end count, and difference; unchanged labels are omitted. A posting with multiple labels can contribute to more than one row, so dimension counts do not necessarily sum to the company total. Label movement describes the source taxonomy as published and does not prove an organizational decision.
Posted salary observations
Compensation is in scope only when it appears in the employer-published posting. The source text, currency, interval, lower and upper bounds, posting ID, and observation time are preserved together. Missing bounds remain missing; Posted Band does not infer a midpoint or market rate and present it as disclosed pay.
Salary disclosure rate is defined as postings with a parseable employer-published salary observation divided by active postings in the same company-day snapshot. Structured Greenhouse pay ranges, Lever salary ranges, and Ashby compensation tiers take precedence. A conservative description parser is used only when structured compensation is absent; it requires an explicit currency and pay interval and does not infer either one.
Department and location disclosure breakdowns use the latest successful snapshot. For each employer-provided label, the numerator is the number of distinct labeled postings with at least one parseable salary observation and the denominator is all active postings carrying that label. Duplicate labels within one posting count once; a posting with multiple labels can enter multiple rows. Rows are ranked by active labeled postings, limited to eight per dimension, and are not normalized across employer taxonomies.
Source-native salary range distributions group the latest successful snapshot by the employer-stated currency and pay interval. Each group reports distinct postings, range observations, fully bounded observations, and the minimum, median, and maximum of the stated lower and upper bounds separately. The median uses the range-observation grain: one posting can contribute multiple observations when the employer publishes separate location or compensation tiers. Posted Band does not apply foreign-exchange conversion, annualization, or cross-group ranking in this version.
Salary disclosure movement uses the same exact 7, 30, or 90 day boundaries as hiring velocity. Each comparison keeps the disclosed posting count, active posting count, disclosure rate, and percentage-point change at both ends. Cross-company reports divide the cohort's combined disclosed postings by its combined active postings; they do not average company percentages.
A salary range change is published only when the same source job ID has one uniquely identifiable range for the same currency, pay interval, location scope, and evidence type on two consecutive successful UTC snapshot days. If collection has a date gap, a posting has multiple ranges under the same matching key, or the evidence switches between structured data and description text, Posted Band does not claim a change. Each published change retains both source excerpts and observation times.
Freshness, failures, and revisions
Collection currently runs through an explicit local command. Every successful HTTP response is inserted into SQLite before provider parsing; normalized postings are attached only after parsing and before the quality gate. Schema changes and quality-rejected responses therefore remain available for diagnosis and parser replay. Identical same-company, same-day content is deduplicated by checksum, while a changed response is retained as another immutable snapshot. Failed or quality-rejected sources are recorded on the collection run and are never converted into a zero-posting day.
A separate publish command selects only successful snapshots and creates a reviewed JSON artifact. Next.js imports that artifact at build time; visitor requests never contact an ATS or the local database. Public pages show the latest successful collection time and source. Material corrections will update the affected observation and methodology notes rather than rewriting history without explanation.
Publication and aggregation gates
A reachable endpoint is not enough for an indexed company page. A page needs a latest successful collection no more than 48 hours old, at least 14 calendar days and 10 successful snapshot days of coverage, plus either at least 5 currently active roles or 10 distinct roles observed in the latest 30 days. It also needs a named source and at least one source-backed exact 7, 30, or 90-day comparison.
The company directory becomes indexable only after at least 3 companies independently pass those gates. A hiring pulse report requires at least 3 eligible companies sharing the same exact 7-day boundary. Until those gates open, the directory or report index remains a noindex review preview and report detail routes are not published.
Function and location detail pages are derived only from the latest published report's shared exact window. Labels must match the employer-provided text exactly; Posted Band does not merge case, synonyms, cities, or job families. One label page requires non-zero changes from at least 3 companies and at least 10 combined labeled postings at both the start and end boundaries. Companies with unchanged or absent labels are omitted rather than treated as zero, and no more than 20 pages per dimension are published from one artifact.
Pages below their applicable gate remain noindex, stay out of the sitemap, and are not presented as trend evidence. Publication is triggered by reviewed data, not by a calendar deadline or backfilled history.
Last reviewed: 2026-08-07 · Methodology version: 1.0
Metric dictionary · v1.1
These are the canonical public definitions used to interpret Posted Band tables, charts, reports, structured data, and machine-readable summaries. A label names a source observation; it does not widen the claim beyond the grain and boundary shown here.
Collection and coverage
Defines when a company-day exists in the public artifact and how cross-company collection completeness is reported.
Hiring activity
Defines source-observed posting counts and exact-boundary movement without treating advertised demand as completed hiring.
Posted salary evidence
Defines employer-published compensation evidence, disclosure rates, and source-native range summaries without estimation or normalization.
Last reviewed: 2026-08-07 · Metric dictionary version: 1.1