Analysis date: October 27, 2026 · Version 1.0
An open register can tell us where library records are listed. It cannot, on its own, tell us whether a library is open or how easily a reader can use it. We checked the downloadable SNBP 2025-2026 workbook and joined its location fields to IBGE's 2026 population table. The result is a documented snapshot of 4,691 register rows, plus a practical account of the limits that matter when these data are reused.
Four Findings To Cite Carefully
- The downloaded workbook contains 4,691 data rows across all 27 federation units: 3,748 classified as public libraries and 943 as community libraries. These are register classifications, not independently verified operating facilities.
- Matching state and normalized municipality name links 4,685 rows to official IBGE geographical entries. Six rows remain unmatched and are disclosed without automatic fuzzy correction.
- The workbook stores 420 postal-code cells numerically with an explicit Excel display mask. Eight rely on that mask to restore a leading zero. After respecting numeric display formats and trimming text values, 52 postal-code entries do not match the NNNNN-NNN pattern. This is an export and formatting check, not a test of postal-address validity.
- The companion dictionary describes a CSV with 4,693 records and eight fields. The downloaded XLSX has 4,691 data rows and nine columns. This is a difference between source artifacts, not evidence that two libraries closed.
What We Counted
The unit of analysis is a non-empty data row in the workbook, not a verified unique library service. We retained every non-empty row and kept the source classifications for public and community libraries separate. The catalog labels the file 2025-2026 and records its last modification on July 3, 2026. We retrieved the files for this audit on October 27, 2026.
The workbook includes a region column alongside state, municipality, institutional link, library type, library name, address, neighborhood and postal code. It does not provide an official municipality code. This matters because joining by a place name alone can confuse locations with the same name in different states.
The Complete State Table
The table below includes every federation unit in the workbook. Population is IBGE's estimate with reference date July 1, 2026. Rows per 100,000 residents is the register-row count divided by that population, multiplied by 100,000. It is a descriptive density of registered rows, not a ranking of reading access, library quality or service availability.
Public and community columns add to each state's total. Unmatched municipal names remain included in their stated federation unit because the state itself is identified. Population and register reference periods are not identical, so the ratio must retain both source dates.
| Federation unit | Register rows | Public | Community | Population, July 1, 2026 | Rows per 100,000 residents |
|---|---|---|---|---|---|
| Acre (AC) | 9 | 5 | 4 | 887,794 | 1.01 |
| Alagoas (AL) | 74 | 56 | 18 | 3,221,128 | 2.30 |
| Amazonas (AM) | 35 | 23 | 12 | 4,360,926 | 0.80 |
| Amapá (AP) | 10 | 8 | 2 | 809,953 | 1.23 |
| Bahia (BA) | 443 | 328 | 115 | 14,889,472 | 2.98 |
| Ceará (CE) | 447 | 204 | 243 | 9,302,211 | 4.81 |
| Distrito Federal (DF) | 36 | 32 | 4 | 3,009,996 | 1.20 |
| Espírito Santo (ES) | 78 | 56 | 22 | 4,150,692 | 1.88 |
| Goiás (GO) | 75 | 63 | 12 | 7,495,033 | 1.00 |
| Maranhão (MA) | 145 | 126 | 19 | 7,024,557 | 2.06 |
| Minas Gerais (MG) | 493 | 448 | 45 | 21,460,311 | 2.30 |
| Mato Grosso Do Sul (MS) | 50 | 37 | 13 | 2,946,317 | 1.70 |
| Mato Grosso (MT) | 113 | 103 | 10 | 3,950,330 | 2.86 |
| Pará (PA) | 220 | 147 | 73 | 8,756,324 | 2.51 |
| Paraíba (PB) | 87 | 70 | 17 | 4,182,828 | 2.08 |
| Pernambuco (PE) | 174 | 137 | 37 | 9,583,176 | 1.82 |
| Piauí (PI) | 122 | 118 | 4 | 3,392,617 | 3.60 |
| Paraná (PR) | 449 | 445 | 4 | 11,952,456 | 3.76 |
| Rio De Janeiro (RJ) | 264 | 127 | 137 | 17,225,410 | 1.53 |
| Rio Grande Do Norte (RN) | 89 | 67 | 22 | 3,463,737 | 2.57 |
| Rondônia (RO) | 13 | 9 | 4 | 1,757,338 | 0.74 |
| Roraima (RR) | 8 | 5 | 3 | 761,012 | 1.05 |
| Rio Grande Do Sul (RS) | 274 | 230 | 44 | 11,233,317 | 2.44 |
| Santa Catarina (SC) | 216 | 210 | 6 | 8,312,759 | 2.60 |
| Sergipe (SE) | 74 | 62 | 12 | 2,307,255 | 3.21 |
| São Paulo (SP) | 667 | 612 | 55 | 46,179,008 | 1.44 |
| Tocantins (TO) | 26 | 20 | 6 | 1,595,994 | 1.63 |
Why A Missing Match Is Not A Missing Library
The exact normalized join connects the register to 3,145 of the 5,571 geographical entries in IBGE's municipal worksheet. That worksheet includes Brasília and Fernando de Noronha as statistical entries. The count should not be interpreted as a verified count of municipalities with or without library services.
We normalized accents, letter case, punctuation and spacing, and required the state to agree. We did not apply automatic fuzzy matches. The six unmatched strings are retained in a separate download with their source row numbers. A spelling difference, an extra state abbreviation, a historical place name or another source issue may explain a mismatch, but the audit does not assume the cause.
An entry with no matched register row may still have a library. Conversely, a matched register row does not establish that the service is currently open, accessible, staffed or adequately resourced. There are no measures of opening hours, travel time, collection quality, borrowing or reading habits in this analysis.
Data Quality And Version Checks
We found no exact duplicate rows and no repeated candidate facility keys after normalizing state, municipality, library name and address together. This check does not prove that every row represents a distinct operating facility: alternate names and changed addresses can evade a simple key.
The neighborhood field is blank in 184 rows. All other workbook columns contain a value in every analyzed row. Postal-code checks must respect spreadsheet display formats. All 420 numeric postal-code cells use Excel's 00000\-000 mask, and eight rely on its leading-zero padding. These cells can display correctly even though a naive conversion of their underlying numbers loses the mask. We reproduce the source format for this check rather than correcting the source values.
A naive raw-value text conversion would flag 472 postal-code values after trimming whitespace, or 495 without trimming. Those counts include correctly formatted numeric cells and must not be called visible formatting failures. The display-aware check instead flags 52 text entries after trimming; 21 text entries do not contain eight digits after non-digit characters are removed. None of these checks determines whether a postal address is valid or deliverable.
The dictionary and workbook describe related but different artifacts. The dictionary reports 3,750 public and 943 community rows; this workbook contains 3,748 and 943 respectively. The dictionary has eight documented fields, while the workbook also includes region. We preserve the files and hashes so later users can identify the exact snapshot. These differences alone cannot explain additions, removals, openings or closures.
How To Reproduce The Analysis
Download the original workbook and dictionary from the Ministry of Culture catalog. Retain their bytes and record their SHA-256 hashes. Read the first worksheet's header, exclude only the header and wholly blank rows, and report the source classifications without merging public and community categories.
For the municipality join, normalize state and name consistently with Unicode accent folding, uppercase conversion, punctuation removal and whitespace consolidation. Match each pair against IBGE's official 2026 municipal workbook. Preserve unmatched source strings. Sum the official municipal population values by state and check them against IBGE's state and national worksheet before calculating state-level ratios.
We wrote the detailed processing protocol after source acquisition and structural inspection, before the municipal join and aggregate analysis. This is not a preregistered study. A separate computational review reopens the original inputs and recomputes the key counts. It is not external academic peer review, a government certification or a field inspection.
Downloads, Attribution And Corrections
The downloads include all state aggregates, municipal match aggregates, a row-level classification and join audit, and the unmatched strings. The public row audit omits library names and street addresses because these fields are unnecessary for checking the published aggregate findings. The original source remains linked for readers who need it.
Credit the Ministry of Culture/SNBP for the register and IBGE for population estimates. The Ministry catalog states a Creative Commons Attribution license. No specific Creative Commons license was established for the IBGE workbook, so we do not assign one by assumption. Credit Alisson Bento for this analysis and preserve the observation period and limitations when citing a finding.
Suggested citation: Alisson Bento, Brazil's Library Register: 4,691 Records, Checked, version 1.0, October 27, 2026; analysis of the SNBP 2025-2026 workbook and IBGE July 1, 2026 population estimates. If you identify a reproducible issue, include the source row or calculation and the file version when contacting the website. Corrections should change the version and correction log rather than silently rewriting the snapshot.