LOCALGOVDATACHARLESTON
Method and trust

How we read the record, and how you check us.

Everything here is a public record we machine-read from the body that published it. Nothing is entered by hand, nothing is estimated, and nothing is inferred from a listing. This page is how you verify that claim rather than take it.

The accuracy figure

What 99.51% actually measures.

A single accuracy number is meaningless without its denominator. Here is ours, stated precisely enough that you could argue with it.

99.51%Weighted · audited 2026‑07‑30

Of case records audited against the source documents they were drawn from, weighted to the corpus’s real composition, 99.51% agreed with the source. Measured on the Charleston Board of Zoning Appeals corpus, audited 2026‑07‑30.

Population
The Charleston Board of Zoning Appeals decision corpus. This figure is scoped to that board and is not claimed for any other jurisdiction, body, or layer. Other jurisdictions get their own audits and will carry their own numbers.
Sample
401 cases drawn across 12 strata by board, era, and whether the source was born-digital or scanned. The draw is seeded and recorded, so it can be reproduced rather than taken on faith. 121 of those cases carried through to a human verdict.
Unit
One case record, judged whole — not one field. A reviewer reads the case against its source document and rules the whole row right or wrong, including the qualifier: withdrawn by the applicant is a different fact from withdrawn, and a row that loses the qualifier is scored as a miss.
Test
A deterministic re-check of parsed values against source documents, plus model review of exceptions by the authoring agent; all disagreements and a 10% sample of the agreements were human-reviewed. The 10% matters: without it the audit only ever examines rows the machine already doubted, and an error where the parser and the source agree on the same wrong thing would never surface.
Not independent
The agent that reviewed the exceptions is the agent that wrote the parsers. A pattern you fail to imagine while writing a parser is one you can fail to notice while checking it. The human pass is what makes the figure defensible; we do not describe this audit as independent, because it is not.
Counted as a miss
Any case whose recorded decision disagrees with the source, drops a qualifier the source carries, or is attached to the wrong case or parcel.
Not measured
Whether the source itself is correct. If a county publishes an error, we reproduce it and cite it. We are accurate to the record, not to the world. Address and display-field quality is a separate measurement and is not folded into this number.
Audited
2026‑07‑30, against source documents, by a human working a published review worksheet.
Sample status
The sample guided a fix, so it survives as a regression anchor and can no longer measure. The next figure comes from a fresh draw, not from this one. So this figure is a reading taken once, not a dial we re-run against the same cases — a sample that has scored a fix would be marking its own work.
98.3%
Raw, unweighted
What the sample scored as drawn. It is lower, and it is the less honest of the two.
99.51%
Weighted — the published figure
The same audit with each stratum restored to its real share of the corpus.

Why the weighted figure is the honest one, when weighting usually isn’t. The sample was built deliberately hard. Whole strata of the nastiest material — cases with no zone recorded, no parcel id, a split decision, a blank grid — were pulled in at far higher rates than they occur, because those are where a parser breaks. That makes the raw score worse than the corpus actually is. Weighting each stratum back to its true share corrects for a distortion we introduced on purpose. We publish both so the correction is visible instead of assumed.

The shape of the errors is the part worth reading. Every one of the eight ordinary strata — together about 93% of the corpus — came back clean, 61 of 61. All seven errors sit in three rare strata that make up roughly 2.4% of the corpus. The sample did exactly what it was stratified to do: it found the hard cases, and it found them where they live.

This sample is spent, and we will not re-run it. The audit surfaced a systematic defect, we fixed it, and the figure above was measured after that fix. A test set that has guided a fix can no longer measure the thing it corrected — from here it survives as a regression anchor, which is what a consumed test set is for. So this number is not “re-verified every release.” It carries the date it was measured, and the next figure will come from a freshly drawn sample, not from this one.

Two further corrections were applied afterwards by hand, each verified against the source and attributed to the person who made it. Re-scoring the sample after those corrections would produce 100.00%. We will not publish that, here or anywhere: it would measure only that we fixed the rows we found, and any reader who asked how it was measured would be right to discount everything near it.

