Skip to content
Satoshi Gazette
Data DeskDictionary

Data dictionary

What every field in the desk’s files holds: its type, its unit, what it means, and what it means when it is empty.

Empty values

An empty value is never 0

An empty value is a JSON null, a key a row leaves out, an empty text, an empty list or an empty CSV cell. None of them is ever written as 0: a 0 in a file is a counted or a stated zero, and the desk reads it as one.

Every field below names one of these five and says what it means in that field, or says the field is never empty.

not disclosed
The source could have stated it and did not. The gap is the source’s.
not read
The desk has not read it, or did not record it. The gap is the desk’s, and a later read may fill it.
not applicable
The field has no meaning for this row, so there is nothing to state.
not in this dataset
Left out of this file on purpose: another dataset holds it, or it is outside what the file covers.
none listed
A list with nothing in it: the record was read and names none. That is a known nothing, not an unknown.
never empty
A JSON field holds a value wherever the group or the list item it sits in is present; a group or a list that can itself be empty has a row of its own, which says when. A CSV column holds a value in every row. The desk’s tests check both against the committed data.

Reading a row

Paths, types, units and marks

A JSON field is named by its path. rows[].day is day in each item of rows; [] is every item of a list, [2] the third place in a row written as a list, and a part in braces, {line}, a key that is itself data. A group of fields has a row of its own only where the whole group can be empty.

A CSV column carries the note the downloads page prints for it, and names the JSON field it is taken from.

Types

text
Text.
whole number
A whole number.
decimal text
An exact decimal written as text, so no digit passes through a float.
true/false
true or false.
list
A list. Its unit is the unit of each item; a list of groups or of rows has none.
group
A group of named fields. A group has a row of its own only where it can be empty.

Units

BTC
Bitcoin, to at most eight places.
sats
Satoshis: 100,000,000 to the bitcoin.
blocks
A number of blocks.
height
A block height, counted from the genesis block at 0.
count
A number of the things the field names. 0 is a count of none.
index
A place in an order, counted from 0 or from 1 as the field says.
percent
A percentage.
ratio
A number with no unit: a difficulty, or one target over another.
minutes
Minutes.
Unix seconds
Seconds since 1 January 1970, UTC.
ISO date
A day, as YYYY-MM-DD.
ISO date-time
A moment in UTC, as YYYY-MM-DDTHH:MM:SSZ.
hash
A digest in lowercase hex: a block hash, a sha256 or a git commit.
hex
A number in lowercase hexadecimal digits.
URL
A web address. A part in braces, such as {height}, stands for a value.
identifier
A name, number or code that picks out one thing: an accession number, a ticker, a version.
set value
One of a short list of words the file’s loader allows; the meaning names them.
none
No unit: words, true or false, a group, or a list of groups or of rows.

Marks on a figure

lower bound
A floor on disclosed positions, never an estimate: only what a holder disclosed is counted, each as of its own date, and what nobody disclosed is left out.
cut
Cut to the places shown, never rounded, so it is never above the exact value.
approximate
The filing’s own “approximately”. The number is kept as filed, and the row’s approximate field says when the filing used the word.
as stated
Rests on a holder’s or an issuer’s own statement, as of the date that statement gives. The desk did not check it against the chain.
heuristic
Rests on a labelling rule, not a record: a pool label, or what a node says it runs.
one source
Chain data read from one operator and not matched on a second. Where that is so of some rows only, the field says which.

Datasets

Every field, dataset by dataset

Ten datasets have a file today, holding 509 JSON fields and 153 CSV columns. Each field gives its type, its unit, what it holds, and what an empty value means there.

Node software on reachable nodes

Every peer in KIT’s network snapshot, by the software it announces.

sg-node-software78 JSON fields43 CSV columnsMethod 1.1.0

JSON fieldssg-node-software.json

JSON fields of Node software on reachable nodes
FieldTypeUnitWhat it holdsWhen it is empty
schema_versiontextidentifierThe name and version of the file’s layout; the site’s loader refuses any other.Never empty
datasettextidentifierThe dataset’s ID in the register.Never empty
methodology_versiontextidentifierThe version of the method the file was built with.Never empty
headline_populationtextset valueThe population the pages lead with: connected or opened_24h.Never empty
populations.connectedtextno unitWhat the connected population counts, in the file’s own words.Never empty
populations.opened_24htextno unitWhat the opened_24h population counts, in the file’s own words.Never empty
source.nametextno unitThe name of KIT’s monitor, the one source of the counts.Never empty
source.publishertextno unitThe research group that runs the monitor.Never empty
source.data_pagetextURLKIT’s page describing its data.Never empty
source.listingtextURLKIT’s listing of its snapshot files.Never empty
source.snapshot_url_templatetextURLThe address of one snapshot file; {snapshot} stands for a row’s snapshot.Never empty
source.licencetextno unitThe licence KIT publishes its snapshots under.Never empty
source.licence_urltextURLAddress of the licence KIT publishes its snapshots under.Never empty
source.doitextidentifierThe DOI of KIT’s dataset.Never empty
source.citationtextno unitHow KIT’s dataset is cited, the credit its licence asks for.Never empty
source.changestextno unitWhat the desk changed in KIT’s records, which the licence asks it to say.Never empty
lifecycle_filetextidentifierThe Gazette file the Core release lines are classified against: the sg-core-lifecycle dataset.Never empty
ua_ruleslistno unitThe rules that sort a user agent into an implementation, in order; the first match wins.Never empty
ua_rules[].implementationtextset valueWhat the rule sorts a peer as: core, knots, btcd, other, unknown.Never empty
ua_rules[].ruletextno unitThe rule, in words.Never empty
method.populationtextno unitThe file’s own note on which peers each population holds.Never empty
method.clocktextno unitThe file’s own note on how KIT’s local clock is turned into UTC.Never empty
method.classificationtextno unitThe file’s own note on sorting peers by the user agent they announce.Never empty
method.lifecycletextno unitThe file’s own note on classifying Core release lines as maintained or end of life.Never empty
method.service_flagstextno unitThe file’s own note on counting the two Knots service flags.Never empty
method.precisiontextno unitThe file’s own note on how a share is printed from the counts.Never empty
method.decisiontextno unitThe file’s own note on which population the headline uses, and since when.Never empty
method.holdstextno unitThe file’s own note on when a day is held and nothing is written.Never empty
gapslistno unitThe days since the first row that hold no row, oldest first, each with why.not applicable Every day since the first row is recorded. The key is then left out.
gaps[].daytextISO dateA UTC date the series holds no row for.Never empty
gaps[].reasontextno unitWhy: no KIT snapshot that day, or the editor’s reason for releasing a day that stayed held.Never empty
gaps[].recorded_attextISO date-timeWhen the day was written down as not recorded.Never empty
rowslistno unitOne item per KIT snapshot day recorded, oldest first.Never empty
rows[].daytextISO dateThe snapshot’s UTC date.Never empty
rows[].snapshottextidentifierKIT’s name for the snapshot file: its time in UTC, as YYYYMMDD_HHMMSS.Never empty
rows[].snapshot_attextISO date-timeThe snapshot’s time in UTC, as a timestamp.Never empty
rows[].clock_offset_minuteswhole numberminutesMinutes KIT’s lastConnect clock ran ahead of UTC, derived from the file.Never empty
rows[].lifecycle_as_oftextISO dateThe day of the Core lifecycle table the row was classified with.Never empty
rows[].sha256texthashsha256 of KIT’s snapshot file as served, so the row can be checked against KIT’s copy.Never empty
rows[].connected.nodeswhole numbercountAll connected peers: peers counted.Never empty
rows[].connected.ipv4whole numbercountAll connected peers: reached over IPv4.Never empty
rows[].connected.ipv6whole numbercountAll connected peers: reached over IPv6.Never empty
rows[].connected.ip_unknownwhole numbercountAll connected peers: KIT recorded no IP version.Never empty
rows[].connected.implementation.corewhole numbercountAll connected peers: user agent sorted as core by ua_rules.heuristicNever empty
rows[].connected.implementation.knotswhole numbercountAll connected peers: user agent sorted as knots by ua_rules.heuristicNever empty
rows[].connected.implementation.btcdwhole numbercountAll connected peers: user agent sorted as btcd by ua_rules.heuristicNever empty
rows[].connected.implementation.otherwhole numbercountAll connected peers: user agent sorted as other by ua_rules.heuristicNever empty
rows[].connected.implementation.unknownwhole numbercountAll connected peers: no user agent the rules can read.heuristicNever empty
rows[].connected.core_lifecycle.maintainedwhole numbercountAll connected peers: Core peers on a release line that was maintained on the snapshot day.heuristicNever empty
rows[].connected.core_lifecycle.end_of_lifewhole numbercountAll connected peers: Core peers on a release line that was end of life on the snapshot day.heuristicNever empty
rows[].connected.core_lifecycle.unreleasedwhole numbercountAll connected peers: Core peers on a release line not yet released on the snapshot day, or on an x.99 development build.heuristicNever empty
rows[].connected.core_lifecycle.not_listedwhole numbercountAll connected peers: Core peers on a release line the life cycle table does not carry, or announcing a version that does not parse.heuristicNever empty
rows[].connected.core_lines.{line}whole numbercountCore peers announcing a version on the release line the key names, such as 31.x; development counts x.99 builds and unparsed counts versions that do not parse.heuristicNever empty
rows[].opened_24h.nodeswhole numbercountPeers whose connection began within 24 hours of the snapshot: peers counted.Never empty
rows[].opened_24h.ipv4whole numbercountPeers whose connection began within 24 hours of the snapshot: reached over IPv4.Never empty
rows[].opened_24h.ipv6whole numbercountPeers whose connection began within 24 hours of the snapshot: reached over IPv6.Never empty
rows[].opened_24h.ip_unknownwhole numbercountPeers whose connection began within 24 hours of the snapshot: KIT recorded no IP version.Never empty
rows[].opened_24h.implementation.corewhole numbercountPeers whose connection began within 24 hours of the snapshot: user agent sorted as core by ua_rules.heuristicNever empty
rows[].opened_24h.implementation.knotswhole numbercountPeers whose connection began within 24 hours of the snapshot: user agent sorted as knots by ua_rules.heuristicNever empty
rows[].opened_24h.implementation.btcdwhole numbercountPeers whose connection began within 24 hours of the snapshot: user agent sorted as btcd by ua_rules.heuristicNever empty
rows[].opened_24h.implementation.otherwhole numbercountPeers whose connection began within 24 hours of the snapshot: user agent sorted as other by ua_rules.heuristicNever empty
rows[].opened_24h.implementation.unknownwhole numbercountPeers whose connection began within 24 hours of the snapshot: no user agent the rules can read.heuristicNever empty
rows[].opened_24h.core_lifecycle.maintainedwhole numbercountPeers whose connection began within 24 hours of the snapshot: Core peers on a release line that was maintained on the snapshot day.heuristicNever empty
rows[].opened_24h.core_lifecycle.end_of_lifewhole numbercountPeers whose connection began within 24 hours of the snapshot: Core peers on a release line that was end of life on the snapshot day.heuristicNever empty
rows[].opened_24h.core_lifecycle.unreleasedwhole numbercountPeers whose connection began within 24 hours of the snapshot: Core peers on a release line not yet released on the snapshot day, or on an x.99 development build.heuristicNever empty
rows[].opened_24h.core_lifecycle.not_listedwhole numbercountPeers whose connection began within 24 hours of the snapshot: Core peers on a release line the life cycle table does not carry, or announcing a version that does not parse.heuristicNever empty
rows[].service_flagsgroupno unitThe peers sorted by the two service flags Bitcoin Knots defines, as each peer announced them.heuristicnot read The row was recorded before the flags were counted, and its snapshot has not been read again under the proof the method asks for.
rows[].service_flags.connected.blake2b_onlywhole numbercountAll connected peers announcing the BLAKE2b flag only.heuristicNever empty
rows[].service_flags.connected.reduced_data_onlywhole numbercountAll connected peers announcing the reduced-data flag only.heuristicNever empty
rows[].service_flags.connected.bothwhole numbercountAll connected peers announcing both flags.heuristicNever empty
rows[].service_flags.connected.neitherwhole numbercountAll connected peers announcing neither flag.heuristicNever empty
rows[].service_flags.connected.unknownwhole numbercountAll connected peers whose services number was missing or unreadable: unknown, never neither.heuristicNever empty
rows[].service_flags.knots.blake2b_onlywhole numbercountKnots peers announcing the BLAKE2b flag only.heuristicNever empty
rows[].service_flags.knots.reduced_data_onlywhole numbercountKnots peers announcing the reduced-data flag only.heuristicNever empty
rows[].service_flags.knots.bothwhole numbercountKnots peers announcing both flags.heuristicNever empty
rows[].service_flags.knots.neitherwhole numbercountKnots peers announcing neither flag.heuristicNever empty
rows[].service_flags.knots.unknownwhole numbercountKnots peers whose services number was missing or unreadable: unknown, never neither.heuristicNever empty
rows[].possible_captrue/falseno unittrue when the snapshot held exactly 9,000 peers, which may be a cap on KIT’s file rather than a count of the network.not applicable The snapshot held another number of peers, so no cap is in question. The key is then left out, which reads as false: the JSON never writes false, and the CSV does.

