Scraper Indonesia untuk Node.js. Mengambil data dari berbagai sumber publik tanpa API key.
npm install indo-scraperconst Scraper = require('indo-scraper')
const s = new Scraper()
const result = await s.kompas({ channel: 'news', limit: 5 })Semua method mengembalikan format yang sama:
// sukses
{ creator: 'Angga Putra', status: true, data: { ... } }
// gagal
{ creator: 'Angga Putra', status: false, msg: 'error message' }await s.kompas({ channel: 'news', page: 1, limit: 20, date: '15/05/2026' })| Option | Default | Values |
|---|---|---|
channel |
'news' |
news regional megapolitan money sport tekno sains travel food health |
page |
1 |
number |
limit |
20 |
number |
date |
null |
dd/mm/yyyy |
// response
{
creator: 'Angga Putra',
status: true,
data: [
{
title: 'Pemerintah Umumkan Kebijakan Baru Energi Terbarukan',
url: 'https://nasional.kompas.com/read/2026/05/15/...',
image: 'https://asset.kompas.com/crops/...',
category: 'News',
date: '2026-05-15T08:30:00+07:00',
source: 'kompas'
},
// ...
]
}await s.kompasArticle(url)// response
{
creator: 'Angga Putra',
status: true,
data: {
title: 'Pemerintah Umumkan Kebijakan Baru Energi Terbarukan',
author: 'Ardito Ramadhan',
date: '2026-05-15T08:30:00+07:00',
category: 'Nasional',
description: 'Pemerintah resmi mengumumkan...',
thumbnail: 'https://asset.kompas.com/crops/...',
content: 'Paragraf 1...\n\nParagraf 2...',
paragraphs: ['Paragraf 1...', 'Paragraf 2...']
}
}await s.detik({ channel: 'news', page: 1, limit: 20 })| Option | Default | Values |
|---|---|---|
channel |
'news' |
news finance hot sport inet oto health travel food |
await s.detikSearch(query, limit) // search articles
await s.detikArticle(url) // full article contentawait s.cnn({ category: 'nasional', limit: 20 })| Option | Default | Values |
|---|---|---|
category |
'nasional' |
nasional internasional ekonomi olahraga teknologi hiburan gaya_hidup |
await s.cnnArticle(url)await s.tribun({ channel: 'nasional', page: 1, limit: 20 })| Option | Default | Values |
|---|---|---|
channel |
'nasional' |
nasional regional internasional sport bisnis seleb lifestyle techno otomotif |
await s.tribunArticle(url)await s.liputan6({ channel: 'news', page: 1, limit: 20 })| Option | Default | Values |
|---|---|---|
channel |
'news' |
news bisnis bola tekno showbiz otomotif health lifestyle global |
await s.liputan6Article(url)await s.okezone({ channel: 'nasional', page: 1, limit: 20 })| Option | Default | Values |
|---|---|---|
channel |
'nasional' |
nasional economy sports techno celebrity lifestyle otomotif health |
await s.okenewsArticle(url)await s.antara({ channel: 'nasional', page: 1, limit: 20 })| Option | Default | Values |
|---|---|---|
channel |
'nasional' |
nasional hukum ekonomi olahraga hiburan internasional tekno otomotif |
await s.antaraArticle(url)await s.republika({ channel: 'nasional', page: 1, limit: 20 })| Option | Default | Values |
|---|---|---|
channel |
'nasional' |
nasional internasional ekonomi olahraga hiburan tekno gaya_hidup |
await s.republikaArticle(url)Semua scraper news (detik, cnn, tribun, liputan6, okezone, antara, republika) mengembalikan struktur yang sama dengan
kompas— array of articles danArticle()mengembalikan object artikel lengkap dengantitle,author,date,content,paragraphs, dll.
await s.bmkgGempa() // gempa terbaru (1 data)
await s.bmkgGempaTerkini() // 15 gempa terkini — returns array
await s.bmkgGempaDirasakan() // gempa yang dirasakan masyarakat — returns array// response bmkgGempa()
{
creator: 'Angga Putra',
status: true,
data: {
tanggal: '15 Mei 2026',
jam: '09:47:30 WIB',
datetime: '2026-05-15T02:47:30+00:00',
koordinat: '-2.34,128.12',
lintang: '2.34 LS',
bujur: '128.12 BT',
magnitude: '4.5',
kedalaman: '10 km',
wilayah: 'Pusat gempa berada di darat 23 km BaratLaut Ternate',
potensi: 'Gempa ini dirasakan untuk diwaspadai',
dirasakan: 'II-III MMI',
shakemap: 'https://data.bmkg.go.id/DataMKG/TEWS/20260515094730.mmi.jpg'
}
}await s.bmkgCuaca('jakarta')Available: jakarta bandung surabaya medan semarang makassar yogyakarta palembang denpasar balikpapan
// response
{
creator: 'Angga Putra',
status: true,
data: {
lokasi: {
kecamatan: 'Gambir',
kotkab: 'Kota Jakarta Pusat',
provinsi: 'DKI Jakarta'
},
prakiraan: [
{
datetime: '2026-05-15 06:00:00',
cuaca: 'Berawan',
suhu: 28,
suhu_min: 25,
suhu_max: 32,
kelembaban: 80,
angin: 10,
arah_angin: 'S',
icon: 'https://api.bmkg.go.id/asset/cuaca/3.svg'
},
// per 3 jam, total ~16 item
]
}
}await s.saham('ihsg') // IHSG
await s.saham('bbca') // saham BCA
await s.saham('GOTO') // kode IDX langsungKode bawaan: ihsg bbca bbri bmri tlkm asii goto unvr hmsp antm indf klbf
// response saham('bbca')
{
creator: 'Angga Putra',
status: true,
data: {
kode: 'BBCA',
nama: 'Bank Central Asia Tbk',
close: 9850,
open: 9800,
high: 9900,
low: 9750,
volume: 12540000,
perubahan_pct: 0.51,
perubahan_abs: 50,
performa: {
'1W': 1.23,
'1M': -2.45,
'3M': 5.67,
'6M': 8.12,
'1Y': 12.34,
'YTD': 3.21
},
sumber: 'TradingView'
}
}// response saham('ihsg')
{
creator: 'Angga Putra',
status: true,
data: {
kode: 'IHSG',
symbol: 'IDX:COMPOSITE',
open: 7102.34,
high: 7145.67,
low: 7089.12,
close: 7130.45,
volume: 18750000000,
update: '2026-05-15T09:00:00.000Z',
sumber: 'TradingView'
}
}await s.sahamList(50) // daftar saham by market cap, default 50, max 906// response sahamList()
{
creator: 'Angga Putra',
status: true,
data: {
total: 906,
tampil: 50,
data: [
{
kode: 'BBCA',
nama: 'Bank Central Asia Tbk',
close: 9850,
perubahan_pct: 0.51,
perubahan_abs: 50,
volume: 12540000,
market_cap: 241350000000000,
performa: { '1W': 1.23, '1M': -2.45, '1Y': 12.34, 'YTD': 3.21 }
},
// ...
]
}
}await s.kurs('usd')
await s.kursAll()Mendukung semua kode ISO 4217. Sumber: fiskal.kemenkeu.go.id.
// response kurs('usd')
{
creator: 'Angga Putra',
status: true,
data: {
mata_uang: 'Dolar Amerika Serikat',
kode: 'USD',
nilai: '16.285',
perubahan: '+25',
sumber: 'Kemenkeu'
}
}
// response kursAll()
{
creator: 'Angga Putra',
status: true,
data: {
sumber: 'Kemenkeu',
data: [
{ mata_uang: 'Dolar Amerika Serikat', kode: 'USD', nilai: '16.285', perubahan: '+25' },
{ mata_uang: 'Euro', kode: 'EUR', nilai: '17.842', perubahan: '-10' },
// ...
]
}
}await s.emasAntam() // harga emas Antam per gram (logammulia.com)
await s.emasHarga() // harga emas dunia dalam IDR, Ounce & Gram// response emasAntam()
{
creator: 'Angga Putra',
status: true,
data: {
tanggal: 'Harga Emas 15 Mei 2026',
data: [
{ berat: '0.5 gr', harga_dasar: 'Rp 875.000', harga_termasuk_pajak: 'Rp 913.000' },
{ berat: '1 gr', harga_dasar: 'Rp 1.650.000', harga_termasuk_pajak: 'Rp 1.722.000' },
{ berat: '2 gr', harga_dasar: 'Rp 3.280.000', harga_termasuk_pajak: 'Rp 3.424.000' },
{ berat: '5 gr', harga_dasar: 'Rp 8.150.000', harga_termasuk_pajak: 'Rp 8.517.000' },
// ...
]
}
}await s.bbm()// response
{
creator: 'Angga Putra',
status: true,
data: {
update: 'Last Updated: 15 Mei 2026',
harga: [
{ jenis: 'Pertalite', harga: 'Rp 10.000/Liter' },
{ jenis: 'Pertamax', harga: 'Rp 12.500/Liter' },
{ jenis: 'Dexlite', harga: 'Rp 13.950/Liter' },
{ jenis: 'Pertamina Dex', harga: 'Rp 14.550/Liter' }
],
provinsi: [
{ Provinsi: 'DKI Jakarta', Pertalite: 'Rp 10.000', Pertamax: 'Rp 12.500' },
// ...
]
}
}Cek provider nomor HP Indonesia. Bekerja offline, tanpa network request.
await s.cekNomor('08123456789')
await s.cekNomor('+628123456789')
await s.cekNomor('628123456789')// response (semua format input menghasilkan output yang sama)
{
creator: 'Angga Putra',
status: true,
data: {
nomor_asli: '08123456789',
nomor: '08123456789',
prefix: '0812',
provider: 'Telkomsel',
panjang: 11
}
}Provider yang dikenali: Telkomsel, Indosat, XL, AXIS, Smartfren, Three.
await s.cekResi('jne', 'JNEX12345678')Kurir: jne jnt j&t sicepat pos anteraja wahana tiki ninja lion
// response
{
creator: 'Angga Putra',
status: true,
data: {
kurir: 'jne',
noResi: 'JNEX12345678',
status: 'DELIVERED',
history: [
{ tanggal: '15/05/2026 10:30', keterangan: 'DELIVERED', lokasi: 'Jakarta Selatan' },
{ tanggal: '15/05/2026 07:00', keterangan: 'WITH COURIER', lokasi: 'Jakarta' },
{ tanggal: '14/05/2026 20:00', keterangan: 'RECEIVED AT ORIGIN GATEWAY', lokasi: 'Surabaya' }
]
}
}await s.instagram('https://www.instagram.com/p/...')// response (foto / video / reels)
{
creator: 'Angga Putra',
status: true,
data: {
url: 'https://www.instagram.com/p/...',
medias: [
{
type: 'video',
url: 'https://cdn.rapidcdn.app/...',
thumbnail: 'https://...'
}
]
}
}
// carousel — medias berisi lebih dari 1 item
{
creator: 'Angga Putra',
status: true,
data: {
url: 'https://www.instagram.com/p/...',
medias: [
{ type: 'image', url: 'https://...', thumbnail: 'https://...' },
{ type: 'image', url: 'https://...', thumbnail: 'https://...' },
{ type: 'video', url: 'https://...', thumbnail: 'https://...' }
]
}
}await s.tiktok(url) // video TikTok tanpa watermark
await s.spotify(url) // track atau playlist Spotify
await s.facebook(url) // video Facebook
await s.mediafire(url) // direct link Mediafire
await s.gdrive(url) // direct link Google DriveScreenshot website via Microlink API.
await s.ssweb('https://example.com')
await s.ssweb('https://example.com', 'mobile')Device: desktop (default) mobile tablet hd 4k
await s.simsimi('halo, apa kabar?')Untuk menambah scraper baru:
1. Buat file di folder yang sesuai, contoh src/news/bisnis.js:
const { fetchHTML, cheerio, ok, fail } = require('../utils')
const bisnis = async (options = {}) => {
return new Promise(async (resolve) => {
try {
const html = await fetchHTML('https://bisnis.com/...')
const $ = cheerio.load(html)
// parse data ...
resolve(ok(data))
} catch (e) {
resolve(fail(e))
}
})
}
module.exports = { bisnis }2. Daftarkan di index.js:
require('./src/news/bisnis'),Utils yang tersedia: fetchHTML fetchJSON cheerio parseLdJson parseThumbnail parseParagraphs ok fail
- Scraper berbasis HTML parsing. Jika
status: falsedan pesan "Data tidak ditemukan", kemungkinan selector CSS perlu diperbarui karena situs mengubah struktur HTML-nya. - BMKG Gempa menggunakan mirror Google Storage agar tidak terkena rate limit endpoint utama BMKG.
- Data saham dan IHSG dari TradingView Scanner — tanpa API key, tanpa rate limit.
- Kurs dari Kemenkeu (fiskal.kemenkeu.go.id) — data resmi pemerintah.
MIT © Angga Putra