Publishing occurrence records to GBIF means mapping your columns to Darwin Core,
building an archive, and usually learning what was wrong only after it has been ingested.
We map what we can confirm from your values, build the archive, and list what we refused to
interpret — before you submit.
Drop your file hereor click to choose · CSV, TSV, Excel, JSON, PDF, or zip
Free until 1 September · no account · your records are
discarded after the check — we keep the column mapping, never the rows. See a real sample report — a 5,271-record government waterfowl
survey, with the archive, the questions and the findings, if you would rather look before
uploading.
How this differs from GBIF's validator
GBIF's validator checks a Darwin Core Archive you have already built. It reports
what is wrong with it; it does not map your columns and it does not produce the archive. If
you do not have an archive yet, there is nothing for it to validate.
We start from the file you actually have — a spreadsheet, a database export, a workbook —
confirm each column against its own values rather than its header, and refuse anything
genuinely ambiguous instead of guessing. A column named latitude holding
longitudes is a real failure mode, and a name match cannot see it.
And the two reports do not overlap. We tested a set of 5,064 records that had
already been published to GBIF — so it had already passed their pipeline. GBIF's own
vocabulary flagged nothing on it. Our audit returned 4,268 findings, and only 31.7% of the
records came back clean. Not because GBIF is wrong: their validator answers “will this
load”, and there is no code in their vocabulary for most of what we report. The sample
report below is the same story on a different file — a well-made government survey where
everything maps, the archive builds, and we still had 503 records to tell you about.
We do not score you
This field is full of invented certifications, self-declared badges and scores whose
methodology nobody publishes. We do not issue one. There is no grade, no
rating and no seal — because a grade is a scale we would have to invent, and you would have no
way to check it.
What you get instead is factual: every finding names the rule it applied and the source that
rule comes from, findings in the receiving body’s own vocabulary are counted separately from
ours and labelled as ours, and anything we could not settle from your values is refused rather
than guessed. A finding is a statement about your record, never about the world.
How we recommend using it
Read what we refused first. For every column we could not interpret you
get one line naming the column, what we found in its values, and why we stopped — for
example “sex: nominated, but only 5 of 8 values are in the vocabulary — refused”.
Expect a handful of lines, not hundreds: each one is a decision about a whole column.
Every refusal carries a code — all 63, with what each one
means.
Answer the questions we ask. We only ask when two columns are genuinely
ambiguous and only you can settle it. Your answers are applied to your own results.
Run the archive through GBIF's validator before you publish. We do not
replace that step and do not claim to.
We could not settle everything on our own.Answering a few questions about your columns lets us re-run your file
and hand back a more complete archive. It is optional, it is free either way, and your
answers are applied to your own data.
Summary
Every column in your file
Column
Status
Darwin Core term
Why
The data-quality audit
Severity
Whose check
Records
Finding
Markdown you can attach to a report or paste into Word.
It leads with what we refused to interpret, then what we did not check, then the
findings — each labelled by whether it rests on a proof, on evidence, or on
GBIF's own vocabulary.
Get your Darwin Core Archive
A .zip containing occurrence.txt,
meta.xml and eml.xml — the format GBIF ingests, unchanged.
Your file is sent once more to build the archive and is discarded again
the moment it is returned. We keep nothing between these two steps — which is why the
download re-sends the file rather than fetching one we stored.