CSV columnssg-node-software.csv

One row per KIT snapshot day recorded. Core peers by release line vary by day and are in the JSON only.

CSV columns of Node software on reachable nodes
ColumnTypeUnitWhat it holdsWhen it is empty
dayJSON: rows[].daytextISO dateThe snapshot’s UTC date.Never empty
snapshotJSON: rows[].snapshottextidentifierKIT’s name for the snapshot file, its time in UTC.Never empty
snapshot_atJSON: rows[].snapshot_attextISO date-timeThe same time as an ISO 8601 timestamp.Never empty
clock_offset_minutesJSON: rows[].clock_offset_minuteswhole numberminutesMinutes KIT’s lastConnect clock ran ahead of UTC, derived from the file.Never empty
lifecycle_as_ofJSON: rows[].lifecycle_as_oftextISO dateThe day of the Core lifecycle table the row was classified with.Never empty
sha256JSON: rows[].sha256texthashsha256 of KIT’s snapshot file as served.Never empty
possible_capJSON: rows[].possible_captrue/falseno unittrue when the snapshot held exactly 9,000 peers, which may be a cap on KIT’s file.Never empty
connected_nodesJSON: rows[].connected.nodeswhole numbercountAll connected peers: peers counted.Never empty
connected_ipv4JSON: rows[].connected.ipv4whole numbercountAll connected peers: reached over IPv4.Never empty
connected_ipv6JSON: rows[].connected.ipv6whole numbercountAll connected peers: reached over IPv6.Never empty
connected_ip_unknownJSON: rows[].connected.ip_unknownwhole numbercountAll connected peers: IP version not recorded.Never empty
connected_coreJSON: rows[].connected.implementation.corewhole numbercountAll connected peers: user agent sorted as core by the rules in the JSON.heuristicNever empty
connected_knotsJSON: rows[].connected.implementation.knotswhole numbercountAll connected peers: user agent sorted as knots by the rules in the JSON.heuristicNever empty
connected_btcdJSON: rows[].connected.implementation.btcdwhole numbercountAll connected peers: user agent sorted as btcd by the rules in the JSON.heuristicNever empty
connected_otherJSON: rows[].connected.implementation.otherwhole numbercountAll connected peers: user agent sorted as other by the rules in the JSON.heuristicNever empty
connected_unknownJSON: rows[].connected.implementation.unknownwhole numbercountAll connected peers: user agent sorted as unknown by the rules in the JSON.heuristicNever empty
connected_core_maintainedJSON: rows[].connected.core_lifecycle.maintainedwhole numbercountAll connected peers: Core peers on a release line that was maintained on the snapshot day.heuristicNever empty
connected_core_end_of_lifeJSON: rows[].connected.core_lifecycle.end_of_lifewhole numbercountAll connected peers: Core peers on a release line that was end of life on the snapshot day.heuristicNever empty
connected_core_unreleasedJSON: rows[].connected.core_lifecycle.unreleasedwhole numbercountAll connected peers: Core peers on a release line not yet released on the snapshot day, or on an x.99 development build.heuristicNever empty
connected_core_not_listedJSON: rows[].connected.core_lifecycle.not_listedwhole numbercountAll connected peers: Core peers on a release line the life cycle table does not carry, or announcing a version that does not parse.heuristicNever empty
opened_24h_nodesJSON: rows[].opened_24h.nodeswhole numbercountPeers whose connection began within 24 hours: peers counted.Never empty
opened_24h_ipv4JSON: rows[].opened_24h.ipv4whole numbercountPeers whose connection began within 24 hours: reached over IPv4.Never empty
opened_24h_ipv6JSON: rows[].opened_24h.ipv6whole numbercountPeers whose connection began within 24 hours: reached over IPv6.Never empty
opened_24h_ip_unknownJSON: rows[].opened_24h.ip_unknownwhole numbercountPeers whose connection began within 24 hours: IP version not recorded.Never empty
opened_24h_coreJSON: rows[].opened_24h.implementation.corewhole numbercountPeers whose connection began within 24 hours: user agent sorted as core by the rules in the JSON.heuristicNever empty
opened_24h_knotsJSON: rows[].opened_24h.implementation.knotswhole numbercountPeers whose connection began within 24 hours: user agent sorted as knots by the rules in the JSON.heuristicNever empty
opened_24h_btcdJSON: rows[].opened_24h.implementation.btcdwhole numbercountPeers whose connection began within 24 hours: user agent sorted as btcd by the rules in the JSON.heuristicNever empty
opened_24h_otherJSON: rows[].opened_24h.implementation.otherwhole numbercountPeers whose connection began within 24 hours: user agent sorted as other by the rules in the JSON.heuristicNever empty
opened_24h_unknownJSON: rows[].opened_24h.implementation.unknownwhole numbercountPeers whose connection began within 24 hours: user agent sorted as unknown by the rules in the JSON.heuristicNever empty
opened_24h_core_maintainedJSON: rows[].opened_24h.core_lifecycle.maintainedwhole numbercountPeers whose connection began within 24 hours: Core peers on a release line that was maintained on the snapshot day.heuristicNever empty
opened_24h_core_end_of_lifeJSON: rows[].opened_24h.core_lifecycle.end_of_lifewhole numbercountPeers whose connection began within 24 hours: Core peers on a release line that was end of life on the snapshot day.heuristicNever empty
opened_24h_core_unreleasedJSON: rows[].opened_24h.core_lifecycle.unreleasedwhole numbercountPeers whose connection began within 24 hours: Core peers on a release line not yet released on the snapshot day, or on an x.99 development build.heuristicNever empty
opened_24h_core_not_listedJSON: rows[].opened_24h.core_lifecycle.not_listedwhole numbercountPeers whose connection began within 24 hours: Core peers on a release line the life cycle table does not carry, or announcing a version that does not parse.heuristicNever empty
flags_connected_blake2b_onlyJSON: rows[].service_flags.connected.blake2b_onlywhole numbercountAll connected peers announcing the BLAKE2b flag only; empty when the split was not counted.heuristicnot read The row was recorded before the flags were counted, and its snapshot has not been read again under the proof the method asks for.
flags_connected_reduced_data_onlyJSON: rows[].service_flags.connected.reduced_data_onlywhole numbercountAll connected peers announcing the reduced-data flag only; empty when the split was not counted.heuristicnot read The row was recorded before the flags were counted, and its snapshot has not been read again under the proof the method asks for.
flags_connected_bothJSON: rows[].service_flags.connected.bothwhole numbercountAll connected peers announcing both flags; empty when the split was not counted.heuristicnot read The row was recorded before the flags were counted, and its snapshot has not been read again under the proof the method asks for.
flags_connected_neitherJSON: rows[].service_flags.connected.neitherwhole numbercountAll connected peers announcing neither flag; empty when the split was not counted.heuristicnot read The row was recorded before the flags were counted, and its snapshot has not been read again under the proof the method asks for.
flags_connected_unknownJSON: rows[].service_flags.connected.unknownwhole numbercountAll connected peers whose services number was missing or unreadable: unknown, never neither; empty when the split was not counted.heuristicnot read The row was recorded before the flags were counted, and its snapshot has not been read again under the proof the method asks for.
flags_knots_blake2b_onlyJSON: rows[].service_flags.knots.blake2b_onlywhole numbercountKnots peers announcing the BLAKE2b flag only; empty when the split was not counted.heuristicnot read The row was recorded before the flags were counted, and its snapshot has not been read again under the proof the method asks for.
flags_knots_reduced_data_onlyJSON: rows[].service_flags.knots.reduced_data_onlywhole numbercountKnots peers announcing the reduced-data flag only; empty when the split was not counted.heuristicnot read The row was recorded before the flags were counted, and its snapshot has not been read again under the proof the method asks for.
flags_knots_bothJSON: rows[].service_flags.knots.bothwhole numbercountKnots peers announcing both flags; empty when the split was not counted.heuristicnot read The row was recorded before the flags were counted, and its snapshot has not been read again under the proof the method asks for.
flags_knots_neitherJSON: rows[].service_flags.knots.neitherwhole numbercountKnots peers announcing neither flag; empty when the split was not counted.heuristicnot read The row was recorded before the flags were counted, and its snapshot has not been read again under the proof the method asks for.
flags_knots_unknownJSON: rows[].service_flags.knots.unknownwhole numbercountKnots peers whose services number was missing or unreadable: unknown, never neither; empty when the split was not counted.heuristicnot read The row was recorded before the flags were counted, and its snapshot has not been read again under the proof the method asks for.

