Qipudata
San Francisco · v0.7.1

Claims

claimsrelease v0.7.1CC0 1.0

About

The core table: one small statement per row, the same shape for every source (DATA_ARCHITECTURE.md 7.4).

How far to trust it
The release passed its automatic checks before it was published (what is checked). A hand check by the editor of qipu data is under way: 36 of 38 items checked so far were right, on votes, money, places and the map. A row says what the record states; the scanned page is the authority. Details
Licence
CC0 1.0: use it for anything, no permission needed. The scans and other sources keep their own rights.
Version
v0.7.1, published 21 October 2026. A published release is never changed; corrections come as a new release.
Technical details
Table
claims
Rows
8,367,105 (San Francisco 8,367,105)
Columns
55
Parquet
claims.parquet, 807.5 MB
Version
v0.7.1, 21 October 2026
Licence
CC0 1.0. Sources keep their own rights.

Rows

Rows by property

ValueRowsShare
voted4,724,38956.5%
concerns_place732,1048.7%
outcome634,5507.6%
owned_by333,5854.0%
party320,2233.8%
occupied_by248,9903.0%
money223,5582.7%
use216,4942.6%
built191,3642.3%
stories185,7012.2%
units179,5512.1%
happened_at154,1461.8%

Rows by t_precision

ValueRowsShare
year4,894,22158.5%
day3,469,73341.5%
(empty)3,090< 0.1%
month60< 0.1%
unknown1< 0.1%

Rows by place_precision

ValueRowsShare
unknown3,863,05746.2%
city2,184,02926.1%
address1,434,59217.1%
street269,4463.2%
segment179,9012.2%
area125,6011.5%
parcel105,0891.3%
corner101,3051.2%
block88,1931.1%
hood6,2310.1%
point5,7300.1%
building3,931< 0.1%

Method and accuracy

FieldMade byHow well it is known
claims voted: value_text (yes/no/absent)rulesSame as the roll-call counts above; unmeasured separately.

The release passed its automatic checks before it was published (what is checked). A hand check by the editor of qipu data is under way: 36 of 38 items checked so far were right, on votes, money, places and the map. A row says what the record states; the scanned page is the authority.

Methodology · Accuracy

Columns 55

