← Blog
Artikel

Data Supplier Indonesia via API untuk Procurement dan Marketplace

Cara ambil dan strukturkan data supplier atau vendor Indonesia via API: kode wilayah resmi, kode pos, dan validasi alamat untuk procurement dan marketplace.

Cari di Google "data supplier Indonesia" dan yang muncul kebanyakan adalah file Excel berjualan, PDF tidak terawat, atau jasa scraping mahal. Untuk tim procurement dan developer marketplace, kebutuhannya sesederhana itu: data vendor atau supplier yang terstruktur, bisa dipanggil programatik, dan selalu update.

Di API Indonesia kita tidak menjual database supplier pihak ketiga, tapi ada kombinasi data yang menutup sebagian besar kebutuhan praktis: data wilayah administratif lengkap (provinsi sampai desa dengan kode pos dan koordinat) yang jadi tulang punggung data vendor Anda. Data supplier sendiri (nama PT, NPWP, alamat gudang, kontak) biasanya sudah ada di ERP atau spreadsheet Anda; yang bikin kacau adalah datanya tidak bisa dipetakan ke wilayah yang konsisten. Di situlah API wilayah berperan.

Arsitektur Umum: Data Vendor Anda Plus Wilayah Resmi

Pola yang paling sering dipakai tim procurement dan marketplace:

Kebutuhan Sumber data
Nama vendor, NPWP, kontak PIC Database internal (ERP, spreadsheet sourcing)
Kode provinsi, kabupaten, kecamatan, desa API Wilayah Indonesia
Kode pos gudang/vendor API Wilayah (field postal_code per kelurahan)
Validasi alamat saat onboarding vendor API Wilayah (search plus hierarki kode wilayah)

Hasilnya: alamat vendor di database Anda menyimpan kode wilayah resmi (bukan teks bebas), jadi filter "supplier di Jawa Barat, kabupaten X" jadi query sederhana, bukan fuzzy matching yang rawan salah.

Endpoint Wilayah yang Relevan

Base URL: https://use.apiindonesia.id/api/v1/wilayah

Method Endpoint Keterangan
GET /provinsi 38 provinsi
GET /kabupaten?provinsi_id= Kabupaten/kota per provinsi
GET /kecamatan?kabupaten_id= Kecamatan per kabupaten
GET /kelurahan?kecamatan_id= Kelurahan/desa lengkap dengan kode pos
GET /search?q= Cari semua level sekaligus

Semua endpoint list mendukung paginasi (page, per_page maksimum 100).

1. Ambil Referensi Wilayah Sekali, Cache Selamanya

Data wilayah hampir tidak berubah, jadi ambil satu kali saat setup dan simpan lokal:

curl "https://use.apiindonesia.id/api/v1/wilayah/provinsi?page=1&per_page=100" \
  -H "x-api-key: aip_live_xxx"
{
  "data": [
    { "id": "32", "code": "32", "name": "JAWA BARAT", "alt_name": "Jawa Barat", "lat": -6.914744, "lng": 107.609811, "is_active": 1 }
  ],
  "meta": { "total": 38, "page": 1, "per_page": 100, "total_pages": 1 }
}

2. Onboarding Vendor: Resolve Alamat Jadi Kode Wilayah

Saat vendor baru daftar lewat form, alamat yang diketik sering tidak konsisten ("Jaksel", "Kota Bekasi", "Bekasi"). Solusinya: search nama wilayah, lalu minta vendor konfirmasi pilihan yang muncul:

curl "https://use.apiindonesia.id/api/v1/wilayah/search?q=cimahi" \
  -H "x-api-key: aip_live_xxx"
{
  "data": [
    { "id": "3277", "name": "KOTA CIMAHI", "alt_name": "Kota Cimahi", "level": "kabupaten" }
  ],
  "meta": { "total": 1, "page": 1, "per_page": 20, "total_pages": 1 }
}

Setelah vendor memilih "Kota Cimahi", ambil daftar kecamatan untuk dropdown berikutnya:

curl "https://use.apiindonesia.id/api/v1/wilayah/kecamatan?kabupaten_id=3277" \
  -H "x-api-key: aip_live_xxx"