Bitcoin Core release lifecycle

bitcoincore.org’s support windows and advisories, with Knots releases beside them.

sg-core-lifecycle45 JSON fieldsNo CSVMethod 1.0.0

JSON fieldssg-core-lifecycle.json

JSON fields of Bitcoin Core release lifecycle
FieldTypeUnitWhat it holdsWhen it is empty
schema_versiontextidentifierThe name and version of the file’s layout; the site’s loader refuses any other.Never empty
datasettextidentifierThe dataset’s ID in the register.Never empty
methodology_versiontextidentifierThe version of the method the file was built with.Never empty
observed_attextISO date-timeWhen the sources answered: the latest of their three served_at times.Never empty
sources.lifecycle.urltextURLThe address of bitcoincore.org’s life cycle table.Never empty
sources.lifecycle.served_attextISO date-timeThe source’s HTTP Date header when it answered: its clock, not the desk’s.Never empty
sources.lifecycle.last_modifiedtextISO date-timeThe source’s Last-Modified header.not disclosed The server sent no Last-Modified header.
sources.lifecycle.licencetextno unitThe licence the source is published under.Never empty
sources.lifecycle.licence_urltextURLAddress of the licence the source is published under.Never empty
sources.security_advisories.urltextURLThe address of bitcoincore.org’s index of security advisories.Never empty
sources.security_advisories.served_attextISO date-timeThe source’s HTTP Date header when it answered: its clock, not the desk’s.Never empty
sources.security_advisories.last_modifiedtextISO date-timeThe source’s Last-Modified header.not disclosed The server sent no Last-Modified header.
sources.security_advisories.licencetextno unitThe licence the source is published under.Never empty
sources.security_advisories.licence_urltextURLAddress of the licence the source is published under.Never empty
sources.knots_releases.urltextURLThe address of the Bitcoin Knots releases feed on GitHub.Never empty
sources.knots_releases.served_attextISO date-timeThe source’s HTTP Date header when it answered: its clock, not the desk’s.Never empty
sources.knots_releases.last_modifiedtextISO date-timeThe source’s Last-Modified header.not disclosed The server sent no Last-Modified header.
sources.knots_releases.licencetextno unitThe licence the source is published under.Never empty
sources.knots_releases.licence_urltextURLAddress of the licence the source is published under.Never empty
core_lineslistno unitOne item per Bitcoin Core release line in the life cycle table, newest first.Never empty
core_lines[].linetextidentifierThe release line as the table writes it: 31.x, 0.21.x.Never empty
core_lines[].majortextidentifierThe line’s major version: 31, 0.21.Never empty
core_lines[].release_datetextISO dateThe day the table gives for the line’s release.not disclosed The table gives no release date yet; release_note holds its words instead.
core_lines[].release_notetextno unitThe table’s own words where it gives no release date, such as TBA.not applicable The table gives a release date.
core_lines[].maintenance_endtextISO dateThe day the line leaves maintenance.not disclosed The table on bitcoincore.org publishes no maintenance-end date, so none is recorded for any line.
core_lines[].end_of_life.datetextISO dateThe end-of-life date the table publishes.not disclosed The table gives a condition instead of a date. The date is never projected.
core_lines[].end_of_life.conditiontextno unitThe table’s condition where it gives no date: after v34.0.not applicable The table gives a date.
core_lines[].end_of_life.after_majortextidentifierThe major version whose release ends the line, read from the condition.not applicable The table gives a date.
security_advisorieslistno unitOne item per advisory in bitcoincore.org’s index, newest first.Never empty
security_advisories[].titletextno unitThe advisory’s title, as the index gives it.Never empty
security_advisories[].urltextURLThe advisory’s post on bitcoincore.org.Never empty
security_advisories[].postedtextISO dateThe post’s date, taken from its address.Never empty
security_advisories[].cve_idslistidentifierThe CVE identifiers in the advisory’s title.none listed The title names no CVE identifier.
knots_releaseslistno unitOne item per release in the Bitcoin Knots releases feed on GitHub, newest first; a release that has left the feed stays as last recorded.Never empty
knots_releases[].tagtextidentifierThe release’s tag.Never empty
knots_releases[].titletextno unitThe release’s title in the feed.Never empty
knots_releases[].urltextURLThe release on GitHub.Never empty
knots_releases[].feed_updatedtextISO date-timeThe feed’s time for the release entry: GitHub’s clock, not a publication date.Never empty
knots_releases[].prereleasetrue/falseno unittrue for a release candidate.Never empty
knots_releases[].core_basetextidentifierThe Bitcoin Core version the release is built on, read from the tag.not disclosed The tag does not name one in the form the desk reads.
knots_releases[].version_datetextISO dateThe Knots version date inside the tag, which is not a release date.not disclosed The tag carries no date in the form the desk reads.
notes.maintenance_endtextno unitThe file’s own note on why no maintenance-end date is recorded.Never empty
notes.end_of_lifetextno unitThe file’s own note on a line whose end of life is a condition, not a date.Never empty
notes.security_advisoriestextno unitThe file’s own note on what the advisory list holds and leaves out.Never empty
notes.knots_releasestextno unitThe file’s own note on what the Knots feed carries and how its dates read.Never empty

CSV columns

JSON only: the file holds three lists (release lines, security advisories and Knots releases), not one table.

Bitcoin Improvement Proposals by status

Every BIP’s status in the BIP repository’s own words, and the changes the desk has seen.

sg-bip-status44 JSON fields15 CSV columnsMethod 1.0.0

JSON fieldssg-bip-status.json

JSON fields of Bitcoin Improvement Proposals by status
FieldTypeUnitWhat it holdsWhen it is empty
schema_versiontextidentifierThe name and version of the file’s layout; the site’s loader refuses any other.Never empty
datasettextidentifierThe dataset’s ID in the register.Never empty
methodology_versiontextidentifierThe version of the method the file was built with.Never empty
observed_attextISO date-timeGitHub’s HTTP Date header when the repository’s commits feed answered: its clock, not the desk’s.Never empty
repository.urltextURLThe BIP repository.Never empty
repository.branchtextidentifierThe branch read.Never empty
repository.committexthashThe commit every row was read at.Never empty
repository.commit_attextISO date-timeThe feed’s time for that commit: GitHub’s clock for when the repository last changed.Never empty
sources.commits_feedtextURLThe repository’s commits feed.Never empty
sources.indextextURLThe repository’s index at a commit; {commit} stands for repository.commit.Never empty
sources.bip_filetextURLOne BIP’s file at a commit; {file} stands for a row’s file.Never empty
sources.processtextURLBIP 3, which sets the statuses.Never empty
sources.termstextno unitWhat the desk keeps from the repository, and under what terms.Never empty
method.statusestextno unitThe file’s own note on where each status comes from and what it does not say.Never empty
method.readingtextno unitThe file’s own note on how the repository is read.Never empty
method.changestextno unitThe file’s own note on when a status change is recorded, and how it is dated.Never empty
method.holdstextno unitThe file’s own note on when a row is held, and when a read writes nothing.Never empty
method.authorstextno unitThe file’s own note on what the author count counts.Never empty
method.allocatedtextno unitThe file’s own note on numbers the index lists without a document.Never empty
changes_sincetextISO dateThe day of the desk’s first read; changes holds every status change seen since.Never empty
allocatedlistno unitNumbers the index lists without a document, kept apart from the BIPs that have a status.none listed The index lists no number without a document.
allocated[].numberwhole numberidentifierA number the index lists without a document.Never empty
allocated[].titletextno unitThe title the index gives the number.Never empty
allocated[].listed_astextno unitThe index’s own words in its status column.Never empty
bipslistno unitOne item per BIP the repository’s index links, by number.Never empty
bips[].numberwhole numberidentifierThe BIP’s number.Never empty
bips[].filetextidentifierThe BIP’s own file in the repository.Never empty
bips[].titletextno unitThe Title header of the BIP’s preamble.not read Only on a held row the desk has never been able to read.
bips[].layertextset valueThe Layer header: one of BIP 123’s layers, as BIP 3 lists them.not disclosed The preamble has no Layer header; BIP 3 makes it optional.
bips[].typetextset valueThe Type header: Specification, Informational or Process.not read Only on a held row the desk has never been able to read.
bips[].statustextset valueThe Status header (Draft, Complete, Deployed or Closed): the repository’s label, not an endorsement and not an activation; on a held row, the status last recorded.not read Only on a held row the desk has never been able to read.
bips[].authorswhole numbercountLines in the Authors header; one line can name more than one person.not read Only on a held row the desk has never been able to read.
bips[].assignedtextISO dateThe Assigned header: the date the number was assigned.not read Only on a held row the desk has never been able to read.
bips[].replaceslistidentifierBIP numbers in the Replaces header.none listed The preamble has no Replaces header.
bips[].proposed_replacementlistidentifierBIP numbers in the Proposed-Replacement header.none listed The preamble has no Proposed-Replacement header.
bips[].heldgroupno unitSet when the last read could not read the row; its other fields are then what the desk last recorded.not applicable The row is not held: the last read took it.
bips[].held.sincetextISO dateThe day the hold began.Never empty
bips[].held.reasontextno unitWhy the row is held.Never empty
changeslistno unitEvery status change the desk has seen, each recorded on the day it was seen and never rewritten.none listed The desk has seen no status change since changes_since.
changes[].seen_ontextISO dateThe day the desk saw the change, not the day the repository made it.Never empty
changes[].numberwhole numberidentifierThe BIP’s number.Never empty
changes[].fromtextset valueThe status the desk had recorded before.not applicable The desk had recorded no status for the BIP before: it was newly listed, or its row had been held since it was first listed.
changes[].totextset valueThe status the desk read.Never empty
changes[].committexthashThe commit the desk read when it saw the change.Never empty

CSV columnssg-bip-status.csv

One row per BIP the repository’s index links, by number. The recorded status changes and the numbers allocated without a document are in the JSON.

