Import
Import any file
DoorKnockHQ maps a voter file from the layouts and formats it has been tested against. Every person in the published test corpus is synthetic. This page contains no real voter data.
Source for this draft: the app ingestion corpus README at commit 46968d31 (tests/fixtures/ingestion/). Fifteen Session 35 layouts. Adversarial parser cases are documented separately and do not count toward those fifteen.
Supported layouts
Shapes are modeled on public state and vendor exports. Column names match those layouts. The people in the fixtures are invented.
| # | Layout | State / source |
|---|---|---|
| 1 | Idaho SoS / county clerk | ID |
| 2 | Michigan QVF (street split into parts) | MI |
| 3 | Florida FVRS voter extract (tab-delimited) | FL |
| 4 | New Mexico SERVIS public fields | NM |
| 5 | Ohio statewide voter file | OH |
| 6 | Pennsylvania SURE Full Voter Export | PA |
| 7 | Texas SOS public-information field names | TX — official delivery is often fixed-width; that parser path is a named deferral. The tested fixture uses the published field names as a delimited file. |
| 8 | North Carolina NCSBE ncvoter (tab-delimited) | NC |
| 9 | Georgia SoS voter list | GA |
| 10 | Arizona precinct-list public fields | AZ |
| 11 | Colorado SCORE | CO |
| 12 | Washington VRDB / VoteWA (pipe-delimited) | WA |
| 13 | Minnesota registered voter list | MN |
| 14 | Michigan township clerk FOIA list (Lowell style) | MI township — municipal FOIA shape derived from QVF. Not a live township file. |
| 15 | L2 / NGP VAN vendor workbook | xlsx (CSV twin in the corpus) |
A file from another state can still import if name and address columns can be detected. The fifteen layouts above are the ones with golden fixtures.
Formats
As documented in the corpus: CSV, tab-separated (including a .csv name with tab bytes), pipe-delimited, Excel .xlsx, and a zip that contains one CSV. Semicolon-delimited and UTF-16 LE appear as parser extras, not as members of the fifteen layouts.
What happens on failure
A failed import is a failure with a cause — not a silent “0 rows” success.
- Empty file (zero bytes): rejected. The product reports an empty file.
- Header only (column names, no data rows): rejected. The product reports that there are no data rows.
- Junk above the header (a report title and blank line before the real columns): those leading rows are skipped, the real header is found, and data rows import.
- Encoding: a UTF-8 BOM is stripped. Latin-1 is detected and decoded so accented letters survive. The old path could leave Latin-1 names as mojibake.
- Unrecognized name column (the Spencer case): some files put a combined “LAST, FIRST” value under a header the detector does not already know (the corpus uses the header
NAM1). Value-based detection treats that column as a name, splits last/first, and imports the rows. The previous importer skipped every column and rejected the file — the days-lost failure this case exists to prevent. This page does not reprint corpus rows. - Quoted commas, CRLF, duplicate column names, ragged extra cells: fields stay intact; duplicates are disambiguated; extra cells are captured or reported rather than dropped without notice.
Propensity is left empty when the file does not contain one. The importer does not invent a score.
Draft copy. READY_FOR_COPY_REVIEW. Corpus people are synthetic. No real voter PII.