Tutorial

Cara Ambil Data Resmi BPS Pakai API (Lengkap dengan Contoh Live)

Cara Ambil Data Resmi BPS Pakai API (Lengkap dengan Contoh Live)

Badan Pusat Statistik menyediakan WebAPI resmi di webapi.bps.go.id supaya data pemerintah bisa diambil secara terprogram, bukan disalin manual. Panduan ini menunjukkan alurnya: registrasi API key, menyusun URL endpoint, membaca format respons datacontent, sampai menjalankan fetcher otomatis di server. Sebagai contoh nyata, indikator kemiskinan nasional (var 184) tercatat 9,03 persen pada Semester 1 2024 dan turun ke 8,25 persen pada Semester 2 2025, sedangkan kurs tengah BI (var 284) mencatat rata-rata Rp15.416 per dolar AS pada 2023 dan Rp16.162 pada 2024.

TL;DR

  • WebAPI BPS diakses lewat endpoint https://webapi.bps.go.id/v1/api/... dan wajib memakai API key hasil registrasi di portal developer.
  • WAF BPS menolak permintaan tanpa header User-Agent, jadi header itu wajib diisi di setiap request.
  • Kode th menentukan tahun (124 untuk 2024, 125 untuk 2025), sementara var menentukan variabel statistik.
  • Nilai disimpan di objek datacontent dengan kunci komposit gabungan vervar, var, turvar, th, dan turtahun.
  • Contoh nyata dari respons API: kemiskinan nasional 9,03 persen (Semester 1 2024) turun ke 8,25 persen (Semester 2 2025).

Apa Itu WebAPI BPS dan Kenapa Perlu API Key?

WebAPI BPS adalah layanan resmi Badan Pusat Statistik untuk membaca data publik secara terprogram lewat HTTP, mencakup tabel statis, tabel dinamis, publikasi, sampai siaran pers. Aksesnya tidak terbuka bebas: setiap pemanggilan butuh API key yang diperoleh lewat registrasi di portal developer BPS, dan key itu dipakai sebagai bagian dari URL. Registrasi tidak berbayar, tetapi key bersifat pribadi dan sebaiknya tidak ditempel di kode yang dibagikan publik.

Dokumentasi resminya ada di halaman documentation, dan di situ terdaftar kelompok endpoint yang tersedia. Untuk pekerjaan sehari-hari, tiga kelompok ini yang paling sering dipakai:

  • /v1/api/list/model/data/ untuk mengambil nilai data dinamis.
  • /v1/api/list/model/pressrelease/ untuk daftar siaran pers terbaru.
  • /v1/api/view/model/... untuk metadata seperti daftar variabel, tahun, dan turunan variabel.

Struktur URL-nya menyerupai kalimat: setiap bagian dipisah garis miring, dan urutannya menentukan apa yang diminta. Bagian lang/ind memilih bahasa Indonesia, domain/0000 memilih cakupan nasional, sedangkan key/<API_KEY> menempelkan kredensial. Kalau salah satu bagian hilang, server mengembalikan pesan kesalahan, bukan data.

Bagaimana Cara Mengambil Data Kemiskinan dari API BPS?

Ambil satu variabel dengan endpoint /v1/api/list/model/data/, lalu isi domain, variabel (var), dan tahun (th). Untuk kemiskinan nasional, var yang dipakai adalah 184 dengan th 124 dan 125, sehingga bentuk URL-nya seperti ini:

https://webapi.bps.go.id/v1/api/list/model/data/lang/ind/domain/0000/var/184/th/124;125/key/<API_KEY>/

Perhatikan dua hal. Pertama, domain/0000 berarti agregat nasional, bukan provinsi tertentu. Kedua, beberapa tahun bisa diminta sekaligus dengan memisahkannya memakai titik koma, jadi th/124;125 mengambil 2024 dan 2025 dalam satu panggilan.

Fetcher sederhana di Python cukup memakai pustaka standar, tanpa dependensi tambahan:

```python import json import urllib.request

API_KEY = "" URL = ("https://webapi.bps.go.id/v1/api/list/model/data/lang/ind/" "domain/0000/var/184/th/124;125/key/" + API_KEY + "/")

req = urllib.request.Request(URL, headers={ "User-Agent": "toolkuy-datadriven/1.0 (kontak: [email protected])" }) with urllib.request.urlopen(req, timeout=25) as resp: data = json.load(resp)

tahun = {str(t["val"]): t["label"] for t in data["tahun"]} periode = {str(t["val"]): t["label"] for t in data["turtahun"]} print(tahun, periode) print(data["datacontent"]) ```