CSV columns of Bitcoin Improvement Proposals by status
ColumnTypeUnitWhat it holdsWhen it is empty
numberJSON: bips[].numberwhole numberidentifierThe BIP’s number.Never empty
fileJSON: bips[].filetextidentifierThe BIP’s own file in the repository.Never empty
titleJSON: bips[].titletextno unitThe Title header of the BIP’s preamble.not read Only on a held row the desk has never been able to read.
layerJSON: bips[].layertextset valueThe Layer header; empty when the preamble names none.not disclosed The preamble has no Layer header; BIP 3 makes it optional.
typeJSON: bips[].typetextset valueThe Type header: Specification, Informational or Process.not read Only on a held row the desk has never been able to read.
statusJSON: bips[].statustextset valueThe Status header: Draft, Complete, Deployed or Closed. The repository’s label, not an endorsement and not an activation.not read Only on a held row the desk has never been able to read.
authorsJSON: bips[].authorswhole numbercountLines in the Authors header; one line can name more than one person.not read Only on a held row the desk has never been able to read.
assignedJSON: bips[].assignedtextISO dateThe Assigned header: the date the number was assigned.not read Only on a held row the desk has never been able to read.
replacesJSON: bips[].replacestextidentifierBIP numbers in the Replaces header, separated by spaces.none listed The preamble has no Replaces header.
proposed_replacementJSON: bips[].proposed_replacementtextidentifierBIP numbers in the Proposed-Replacement header, separated by spaces.none listed The preamble has no Proposed-Replacement header.
heldWorked out by the CSVtrue/falseno unittrue when the last read could not read the row; its fields are then what the desk last recorded.Never empty
held_sinceJSON: bips[].held.sincetextISO dateThe day the hold began; empty when the row is not held.not applicable The row is not held: the last read took it.
held_reasonJSON: bips[].held.reasontextno unitWhy the row is held; empty when it is not.not applicable The row is not held: the last read took it.
commitJSON: repository.committexthashThe repository commit the rows were read at.Never empty
urlWorked out by the CSVtextURLThe BIP’s file on GitHub at that commit.Never empty

Difficulty by retarget period

Every retarget period since genesis, its difficulty exact from the block header.

sg-difficulty-ledger47 JSON fields17 CSV columnsMethod 1.0.0

JSON fieldssg-difficulty-ledger.json

JSON fields of Difficulty by retarget period
FieldTypeUnitWhat it holdsWhen it is empty
schema_versiontextidentifierThe name and version of the file’s layout; the site’s loader refuses any other.Never empty
methodology_versiontextidentifierThe version of the method the file was built with.Never empty
datasetslistidentifierThe two datasets the period file is built for, sg-difficulty-ledger and sg-block-ledger; this download carries the first alone, as method.download says.Never empty
observed_attextISO date-timeWhen the chain tip was read: an operator’s HTTP Date header, its clock and not the desk’s.Never empty
through_heightwhole numberheightThe chain tip the file runs through.Never empty
ledger_from_heightwhole numberheightThe first block the reward ledger reads: 628,992, the start of the period that holds the 2020 halving.Never empty
ledger_through_heightwhole numberheightThe last block the reward ledger has read.not in this dataset The reward ledger is its own dataset, sg-block-ledger, and this file leaves it out: not zero, and not unread.
ledger_tip_hashtexthashHash of the last block the reward ledger has read.not in this dataset The reward ledger is its own dataset, sg-block-ledger, and this file leaves it out: not zero, and not unread.
sources.blockstextURLmempool.space’s blocks from a height; {height} stands for the height.Never empty
sources.headertextURLmempool.space’s 80-byte header of a block; {hash} stands for its hash.Never empty
sources.tiptextURLmempool.space’s chain tip height.Never empty
sources.second_operator_heighttextURLBlockstream’s Esplora: the block hash at a height.Never empty
sources.second_operator_txidstextURLBlockstream’s Esplora: a block’s full list of transaction IDs.Never empty
sources.second_operator_coinbasetextURLBlockstream’s Esplora: one transaction in hex, used for the coinbase.Never empty
sources.pool_rulestextURLThe public rules that assign pool labels.Never empty
sources.pool_rules_filetextURLThe rules file a period read from the node is labelled with: pools-v2.json at the commit the builder pins.not read The file was last written under method 1.0.0, which did not record it; a file written under 1.1.0 or later holds it.
sources.pool_matchingtextURLmempool’s own matching code, at the commit the desk’s matching was copied from.not read The file was last written under method 1.0.0, which did not record it; a file written under 1.1.0 or later holds it.
method.difficultytextno unitThe file’s own note on how difficulty is computed from nBits.Never empty
method.retarget_ruletextno unitThe file’s own note on recomputing each retarget by the consensus rule.Never empty
method.rewardstextno unitThe file’s own note on what the reward ledger reads, and from which block.Never empty
method.fees_caveattextno unitThe file’s own note on what fees rest on, and what they cannot see.Never empty
method.poolstextno unitThe file’s own note on where pool labels come from.Never empty
method.verificationtextno unitThe file’s own note on what is checked on each header and each claimed reward.Never empty
method.digesttextno unitThe file’s own note on how rows_sha256 is chained.Never empty
method.limitationtextno unitThe file’s own note on which operators the blocks were read from.Never empty
method.downloadtextno unitWhy this file leaves the reward ledger out, in the file’s own words.Never empty
periodslistno unitOne item per 2,016-block retarget period since the genesis block; the last may still be open.Never empty
periods[].epochwhole numberindexThe retarget period, counted from 0.Never empty
periods[].start_heightwhole numberheightHeight of the period’s first block, the retarget block.Never empty
periods[].end_heightwhole numberheightHeight of the last block read in the period.Never empty
periods[].blockswhole numberblocksBlocks in the period so far; 2,016 when it is complete.Never empty
periods[].completetrue/falseno unittrue when the period holds all 2,016 blocks.Never empty
periods[].first_block_timetextISO date-timeHeader time of the first block.Never empty
periods[].last_block_timetextISO date-timeHeader time of the last block read.Never empty
periods[].retarget_hashtexthashHash of the first block.Never empty
periods[].last_block_hashtexthashHash of the last block read.Never empty
periods[].bitstexthexnBits of the first block’s header, the compact form of the target: eight hex digits.Never empty
periods[].difficulty.fractiontextratioExact difficulty as a reduced fraction: 0xffff × 2^208 over the target.Never empty
periods[].difficulty.decimaldecimal textratioThe fraction cut to 8 decimals.cutNever empty
periods[].difficulty.core_floatdecimal textratioBitcoin Core’s double-precision difficulty, written out exactly.Never empty
periods[].ratio_to_previousdecimal textratioThe previous period’s target over this one, cut to 10 decimals.cutnot applicable The genesis period has no period before it.
periods[].subsidy_satswhole numbersatsSubsidy of the period’s blocks so far, from the halving schedule.Never empty
periods[].ledgergroupno unitThe period’s rewards, fees and pool labels.not in this dataset The reward ledger is its own dataset, sg-block-ledger, and this file leaves it out: not zero, and not unread.
periods[].verification.header_checktextset valueAlways retarget-window here, the check the difficulty pass gives every period: this file states the weaker check, never a stronger one.Never empty
periods[].verification.second_operator_hashtrue/falseno unittrue when the first block’s hash was matched on Blockstream’s Esplora.Never empty
periods[].verification.retarget_ruletrue/falseno unittrue when the nBits equals what the consensus rule requires from the period before.not applicable The genesis period has no period before it.
periods[].verification.coinbase_provedlistno unitThe block heights whose claimed reward was proved against the full transaction list, as ranges.not in this dataset The reward ledger is its own dataset, sg-block-ledger, and this file leaves it out: not zero, and not unread.

CSV columnssg-difficulty-ledger.csv

One row per 2,016-block retarget period since the genesis block; the latest period is still open.

CSV columns of Difficulty by retarget period
ColumnTypeUnitWhat it holdsWhen it is empty
epochJSON: periods[].epochwhole numberindexThe retarget period, counted from 0.Never empty
start_heightJSON: periods[].start_heightwhole numberheightHeight of the period’s first block, the retarget block.Never empty
end_heightJSON: periods[].end_heightwhole numberheightHeight of the last block read in the period.Never empty
blocksJSON: periods[].blockswhole numberblocksBlocks in the period so far; 2,016 when complete.Never empty
completeJSON: periods[].completetrue/falseno unittrue when the period holds all 2,016 blocks.Never empty
first_block_timeJSON: periods[].first_block_timetextISO date-timeHeader time of the first block, UTC.Never empty
last_block_timeJSON: periods[].last_block_timetextISO date-timeHeader time of the last block read, UTC.Never empty
retarget_hashJSON: periods[].retarget_hashtexthashHash of the first block.Never empty
last_block_hashJSON: periods[].last_block_hashtexthashHash of the last block read.Never empty
bitsJSON: periods[].bitstexthexnBits of the first block’s header, eight hex digits.Never empty
difficulty_fractionJSON: periods[].difficulty.fractiontextratioExact difficulty as a reduced fraction: 0xffff × 2^208 over the target.Never empty
difficulty_decimalJSON: periods[].difficulty.decimaldecimal textratioThe fraction cut, never rounded, to 8 decimals.cutNever empty
difficulty_core_floatJSON: periods[].difficulty.core_floatdecimal textratioBitcoin Core’s double-precision difficulty, written out exactly.Never empty
ratio_to_previousJSON: periods[].ratio_to_previousdecimal textratioThe previous period’s target over this one, cut to 10 decimals; empty at genesis.cutnot applicable The genesis period has no period before it.
subsidy_satsJSON: periods[].subsidy_satswhole numbersatsSubsidy of the period’s blocks, from the halving schedule, in sats.Never empty
second_operator_hashJSON: periods[].verification.second_operator_hashtrue/falseno unittrue when the first block’s hash was matched on Blockstream’s Esplora.Never empty
retarget_ruleJSON: periods[].verification.retarget_ruletrue/falseno unittrue when the nBits equals what the consensus rule requires from the period before; empty at genesis.not applicable The genesis period has no period before it.

Blocks by pool label

mempool.space’s pool labels for three windows, read once a week and filed.

sg-pool-blocks25 JSON fields7 CSV columnsMethod 1.1.0

JSON fieldssg-pool-blocks.json

JSON fields of Blocks by pool label
FieldTypeUnitWhat it holdsWhen it is empty
schema_versiontextidentifierThe name and version of the file’s layout; the site’s loader refuses any other.Never empty
methodology_versiontextidentifierThe version of the method the file was built with.Never empty
observed_attextISO date-timeWhen mempool.space served the three windows: the latest HTTP Date header among its responses, its clock and not the desk’s.Never empty
published_story_urltextURLThe Gazette Story the pool desk began with, which reported from an earlier reading of the sample, not from this one.Never empty
sources.one_weektextURLmempool.space’s pools endpoint for one week.Never empty
sources.one_monthtextURLmempool.space’s pools endpoint for one month.Never empty
sources.three_monthstextURLmempool.space’s pools endpoint for three months.Never empty
sources.methodologytextURLThe public rules that assign pool labels.Never empty
windowslistno unitOne item per window: one week, one month and three months.Never empty
windows[].keytextset valueThe window: 1w, 1m or 3m.Never empty
windows[].labeltextno unitThe window in words.Never empty
windows[].observed_blockswhole numberblocksBlocks in the window.Never empty
windows[].poolslistno unitThe window’s pool labels, in the source’s rank order.heuristicNever empty
windows[].pools[].labeltextno unitmempool.space’s pool label, a labelling rule and not ownership; Unknown is its row for blocks its rules could not attribute.heuristicone sourceNever empty
windows[].pools[].blockswhole numberblocksBlocks carrying the label in the window.heuristicone sourceNever empty
method.calculationtextno unitThe file’s own note on how the shares are worked out and how the reading is dated.Never empty
method.attributiontextno unitThe file’s own note on how mempool.space assigns a label.Never empty
method.limitationtextno unitThe file’s own note on what a pool label does not reveal.Never empty
method.why_it_matterstextno unitThe file’s own note on why concentration under few labels matters.Never empty
boundaries.read_only_snapshottrue/falseno unitAlways true: the file is a saved reading, and nothing in it is live.Never empty
boundaries.pool_labels_are_not_ownershiptrue/falseno unitAlways true: a label says nothing of who owns the machines.Never empty
boundaries.hashrate_not_inferredtrue/falseno unitAlways true: no hashrate is worked out from the block counts.Never empty
boundaries.geography_not_inferredtrue/falseno unitAlways true: no location is worked out.Never empty
boundaries.collusion_not_inferredtrue/falseno unitAlways true: no coordination between operators is inferred.Never empty
boundaries.external_actiontrue/falseno unitAlways false: building the file acted on nothing outside the desk.Never empty

