BPS API — Indonesian Statistics Data API avatar

BPS API — Indonesian Statistics Data API

Pricing

from $1.20 / 1,000 api requests

Go to Apify Store
BPS API — Indonesian Statistics Data API

BPS API — Indonesian Statistics Data API

FastAPI wrapper for the BPS (Badan Pusat Statistik) Web API. Access Indonesian statistical data - domains, subjects, dynamic data, static tables, press releases, publications, foreign trade, census, and SDGs - using human-readable names. No BPS codes needed.

Pricing

from $1.20 / 1,000 api requests

Rating

0.0

(0)

Developer

RD.Galih Rakasiwi

RD.Galih Rakasiwi

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

BPS Data API

FastAPI wrapper for BPS (Badan Pusat Statistik) Web API — Indonesian Central Bureau of Statistics data access.

Access Indonesian statistical data: domains, subjects, dynamic data, static tables, press releases, publications, foreign trade, census, SIMDASI, SDGs, and more.

Designed as an Apify actor for publishing on Apify Store.

📖 Full documentation: docs/ — index, architecture, API reference, code map, deployment, troubleshooting

Quick Start

# 1. Sync dependencies (uv auto-creates venv)
uv sync
# 2. Set your BPS API key
cp .env.example .env
# Edit .env and add your BPS_API_KEY
# 3. Run the service
uv run bps-data-api
# Or with hot-reload during development
uv run uvicorn src.main:app --reload --port 8000
# 4. Open API docs
open http://localhost:8000/docs

Authentication

BPS requires an API key. Three ways to provide it:

MethodHow
HeaderX-BPS-API-Key: your_key
Env VarBPS_API_KEY=your_key
Apify InputbpsApiKey in actor input

Priority: Header → Env Var → Apify Input

API Endpoints

All endpoints accept human-readable names — no BPS codes needed.

# Data Discovery
GET /api/v1/subjects?prov=Jawa Barat
GET /api/v1/subjects/Kependudukan?prov=jabar
GET /api/v1/variables?prov=jabar&keyword=population
# Statistical Data (Core)
GET /api/v1/data?prov=jabar&subject=Kependudukan
GET /api/v1/data/376?prov=Aceh
GET /api/v1/data?kabkot=Bandung&subject=Kependudukan # regency-level!
# Content
GET /api/v1/tables?prov=jabar&keyword=poverty
GET /api/v1/tables/347?prov=Aceh
GET /api/v1/tables/347/excel?prov=Aceh # download Excel
GET /api/v1/news?prov=DKI Jakarta&year=2024
GET /api/v1/news/1092/pdf?prov=Aceh # download PDF
GET /api/v1/publications?prov=pusat&keyword=inflation
GET /api/v1/publications/{id}/pdf?prov=Aceh # download PDF
GET /api/v1/publications/{id}/cover?prov=Aceh # cover image
# Indicators
GET /api/v1/indicators?prov=Jawa Timur
GET /api/v1/infographics?prov=Jawa Barat
GET /api/v1/sdgs?goal=1
# Unified Search
GET /api/v1/search?q=inflation # across all data types!
GET /api/v1/search?q=poverty&prov=Jawa Barat
# Glossary
GET /api/v1/glossary?keyword=inflasi
GET /api/v1/glossary/{id}
# Census (name-based drill-down)
GET /api/v1/census/events
GET /api/v1/census/{event}/topics
GET /api/v1/census/{event}/areas
GET /api/v1/census/{event}/datasets?topic=Penduduk
GET /api/v1/census/{event}/data?topic=X&area=ACEH&dataset=1
# SIMDASI
GET /api/v1/simdasi/areas
GET /api/v1/simdasi/subjects?area=DKI Jakarta
GET /api/v1/simdasi/tables?area=DKI Jakarta
GET /api/v1/simdasi/tables/{id}?area=DKI Jakarta&year=2023

Province & Regency Lookup

GET /api/v1/provinces # all 34 provinces
GET /api/v1/provinces/Jawa Barat # by name
GET /api/v1/provinces/jabar # by alias
GET /api/v1/kabkot?prov=Jawa Barat # regencies in province
GET /api/v1/kabkot/3271 # by domain ID

New in v3.0: kabkot parameter on all simplified endpoints for regency-level data. When a name is ambiguous (e.g. "Bandung" = Kab + Kota), the API returns available domain IDs.

Health Check

GET /health
GET /api/v1/health

Legacy BPS-Compatible API

GET /api/v1/domain?type=all
GET /api/v1/list?model=subject&domain=1100&lang=ind
GET /api/v1/list?model=data&domain=1100&var=100&th=1
GET /api/v1/view?model=statictable&domain=1100&id=123&lang=ind
GET /api/v1/dataexim?sumber=1&periode=2&kodehs=01&jenishs=1&Tahun=2023
GET /api/v1/interoperabilitas/datasource/sensus/id/37
GET /api/v1/interoperabilitas/datasource/simdasi/id/26

Project Structure

bps-data-api/
├── .actor/actor.json # Apify actor configuration
├── src/
│ ├── main.py # FastAPI app + entrypoint (v3.0)
│ ├── config.py # Environment-based settings
│ ├── bps_client.py # Async HTTP client for BPS API
│ ├── models.py # Pydantic request/response models
│ ├── dependencies.py # FastAPI dependency injection
│ ├── wilayah_data.py # Province/regency name→code index
│ ├── simplified/
│ │ ├── router.py # ★ Primary API (25+ endpoints)
│ │ ├── subject_cache.py # Subject name→ID per domain
│ │ ├── census_helper.py # Census name→ID resolution
│ │ └── simdasi_helper.py # SIMDASI area code resolution
│ └── routers/
│ ├── health.py # Health check
│ ├── wilayah.py # /provinces, /kabkot
│ ├── domain.py # /domain
│ ├── list.py # /list (18 models)
│ ├── view.py # /view
│ ├── dataexim.py # Foreign trade
│ └── interoperability.py # Census + SIMDASI
├── docs/ # Full documentation (9 files)
├── Dockerfile
└── .env.example

BPS API Documentation

Full documentation: https://webapi.bps.go.id/documentation/

License

MIT

bps api, badan pusat statistik api, indonesia statistics api, indonesian economic data, bps data json, statistik indonesia api