CensusForge
[!IMPORTANT]
Project development has moved to Codeberg
[!WARNING]
This project is still in development and may change very quickly. I will add more functionality in the future but this contains the bare minimum to support the needs of the project.
CensusForge is a Python toolkit for retrieving data from the U.S. Census API while also leveraging a local SQLite metadata database for fast lookups, the SQLite database creation repo can be found in this link in GitHub. It simplifies working with Census datasets by providing a unified interface for:
- Downloading and caching geographic files
- Querying the Census API
- Looking up dataset, variable, year, and geography metadata
- Returning results as Polars or GeoPandas objects
CensusForge consists of two main classes:
DataPull– Handles local metadata queries and file downloadsCensusAPI– ExtendsDataPulland adds direct Census API querying
Installation
pip install CensusForge
Quick Start Example
The following example shows how to query the Census API using the CensusAPI class.
from CensusForge import CensusAPI
def main():
ca = CensusAPI()
print(
ca.query(
dataset="acs-acs1-pumspr",
year=2019,
params_list=["AGEP", "SCH", "SCHL", "HINCP", "PWGTP", "PUMA"],
)
)
if __name__ == "__main__":
main()
Running the above will:
- Look up the dataset in the local metadata database
- Construct the correct Census API URL
- Fetch the API response
- Convert it to a Polars DataFrame
Project Structure
CensusForge/
│
├── CensusAPI.py # CensusAPI and DataPull classes
├── database.db # Local SQLite metadata database
├── jp_tools/ # Utility functions (e.g., file download helper)
│
├── data/ # Output directory for downloaded/cached files
└── README.md # Project documentation
API Overview
CensusAPI
query(dataset, params_list, year, extra="") → pl.DataFrame
Query a Census dataset using any set of variables or geography parameters.
Example
ca.query(
dataset="acs-acs1-pumspr",
year=2019,
params_list=["AGEP", "HINCP", "PUMA"],
extra="&for=state:*"
)
Metadata Helpers (inherited from DataPull)
| Method | Description |
|---|---|
get_database(id) |
Returns dataset name for ID |
get_database_id(name) |
Returns dataset ID |
get_year(id) |
Returns year for ID |
get_year_id(year) |
Returns year ID |
get_variable_id(name) |
Returns variable ID |
get_geo_id(name) |
Returns geography type ID |
get_geo_years(dataset_id, geo_id) |
Returns valid years for a dataset+geography |
Geospatial Tools
pull_geos(url, filename) → gpd.GeoDataFrame
Downloads a geographic file (if missing), caches it as Parquet, and returns a GeoDataFrame.
Requirements
- Python 3.9+
- DuckDB
- GeoPandas
- Polars
- Requests
- jp_tools (for download helper)
Install dependencies:
pip install -r requirements.txt
Development
To run tests or modify the project:
git clone https://github.com/yourusername/CensusForge.git
cd CensusForge
pip install -e .
Cite
@software{ouslan2026censusforge,
author = {Ouslan, Alejandro},
title = {CensusForge},
month = jan,
year = 2026,
publisher = {Zenodo},
version = {0.5.0},
doi = {10.5281/zenodo.18121581},
url = {https://doi.org/10.5281/zenodo.18121581}
}
License
This project is licensed under the GNU General Public License v3.0 (GPL-3.0).
You may copy, modify, and distribute this software only under the terms of the GPL-3.0 license.
Full license text: https://www.gnu.org/licenses/gpl-3.0.en.html
Metadata
Release files for CensusForge 1.2.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| censusforge-1.2.4.tar.gz | 23.7 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| censusforge-1.2.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 47.3 MB
Release files / censusforge-1.2.4.tar.gz
| Download URL | censusforge-1.2.4.tar.gz |
|---|---|
| Size | 23.7 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
409272ebd608420a302ab639bab4418c1451fa638d50c761bcb61419430d9605
|
|
BLAKE2b-256 checksum How to use checksums |
2202373d6ae86e3effd2adc25effbe358d70d1e7a946739ed761136fa9f97326
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / censusforge-1.2.4-py3-none-any.whl
| Download URL | censusforge-1.2.4-py3-none-any.whl |
|---|---|
| Size | 23.7 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c18404e33cbfe20444e8e39f25ebd4548557e2b1f7839521e6ef7880fb83e80c
|
|
BLAKE2b-256 checksum How to use checksums |
9931072c65d64bd554b042df2fec59f8274402126a788e3089d7b55288f1de53
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|