CSV columnssg-pool-blocks.csv

One row per pool label per window, in the source’s rank order. A label is a labelling rule, not ownership.

CSV columns of Blocks by pool label
ColumnTypeUnitWhat it holdsWhen it is empty
observed_atJSON: observed_attextISO date-timeWhen mempool.space served the three windows, UTC.Never empty
window_keyJSON: windows[].keytextset value1w, 1m or 3m.Never empty
window_labelJSON: windows[].labeltextno unitThe window in words.Never empty
observed_blocksJSON: windows[].observed_blockswhole numberblocksBlocks in the window.Never empty
rankWorked out by the CSVwhole numberindexThe label’s place in the window by blocks, counted from 1.heuristicone sourceNever empty
labelJSON: windows[].pools[].labeltextno unitmempool.space’s pool label; Unknown is its row for blocks its rules could not attribute.heuristicone sourceNever empty
blocksJSON: windows[].pools[].blockswhole numberblocksBlocks carrying the label in the window.heuristicone sourceNever empty

Selected corporate treasuries

One filing per company; Strategy’s row is checked every day.

sg-treasury-ledger47 JSON fields25 CSV columnsMethod v2

JSON fieldssg-treasury-ledger.json

JSON fields of Selected corporate treasuries
FieldTypeUnitWhat it holdsWhen it is empty
boundaries.complete_market_ranking_publishedtrue/falseno unitAlways false: the file ranks a selected set, not every holder.Never empty
boundaries.external_actiontrue/falseno unitAlways false: building the file acted on nothing outside the desk.Never empty
boundaries.market_price_fetchedtrue/falseno unitAlways false: no market price was fetched for the file.Never empty
boundaries.read_onlytrue/falseno unitAlways true: the file is a saved reading, and nothing in it is live.Never empty
boundaries.runtime_state_exposedtrue/falseno unitAlways false: nothing of the desk’s internal state is in the file.Never empty
boundaries.selected_settrue/falseno unitAlways true: the companies are a selected set.Never empty
boundaries.verified_onlytrue/falseno unitAlways true: only holdings verified against a filing or disclosure are in the file.Never empty
calculation.orderingtextno unitThe file’s own note on how the companies are ordered.Never empty
calculation.totaltextno unitThe file’s own note on how the total is summed.Never empty
companieslistno unitOne item per company, each from one filing or disclosure, largest holding first.Never empty
companies[].as_of_datetextISO dateThe date the filing or disclosure states the holding for.Never empty
companies[].btc_amountdecimal textBTCBitcoin the filing or disclosure states the company held.as statedNever empty
companies[].capitalgroupno unitHow the filing says the bitcoin was funded.not read The desk has recorded no funding note for the company.
companies[].capital.basic_share_changetextno unitThe change in basic shares the filing reports.not disclosed The filing reports no figure the desk could take for it.
companies[].capital.funding_pathtextno unitHow the filing says the bitcoin was funded, with the filing’s own amounts in the currency it reports.Never empty
companies[].changegroupno unitThe change in the holding over one reported period.not read The desk has recorded no change for the company’s row. That is not a statement that the holding did not change.
companies[].change.btc_deltadecimal textBTCThe change over the period; negative for a reduction.as statedNever empty
companies[].change.period_endtextISO dateLast day of the change period.Never empty
companies[].change.period_starttextISO dateFirst day of the change period.Never empty
companies[].change.previous_btcdecimal textBTCThe holding at the start of the change period.as statedNever empty
companies[].confidencetextset valueThe desk’s confidence in the row: high, medium or low.Never empty
companies[].controlgroupno unitWhat the filing establishes about custody and control.not read The desk has recorded no custody note for the company.
companies[].control.notetextno unitWhat the filing establishes about custody and control, in words.Never empty
companies[].entity_typetextset valuepublic_company or private_company.Never empty
companies[].evidence_typetextset valueregulatory_filing, audited_report or company_disclosure.Never empty
companies[].exchangetextno unitWhere the ticker trades.not applicable The company has no listed shares.
companies[].jurisdictiontextno unitWhere the company is incorporated.Never empty
companies[].limitationtextno unitWhat the row does not establish; it may repeat a filing’s own amounts in the currency it reports.Never empty
companies[].nametextno unitThe company’s name.Never empty
companies[].source.locatortextno unitWhere in the filing or disclosure the holding is stated.Never empty
companies[].source.published_ontextISO dateThe day the filing or disclosure was published.Never empty
companies[].source.titletextno unitTitle of the filing or disclosure the row rests on.Never empty
companies[].source.urltextURLAddress of the filing or disclosure the row rests on.Never empty
companies[].tickertextidentifierThe company’s ticker.not applicable The company has no listed shares, so no ticker.
companies[].control.restricted_btcdecimal textBTCBitcoin the filing reports as restricted.as statednot disclosed The filing states no restricted bitcoin. That is not a reported zero.
companies[].control.loaned_btcdecimal textBTCBitcoin the filing reports as loaned.as statednot disclosed The filing states no loaned bitcoin. That is not a reported zero.
companies[].capital.btc_per_share_changetextno unitThe change in bitcoin per share, where the filing supports one.not disclosed The filing supports no figure for it.
companies[].capital.diluted_share_changetextno unitThe change in diluted shares the filing reports.not disclosed The filing reports no figure the desk could take for it.
input_sha256texthashsha256 of the reviewed evidence the file was exported from.Never empty
methodology_versiontextidentifierThe version of the method the file was built with.Never empty
schema_versiontextidentifierThe name and version of the file’s layout; the site’s loader refuses any other.Never empty
scope.descriptiontextno unitWhat the selected set is, in the file’s own words.Never empty
scope.excludeslistno unitWhat the set leaves out.none listed The file names nothing it leaves out.
summary.earliest_as_of_datetextISO dateThe oldest date any row’s holding is stated for.Never empty
summary.latest_as_of_datetextISO dateThe newest date any row’s holding is stated for.Never empty
summary.selected_total_btcdecimal textBTCThe rows’ holdings added up, each as of its own date: a total of the selected set, not of every company.as statedNever empty
summary.selected_verified_entitieswhole numbercountCompanies in the file.Never empty

CSV columnssg-treasury-ledger.csv

One row per company, each from one filing or disclosure, largest holding first.

CSV columns of Selected corporate treasuries
ColumnTypeUnitWhat it holdsWhen it is empty
nameJSON: companies[].nametextno unitThe company’s name.Never empty
entity_typeJSON: companies[].entity_typetextset valuepublic_company or private_company.Never empty
tickerJSON: companies[].tickertextidentifierIts ticker; empty when it has none.not applicable The company has no listed shares, so no ticker.
exchangeJSON: companies[].exchangetextno unitWhere the ticker trades; empty when it has none.not applicable The company has no listed shares.
jurisdictionJSON: companies[].jurisdictiontextno unitWhere the company is incorporated.Never empty
btc_amountJSON: companies[].btc_amountdecimal textBTCBitcoin the filing states, an exact decimal in BTC.as statedNever empty
as_of_dateJSON: companies[].as_of_datetextISO dateThe date the filing states the holding for.Never empty
evidence_typeJSON: companies[].evidence_typetextset valueregulatory_filing, audited_report or company_disclosure.Never empty
source_urlJSON: companies[].source.urltextURLAddress of the filing or disclosure the row rests on.Never empty
source_titleJSON: companies[].source.titletextno unitTitle of that filing or disclosure.Never empty
source_locatorJSON: companies[].source.locatortextno unitWhere in it the holding is stated.Never empty
source_published_onJSON: companies[].source.published_ontextISO dateThe day it was published.Never empty
confidenceJSON: companies[].confidencetextset valueThe desk’s confidence in the row: high, medium or low.Never empty
limitationJSON: companies[].limitationtextno unitWhat the row does not establish.Never empty
change_previous_btcJSON: companies[].change.previous_btcdecimal textBTCThe holding at the start of the change period; empty when no change is recorded.as statednot read The desk has recorded no change for the company’s row. That is not a statement that the holding did not change.
change_btc_deltaJSON: companies[].change.btc_deltadecimal textBTCThe change over the period in BTC; negative for a reduction.as statednot read The desk has recorded no change for the company’s row. That is not a statement that the holding did not change.
change_period_startJSON: companies[].change.period_starttextISO dateFirst day of the change period.not read The desk has recorded no change for the company’s row. That is not a statement that the holding did not change.
change_period_endJSON: companies[].change.period_endtextISO dateLast day of the change period.not read The desk has recorded no change for the company’s row. That is not a statement that the holding did not change.
capital_funding_pathJSON: companies[].capital.funding_pathtextno unitHow the filing says the bitcoin was funded, with the filing’s own amounts; empty when not recorded.not read The desk has recorded no funding note for the company.
capital_basic_share_changeJSON: companies[].capital.basic_share_changetextno unitThe change in basic shares the filing reports.not disclosed The filing reports no figure the desk could take for it. Also empty where the desk has recorded no funding note for the company; capital_funding_path is then empty too.
capital_diluted_share_changeJSON: companies[].capital.diluted_share_changetextno unitThe change in diluted shares the filing reports.not disclosed The filing reports no figure the desk could take for it. Also empty where the desk has recorded no funding note for the company; capital_funding_path is then empty too.
capital_btc_per_share_changeJSON: companies[].capital.btc_per_share_changetextno unitThe change in bitcoin per share, where the filing supports one.not disclosed The filing supports no figure for it. Also empty where the desk has recorded no funding note for the company; capital_funding_path is then empty too.
control_restricted_btcJSON: companies[].control.restricted_btcdecimal textBTCBitcoin the filing reports as restricted; empty when it states none.as statednot disclosed The filing states no restricted bitcoin; not a reported zero. Also empty where the desk has recorded no custody note for the company; control_note is then empty too.
control_loaned_btcJSON: companies[].control.loaned_btcdecimal textBTCBitcoin the filing reports as loaned; empty when it states none.as statednot disclosed The filing states no loaned bitcoin; not a reported zero. Also empty where the desk has recorded no custody note for the company; control_note is then empty too.
control_noteJSON: companies[].control.notetextno unitWhat the filing establishes about custody and control.not read The desk has recorded no custody note for the company.