The audit date matters more than the headline. A vendor who publishes an accuracy figure without one is publishing a marketing number.

Provenance

Not every fact is known the same way.

A decision read off the board’s own marked grid and one recovered from a clerk’s note beside an empty line are not equally strong, and a report that renders them identically is hiding something. But how well a decision was read is a different question from whether the record it came from can support a rate at all — and conflating the two is the most consequential mistake available here. We keep them as two separate axes.

How the decision was read

Per case · recorded as decision_source
ValueCasesWhat it means
grid_mark1,938Read from the board’s own decision grid — the marked box on the meeting’s disposition sheet.
motion_and_vote13Read from the recorded motion and the vote tally in the minutes.
annotation_line12Read from a clerk’s annotation line beside the item. Weaker than a mark in the field meant to hold it, and labelled as such — the whole annotation is kept, not just the verb, because losing by applicant loses a fact.
human_correction2Overridden by a human verifier against the source, with the reason recorded in the correction log.
not recorded4,752No classification is recorded for these cases. That is an absence on our side, not a finding about the case — we have the decision, we have not classified how it was read. It is currently recorded only for the Charleston Board of Zoning Appeals; for every other body this column is empty across the board.

Counts from the store, observed 2026-08-01. They are floors: they describe what we have classified, not everything that exists.

What the source is

Per board · this, and only this, decides whether a rate can exist
KindRate?Why
full_dispositionYesThe source records every outcome, including refusals.
recommendationNoThe body recommends; another body decides. A recommendation is advice, not a result.
approved_onlyNoThe source lists what was adopted. A refusal cannot appear in it, so a rate computed from it would be 100% by construction.
not_a_decision_sourceNoA reference layer — parcel facts, sale prices — not a record of decisions.
unclassifiedNoNot yet classified. No rate may be computed over it until it is. This fails closed on purpose: adding a jurisdiction must never silently authorise a rate.

Why we insist on the distinction. It would be tidier to say that better-graded evidence earns a rate. It would also be false. A decision read straight off the grid still cannot be scored if it came from a body that only recommends, and a case whose reading we never classified can be scored perfectly well if it came from a record that shows refusals. Evidence grade describes our reading; the source’s nature decides what may be computed. A rate on this site exists only where the record could have shown us a refusal.

Absence

A blank field is a claim. We don’t make it.

When a report shows nothing for wetlands, a reader concludes there are no wetlands. That inference is how listing platforms mislead people without ever stating a falsehood. Every absence on our reports is typed and labeled, and each type says what search it stands for.

Not published

The authority does not release this in any machine-readable form. No amount of work on our side changes it.

Not parsed

The record exists and we haven’t read it yet. This is our backlog, and it’s dated.

No record found

We searched a named registry over a stated period and this parcel isn’t in it. Absence of a record is not evidence of absence, and the page names the registry we searched.

Not applicable

The layer exists and this parcel is outside it. A real, checked negative — the only kind we let stand as reassurance.

Denominators

What goes into a rate, and what sits beside it.

A rate is only as good as the set it divides by, and the tempting mistake is to sweep every case into the denominator. A request that was deferred or withdrawn was not refused — counting it as one quietly scores a pause as a failure and understates the approval picture.

So our denominator is final outcomes only — ratified against denied. Deferred and withdrawn cases are shown, counted, and listed separately, never folded in. The rule is applied the same way everywhere, and every rate we publish states it on the page rather than leaving you to reconstruct it.

Counts are floors wherever our coverage of a body is partial. Where we hold part of a record, a count says “at least this many,” and the page it appears on says what the rest is.

Pipeline

From a scanned agenda packet to a field on your report.

01

Harvest

Agendas, minutes, ordinance indexes, staff reports, permit exports, and GIS layers are pulled from each publishing authority. We record where each artifact came from and when — and we distinguish a document we have catalogued from one we have actually fetched, because an inventory row is not proof of a pull.

02

Extract

