A useful hiring dashboard does not always need the job titles, company names and source identifiers behind every row. An aggregate can support a narrow planning question while deliberately withholding small groups and raw identities. The boundary needs to be described precisely: suppressing fields in the output does not erase the input submitted to the platform.
Job Board Market Demand Analyzer accepts buyer-supplied normalized observations. It does not collect a new job market sample. Its closed input contract and minimum group size make the resulting report more predictable for downstream consumers.
Declare the sample scope explicitly
This example retains three observations from the installed fictional synthetic prefill. The sample label is intentional. These rows demonstrate the contract and do not establish demand in Tbilisi or any other labor market. The real analysis route can bill for a useful report even when the supplied observations are synthetic.
{
"schemaVersion": "1.0",
"analysisId": "synthetic-engineering-demand-sample",
"sampleCompleteness": "BOUNDED_OR_PARTIAL_SAMPLE",
"observations": [
{
"sourceBoard": "synthetic-job-board",
"sourceJobId": "synthetic-001",
"title": "backend engineer",
"company": "synthetic company alpha",
"location": "tbilisi",
"category": "engineering",
"employmentType": "full-time",
"remote": false,
"salaryMin": 3000,
"salaryMax": 4500,
"salaryCurrency": "GEL",
"salaryPeriod": "month",
"postedAt": "2026-08-25T09:00:00.000Z"
},
{
"sourceBoard": "synthetic-job-board",
"sourceJobId": "synthetic-002",
"title": "data engineer",
"company": "synthetic company beta",
"location": "tbilisi",
"category": "engineering",
"employmentType": "full-time",
"remote": true,
"salaryMin": 3500,
"salaryMax": 5000,
"salaryCurrency": "GEL",
"salaryPeriod": "month",
"postedAt": "2026-08-26T09:00:00.000Z"
},
{
"sourceBoard": "synthetic-job-board",
"sourceJobId": "synthetic-003",
"title": "platform engineer",
"company": "synthetic company gamma",
"location": "tbilisi",
"category": "engineering",
"employmentType": "full-time",
"remote": false,
"salaryMin": 4000,
"salaryMax": 5500,
"salaryCurrency": "GEL",
"salaryPeriod": "month",
"postedAt": "2026-08-27T09:00:00.000Z"
}
]
}
sampleCompleteness travels with the report. A bounded export cannot become a complete market simply because the transformation succeeded. Retain the sampling method and collection period in your surrounding dataset, and keep that description beside every chart built from the aggregate.
Validate the whole batch before summarizing
The installed contract accepts 3–500 observations and requires sourceBoard, sourceJobId, title, location and an exact UTC postedAt. Duplicate normalized source-board/job-ID pairs reject the input. Unknown fields and incomplete salary tuples also reject it rather than silently changing the measurement basis.
Salary evidence needs all four fields: minimum, maximum, currency and period. A monthly GEL range and an annual EUR range are different groups; the Actor does not convert or infer their comparability. Do that work separately with an explicit policy if the eventual report requires a common unit.
Understand what the privacy threshold does
Exact normalized labels appear in topGroups only when at least three observations contribute. Salary distributions also need at least three complete ranges in the same currency-period group. A missing group can therefore mean it was withheld by the threshold, not that no such jobs existed in the input.
Raw titles and company names participate in validation and fingerprinting rather than being returned as raw report rows. Source job IDs support validation, deduplication and fingerprinting. The report still describes a particular submitted sample, and aggregate suppression alone should not be presented as a formal anonymity guarantee.
Separate output minimization from input retention
The original INPUT remains subject to the Apify account's storage and retention settings. Sending unnecessary personal or confidential fields and assuming they disappear because the Dataset is aggregated would misunderstand the product boundary. Prepare only the normalized job facts the contract needs before submitting the batch.
For a local fixture, compare three same-location observations with a batch split into groups of two and one. Verify which labels are exported and which are withheld. Add a duplicate source identity and confirm that validation rejects the batch. Finally, inspect the report for raw job identifiers before wiring it into a shared dashboard. Those checks validate the data contract; they do not prove that the original sample represents the wider market.
Price and verification scope
FREE-tier event prices read on 24 October 2026 are $0.006 for apify-actor-start and $0.019 for result-found. Start-event count can depend on allocated memory; other account tiers have their own rates. Check the listing's current billable unit and the platform's run spending limit before executing an example. Input row or result caps are separate from Max total charge. A free diagnostic does not necessarily remove the platform start charge.
This article is pinned to public latest build 0.1.6 (TYZPCP9rEG1Gb1Uyl) at the recorded read time. Source, input and pricing were read from Apify; no new cloud build or run was started. The supplied example and any synthetic local checks do not establish current source facts, cloud delivery or customer outcomes.
Inspect the Actor's current contract and pricing.
AI-assisted writing. Source contracts and verification limits are documented above.
Top comments (0)