Responsnya bukan larik datar. Ada daftar tahun dan turtahun yang memetakan kode ke label, lalu ada objek datacontent yang memegang nilainya. Kunci di dalam datacontent adalah gabungan lima kode: vervar, var, turvar, th, dan turtahun. Untuk kemiskinan total nasional, kuncinya berpola 31840 di depan, lalu kode tahun, lalu kode periode. Angka 3 di awal adalah kode vervar untuk total nasional, 184 adalah variabelnya, dan 0 adalah turunan variabel.

Cara membacanya: cocokkan tiga digit tahun pada kunci dengan label di daftar tahun, lalu dua digit terakhir dengan label di turtahun. Pola inilah yang membuat satu panggilan bisa memuat beberapa periode sekaligus, dan kesalahan paling umum adalah membaca nilai tanpa memetakan kodenya lebih dulu sehingga periode tertukar.

Kenapa BPS Menolak Request Tanpa User-Agent?

Karena WebAPI BPS dilindungi WAF yang memblokir klien tanpa identitas, permintaan tanpa header User-Agent ditolak sebelum sampai ke data. Gejalanya sering menyesatkan: skrip yang jalan di browser atau di alat uji berhasil, tetapi skrip yang sama gagal begitu dijalankan sebagai tugas terjadwal di server. Bedanya cuma satu, header User-Agent tidak ikut terkirim.

Solusinya sepele tetapi wajib: isi User-Agent di setiap request, seperti pada contoh di atas. Kalau fetcher berjalan dari cron, pastikan pustaka HTTP yang dipakai memang meneruskan header itu, karena beberapa pustaka bawaan mengirim User-Agent kosong secara default. Pesan kesalahan yang muncul biasanya berupa halaman blokir, bukan JSON, jadi cara cepat memeriksanya adalah melihat apakah respons bisa di-parse sebagai JSON atau tidak.

Berapa Biaya Menjalankan Fetcher Data Ini?

Fetcher seperti contoh di atas ringan: satu request kecil, tanpa basis data, dan tanpa dependensi di luar pustaka standar Python. Karena itu biayanya nyaris seluruhnya ditentukan oleh tempat skrip dijalankan dan seberapa sering ia dipanggil. Ada tiga komponen yang perlu dipisahkan saat menghitung anggaran: hosting atau server, transfer data, dan biaya inferensi AI kalau hasilnya diringkas otomatis.

Untuk skala kecil, satu VPS murah sudah cukup. Sebagai gambaran, layanan seperti free trial Alibaba Cloud menyediakan kredit awal untuk mencoba, ECS generasi terbaru dipakai kalau pipeline mulai berjalan tiap jam, dan Qwen di Alibaba Cloud relevan kalau hasil fetch perlu diringkas otomatis dengan model bahasa. Yang penting bukan mereknya, melainkan memisahkan baris biaya server dari baris biaya transfer dan baris biaya token, supaya lonjakan salah satu komponen tidak tersembunyi di dalam satu angka total.

Contoh Respons dan Angka yang Dipakai

Berikut nilai yang benar-benar dikembalikan endpoint untuk dua variabel contoh. Angka kemiskinan nasional diambil dari var 184, sedangkan kurs tengah Bank Indonesia diambil dari var 284 dengan vervar 8 yang mewakili dolar Amerika Serikat.

Untuk kemiskinan, respons mencatat 9,03 persen pada Semester 1 2024 (Maret), 8,57 persen pada Semester 2 2024 (September), 8,47 persen pada Semester 1 2025 (Maret), dan 8,25 persen pada Semester 2 2025 (September). Untuk kurs, respons mencatat rata-rata Rp15.416 per dolar AS pada 2023 dan Rp16.162 per dolar AS pada 2024.

Endpoint siaran pers memakai pola URL yang berbeda, yaitu /v1/api/list/model/pressrelease/lang/ind/domain/0000/key/<API_KEY>/page/1/. Contoh keluaran nyata dari endpoint itu pada 1 Oktober 2026 mencatat inflasi year-on-year September 2026 sebesar 3,28 persen dan nilai ekspor Indonesia Agustus 2026 sebesar USD 26,61 miliar. Perhatikan bahwa nilai kurs yang tersedia di endpoint berhenti di 2024 pada rentang yang diambil pipeline ini. Rentang tahun yang bisa diminta ditentukan oleh kode th yang valid untuk variabel tersebut, dan tidak semua variabel punya cakupan tahun yang sama.

Tabel Rekap Indikator

