Every job data provider leads with how many postings they have. It is the easiest number to inflate and the least useful to compare, and inflating it does not require anyone to lie. Two mechanics do most of the work.
Reposts. A role that stays open goes up again every few weeks until it is filled. Count each repost as a new posting and one open position becomes five or six records over a quarter. Hiring looks busier than it is, and a "new job" alert fires on a vacancy you already saw.
The same posting collected from several sources. One role usually appears on the company's careers page, on its ATS, and on the two or three job boards that syndicated it. A provider who crawls all of those and does not match them back to a single job counts it three or four times. This is the bigger of the two, and the harder one to spot from the outside, because every duplicate is a genuine posting on a genuine site.
Put together, two providers describing the same labour market can differ by 3x or more, and the larger number often describes the more duplicated database rather than the better coverage. If you are billed per record, you also pay for every copy.
So before you compare any two totals, ask both providers the same question: how do you deduplicate, across reposts and across sources? A provider who has thought about it will answer precisely. For our part, we keep the first posting and ignore a repost of the same title from the same company within 30 days, which makes our totals smaller than providers who count every copy. Smaller, in this one case, is the point.
With that settled, four things tell you far more than the total. Ask any provider for all of them, and read them in this order.
1. The data dictionary
The list of fields, their types, and what each one means.
Ask for it first, because it is a cheap test with a lot of signal: a provider whose schema is stable can send you one the same day. Then check it covers the things your pipeline depends on, especially a company identifier you can actually join on. A company name string is not one: "Walmart", "Walmart #2271" and "Walmart Canada" are three strings and one employer. Look for a domain, a LinkedIn URL, or a stable ID.
Ours are published per dataset in the datasets docs, and per file in the app.
2. Counts per source
The breakdown of the data by where it was collected: which job boards, which ATS platforms, in what proportion.
Two things to read from it. Concentration: if most of the data comes from one place, a single blocked scraper is your outage. Fit: if you sell to software companies, you want Workday, Greenhouse, iCIMS and Ashby in there, because a dataset that is mostly national job boards can be huge and still miss your buyers entirely.
One caveat worth knowing. In most job datasets this field records where the provider saw a posting first, not everywhere it appeared, so it describes their collection rather than any platform's real share. Good for judging coverage, wrong for building segments on.
3. Fill rate
How often each field is actually populated. A field existing in the dictionary tells you nothing about how often it has a value.
You can compute it yourself from any file they send you, in one line:
import pandas as pd
df = pd.read_parquet('sample.parquet')
print((df.notna().mean() * 100).round(1).sort_values().to_string())Read the top of that list first. The sparsest fields are the ones that break the feature you have not built yet. For reference, ours over a full day of 415,287 postings: seniority 100%, description 99.9%, country 99.8%, technologies 93.7%, location 93.5%, salary 17.7%.
Salary at 17.7% is what any honest provider will report, because most postings do not state one. If someone quotes you 80%, ask whether that is inferred, or measured only over postings that already had a salary.
4. A sample
Actual records, so you can see what the data looks like rather than what it is described as.
This is where you find the things a dictionary cannot tell you: whether descriptions arrive as clean text, raw HTML or truncated snippets, whether locations are strings or structured objects, whether salaries are parsed numbers or free text like "competitive". Those details decide how much parsing work lands on your side.
Ask how the rows were selected, too. A sample sorted by anything is a biased sample: sorted by date you get one moment of one day, sorted by completeness you get their best records. Random beats sorted.
Getting all four
Samples and data dictionaries are free in the app, per dataset and per file, with a free account and no commitment. Ask us for the source breakdown or a fill rate on any field and we will run it over the full dataset.
We also publish what our data does not cover, which is worth reading before you design any evaluation. It is a fair question to put to every provider on your list.

