Skip to content

BPS Indonesia Statistics Scraper

Try for free

Download BPS Indonesia (Badan Pusat Statistik) statistics as clean rows: poverty, unemployment, schooling, inflation, GRDP growth and any other dynamic table from bps.go.id and the province sites, by region and year. No login needed.

📊 BPS Indonesia Statistics Scraper

Turn any dynamic statistics table of BPS (Badan Pusat Statistik) into clean rows: one value per indicator, region, breakdown, period and year, with its unit and the BPS page it comes from. Poverty, unemployment, schooling, inflation, GRDP growth, HDI and thousands of other tables, from www.bps.go.id and every province and regency BPS site. No login and no API key needed; $1.70 per 1,000 values, platform usage included.

✨ Why use BPS Indonesia Statistics Scraper?

  • 📈 Whole time series in one run — every year a table has (or just your range, e.g. 2015–2025), not only the year the page shows first.
  • 🗺️ National and local tables — www.bps.go.id (all 38 provinces) and province / regency sites such as sumsel.bps.go.id, with their own regency and city tables.
  • 🔎 Find tables by keyword — search "inflasi", "penduduk miskin" or "rata-rata lama sekolah" on any BPS site and read every matching table.
  • 🎯 Only the rows you need — filter by region name or BPS code, year range, period (annual, March, August, a month) and breakdown (total, urban, rural, sex...).
  • 🧾 Ready to analyse — numbers as numbers, unit, BPS region code, last update date and a link to the table page on every row.
  • 🌐 Indonesian or English — labels in Bahasa Indonesia or English, as BPS publishes them.

🎯 Use cases

  • 🏛️ Regional planning and reports — poverty rate, open unemployment (TPT), mean years of schooling (RLS), GRDP growth and inflation of one province for 10 years, in one table.
  • 🎓 Research and theses — panel data for all provinces or all regencies of a province, by year.
  • 💹 Economic monitoring — monthly and annual inflation by city, quarterly GRDP growth, prices.
  • 📰 Data journalism — compare provinces or cities on any BPS indicator with sources linked.
  • 🤖 Dashboards and automation — schedule a run and keep a sheet or database in step with BPS releases.

🚀 How to use

  1. Paste one or more BPS table pages under Tables (open a table on bps.go.id or a province site and copy the address), or type keywords under Search tables and choose the BPS site to search.
  2. Optionally keep only some Regions (e.g. Sumatera Selatan, Kota Palembang, or the code 1600), a year range, Periods and Breakdowns.
  3. Set Max values (0 = no limit) and click Start.
  4. Download the rows as JSON, CSV or Excel, or read them through the API.

📥 Input

FieldWhat it does
tableUrlsBPS dynamic table pages (…/statistics-table/2/<id>/….html) from any BPS site; a bare number such as 192 means national table 192
searchTermsKeywords to find tables on the chosen BPS site
siteBPS site to search: www.bps.go.id (default) or e.g. sumsel.bps.go.id / sumsel
maxTablesPerSearchTables to read per keyword (default 5, 0 = all)
regionsRegion names (Indonesian or English, any case) or codes to keep; on www.bps.go.id tables a 2-digit BPS code keeps the province and its regencies (16)
fromYear / toYearYear range
periods / breakdownsKeep only matching period / breakdown labels (Tahunan, Agustus, Jumlah, Perkotaan…)
languageid (default) or en
maxItemsMost values to save (empty or 0 = no limit)
{
  "tableUrls": [
    "https://www.bps.go.id/id/statistics-table/2/MTkyIzI=/persentase-penduduk-miskin--p0--menurut-provinsi-dan-daerah.html",
    "https://www.bps.go.id/id/statistics-table/2/NTQzIzI=/tingkat-pengangguran-terbuka-menurut-provinsi--persen-.html",
    "https://www.bps.go.id/id/statistics-table/2/NDE1IzI=/-metode-baru--rata-rata-lama-sekolah.html"
  ],
  "regions": ["Sumatera Selatan"],
  "fromYear": 2015,
  "toYear": 2025,
  "breakdowns": ["Jumlah"],
  "maxItems": 0
}