Indikator Nilai Periode Sumber
Kemiskinan nasional 9,03 persen Semester 1 2024 (Maret) BPS, var 184
Kemiskinan nasional 8,57 persen Semester 2 2024 (September) BPS, var 184
Kemiskinan nasional 8,47 persen Semester 1 2025 (Maret) BPS, var 184
Kemiskinan nasional 8,25 persen Semester 2 2025 (September) BPS, var 184
Kurs tengah BI rata-rata tahunan Rp15.416 per dolar AS 2023 BPS, var 284
Kurs tengah BI rata-rata tahunan Rp16.162 per dolar AS 2024 BPS, var 284
Inflasi umum y-on-y 3,28 persen September 2026 BPS, siaran pers 1 Oktober 2026
Ekspor Indonesia USD 26,61 miliar Agustus 2026 BPS, siaran pers 1 Oktober 2026

Keterbatasan Data

Beberapa hal yang perlu diketahui sebelum memakai angka di atas.

Nilai kurs tengah Bank Indonesia yang tersedia pada rentang th yang diambil pipeline berhenti di 2024, sehingga artikel ini tidak menyertakan pembanding 2025 dan 2026 dan tidak mengira-ngira nilainya.

Angka kemiskinan adalah angka semesteran, bukan bulanan. Tidak ada nilai bulanan untuk indikator ini di dalam endpoint yang dipakai, jadi pembaca yang membutuhkan granularitas lebih tinggi perlu merujuk langsung ke tabel BPS yang relevan.

Rentang tahun yang valid berbeda antar variabel. Tidak semua var menyediakan kode th 124 dan 125, dan sebagian variabel hanya punya cakupan tahun yang lebih pendek. Karena itu, pola URL pada panduan ini perlu disesuaikan dengan metadata variabel yang hendak diambil.

Contoh respons di artikel ini diambil dari pemanggilan pada 4 Oktober 2026. Nilai bisa berubah kalau BPS merevisi tabelnya, dan kode tahun bisa bergeser ketika tahun baru ditambahkan ke basis data.

Angka siaran pers (inflasi dan ekspor) berasal dari halaman siaran pers BPS pada tanggal yang disebut, bukan dari tabel dinamis, sehingga tidak ikut mekanisme kode th dan tidak bisa diambil dengan URL data dinamis yang sama.

Metodologi Singkat

Endpoint yang dipakai adalah /v1/api/list/model/data/ untuk data dinamis dan /v1/api/list/model/pressrelease/ untuk siaran pers. Semua angka diambil dari respons API resmi BPS yang terekam pada snapshot pipeline tanggal 4 Oktober 2026. Delapan sumber data pada snapshot berhasil diambil tanpa kegagalan. Nilai ditampilkan mengikuti tampilan asli respons, dan tidak ada angka yang diisi dari perkiraan.

Sumber

FAQ

Apakah API BPS gratis dipakai?

Pendaftaran API key di portal developer BPS tidak berbayar. Yang dibatasi adalah perilaku pemakaian, misalnya permintaan berlebihan atau tanpa identitas, sehingga key tetap perlu dijaga dan tidak dibagikan terbuka.

Berapa lama proses registrasi API key?

Registrasi dilakukan dengan mengisi data pemohon dan tujuan pemanfaatan di portal developer. Setelah email dikonfirmasi, key biasanya bisa langsung dipakai, tetapi waktu verifikasi bisa berbeda tergantung kelengkapan data yang diisi.

Kenapa kode th 124 berarti 2024?

Kode th adalah nomor urut tahun di dalam basis data BPS, bukan angka tahun itu sendiri. Pemetaan kode ke label tahun dikirim bersama respons di daftar tahun, jadi cara paling aman adalah membaca labelnya, bukan menebak dari angkanya.

Bagaimana kalau data yang diambil sangat besar?

Pecah permintaan per variabel dan per rentang tahun, lalu simpan hasilnya ke berkas sebelum diolah. Satu panggilan yang memuat semua variabel sekaligus lebih rawan timeout dan lebih sulit dilacak kalau ada bagian yang gagal.

Apakah data BPS boleh dipakai ulang?

Data statistik BPS dipublikasikan untuk dimanfaatkan publik. Praktik yang aman adalah menyebut sumber, mencantumkan periode data, dan tidak mengubah angkanya, supaya hasil olahan tetap bisa ditelusuri ke rilis aslinya.

💬 Komentar (0)

Belum ada komentar. Jadilah yang pertama! 💬

Komentar akan muncul setelah moderasi.