Strategy’s filed bitcoin totals

Every bitcoin total Strategy has stated in an 8-K, 10-Q or 10-K since 2020, one row each.

sg-strategy-filings61 JSON fields19 CSV columnsMethod 1.0.0

JSON fieldssg-strategy-filings.json

JSON fields of Strategy’s filed bitcoin totals
FieldTypeUnitWhat it holdsWhen it is empty
schema_versiontextidentifierThe name and version of the file’s layout; the site’s loader refuses any other.Never empty
datasettextidentifierThe dataset’s ID in the register.Never empty
methodology_versiontextidentifierThe version of the method the file was built with.Never empty
observed_attextISO date-timeEDGAR’s clock when its listing of filings was read.Never empty
issuer.nametextno unitThe company’s name today.Never empty
issuer.formerlytextno unitThe company’s name when the first filings were made.Never empty
issuer.ciktextidentifierThe company’s CIK on EDGAR, ten digits.Never empty
coverage.filed_fromtextISO dateThe day filings are read from: the first of the month of the company’s first bitcoin purchase.Never empty
coverage.filed_throughtextISO dateThe day of the newest filing read.Never empty
coverage.formslistset valueThe SEC forms read; no other form is.Never empty
coverage.filings_readwhole numbercountFilings read.Never empty
coverage.filings_with_totalwhole numbercountFilings that state at least one dated total.Never empty
coverage.filings_without_totalwhole numbercountFilings that report a purchase or sale and state no total.Never empty
coverage.filings_unparsedwhole numbercountFilings that mention a holding the reader could not take a dated total from.Never empty
coverage.filings_without_holding_or_tradewhole numbercountFilings with no total and no purchase or sale to list.Never empty
source.publishertextno unitWho publishes the filings.Never empty
source.listingtextURLEDGAR’s listing of the company’s filings.Never empty
source.archivetextURLWhere the filings’ documents sit on EDGAR.Never empty
source.termstextno unitThe terms the filings are read under.Never empty
source.terms_urltextURLThe SEC’s notice on reading EDGAR.Never empty
wording_classes.holds_approximatelytextno unitWhat a sentence or a table cell must look like to be read as the wording class holds_approximately.Never empty
wording_classes.held_an_aggregate_oftextno unitWhat a sentence or a table cell must look like to be read as the wording class held_an_aggregate_of.Never empty
wording_classes.bitcoins_as_oftextno unitWhat a sentence or a table cell must look like to be read as the wording class bitcoins_as_of.Never empty
wording_classes.digital_assets_comprisedtextno unitWhat a sentence or a table cell must look like to be read as the wording class digital_assets_comprised.Never empty
wording_classes.bitcoin_holdings_as_oftextno unitWhat a sentence or a table cell must look like to be read as the wording class bitcoin_holdings_as_of.Never empty
wording_classes.aggregate_btc_holdings_tabletextno unitWhat a sentence or a table cell must look like to be read as the wording class aggregate_btc_holdings_table.Never empty
method.readingtextno unitThe file’s own note on which filings are read and what counts as a total.Never empty
method.rowstextno unitThe file’s own note on how filings become rows.Never empty
method.restatingtextno unitThe file’s own note on two filings that state one date.Never empty
method.continuitytextno unitThe file’s own note on checking each step against what its filing reports.Never empty
method.limitationtextno unitThe file’s own note on what a filed total is not.Never empty
rowslistno unitOne item per total a filing states, by the date it is stated for.Never empty
rows[].as_of_datetextISO dateThe date the filing states the total for.Never empty
rows[].btc_amountdecimal textBTCBitcoin the filing states the company held, as filed: a filed total, not a wallet balance.as statedapproximateNever empty
rows[].approximatetrue/falseno unittrue when the filing says approximately.Never empty
rows[].formtextset valueThe SEC form: 8-K, 10-Q, 10-K or an amendment of one.Never empty
rows[].accessiontextidentifierThe filing’s SEC accession number.Never empty
rows[].filed_ontextISO dateThe day the filing was made.Never empty
rows[].urltextURLThe document the statement is in: the report itself or an exhibit.Never empty
rows[].locatortextno unitWhere in that document the total is stated.Never empty
rows[].wording_classtextset valueWhich of the wordings in wording_classes the total was read from.Never empty
rows[].reported_changegroupno unitThe purchases and sales the filing reports for one period.not disclosed The filing reports no purchase and no sale of bitcoin.
rows[].restatestextidentifierAccession of the filing that first stated a total for this date.not applicable The row is the first statement for its date, the one that draws the step.
rows[].continuitygroupno unitThe step checked against the purchases and sales its filing reports.not applicable The row is not checked: it restates a date and draws no step, its filing reports no purchase or sale, or no filed total stands for its step to be measured from.
rows[].reported_change.period_starttextISO dateFirst day of the period the filing reports purchases or sales for.not disclosed The filing reports a purchase or sale without the period it was made in.
rows[].reported_change.period_endtextISO dateLast day of the period the filing reports purchases or sales for.not disclosed The filing reports a purchase or sale without the period it was made in.
rows[].reported_change.acquired_btcdecimal textBTCBitcoin the filing reports bought in the period; 0 when it reports none bought.as statednot disclosed The filing reports no purchases. Silence is not a reported zero.
rows[].reported_change.sold_btcdecimal textBTCBitcoin the filing reports sold in the period; 0 when it reports none sold.as statednot disclosed The filing reports no sales. Silence is not a reported zero.
rows[].continuity.statustextset valuematches or differs: the step against what the filing reports; a step that differs is flagged and left as filed.Never empty
rows[].continuity.baseline_accessiontextidentifierThe filing that stated the total the step is measured from.Never empty
rows[].continuity.baseline_as_of_datetextISO dateThe date of the filed total the step is measured from.Never empty
rows[].continuity.baseline_btcdecimal textBTCThe filed total the step is measured from.as statedNever empty
rows[].continuity.change_btcdecimal textBTCThis total less the baseline; negative for a decrease.as statedNever empty
rows[].continuity.reported_net_btcdecimal textBTCPurchases less sales as the filing reports them.as statedNever empty
filingslistno unitOne item per filing read, whether or not it gave a row.Never empty
filings[].accessiontextidentifierThe filing’s SEC accession number.Never empty
filings[].formtextset valueThe SEC form.Never empty
filings[].filed_ontextISO dateThe day the filing was made.Never empty
filings[].urltextURLThe filing’s main document.Never empty
filings[].outcometextset valueWhat the filing gave: aggregate, no_aggregate_stated, unparsed or no_holding_or_trade.Never empty
filings[].notetextno unitWhy a filing is listed without a row.not applicable The filing gave a row, or has no total and no purchase or sale to list.

CSV columnssg-strategy-filings.csv

One row per total a filing states. The log of every filing read, and the filings listed without a total, are in the JSON.

CSV columns of Strategy’s filed bitcoin totals
ColumnTypeUnitWhat it holdsWhen it is empty
as_of_dateJSON: rows[].as_of_datetextISO dateThe date the filing states the total for.Never empty
btc_amountJSON: rows[].btc_amountdecimal textBTCBitcoin the filing states, an exact decimal in BTC, as filed.as statedapproximateNever empty
approximateJSON: rows[].approximatetrue/falseno unittrue when the filing says approximately.Never empty
formJSON: rows[].formtextset valueThe SEC form: 8-K, 10-Q, 10-K or an amendment.Never empty
accessionJSON: rows[].accessiontextidentifierThe filing’s SEC accession number.Never empty
filed_onJSON: rows[].filed_ontextISO dateThe day the filing was made.Never empty
urlJSON: rows[].urltextURLAddress of the document the statement is in, on sec.gov.Never empty
locatorJSON: rows[].locatortextno unitWhere in that document the total is stated.Never empty
wording_classJSON: rows[].wording_classtextset valueWhich of the wordings listed in the JSON the total was read from.Never empty
restatesJSON: rows[].restatestextidentifierAccession of the filing that first stated a total for this date; empty for the row that draws the step.not applicable The row is the first statement for its date, the one that draws the step.
reported_period_startJSON: rows[].reported_change.period_starttextISO dateFirst day of the period the filing reports purchases or sales for; empty when it gives none.not disclosed The filing reports a purchase or sale without the period it was made in. Also empty where the filing reports no purchase and no sale; reported_acquired_btc and reported_sold_btc are then empty too.
reported_period_endJSON: rows[].reported_change.period_endtextISO dateLast day of that period.not disclosed The filing reports a purchase or sale without the period it was made in. Also empty where the filing reports no purchase and no sale; reported_acquired_btc and reported_sold_btc are then empty too.
reported_acquired_btcJSON: rows[].reported_change.acquired_btcdecimal textBTCBitcoin the filing reports bought in the period; 0 when it reports none bought, empty when it reports no purchases.as statednot disclosed The filing reports a sale and no purchases. Silence is not a reported zero. Also empty where the filing reports no purchase and no sale; reported_sold_btc is then empty too.
reported_sold_btcJSON: rows[].reported_change.sold_btcdecimal textBTCBitcoin the filing reports sold in the period; 0 when it reports none sold, empty when it reports no sales.as statednot disclosed The filing reports a purchase and no sales. Silence is not a reported zero. Also empty where the filing reports no purchase and no sale; reported_acquired_btc is then empty too.
continuity_statusJSON: rows[].continuity.statustextset valuematches or differs: the step against what the filing reports; empty when it is not checked.not applicable The row is not checked: it restates a date and draws no step, its filing reports no purchase or sale, or no filed total stands for its step to be measured from.
continuity_baseline_as_of_dateJSON: rows[].continuity.baseline_as_of_datetextISO dateThe date of the filed total the step is measured from.not applicable The row is not checked: it restates a date and draws no step, its filing reports no purchase or sale, or no filed total stands for its step to be measured from.
continuity_baseline_accessionJSON: rows[].continuity.baseline_accessiontextidentifierThe filing that stated that total.not applicable The row is not checked: it restates a date and draws no step, its filing reports no purchase or sale, or no filed total stands for its step to be measured from.
continuity_change_btcJSON: rows[].continuity.change_btcdecimal textBTCThis total less the baseline, in BTC; negative for a decrease.as statednot applicable The row is not checked: it restates a date and draws no step, its filing reports no purchase or sale, or no filed total stands for its step to be measured from.
continuity_reported_net_btcJSON: rows[].continuity.reported_net_btcdecimal textBTCPurchases less sales as the filing reports them, in BTC.as statednot applicable The row is not checked: it restates a date and draws no step, its filing reports no purchase or sale, or no filed total stands for its step to be measured from.

