AI disclosure
Some fields in this ledger are produced by a model rather than taken from the posting. Every row tells you which, field by field, so you never have to guess where a value came from.
Field by field
| Field | Where the value comes from | Marked as |
|---|---|---|
title | Taken from the posting, unchanged. | always published |
company | Taken from the posting. The display name is tidied, never invented. | always published |
location | Taken from the posting. | always published |
employment_type | Taken from the posting when the employer states it. | published or absent |
posted_at | Taken from the posting or the source feed. | published or absent |
description | The employer's own text, unchanged. | published or absent |
apply_url | The employer's own link. Never rewritten, never proxied. | always published |
category | Always ours. A model reads the title and assigns one of a fixed set of families. | always inferred |
seniority | Always ours. A model reads the title and assigns a level. | always inferred |
remote | Published when the employer says so. Inferred when we conclude it from the text. | either — check the row |
salary | Published when the posting carries structured pay. Inferred when we parse it out of prose. | either — check the row |
source_type | Published when the source declares it. Inferred otherwise. | either — check the row |
How to check any single row
- Every job object carries a field_sources block with one entry per field, valued published, inferred or absent. It is on every endpoint that returns a job, and its shape is fixed — a field that gains provenance later will not change the meaning of the ones already there.
- published means the value came out of the posting. inferred means we produced it. absent means there is no value — deliberately distinct from inferred, so an empty field can never be mistaken for a confident guess.
- You do not have to take this page's word for any of it. Ask for a row and read the block.
Which models
- Categories and seniority: mistral-small-latest, run against Mistral's own API. Rows the first pass is not confident about are re-run against @cf/openai/gpt-oss-120b on Cloudflare Workers AI.
- Company display names: the same two, in the same order, with claude-sonnet-5 as a third pass for the residue neither of the first two could resolve.
- Nothing else in the ledger is model-generated. There is no generated description text, no generated salary figure, no generated employer, no generated apply link.
What we never send to a model
- No candidate data — we do not hold any. There are no applicants, no CVs, no profiles and no accounts for jobseekers on this platform. There is nothing of that kind for us to send.
- No customer data. Your account, your API key, your queries and your usage are never used as model input, never used to train anything, and never shared with a model vendor.
- What is sent is the text of a public job posting and a company name — the same words the employer published on their own careers page.
No decisions are made about people
- This service classifies job postings. It does not score, rank, filter, match or evaluate any person, and it never sees one.
- Because of that there is no automated decision-making producing legal or similarly significant effects on anyone within the meaning of art. 22 GDPR, and this is not an AI system placed on the market for recruitment or worker management under the EU AI Act.
- If you build something that does evaluate people, that obligation is yours as its provider or deployer — and it is exactly why the per-field markers are in the response. Building on inferred fields without knowing they are inferred is the failure mode this exists to prevent.
Where it is weakest, stated plainly
- category and seniority are always a machine's opinion of a job title. On a clear title they are dependable; on a vague or invented one they are a guess, and the marker says inferred either way because we cannot tell you which case you have.
- An inferred salary was parsed out of prose and can misread a range, a currency or a period.
- Company display names are enriched from the raw tenant identifier the source system gave us. Where that enrichment has not yet run, you will see the raw identifier rather than a name — the value is honest but ugly, and we would rather ship it ugly than invent one.
Getting something corrected
- If a field is wrong, tell us and we will fix the row — say so through the contact form under Corrections & takedowns.
- If you are the employer and want your site out of the ledger entirely, use Remove my website; it is self-service and takes effect without us intervening.
- Corrections are made against the source posting. We will not overwrite a published value with a guess to make a row look tidier.
More on how the ledger is built: Provenance · Data coverage · Privacy · Cookies