Dan untuk kecamatan yang dipilih, ambil kelurahan beserta kode pos:

curl "https://use.apiindonesia.id/api/v1/wilayah/kelurahan?kecamatan_id=3277010" \
  -H "x-api-key: aip_live_xxx"
{
  "data": [
    {
      "id": "3277010001",
      "district_id": "3277010",
      "code": "32.77.01.1001",
      "name": "LEUWIGAJAH",
      "alt_name": "Leuwigajah",
      "postal_code": "40532",
      "is_courier_support": 1,
      "lat": -6.9083,
      "lng": 107.5408,
      "is_active": 1
    }
  ],
  "meta": { "total": 4, "page": 1, "per_page": 20, "total_pages": 1 }
}

3. Contoh Integrasi: Sinkronisasi Data Supplier di Python

Skrip ini menyimpan referensi wilayah lalu melengkapi data supplier internal dengan kode wilayah dan kode pos:

import csv
import os
import requests

BASE = "https://use.apiindonesia.id/api/v1/wilayah"
HEADERS = {"x-api-key": os.environ["API_INDONESIA_KEY"]}

def build_region_index() -> dict:
    # Fetch semua kabupaten/kota dan map nama-nya ke kode resmi.
    index = {}
    page = 1
    while True:
        r = requests.get(f"{BASE}/kabupaten", headers=HEADERS,
                         params={"page": page, "per_page": 100}).json()
        for row in r["data"]:
            index[row["alt_name"].lower()] = row["code"]
        if page >= r["meta"]["total_pages"]:
            break
        page += 1
    return index

def enrich_suppliers(suppliers, index):
    for s in suppliers:
        key = s["kota"].lower().strip()
        s["kabupaten_code"] = index.get(key)
        if s["kabupaten_code"]:
            kel = requests.get(
                f"{BASE}/kelurahan",
                headers=HEADERS,
                params={"kecamatan_id": s["kecamatan_code"]},
            ).json()
            match = next((k for k in kel["data"] if k["name"].lower() == s["desa"].lower()), None)
            if match:
                s["postal_code"] = match["postal_code"]
    return suppliers

if __name__ == "__main__":
    index = build_region_index()
    with open("suppliers.csv") as f:
        rows = list(csv.DictReader(f))
    for s in enrich_suppliers(rows, index):
        print(s["nama"], s["kabupaten_code"], s.get("postal_code"))

Versi Node.js: Dropdown Alamat Bertingkat

const BASE = "https://use.apiindonesia.id/api/v1/wilayah";

export async function addressOptions(provinsiId) {
  const headers = { "x-api-key": process.env.API_INDONESIA_KEY };
  const kab = await (await fetch(`${BASE}/kabupaten?provinsi_id=${provinsiId}`, { headers })).json();
  return kab.data.map((k) => ({ value: k.id, label: k.alt_name }));
}

// Di handler form onboarding vendor:
// GET /api/address/kabupaten?provinsi_id=32 -> dropdown level 2
// GET /api/address/kecamatan?kabupaten_id=3273 -> dropdown level 3
// GET /api/address/kelurahan?kecamatan_id=3273010 -> dropdown level 4 + kode pos

Use Case untuk Marketplace dan Procurement

  • Marketplace B2B: vendor diwajibkan pilih wilayah resmi saat daftar, jadi filter pencarian supplier per daerah selalu akurat.
  • Procurement: analisis konsentrasi vendor: hitung berapa supplier per provinsi/kabupaten untuk diversifikasi rantai pasok.
  • Logistik: field is_courier_support dan koordinat per kelurahan membantu estimasi ongkir dan coverage.
  • KYC vendor: konsistensi alamat: bandingkan alamat vendor dengan hierarki kode wilayah resmi Kemendagri.

Mulai Sekarang

Jelajahi semua produk di katalog API Indonesia atau langsung pelajari detail endpoint di halaman API Wilayah Indonesia. API key gratis tersedia dengan 1.000 request per bulan.

Mulai Sekarang

Mulai Integrasi
Hari Ini

Daftar gratis, ambil API key, dan langsung call endpoint pertama Anda — tanpa kartu kredit, tanpa proses approval yang ribet.

Visualisasi gelombang titik