Bitcoin held through disclosed claims

Each holder’s latest disclosure, summed against issued supply at a pinned block.

sg-claims-floor43 JSON fields11 CSV columnsMethod 2.2.0

JSON fieldssg-claims-floor.json

JSON fields of Bitcoin held through disclosed claims
FieldTypeUnitWhat it holdsWhen it is empty
as_of.block_heightwhole numberheightThe block issued supply is pinned at; it pins the supply only, and each holding keeps its own date.Never empty
as_of.height_source.titletextno unitWhere the block’s height was read.Never empty
as_of.height_source.urltextURLThe pinned block at that source.Never empty
as_of.observed_ontextISO dateThe day the block was read.Never empty
boundaries.clustering_heuristics_usedtrue/falseno unitAlways false: no coin is attributed to a holder by address clustering.Never empty
boundaries.external_actiontrue/falseno unitAlways false: building the file acted on nothing outside the desk.Never empty
boundaries.floor_not_estimatetrue/falseno unitAlways true: the figure is a floor on disclosed positions, never an estimate.Never empty
boundaries.market_price_fetchedtrue/falseno unitAlways false: no market price was fetched for the file.Never empty
boundaries.read_onlytrue/falseno unitAlways true: the file is a saved reading, and nothing in it is live.Never empty
boundaries.runtime_state_exposedtrue/falseno unitAlways false: nothing of the desk’s internal state is in the file.Never empty
categorieslistno unitOne item per kind of holder: spot funds, public-company treasuries and governments.Never empty
categories[].entitieslistno unitThe holders counted in the category, each from its own latest disclosure.not read The category is not yet compiled: its holdings are unknown, not zero.
categories[].entities[].as_of_datetextISO dateThe date the disclosure states the holding for.Never empty
categories[].entities[].btc_amountdecimal textBTCBitcoin the disclosure states.as statedNever empty
categories[].entities[].entity_keytextidentifierA stable key for the holder.Never empty
categories[].entities[].entity_nametextno unitThe holder’s name.Never empty
categories[].entities[].evidence.kindtextset valueregulatory_filing, audited_report, company_disclosure or official_disclosure.Never empty
categories[].entities[].evidence.titletextno unitTitle of the record the row rests on.Never empty
categories[].entities[].evidence.urltextURLAddress of the record the row rests on.Never empty
categories[].entities[].evidence.locatortextno unitWhere in the record the holding is stated.Never empty
categories[].exit_dependencytextno unitWhat a holder of the claim depends on to get out.Never empty
categories[].keytextset valuespot_etf, public_company_treasury or government.Never empty
categories[].keys_held_bytextno unitWho holds the keys.Never empty
categories[].labeltextno unitThe category in words.Never empty
categories[].limitationtextno unitWhat the category’s figure does not establish.Never empty
categories[].statustextset valuecompiled, or not_yet_compiled for a category with no rows yet.Never empty
categories[].what_the_holder_ownstextno unitWhat the holder of the claim owns.Never empty
categories[].why_it_matterstextno unitWhy the category matters, where the desk has written it.not read The desk has written no such note for the category.
method.complement_warningtextno unitThe file’s own note on what the remainder is and is not.Never empty
method.floor_ruletextno unitThe file’s own note on what may be counted.Never empty
method.percentage_ruletextno unitThe file’s own note on how the percentages are computed and cut.Never empty
method.supply_ruletextno unitThe file’s own note on how issued supply is computed.Never empty
method.why_a_floortextno unitThe file’s own note on why the figure is a floor.Never empty
methodology_versiontextidentifierThe version of the method the file was built with.Never empty
schema_versiontextidentifierThe name and version of the file’s layout; the site’s loader refuses any other.Never empty
scope.descriptiontextno unitWhat the dataset counts, in the file’s own words.Never empty
scope.excludeslistno unitWhat it leaves out.none listed The file names nothing it leaves out.
summary.issued_btcdecimal textBTCBitcoin issued through the pinned block, computed from the subsidy schedule and fetched from no one.Never empty
summary.intermediated_floor_btcdecimal textBTCThe counted holders’ latest disclosures added up, each as of its own date.lower boundas statedNever empty
summary.intermediated_floor_percentdecimal textpercentThe floor as a percent of issued supply, cut to four places.lower boundcutNever empty
summary.unclassified_btcdecimal textBTCIssued supply less the floor: the bitcoin the counted disclosures do not account for, which is not evidence of self-custody.Never empty
summary.unclassified_percentdecimal textpercent100 less the floor’s percent, so the two always sum to 100.Never empty
input_sha256texthashsha256 of the reviewed evidence the file was exported from.not read The file was written without recording the digest.

CSV columnssg-claims-floor.csv

One row per holder’s latest disclosure. The pinned block, issued supply and the floor are in the JSON.

CSV columns of Bitcoin held through disclosed claims
ColumnTypeUnitWhat it holdsWhen it is empty
category_keyJSON: categories[].keytextset valuespot_etf, public_company_treasury or government.Never empty
category_labelJSON: categories[].labeltextno unitThe category in words.Never empty
category_statusJSON: categories[].statustextset valuecompiled, or not_yet_compiled for a category with no rows yet.Never empty
entity_keyJSON: categories[].entities[].entity_keytextidentifierA stable key for the holder; empty on the one row of a category not yet compiled.not read The category is not yet compiled: its holdings are unknown, not zero. It keeps one row that names the category and no holder.
entity_nameJSON: categories[].entities[].entity_nametextno unitThe holder’s name.not read The category is not yet compiled: its holdings are unknown, not zero. It keeps one row that names the category and no holder.
btc_amountJSON: categories[].entities[].btc_amountdecimal textBTCBitcoin the disclosure states, an exact decimal in BTC.as statednot read The category is not yet compiled: its holdings are unknown, not zero. It keeps one row that names the category and no holder.
as_of_dateJSON: categories[].entities[].as_of_datetextISO dateThe date the disclosure states the holding for.not read The category is not yet compiled: its holdings are unknown, not zero. It keeps one row that names the category and no holder.
evidence_kindJSON: categories[].entities[].evidence.kindtextset valueregulatory_filing, audited_report, company_disclosure or official_disclosure.not read The category is not yet compiled: its holdings are unknown, not zero. It keeps one row that names the category and no holder.
evidence_titleJSON: categories[].entities[].evidence.titletextno unitTitle of the record the row rests on.not read The category is not yet compiled: its holdings are unknown, not zero. It keeps one row that names the category and no holder.
evidence_urlJSON: categories[].entities[].evidence.urltextURLAddress of that record.not read The category is not yet compiled: its holdings are unknown, not zero. It keeps one row that names the category and no holder.
evidence_locatorJSON: categories[].entities[].evidence.locatortextno unitWhere in it the holding is stated.not read The category is not yet compiled: its holdings are unknown, not zero. It keeps one row that names the category and no holder.

Bitcoin in US spot ETF trusts

Bitcoin at each quarter end in 14 of the 16 trusts on the list, from their 10-Q and 10-K.

sg-etf-trusts69 JSON fields11 CSV columnsMethod 1.0.0

JSON fieldssg-etf-trusts.json

JSON fields of Bitcoin in US spot ETF trusts
FieldTypeUnitWhat it holdsWhen it is empty
schema_versiontextidentifierThe name and version of the file’s layout; the site’s loader refuses any other.Never empty
datasettextidentifierThe dataset’s ID in the register.Never empty
methodology_versiontextidentifierThe version of the method the file was built with.Never empty
observed_attextISO date-timeEDGAR’s clock when it was read.Never empty
source.publishertextno unitWho publishes the filings.Never empty
source.index_urltextURLEDGAR’s filing indexes.Never empty
source.documents_urltextURLWhere the filings’ documents sit on EDGAR.Never empty
source.termstextno unitThe terms the filings are read under.Never empty
source.terms_urltextURLThe SEC’s notice on reading EDGAR.Never empty
list_ruletextno unitThe rule that puts a trust on the list, and the day the list was compiled.Never empty
orderslistno unitThe Commission orders the list rests on.Never empty
orders[].releasetextidentifierThe order’s release number.Never empty
orders[].datedtextISO dateThe day the order was made.Never empty
orders[].titletextno unitThe order’s title.Never empty
orders[].urltextURLThe order on sec.gov.Never empty
orders[].coverstextno unitWhich products the order covers.Never empty
trustslistno unitOne item per trust on the list, read or not.Never empty
trusts[].keytextidentifierA stable key for the trust.Never empty
trusts[].nametextno unitThe trust’s name today.Never empty
trusts[].tickertextidentifierThe trust’s ticker.Never empty
trusts[].cikwhole numberidentifierThe registrant’s CIK on EDGAR.Never empty
trusts[].exchangetextno unitThe exchange the trust’s shares are listed on.Never empty
trusts[].approved_astextno unitThe name the order or the certification approved the trust under.Never empty
trusts[].basis.ordertextidentifierThe release that approved the trust by name, or the one that set the generic listing standards a later listing rests on.Never empty
trusts[].basis.named_in_ordertrue/falseno unittrue when that order names the trust.Never empty
trusts[].basis.certification.accessiontextidentifierThe EDGAR accession number of the exchange’s certification, Form CERT; period ends are read from its date on.Never empty
trusts[].basis.certification.filed_ontextISO dateThe day the exchange’s certification was filed.Never empty
trusts[].basis.certification.urltextURLAddress of the document the desk read in the exchange’s certification.Never empty
trusts[].statustextset valueread, or not_read for a trust whose filings the rule cannot read; a trust not read has no rows and is in no total: unknown, not zero.Never empty
trusts[].not_read_reasontextno unitWhy the rule cannot read the trust’s filings.not applicable The trust is read.
trusts[].removalgroupno unitThe exchange’s filing to remove the trust from listing.not applicable The desk found no filing on EDGAR to remove the trust from listing.
trusts[].notetextno unitWhat else a reader should know of the trust.not applicable Nothing further is noted for the trust.
trusts[].removal.formtextidentifierThe form of the removal filing.Never empty
trusts[].removal.accessiontextidentifierThe EDGAR accession number of the removal filing.Never empty
trusts[].removal.filed_ontextISO dateThe day the removal filing was filed.Never empty
trusts[].removal.urltextURLAddress of the document the desk read in the removal filing.Never empty
not_in_listlistno unitProducts a reader might expect on the list, each with the record that keeps it out.none listed No such product is recorded.
not_in_list[].nametextno unitThe product’s name.Never empty
not_in_list[].tickertextidentifierThe product’s ticker.not applicable The product’s shares are not established as listed, so there is no ticker to give.
not_in_list[].cikwhole numberidentifierThe registrant’s CIK on EDGAR.Never empty
not_in_list[].reasontextno unitWhy the product is not on the list.Never empty
not_in_list[].evidencegroupno unitThe filing that keeps the product off the list.not read The desk has recorded no single filing for the product; reason says why it is left out.
not_in_list[].evidence.formtextidentifierThe form of the filing that keeps the product off the list.Never empty
not_in_list[].evidence.accessiontextidentifierThe EDGAR accession number of the filing that keeps the product off the list.Never empty
not_in_list[].evidence.filed_ontextISO dateThe day the filing that keeps the product off the list was filed.Never empty
not_in_list[].evidence.urltextURLAddress of the document the desk read in the filing that keeps the product off the list.Never empty
rowslistno unitOne item per filed quantity: a trust, a quarter end and the report that states it; a quarter a trust has not reported has no item.Never empty
rows[].trusttextno unitThe trust’s name as the list gives it.Never empty
rows[].tickertextidentifierThe trust’s ticker.Never empty
rows[].cikwhole numberidentifierThe registrant’s CIK on EDGAR.Never empty
rows[].period_endtextISO dateThe quarter end the quantity is stated for.Never empty
rows[].btc_amountdecimal textBTCBitcoin held, with every digit the report prints and no more: a filed quarter-end quantity, not today’s holding.as statedNever empty
rows[].formtextset value10-Q, 10-K, 10-Q/A or 10-K/A.Never empty
rows[].accessiontextidentifierThe report’s EDGAR accession number.Never empty
rows[].filed_ontextISO dateThe day the report was filed.Never empty
rows[].document_urltextURLThe report’s primary document.Never empty
rows[].locatortextno unitWhere in the report the quantity is stated, and how it is dated.Never empty
rows[].restatestextidentifierAccession of the row this one restates.not applicable The figure is as first filed.
method.readingtextno unitThe file’s own note on which reports are read and which cell is taken.Never empty
method.datingtextno unitThe file’s own note on how a quantity is dated.Never empty
method.restatementstextno unitThe file’s own note on a quantity filed twice for one period.Never empty
method.absencetextno unitThe file’s own note on a quarter with no report, and a trust not read.Never empty
method.totaltextno unitThe file’s own note on how a total is added, and why it is a lower bound.Never empty
method.limitationtextno unitThe file’s own note on what a filed quarter-end quantity is not.Never empty
boundaries.quantities_onlytrue/falseno unitAlways true: the file holds quantities of bitcoin only.Never empty
boundaries.market_price_not_fetchedtrue/falseno unitAlways true: no market price was fetched for the file.Never empty
boundaries.values_not_readtrue/falseno unitAlways true: no net asset value or fair value is read.Never empty
boundaries.nothing_carried_forwardtrue/falseno unitAlways true: a quarter not yet reported has no row.Never empty
boundaries.external_actiontrue/falseno unitAlways false: building the file acted on nothing outside the desk.Never empty