Documents are read into structured records: applicant, request, parcel, body, date, staff recommendation, motion, vote, conditions. Each extracted value keeps a pointer to the document it came from, and every case in the store can cite its own source.

03

Resolve to parcel

The hardest step. Records reference parcels by address, tax map number, subdivision lot, or narrative description, and those change over time through splits and merges. Anything we can’t resolve confidently is held out rather than guessed onto a parcel.

04

Record provenance

Each decision is stored with how it was established and any qualifier attached to it, which governs how it may be used and whether a rate can be computed from it at all.

05

Regression-test every change

A frozen baseline is re-parsed from the source documents on every change — not compared against the database, which would only prove nobody edited it. It catches drift, including the silent kind where a value stays the same but its provenance quietly changes. It is a change detector, not a correctness oracle, and it is labeled as one.

06

Audit

Accuracy is measured against source documents by a human on a stratified, seeded sample, and republished with the date it was measured. A sample that has guided a fix is retired from measuring and kept as a regression anchor.

07

Publish

A field reaches a report only when it carries a source, a date, and its provenance. A field that can’t carry all three doesn’t ship.

Corrections

When we’re wrong, you’ll be able to tell.

How an override works

A corrected value is refused by the system unless it names who verified it and why. The originally parsed value is kept beside the correction, because the disagreement between them is the auditable part. Corrections are applied as an overlay on top of the parse, never as a parser change in disguise.

Systemic fixes

A miss that traces to an extraction rule gets the whole rule re-run across every affected record, not a single-value patch. A fix that generalizes and a one-off override are different things, and we keep them separate — including when deciding what an accuracy figure is still allowed to measure.

Who corrected it, and why

Every correction names the person who verified it against the source and the reason they gave. A correction log without its verifier is an anonymous edit. We would rather show you two corrections with their names on them than a number you cannot interrogate.

Telling us about one

Write to grier@upyourbids.com with the parcel and the field. We do not publish a response-time commitment here, because we have not made one, and a promise on a trust page is worth less than nothing if it is decorative.

The log is public

Every human-verified correction is published with its case, the person who verified it against the source, the date, and the reasoning. Read the correction log →

Our own adjudications, kept separate

Where a record is structurally ambiguous the build process makes its own call, and each one carries the sentence it was decided on. Those are a different weight of evidence and are deliberately not folded into the correction log — when they are published it will be as what they are.

The pledge

We will never tell you what a board is going to do.

We publish what was decided. Base rates describe applications that were already ruled on, by a named body, in a named jurisdiction, over a stated period. That is a historical fact and you can check every case in it.

A prediction is not a fact, and a probability attached to your parcel would be our opinion wearing a number’s clothing. We won’t sell you that, because the moment we do you’re trusting our judgment instead of the record — and the record is the only thing we have that nobody else does.

Base rates are also small-n by nature. Twenty-three comparable cases in one jurisdiction is a real signal and a thin sample at the same time. We always show the count, always show the cases, and never round a count up into a confidence.

WE DO NOT SCORE PARCELS.
WE DO NOT RANK LIKELIHOOD OF APPROVAL.
WE DO NOT CHARACTERIZE WHY AN OFFICIAL VOTED AS THEY DID — WE QUOTE THE STATED REASON AND CITE THE PAGE.
WE DO NOT OPINE ON THE MERITS OF AN APPLICATION, YOURS OR ANYONE ELSE’S.
Boundaries

What this is not.

It is not a title search. We don’t hold a machine-readable easement or encumbrance index, and no report from us substitutes for a title examination.

It is not a survey, an appraisal, or a wetlands delineation. Mapped layers are screening tools; a boundary on a report is not a boundary on the ground, and a mapped wetland is a flag to go check, not a finding.

It is not a zoning determination. Only the zoning administrator determines what is permitted. Our envelope is a reading of the ordinance text as published, with the section and version cited so you can check it.

It is not a consumer report. We do not assemble information about individuals for credit, employment, insurance, or tenant screening, and our terms prohibit using it that way.

It is not legal advice, and we are not your attorney.