Skip to main content
A lightweight shelter data governance standard: taxonomy, ownership matrix and export-ready mappings

A lightweight shelter data governance standard: taxonomy, ownership matrix and export-ready mappings

Because your intake numbers shouldn't change depending on who exported the report

Two people at the same shelter can pull "live release rate" for the same month and get two different numbers. It happens more than anyone likes to admit. One counts transfers-out as saved, the other doesn't. One excludes owner-requested euthanasia, the other lumps it in. Neither is lying. They just never agreed on what the field means.

That gap — between what a field is called and what it actually represents — is where most small-shelter reporting quietly falls apart. And it gets worse the moment you have to report to a municipality, a grantor, or a national database that expects your numbers to line up with a definition you've never actually written down.

This is a governance problem, not a software problem. You can have the fanciest shelter management system in the world and still produce garbage exports if three staff members interpret "stray hold expired" three different ways. So this piece lays out a genuinely lightweight standard — small enough to fit on three pages — covering field definitions, who owns what, and how your data maps cleanly to the CSV formats municipalities and reporting bodies actually ask for.

Why the numbers drift in the first place

The drift almost never comes from bad intentions. It comes from the fact that shelter data gets entered by a rotating cast: front-desk staff, volunteers, foster coordinators, medical, whoever happened to be at the computer at 9pm. Each of them carries a slightly different mental model of what a status means.

A typical example: a dog comes in as a stray, gets adopted out, comes back two weeks later. Is that a new intake or a return? If your system treats it as a fresh intake, your total intake number inflates and your return rate hides. If it's a return, your live release rate for the original adoption might need adjusting. There's no universally "correct" answer — but there is a consistent one, and the whole point of governance is picking one and holding to it.

The second source of drift is silent field reuse. Someone needs to track a piece of information the system doesn't have a field for — say, whether an animal came from a hoarding case — so they stuff it into the "notes" field, or worse, into an unused field labeled something else entirely. Six months later nobody remembers that "Source Location 2" secretly means "hoarding flag." Your data is technically complete and functionally useless.

What breaks at scale is coordination. At 40 animals a month with two people entering data, informal agreement works fine because those two people talk. At 300 a month across five roles and a dozen volunteers, informal agreement is a myth. Nobody's in the room where the definition gets decided because there is no room. This is exactly the same fragility that shows up when intake forms aren't standardized — worth reading alongside the minimum shelter intake data set, because governance is basically what keeps that clean intake data clean after the animal moves through your system.

The three-page standard, and why three pages

The temptation is to write a 40-page data dictionary. Don't. Nobody reads it, nobody updates it, and it dies in a shared drive within a quarter. The version that actually survives is short enough that a new coordinator can read it during their first week and reference it without opening a second tab.

  1. Page one

    field definitions (the taxonomy). Every field that feeds a report, defined in one or two plain sentences, plus what it explicitly excludes.

  2. Page two

    the role-based ownership matrix. Who enters it, who can change it, who's accountable for it being right.

  3. Page three

    the export checklist and CSV mappings. How your internal fields translate to the columns each external report expects.

That's it. If it grows past three pages, something on it probably isn't essential to reporting and belongs in a training doc instead.

Page one: field definitions that actually prevent arguments

A good definition does two jobs. It says what the field is, and — this is the part everyone skips — what it is not. The exclusions are where drift lives.

Here's the shape of it. You don't need every field, just the ones that touch a report or a decision:

FieldMeansExplicitly excludes
Intake (new)First-time arrival, or a return after 30+ days outSame-animal returns within 30 days
ReturnAdopted animal back within 30 days of leavingTransfers back from partner orgs
Live outcomeAdoption, return-to-owner, transfer-out to placement partnerOwner-requested euthanasia, death in care
Stray hold expiredHold period elapsed with no owner claimAnimals still within the legal hold window
Length of stayDays from intake date to outcome dateTime in foster if foster counts as still in-shelter
Behavioral holdFlagged for evaluation, not yet cleared for adoptionMedical-only holds

The 30-day return window is an example, not gospel — the point is that you pick a number and write it down. What shows up across a lot of small operations is that the definition itself matters less than the fact that it exists and everyone entering data can see it. Two shelters can define "return" differently and both be fine internally. Problems only start when one shelter defines it two different ways.

One thing worth sitting with: the fields that cause the most reporting pain are almost never the obvious ones like "adoption." They're the edge fields — owner-requested euthanasia, died-in-care, transferred-out-then-back, foster-to-adopt conversions. Those live in the seams between clean categories, and seams are exactly where informal interpretation creeps in.

Page two: the ownership matrix, so "someone should fix that" becomes "you fix that"

Definitions without owners rot. If everyone is responsible for data quality, no one is. The ownership matrix assigns three distinct roles per field group, and keeping them distinct is the whole trick:

  1. Enters — the role that puts data in
  2. Corrects — the role allowed to change it after the fact
  3. Owns — the role accountable for that field being accurate on reports

These are not the same person, and collapsing them is the classic mistake. When the person entering data is also the only one allowed to correct it and also the one accountable for it, errors become invisible — they'd have to catch their own mistakes, which is exactly what nobody does well.

A workable matrix for a small shelter:

