Darwin Core · dwc:occurrenceID
What you are seeing Your dataset shows fewer records than the file you uploaded.
occurrenceID has to be unique within your dataset and stable across republication. When two rows share one, they are not both kept: the later row overwrites the earlier one, and your published record count quietly comes out lower than your file's row count. Nothing errors, because from the ingest's point of view you sent the same record twice.
This is a file-level problem, which is why a per-record validator structurally cannot find it. Every individual row is valid. The defect only exists in the relationship between rows, and you have to hold the whole file at once to see it. We report it as FS_DUPLICATE_OCCURRENCE_ID, and it is one of the checks that exists precisely because the standard's own test suite works one record at a time.
The stability half matters as much as the uniqueness half. If you regenerate your identifiers next year — row numbers, a fresh UUID per export, a hash of a field you later corrected — every record in your dataset looks new. Citations pointing at the old identifiers break, and the same observation is served twice under two identities.
A good occurrenceID is derived from something that will not change: a museum catalogue number with its institution prefix, or a survey code plus site plus date plus a within-visit counter. A bad one is the spreadsheet row number.
occurrenceID values and compare against your row count. Any gap is the number of records you are about to lose.ABC-001 and abc-001 are two identifiers to a computer and one to you.We hold the whole file, so we can see what a per-record check cannot. Drop it in and we will report duplicate identifiers by count, along with everything else we found and everything we refused to interpret. Free until 1 September, no account, and your records are discarded after the check — we keep the column mapping, never the rows.
Check the file you have →We audited a file GBIF had already accepted and served. Their validator answers will this load; these had loaded. Figures read from ops/data.json, not typed into this page. We do not issue a rating of any kind — every finding names the rule it applied and where that rule comes from.