📤 Output

FieldDescription
indicatorIndicator / table name as BPS writes it
region, regionCodeProvince, regency, city or other row of the table, with its BPS code
regionGroupThe table's list of rows (e.g. 38 Provinsi, Kabupaten/Kota)
breakdownBreakdown of the table (e.g. Perkotaan, Perdesaan, Jumlah), empty when the table has none
periodPart of the year (e.g. Semester 1 (Maret), Agustus, Januari, Tahunan), empty for one value per year
year, value, unit, decimalsThe value with its year and unit
subject, lastUpdate, notesBPS subject, the table's last update and its notes
site, tableId, varId, sourceUrlWhere the value comes from, with a link to the table page
{
  "indicator": "Persentase Penduduk Miskin (P0) Menurut Provinsi dan Daerah",
  "region": "SUMATERA SELATAN",
  "regionCode": "1600",
  "regionGroup": "38 Provinsi",
  "breakdown": "Jumlah",
  "period": "Semester 1 (Maret)",
  "year": 2015,
  "value": 14.25,
  "unit": "Persen",
  "decimals": 2,
  "subject": "Kemiskinan dan Ketimpangan",
  "tableId": "MTkyIzI=",
  "varId": 192,
  "site": "www.bps.go.id",
  "lastUpdate": "2026-08-05 12:36:39",
  "sourceUrl": "https://www.bps.go.id/id/statistics-table/2/MTkyIzI=/persentase-penduduk-miskin--p0--menurut-provinsi-dan-daerah.html"
}

💰 Pricing

You pay per value (row) saved. Platform usage (compute and proxy) is included, so that is the whole price.

EventFreeStarterScaleBusiness
Value (per 1,000)$1.70$1.70$1.70$1.70

Example: South Sumatra 2015–2025 with poverty rate (March, total), open unemployment (August), mean years of schooling, GRDP growth and annual inflation came to 66 values in our tests, about $0.11, in about 20 seconds. Without the period and breakdown filters the same five tables give about 300 values (about $0.53). 1,000 values cost $1.70. Tables, years and filters that return nothing are not charged.

❓ FAQ

Is it legal? The actor reads public statistics that BPS publishes on its own websites for everyone. Check BPS's terms for how you reuse and cite the data.

Do I need a BPS account or API key? No. The actor reads the same public table pages you open in a browser.

How many values can I get? As many as the tables hold: every year, region, breakdown and period, unless you set filters or Max values.

Why is a year or a city missing? The actor returns what the BPS table holds. Some tables start or stop in a given year, BPS moved some series to new tables (for example inflation with the 2022=100 base from 2024), and a few cells are empty on the site. Search the site for the other table and add it to the run.

Which tables does it read? Dynamic tables (addresses with /statistics-table/2/), which cover most indicators. Static tables (/statistics-table/1/ and /3/) are not read.

Can I schedule it or use the API? Yes. Schedule the actor in the console or start it through the Scrape.ly API, MCP or SDK with the same input.

⚠️ Limits

  • Static BPS tables (/statistics-table/1/ and /3/) and publications (PDF) are not read; keyword searches skip them.
  • Values are BPS's own; the actor does not join series across tables or fill gaps.
  • BPS sites check visitors with Cloudflare; the default proxy (residential, Indonesia) passes it and is included in the price.
  • Region names must match the table's own row names (any case, Indonesian or English, "Kota" / "Kabupaten" optional; "Kab. Bogor" and "Kota Bogor" stay apart). BPS region codes work on www.bps.go.id tables; province-site tables number their rows themselves, so use names there.
  • Some tables list industries, expenditure groups or other categories instead of regions (e.g. GRDP growth by industry): leave Regions empty for them.

The internet is full of data.
Start owning yours.

Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes.

No credit card. No setup calls.