Field groupEntersCorrectsOwns
Intake detailsFront desk / intake staffIntake leadOperations coordinator
Medical statusMedical / vet techMedical leadMedical lead
Behavioral holdsBehavior staffBehavior leadBehavior lead
OutcomesAdoptions / front deskOperations coordinatorOperations coordinator
Foster statusFoster coordinatorFoster coordinatorOperations coordinator

Notice outcomes are entered by one role but owned by another. That's deliberate. Outcome data drives your public live release rate and your grant reports, so accountability sits above the entry point. The person keying in an adoption at the desk shouldn't be the last line of defense on your headline metric.

Shelters that assign ownership by field group rather than by person survive staff turnover far better. When your operations coordinator leaves, the role still owns outcomes — you're onboarding someone into a defined seat, not reconstructing who knew what. This connects directly to how you decide which numbers even deserve this level of care; the prioritized KPI dashboard is a useful companion here, because you should be governing the fields that trigger real decisions first and worrying about the rest later.

Page three: export checklist and CSV mappings

This is the page that saves you the most time and the most embarrassment. Every external report — municipal animal control stats, a grantor's template, a national data-sharing standard — wants specific columns in a specific order with specific value formats. Your internal field names almost never match theirs one-to-one.

Your internal fieldMunicipal CSV columnValue format expected
Intake datedate_inYYYY-MM-DD
Intake typeintake_typeSTRAY / OWNERSUR / TRANSFERIN
Speciesanimal_typeDOG / CAT / OTHER
Outcomeoutcome_typeADOPTION / RTO / TRANSFER / EUTH / DIED
Outcome datedate_outYYYY-MM-DD
Live/non-livelive_releaseY / N

The formatting column is doing quiet heavy lifting. A municipality expecting OWNER_SUR will choke on your system's Owner Surrender label, and half the "the export is broken" panics come down to nothing more than a value that doesn't match the receiving system's allowed list.

Your pre-export checklist, run every single time before you send anything:

  1. Confirm the date range is right and matches the report period exactly (off-by-one-day boundaries are the most common error).
  2. Check row count against your internal total for the period — if they don't match, stop.
  3. Scan the outcome column for blanks. A blank outcome usually means an animal is still in care and shouldn't be in a period-closed report.
  4. Verify value formats against the mapping table — no stray labels, no free text where a code belongs.
  5. Confirm same-animal returns are handled per your definition, not double-counted as fresh intakes.
  6. Have the field owner, not the exporter, glance at the headline numbers before it goes out.

That last step catches more errors than the other five combined. The person who owns the field has a mental baseline — "we don't do 400 intakes in February" — that a formatting check will never have.

Process diagram

A visual like this makes the checklist easy to follow.

A real scenario

A municipal-contract shelter taking in roughly 200–250 animals a month kept getting their quarterly stats bounced back by the county for "inconsistent outcome coding." Every quarter it was a scramble — two staff members re-pulling reports, arguing about whether return-to-owner cases from a field officer counted the same as owner reclaims at the desk. It ate the better part of two days each cycle.

The fix wasn't software. It was one afternoon writing down that return-to-owner meant the same thing regardless of where the animal was reclaimed, assigning outcome ownership to a single coordinator, and building the CSV mapping table so the county's exact column codes were pinned next to their internal labels.

The next quarter's report went through on the first submission. The scramble dropped from around two days to under an hour, and — the part that mattered more — the shelter's own internal live release rate finally matched the number the county published. No more explaining to the board why two "official" figures disagreed.

When a formal standard makes sense — and when it's overkill

This isn't for everyone at every stage. If you're a foster-based rescue moving 15 animals a month with one person doing all the data entry, a three-page governance standard is probably more structure than you need — that single person is the standard. Write down your outcome definitions so a future volunteer doesn't have to guess, and stop there.

Where it earns its keep is the moment more than a couple of people enter data, or the moment you're accountable to an outside body — a municipality, a grant, a coalition that pools numbers. That's when interpretation drift starts costing real hours and real credibility.

Don't hand this to a committee. Governance-by-committee produces the 40-page document nobody follows. One person drafts the three pages, a couple of role owners sanity-check it, and it ships. Perfect and unused beats good and unwritten every time.

Keeping it alive

The failure mode for any standard is that it's written once and never touched again. Build in a light review — quarterly, tied to when you already pull reports, is plenty. Ask two questions each time: did any field's meaning drift in practice, and did anyone create a new "notes-field workaround" because the standard was missing something? If yes, that's your update. Add the field, redefine it, done.

Whatever system you use to house all this — spreadsheet, shelter management platform, whatever fits — the governance layer sits above the tool. The value isn't in the software field labels; it's in the shared agreement about what those labels mean and who's accountable for them. Good operational platforms make this easier by centralizing where definitions live and flagging when required fields go blank, but they don't replace the decision about what "live outcome" means. That call is yours, and writing it down is the entire game.

Three pages. One person to draft it. A quarterly glance to keep it honest. That's a small amount of work sitting under numbers that your board, your county, and your grantors quietly trust to be right.

Built for Shelters Tailored to animal shelter workflows and needs
Save Time Automate pet intake, scheduling, and records management
Engage Volunteers Simplify communication and shift coordination
Boost Adoptions Track applications and optimize adoption processes