ColumnTypeCan be emptyPrivacyPublic copyDescription
subject_idVARCHARnononeas isWhat the statement is about: a decision (qipu:sf/decision/...), a place, a person (qipu:sf/person/...) or an archive item (ia:<identifier>).
Can be empty no · Privacy none · Public copy as is
subject_labelVARCHARyesfree textwhere property = 'voted': as is; where extraction_table IN ('showcase_search', 'media', 'dl_documents'): as is; otherwise: names of private people withheld under the embargoReadable label of the subject.
Can be empty yes · Privacy free text · Public copy where property = 'voted': as is; where extraction_table IN ('showcase_search', 'media', 'dl_documents'): as is; otherwise: names of private people withheld under the embargo
propertyVARCHARnononeas isControlled list: outcome, voted, concerns_place, built, depicted_in, recorded_at, happened_at, ballot_result.
Values outcome, action, voted, moved, seconded, sponsored, reported_by, party, money, rezoned, refers_to, acts_on ...
Can be empty no · Privacy none · Public copy as is
property_detailVARCHARyesnoneas isThe source file's own name for the statement (e.g. sanborn_map_shows, voted_aye, timeline_moment).
Can be empty yes · Privacy none · Public copy as is
object_idVARCHARyesnoneas isThe other entity, when there is one (the decision a supervisor voted on; the place an archive item concerns).
Can be empty yes · Privacy none · Public copy as is
value_numDOUBLEyesnoneas isNumeric value (e.g. the year built from the assessor roll).
Can be empty yes · Privacy none · Public copy as is
value_textVARCHARyesfree textwhere property IN ('party', 'owned_by', 'occupied_by'): shown for officials and organisations; a private person is withheld under the embargo; where extraction_table = 'x_enrich' AND property IN ('sold_for', 'leased', 'conveyed', 'took_position'): shown for officials and organisations; a private person is withheld under the embargo; where extraction_table = 'x_enrich' AND property IN ('held_role', 'sponsored', 'excused_from_vote'): as is; where property = 'voted': as is; where extraction_table IN ('showcase_search', 'media', 'dl_documents'): as is; otherwise: names of private people withheld under the embargoText value: the outcome, the vote (yes/no/absent/excused), the line as written.
Can be empty yes · Privacy free text · Public copy where property IN ('party', 'owned_by', 'occupied_by'): shown for officials and organisations; a private person is withheld under the embargo; where extraction_table = 'x_enrich' AND property IN ('sold_for', 'leased', 'conveyed', 'took_position'): shown for officials and organisations; a private person is withheld under the embargo; where extraction_table = 'x_enrich' AND property IN ('held_role', 'sponsored', 'excused_from_vote'): as is; where property = 'voted': as is; where extraction_table IN ('showcase_search', 'media', 'dl_documents'): as is; otherwise: names of private people withheld under the embargo
summaryVARCHARyesfree textwhere property = 'voted': as is; otherwise: names of private people withheld under the embargoFor outcome claims: the one-line plain summary of the decision. For votes: the printed outcome phrase.
Can be empty yes · Privacy free text · Public copy where property = 'voted': as is; otherwise: names of private people withheld under the embargo
unitVARCHARyesnoneas isEmpty in v1.
Can be empty yes · Privacy none · Public copy as is
currencyVARCHARyesnoneas isEmpty in v1.
Values USD, CAD
Can be empty yes · Privacy none · Public copy as is
value_yearINTEGERyesnoneas isEmpty in v1 (money is not yet extracted).
Can be empty yes · Privacy none · Public copy as is
t_fromVARCHARyesnoneas isWhen: YYYY-MM-DD, YYYY-MM or YYYY.
Can be empty yes · Privacy none · Public copy as is
t_toVARCHARyesnoneas isEnd of an interval (empty in v1).
Can be empty yes · Privacy none · Public copy as is
t_precisionVARCHARyesnoneas isday, month or year.
Values day, month, season, year, decade, century, unknown
Can be empty yes · Privacy none · Public copy as is
place_idVARCHARyesnoneas isWhere (a qipu place id; qipu:sf/place/city for citywide).
Values e.g. qipu:sf/place/block/1
Can be empty yes · Privacy none · Public copy as is
place_labelVARCHARyesfree textprivate people's names withheld under the embargoThe place as written in the source.
Can be empty yes · Privacy free text · Public copy private people's names withheld under the embargo
place_precisionVARCHARyesnoneas isHow exactly the source places it: address, parcel, corner, segment, street, block, stated, named place, hood, city.
Values point, address, building, parcel, corner, segment, block, survey_block, street, area, hood, district ...
Can be empty yes · Privacy none · Public copy as is
latDOUBLEyesnoneas isLatitude where the source file gives one.
Values degrees (WGS 84); 36.0..50.0
Can be empty yes · Privacy none · Public copy as is
lonDOUBLEyesnoneas isLongitude where the source file gives one.
Values degrees (WGS 84); SF-owned land reaches the Sierra (Hetch Hetchy, Camp Mather); -125.0..-119.0
Can be empty yes · Privacy none · Public copy as is
page_idVARCHARyesnoneas isThe archive.org page: <identifier>:<leafNum> (IA's leaf number, the jp2 / IIIF number), or <identifier>:d<n> where only the BookReader index is known, or <url>:<page> for a web document. nopage:<seq> where the source gives no page number (sfbos rows without one): the row is kept, page_url is NULL.
Values e.g. journalofproceed30sanfrich:1
Can be empty yes · Privacy none · Public copy as is
page_urlVARCHARyesnoneas isOpens the page: archive.org BookReader link built from the leaf map (audited against IA's scandata), or <pdf url>#page=<n> for a PDF. NULL only where page_id is nopage:<seq>.
Values e.g. https://archive.org/details/journalofproceed30sanfrich/page/n1
Can be empty yes · Privacy none · Public copy as is
source_idVARCHARnononeas isThe source: an archive.org identifier, or web:<url> for other sources.
Can be empty no · Privacy none · Public copy as is
source_urlVARCHARyesnoneas isLink to the source page.
Can be empty yes · Privacy none · Public copy as is
source_labelVARCHARyesfree textwhere extraction_table IN ('showcase_search', 'media', 'dl_documents'): as is; otherwise: names of private people withheld under the embargoReadable source name.
Can be empty yes · Privacy free text · Public copy where extraction_table IN ('showcase_search', 'media', 'dl_documents'): as is; otherwise: names of private people withheld under the embargo
licenceVARCHARyesnoneas isThe source's licence where the source file states it.
Values CC-BY, CC-BY-2.0, CC-BY-2.5, CC-BY-3.0, CC-BY-NC-3.0, CC-BY-NC-4.0, CC-BY-NC-ND-2.0, CC-BY-NC-ND-2.5, CC-BY-NC-ND-3.0, CC-BY-NC-ND-4.0, CC-BY-NC-SA-1.0, CC-BY-NC-SA-2.5 ...
Can be empty yes · Privacy none · Public copy as is
quoteVARCHARyesraw textwhere extraction_table IN ('bos_records', 'resweep', 'map_blocks', 'x_decisions_v2', 'x_appraisals', 'site_decisions', 'hand_decisions', 'x_roll_calls'): left out for records under the embargo; otherwise: names of private people withheld under the embargoShort quote of the source (<= 300 characters). See privacy_flag.
Can be empty yes · Privacy raw text · Public copy where extraction_table IN ('bos_records', 'resweep', 'map_blocks', 'x_decisions_v2', 'x_appraisals', 'site_decisions', 'hand_decisions', 'x_roll_calls'): left out for records under the embargo; otherwise: names of private people withheld under the embargo
extraction_tableVARCHARyesnoneas isWhich table or file the statement came from (bos_records, resweep, x_roll_calls, map_blocks, site_decisions, ...).
Values assessor_roll, board_permits, bos_records, dateline, dbi_permits, dl_documents, doors, first_built, hand_decisions, hood_stories, hood_timelines, land_1869 ...
Can be empty yes · Privacy none · Public copy as is
run_idVARCHARnononeas isThe extraction run (see runs).
Values bos-corpus-2026-09, dateline-2026-10, dl-tags-haiku55-2026-10, doors-2026-10, hand-2026-10, hood-stories-2026-10, hood-timelines-2026-10, ia-fulltext-places-2026-07, map-blocks-2026-10, map-blocks-items-2026-10, media-registry-2026-10, resweep-d1960-haiku55-2026-10 ...
Can be empty no · Privacy none · Public copy as is
seqVARCHARyesraw textprivate people's names withheld under the embargoThe row id inside the source table or file. For map_blocks and site rows it is "<block>|<volume>/<leaf>|<first line>" (to be replaced by an id).
Can be empty yes · Privacy raw text · Public copy private people's names withheld under the embargo
confidenceDOUBLEyesnoneas is0-1 where a run gives one (votes: 0.95 when the printed counts match the names).
Values probability 0-1; 0..1
Can be empty yes · Privacy none · Public copy as is
statusVARCHARyesnoneas isextracted (machine-read), record (from an official register: assessor, DataSF), curated (written or checked by qipu for the map). No verified rows yet.
Values extracted, record, curated, verified, corrected, disputed, retracted, superseded
Can be empty yes · Privacy none · Public copy as is
inferredBOOLEANyesnoneas isTrue when the claim is inferred from others (none in v1).
Can be empty yes · Privacy none · Public copy as is
claim_kindVARCHARnononeas isevent or observation.
Values event, observation, interval
Can be empty no · Privacy none · Public copy as is
topicVARCHARyesnoneas isTopic label from the run.
Can be empty yes · Privacy none · Public copy as is
outcomeVARCHARyesnoneas isDecision outcome where known.
Values amended, approved by voters, continued, failed, passed, pending, referred, refused, rejected, rejected by voters, submitted_to_voters, tabled ...
Can be empty yes · Privacy none · Public copy as is
page_exactBOOLEANyesnoneas isTrue when the archive.org page number was converted from the OCR leaf with the per-volume leaf map; false = may be a page or two off.
Can be empty yes · Privacy none · Public copy as is
privacy_flagVARCHARyesnoneas ismay_name_private_person_after_1950 on Board text from 1952 on (records up to 1951 are open: the one cutoff, qipu_data/cutoff.py). The public SQLite leaves those quotes out.
Values may_name_private_person, may_name_private_person_92y, may_name_private_person_after_1950
Can be empty yes · Privacy none · Public copy as is
name_printedVARCHARyesa person's nameofficials and organisations shown; private people withheld under the embargoVotes: the name as printed in the roll call.
Can be empty yes · Privacy a person's name · Public copy officials and organisations shown; private people withheld under the embargo
cityVARCHARnononeas issf or van.
Values sf, van
Can be empty no · Privacy none · Public copy as is
rights_noteVARCHARyescatalogue textas isWhat a reuser must know about the source's rights, in words (archive.org search hits, or a licence text longer than 80 characters moved here from licence).
Can be empty yes · Privacy catalogue text · Public copy as is
collection_groupVARCHARyesnoneas isFor archive.org search hits (showcase_search): the group of the item's collection (Books and texts, Films and video, TV News Archive, ...).
Values Audio, Books and texts, Democracy's Library, Films and video, Live Music Archive, Maps and images, Open Library, Other, Prelinger Archives, Radio, SF Public Library scans, TV News Archive ...
Can be empty yes · Privacy none · Public copy as is
place_roleVARCHARyesnoneas isHow the claim relates to its place: at, along (a street), near (see qualifiers.distance_m), about (a document about the place) or bounds (v0.6.1: the street only bounds or locates the work, "Hanover street between Allison and Pope streets" for Allison and Pope; kept off street pages and the map).
Values at, near, along, within, about, from, to, bounds
Can be empty yes · Privacy none · Public copy as is
qualifiersVARCHARyesnestedfield by field (below)Extra details as JSON: role (party role), distance_m, payee and purpose (money), from/to (rezoning, street segment), period/rooms (rent), score (search relevance).
Can be empty yes · Privacy nested · Public copy field by field (below)
privacy_classVARCHARyesnoneas isWho a name in the claim belongs to: public_official (votes, motions), private_person (owners, named private parties) or organisation; empty when the claim names nobody.
Values public_official, public_figure, organisation, private_person, unknown, none
Can be empty yes · Privacy none · Public copy as is
public_after_yearINTEGERyesnoneas isFor private_person claims: the claim's year plus the embargo (75 years in SF, 92 in Vancouver); 9999 when the year is unknown. Until then public files show the role, not the name.
Can be empty yes · Privacy none · Public copy as is
claim_idVARCHARnononeas isStable id: c: + 32 hex (128 bits, hashed from the slot: subject, property, object, page, role); votes v:<rollcall_id>:<n> (roll calls read from the page text in v0.6.1 have ids p<hex>).
Values e.g. c:c4ca4238a0b923820dcc509a6f75849b
Can be empty no · Privacy none · Public copy as is
n_supportBIGINTyesnoneas isHow many extracted rows read this same claim (same claim_id); see claim_support.
Can be empty yes · Privacy none · Public copy as is
media_idVARCHARyesnoneas isThe media item the claim points to (depicted_in, recorded_at), see media.
Can be empty yes · Privacy none · Public copy as is
release_addedVARCHARyesnoneas isRelease that built the row: v0.4 on every row (the build stamps the current release, not the first release that had the claim).
Values v0.4
Can be empty yes · Privacy none · Public copy as is
display_nINTEGERyesnoneas isarchive.org BookReader page index of the cited page (the n in /page/n<k>); page_id uses the OCR leaf instead.
Can be empty yes · Privacy none · Public copy as is
t_loDATEyesnoneas isEarliest date t_from can mean (1962 -> 1962-01-01).
Can be empty yes · Privacy none · Public copy as is
t_hiDATEyesnoneas isLatest date t_from can mean (1962 -> 1962-12-31; for YYYY/YYYY the end year).
Can be empty yes · Privacy none · Public copy as is
reliabilityVARCHARyesnoneas isA property of the RUN, not of the claim: measured when the run that read this claim has scores in field_scores, else unmeasured. It is not the claim's reliability: how firmly a claim is backed is claim_reliability.tier (verified / quoted / unverified, with tier_reason). Planned rename in v0.7 (breaking): run_measured BOOLEAN.
Values measured, unmeasured
Can be empty yes · Privacy none · Public copy as is
mention_idVARCHARyesnoneas isThe printed name this statement links to a person, organisation or name (votes, movers, owners), as a row of name_mentions (m:<hash>, internal: names are never published raw). Required on every such statement read from a page since v0.7 (check M3).
Can be empty yes · Privacy none · Public copy as is
place_mention_idVARCHARyesnoneas isv0.7: the place string the statement was read with, as a row of place_mentions; set on statements read from a page and placed finer than the city (check M4).
Values e.g. pm:c4ca4238a0b92382
Can be empty yes · Privacy none · Public copy as is

Privacy: what kind of text the column holds. Public copy: what the published file does with it; the embargo covers records after 1951.

Preview

subject_idsubject_labelpropertyproperty_detailobject_idvalue_numvalue_textsummary
decision/jour…nfrich:1980/2—partyparty——G. E. Stechert & Co.—
person/james-emmet-haydenHaydenvotedvoteddecision/jour…nfrich:1372/2—yes—
place/address/eas-446893336 OFARRELL STowned_byowned_by——Knight, Samuel—
place/address/eas-504492517A 04TH AVEowned_byowned_by——McAdoo, Regina—
decision/jour…anfrich:773/3Salary and position changes for the Hetch Hetchy Water Sup…outcomeoutcome——passedSalary and position changes for the Hetch Hetchy Water Sup…
decision/jour…anfrich:481/5—concerns_placeconcerns_place————
person/cornelius-j-deasyDeasyvotedvoteddecision/jour…anfrich:830/2—yes—
person/fred-w-meyerMeyervotedvoteddecision/jour…2sanfrich|158—yes—

8 of 55 columns shown. Eight rows sampled at build time, from the years up to 1951. Hover a shortened value for all of it.

Download

FormatFileSize
Parquetclaims.parquet ↗807.5 MB
SQLite (all tables)qipu_sf.db ↗6.44 GB

SQL

SELECT * FROM claims LIMIT 100

Run in the SQL console (DuckDB in the browser, over the Parquet file).

Python

import duckdb duckdb.sql("SELECT * FROM 'https://tiles.qipu.org/data/releases/v0.7.1/parquet/claims.parquet' LIMIT 5").show()