CSV columnssg-etf-trusts.csv

One row per filed quantity: a trust, a quarter end and the report that states it. The list of trusts, with those not read, is in the JSON.

CSV columns of Bitcoin in US spot ETF trusts
ColumnTypeUnitWhat it holdsWhen it is empty
trustJSON: rows[].trusttextno unitThe trust’s name as the list gives it.Never empty
tickerJSON: rows[].tickertextidentifierIts ticker.Never empty
cikJSON: rows[].cikwhole numberidentifierThe registrant’s CIK on EDGAR.Never empty
period_endJSON: rows[].period_endtextISO dateThe quarter end the quantity is stated for.Never empty
btc_amountJSON: rows[].btc_amountdecimal textBTCBitcoin held, exactly as the report prints it, an exact decimal in BTC.as statedNever empty
formJSON: rows[].formtextset value10-Q, 10-K, 10-Q/A or 10-K/A.Never empty
accessionJSON: rows[].accessiontextidentifierThe report’s EDGAR accession number.Never empty
filed_onJSON: rows[].filed_ontextISO dateThe day the report was filed.Never empty
document_urlJSON: rows[].document_urltextURLAddress of the report’s primary document.Never empty
locatorJSON: rows[].locatortextno unitWhere in it the quantity is stated, and how it is dated.Never empty
restatesJSON: rows[].restatestextidentifierThe accession of the row this one restates; empty for a figure as first filed.not applicable The figure is as first filed.

El Salvador’s disclosed wallet

The 20 addresses El Salvador discloses, re-summed on a second operator’s index.

sg-onbtc-wallet50 JSON fields5 CSV columnsMethod 1.0.0

JSON fieldssg-onbtc-wallet.json

JSON fields of El Salvador’s disclosed wallet
FieldTypeUnitWhat it holdsWhen it is empty
schema_versiontextidentifierThe name and version of the file’s layout; the site’s loader refuses any other.Never empty
datasettextidentifierThe dataset’s ID in the register.Never empty
methodology_versiontextidentifierThe version of the method the file was built with.Never empty
observed_attextISO date-timeWhen the balances were read: Blockstream’s Esplora’s HTTP Date header, its clock and not the desk’s.Never empty
observation.block_heightwhole numberheightThe block the reading is pinned at: Esplora’s chain tip, which held there while every address was read.Never empty
observation.block_hashtexthashHash of the block the reading is pinned at.Never empty
observation.block_timetextISO date-timeHeader time of the block the reading is pinned at.Never empty
disclosure.urltextURLThe endpoint where El Salvador’s National Bitcoin Office lists its addresses.Never empty
disclosure.served_attextISO date-timeWhen the endpoint answered.Never empty
disclosure.last_synctextISO date-timeWhen the endpoint says it last synced.Never empty
disclosure.address_countwhole numbercountAddresses the endpoint listed.Never empty
disclosure.address_set_sha256texthashsha256 of the address list, so a change in the set is seen.Never empty
disclosure.disclosed_confirmed_satswhole numbersatsThe confirmed total the endpoint’s own figures give; a reading is kept only when it equals total.confirmed_sats to the satoshi.Never empty
total.confirmed_satswhole numbersatsThe confirmed balance of the disclosed addresses, re-summed on Blockstream’s Esplora; coins outside those addresses are not in it.Never empty
total.unconfirmed_satswhole numbersatsNet amount in transactions not yet in a block, as Blockstream’s Esplora saw them, kept apart from the total.Never empty
addresseslistno unitOne item per disclosed address.Never empty
addresses[].addresstextidentifierThe address.Never empty
addresses[].confirmed_satswhole numbersatsThe address’s confirmed balance, funded less spent on Esplora; a reading is kept only when the endpoint’s own sums give the same.Never empty
addresses[].funded_satswhole numbersatsEverything confirmed transactions have paid into the address.one sourceNever empty
addresses[].spent_satswhole numbersatsEverything confirmed transactions have spent from the address.one sourceNever empty
addresses[].tx_countwhole numbercountConfirmed transactions that touched the address.one sourceNever empty
addresses[].unconfirmed_satswhole numbersatsThe address’s net amount in transactions not yet in a block, as Blockstream’s Esplora saw them.Never empty
series.unittextset valueThe unit of the series’ amounts: always sats.Never empty
series.columnslistidentifierThe names of the five places in each row of series.rows, in order.Never empty
series.first_credit_heightwhole numberheightThe block of the first credit to any address in the current set, where the series starts.one sourceNever empty
series.rowslistno unitOne row per block that moved the balance, oldest first, each a list of five numbers.Never empty
series.rows[][0]whole numberheightblock_height: a block in which confirmed transactions moved bitcoin into or out of the disclosed addresses.one sourceNever empty
series.rows[][1]whole numberUnix secondsblock_time: the block’s header time.one sourceNever empty
series.rows[][2]whole numbersatsdelta_sats: the net change in the block; negative for a spend.one sourceNever empty
series.rows[][3]whole numbersatscumulative_sats: the confirmed balance after the block; the last row’s equals total.confirmed_sats, which the endpoint’s own figures match.one sourceNever empty
series.rows[][4]whole numbercounttx_count: transactions in the block that touched the addresses.one sourceNever empty
sources.disclosure.urltextURLThe disclosure endpoint.Never empty
sources.disclosure.publishertextno unitWho publishes the address list.Never empty
sources.disclosure.operatortextno unitWho operates the disclosure endpoint.Never empty
sources.disclosure.termstextno unitThe terms the disclosure endpoint is read under, as the desk reads them.Never empty
sources.disclosure.terms_urltextURLAddress of the terms the disclosure endpoint is read under.Never empty
sources.disclosure.independent_of_mempool_spacetrue/falseno unitAlways false: the endpoint is run by the company that runs mempool.space.Never empty
sources.resum.urltextURLThe second operator’s API, where every address is re-summed.Never empty
sources.resum.operatortextno unitWho operates the second operator’s API.Never empty
sources.resum.termstextno unitThe terms the second operator’s API is read under, as the desk reads them.Never empty
sources.resum.independent_of_mempool_spacetrue/falseno unitAlways true: Blockstream is a different operator.Never empty
method.calculationtextno unitThe file’s own note on how the balance is read and re-summed.Never empty
method.independencetextno unitThe file’s own note on why the re-sum uses a second operator.Never empty
method.seriestextno unitThe file’s own note on what one step of the series is.Never empty
method.limitationtextno unitThe file’s own note on what the reading does not cover.Never empty
boundaries.read_only_snapshottrue/falseno unitAlways true: the file is a saved reading, and nothing in it is live.Never empty
boundaries.confirmed_onlytrue/falseno unitAlways true: the total counts confirmed transactions only.Never empty
boundaries.coins_outside_disclosed_addressestextset valueAlways not_in_this_reading: coins El Salvador may hold outside the disclosed addresses are not in this dataset, and are unknown, not zero.Never empty
boundaries.market_price_not_fetchedtrue/falseno unitAlways true: no market price was fetched for the file.Never empty
boundaries.external_actiontrue/falseno unitAlways false: building the file acted on nothing outside the desk.Never empty

CSV columnssg-onbtc-wallet.csv

One row per block that moved the balance. The disclosed addresses and their balances are in the JSON.

CSV columns of El Salvador’s disclosed wallet
ColumnTypeUnitWhat it holdsWhen it is empty
block_heightJSON: series.rows[][0]whole numberheightA block in which confirmed transactions moved bitcoin into or out of the disclosed addresses.one sourceNever empty
block_timeJSON: series.rows[][1]whole numberUnix secondsThe block’s header time, in Unix seconds.one sourceNever empty
delta_satsJSON: series.rows[][2]whole numbersatsNet change in the block, in sats; negative for a spend.one sourceNever empty
cumulative_satsJSON: series.rows[][3]whole numbersatsThe confirmed balance after the block, in sats; the last row’s is the confirmed total the JSON gives.one sourceNever empty
tx_countJSON: series.rows[][4]whole numbercountTransactions in the block that touched the addresses.one sourceNever empty

No file

Datasets with no fields to define

A dataset with no file has no fields here. Each says why, as the downloads page does.