Scrape Etsy dengan Python: Pencarian, Produk, Toko, & Ulasan

Terakhir diperbarui pada April 28, 2026
Scrape Etsy dengan Python: Pencarian, Produk, Toko, & Ulasan

Etsy memiliki lebih dari 100 juta listing aktif, 5,6 juta penjual, dan sekitar 450 juta kunjungan bulanan. Artinya, ada banyak data publik yang bisa dipakai untuk melihat harga, tren, ulasan, dan kompetitor — dan kalau Anda pernah coba mengumpulkannya secara manual, Anda pasti tahu betapa capeknya.

Saya pernah menghabiskan satu akhir pekan untuk membuat katalog produk kompetitor secara manual untuk sebuah proyek riset pasar. Di produk nomor 30, saya mulai mempertanyakan semua keputusan hidup yang membawa saya ke spreadsheet itu. Masalahnya, data Etsy sangat berharga untuk analisis harga, pengembangan produk, penemuan niche, dan benchmarking penjual — tapi hanya kalau Anda benar-benar bisa mengambilnya dalam skala besar. Itulah yang dibahas panduan ini: satu tutorial yang mencakup cara scrape Etsy with Python di keempat jenis halaman utama (hasil pencarian, halaman produk, halaman toko, dan ulasan), plus panduan jujur tentang pertahanan anti-bot Etsy dan alternatif no-code bagi Anda yang ingin melewati scripting sepenuhnya.

Apa Artinya Scrape Etsy dengan Python?

Web scraping, secara sederhana, berarti menulis kode yang mengunjungi halaman web dan secara otomatis mengekstrak data yang Anda butuhkan — nama produk, harga, deskripsi, gambar, rating, ulasan, detail toko — lalu menyusunnya ke format terstruktur seperti spreadsheet atau database.

Python adalah bahasa yang paling sering dipilih untuk pekerjaan seperti ini. Ramah untuk pemula, punya komunitas besar, dan memiliki ekosistem library yang sangat lengkap untuk scraping: Requests (untuk mengambil halaman), BeautifulSoup (untuk parsing HTML), Selenium dan Playwright (untuk otomasi browser), serta pandas (untuk mengatur dan mengekspor data). Python secara konsisten berada di peringkat 3 besar bahasa paling populer dalam survei pengembang tahunan Stack Overflow, dan library scraping-nya termasuk yang paling banyak diunduh di PyPI.

Saat Anda scrape Etsy, Anda mengambil data dari HTML (dan terkadang JSON tersembunyi) yang disajikan Etsy ke browser Anda. Jenis data yang bisa diekstrak antara lain:

  • Nama produk, harga, deskripsi, gambar, dan variasi
  • Info penjual/toko (nama, jumlah penjualan, lokasi, rating)
  • Rating dan teks ulasan lengkap
  • Listing hasil pencarian, kategori, dan sinyal tren

Mengapa Scrape Etsy? Use Case Nyata yang Mendorong ROI

Scraping Etsy bukan sekadar latihan teknis — ini keunggulan kompetitif. Entah Anda penjual, product manager, atau analis data, punya data Etsy yang terstruktur di ujung jari bisa langsung berdampak ke keuntungan.

etsy_stats_4f1f4d51c3.png

Use CaseApa yang Di-scrapeSiapa yang DiuntungkanDampak Bisnis
Analisis Harga KompetitorHasil pencarian + harga produkOperasional e-commerce, penjualDynamic pricing bisa meningkatkan pendapatan rata-rata 5–22%
Penemuan Niche & TrenHasil pencarian, listing yang sedang trenFounder, analisMenangkap niche yang sedang naik lebih awal (misalnya, "preppy pajamas" melonjak +1.112% dalam pencarian)
Pengembangan & Perbaikan ProdukUlasan, detail produkTim produkSatu brand peralatan dapur merebut kembali posisi #1 Best Seller dalam 60 hari dengan data sentimen ulasan
SEO & Riset Kata KunciHasil pencarian, judul/tag produkTim marketingMengidentifikasi kata kunci berpermintaan tinggi dengan persaingan rendah
Benchmarking PenjualHalaman toko, jumlah penjualanTim sales, analisMenyusun daftar prospek berkualitas dengan biaya $0,01–0,10/rekor vs. daftar beli
Pemantauan Inventaris & StokKetersediaan produkOperasional e-commerceBereaksi lebih cepat terhadap perubahan stok kompetitor

Setiap use case ini membutuhkan data dari tipe halaman Etsy yang berbeda — itulah alasan tutorial ini mencakup semuanya.

Penghematan waktu: manual vs. otomatis

  • Riset Etsy manual: 30–45 menit per produk (50–75 jam untuk 100 produk)
  • Scraping otomatis: 100 listing dalam 2–5 menit
  • Scraping berbasis AI 30–40% lebih cepat dengan akurasi hingga 99,5%

Etsy API vs. Web Scraping: Mana yang Sebaiknya Dipilih?

Sebelum menulis satu baris kode pun, ada baiknya bertanya: sebaiknya saya pakai API resmi Etsy atau scrape situsnya langsung? Ini pertanyaan yang sering sekali muncul di forum, dan jawabannya tergantung data apa yang Anda butuhkan.

Apa yang Bisa dan Tidak Bisa Dilakukan Etsy API

Etsy menawarkan API v3 dengan autentikasi OAuth 2.0. API ini berguna untuk mengakses data toko Anda sendiri — listing, pesanan, kuitansi. Tapi ada batasan nyata:

  • Data kompetitor: API terutama dibatasi untuk toko Anda sendiri. Anda tidak bisa menarik harga, penjualan, atau listing penjual lain.
  • Ulasan: Tidak ada endpoint yang kuat untuk teks ulasan lengkap dalam jumlah besar.
  • Rate limit: 10 permintaan/detik, 10.000 permintaan/hari secara default. Batas offset adalah 12.000 record.
  • Penggunaan AI/ML: Ditolak secara eksplisit dalam review aplikasi.
  • Dokumentasi: Keluhan dari komunitas sangat umum — contoh buruk, endpoint usang, dukungan lambat.

Kapan Web Scraping Lebih Baik

Kalau Anda butuh intel kompetitor, sentimen ulasan, analisis lintas toko, atau data di luar yang diekspos API, scraping adalah jalannya. Konsekuensinya: Anda akan berhadapan dengan pertahanan anti-bot Etsy (lebih lanjut di bawah), dan perlu investasi untuk setup.

Tabel Perbandingan: API vs. Scraping vs. No-Code

KriteriaAPI Resmi EtsyPython Web ScrapingThunderbit (No-Code)
Akses ke harga produk✅ (field terbatas)✅ HTML/JSON-LD lengkap✅ AI mengekstrak field yang terlihat
Data ulasan❌ Tidak tersedia dalam jumlah besar✅ Lewat endpoint/HTML ulasan✅ Scraping subhalaman
Data toko kompetitor❌ Hanya toko sendiri✅ Toko publik mana pun✅ Toko publik mana pun
Perlu autentikasi✅ OAuth 2.0⚠️ Cookie untuk data login⚠️ Scraping browser untuk login
Risiko anti-botTidak adaTINGGI (DataDome)Ditangani (native browser)
Waktu setupSedang (API key, OAuth)Tinggi (kode + proxy)~2 menit

Kalau Anda butuh data kompetitor, ulasan, atau analisis lintas toko, API memang tidak cukup. Itu gambaran jujurnya.

Pilih Pendekatan Scraping Python Anda Sebelum Menulis Kode

Pertanyaan yang sering saya lihat di Reddit dan Stack Overflow: "Harus pakai Requests + BeautifulSoup, Selenium, proxy API, atau yang lain?" Jawabannya tergantung level skill, anggaran, dan use case Anda.

PendekatanPaling Cocok UntukKurva BelajarMenangani JS?Penanganan Anti-BotBiaya
Requests + BeautifulSoupDeveloper yang ingin kontrol penuhSedangManual (header, proxy)Gratis + biaya proxy
Selenium / PlaywrightHalaman berat JS, alur loginTinggiSebagian (browser fingerprint)Gratis + biaya proxy
Layanan Proxy APISkala besar + bypass anti-botSedang✅ (via API)✅ Bawaan$49+/bulan
Thunderbit (no-code)Non-developer, ekstraksi cepatSangat rendah✅ (native browser)✅ (sesi browser)Ada tier gratis

Kalau Anda ingin kontrol penuh dan nyaman dengan Python, gunakan Requests + BeautifulSoup. Kalau perlu rendering JS atau alur login, pakai Selenium. Kalau butuh bypass anti-bot dalam skala besar, pertimbangkan layanan proxy. Dan kalau Anda ingin data Etsy tanpa menulis atau memelihara kode, Thunderbit layak dicoba — nanti kita bahas lebih lanjut.

Bagaimana Etsy Melawan: Memahami Perlindungan Anti-Bot DataDome

Kebanyakan panduan scraping akan bilang, "tinggal pakai proxy" lalu selesai. Itu belum cukup untuk Etsy. Etsy menggunakan DataDome, salah satu sistem anti-bot paling agresif di web. Studi kasus resmi DataDome menyorot Etsy sebagai kisah sukses, dengan catatan bahwa scraper dulu menyumbang sekitar 1% dari biaya komputasi Etsy.

etsy_antibot_5431142c9c.png

Apa Itu DataDome dan Bagaimana Cara Kerjanya?

DataDome tidak hanya memeriksa alamat IP Anda. Sistem ini menjalankan stack deteksi berlapis:

  • TLS fingerprinting (JA3): Library requests milik Python punya signature TLS khas yang bisa langsung dideteksi DataDome.
  • Pemeriksaan header/protokol HTTP: Mengecek header browser yang lengkap dan konsisten — header yang hilang atau urutannya janggal jadi tanda bahaya.
  • JavaScript fingerprinting (protokol Picasso): Menjalankan tantangan JS di browser untuk memastikan Anda pengguna asli.
  • Behavioral ML: Menganalisis lebih dari 35 sinyal per permintaan, dengan lebih dari 85.000 model per situs.
  • Skor reputasi IP: IP datacenter langsung ditandai.
  • Verifikasi cookie: Cookie datadome harus ada dan valid.

Tanda-Tanda Anda Diblokir (dan Cara Mengeceknya)

Salah satu jebakan paling umum: Anda mendapat respons 200 OK, tapi HTML-nya sebenarnya halaman CAPTCHA, bukan data yang Anda inginkan. Tanda lain:

  • Error 403 Forbidden
  • Redirect loop
  • Body respons berisi objek JavaScript dd atau HTML CAPTCHA slider

Selalu periksa body respons, bukan hanya status code. Pemeriksaan cepat:

if "captcha" in resp.text.lower() or "datadome" in resp.text.lower():
    print("Diblokir! Yang didapat halaman CAPTCHA, bukan data.")

Header dan Cookie yang Mengurangi Deteksi

Anda tidak bisa menjamin tidak akan diblokir, tapi header yang realistis dan pengelolaan cookie sangat membantu:

session = requests.Session()
session.headers.update({
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/133.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept-Encoding": "gzip, deflate, br",
    "Sec-Ch-Ua": '"Chromium";v="133", "Not-A.Brand";v="99", "Google Chrome";v="133"',
    "Sec-Ch-Ua-Mobile": "?0",
    "Sec-Ch-Ua-Platform": '"Windows"',
    "Sec-Fetch-Dest": "document",
    "Sec-Fetch-Mode": "navigate",
    "Sec-Fetch-Site": "none",
    "Upgrade-Insecure-Requests": "1",
})

Hal penting lain:

  • Pertahankan cookie antar permintaan menggunakan requests.Session().
  • Tambahkan jeda acak (2–7 detik) antar permintaan.
  • Simulasikan alur referrer: Kunjungi homepage dulu, lalu pencarian, lalu halaman produk.
  • Pada skala besar, rotasi proxy residential sangat penting. IP datacenter hampir langsung ditandai.

Teknik-teknik ini mengurangi deteksi, tapi tidak menghilangkannya. Untuk scraping volume tinggi, Anda kemungkinan perlu layanan proxy atau pendekatan berbasis browser.

Menyiapkan Lingkungan Python untuk Scrape Etsy

Sebelum Mulai:

  • Tingkat kesulitan: Menengah
  • Waktu yang dibutuhkan: ~30–60 menit (setup + scrape pertama)
  • Yang Anda perlukan: Python 3.8+, pip, code editor, browser Chrome (untuk inspeksi DevTools)

Instal Dependensi

Buat folder proyek, siapkan virtual environment, lalu instal library yang dibutuhkan:

mkdir etsy-scraper && cd etsy-scraper
python -m venv venv
source venv/bin/activate  # Di Windows: venv\Scripts\activate

pip install requests beautifulsoup4 lxml pandas
  • requests — mengambil halaman web
  • beautifulsoup4 — parsing HTML
  • lxml — parser HTML lebih cepat (opsional tapi disarankan)
  • pandas — menyusun dan mengekspor data ke CSV/Excel

Kalau nanti Anda butuh otomasi browser (untuk login atau halaman yang berat JS), instal juga:

pip install selenium

Pahami Struktur Halaman Etsy Sebelum Menulis Kode

Ada tips yang sangat menghemat waktu: Etsy menyematkan data produk terstruktur di dalam tag <script type="application/ld+json"> di sebagian besar halaman. Data JSON-LD ini sudah terorganisasi — nama produk, harga, rating, gambar — jadi Anda tidak perlu bergulat dengan CSS selector yang rapuh untuk setiap field.

Buka halaman produk Etsy mana pun, klik kanan, "View Page Source," lalu cari application/ld+json. Anda akan menemukan blok dengan @type: Product yang berisi sebagian besar data yang dibutuhkan. Halaman hasil pencarian punya @type: ItemList.

CSS selector tetap berguna sebagai fallback (untuk data yang tidak ada di JSON-LD, seperti detail pengiriman atau teks ulasan), tapi JSON-LD sebaiknya jadi titik awal Anda.

Langkah 1: Scrape Hasil Pencarian Etsy dengan Python

Hasil pencarian adalah titik awal untuk sebagian besar proyek scraping Etsy — entah Anda memantau niche, melacak harga kompetitor, atau membangun database produk.

Bangun URL Pencarian

URL pencarian Etsy mengikuti pola ini:

https://www.etsy.com/search?q={keyword}&ref=pagination&page={page_number}

Untuk query multi-kata, lakukan URL-encode pada spasinya (misalnya handmade+jewelry atau handmade%20jewelry). Parameter ref=pagination membuat permintaan terlihat lebih mirip navigasi browser sungguhan.

Parameter tambahan yang berguna: order (most_relevant, price_asc, price_desc, date_desc), min_price, max_price, ship_to, free_shipping=true. Setiap halaman menampilkan 48 item.

Kirim Permintaan dan Parse HTML

import requests
from bs4 import BeautifulSoup
import json
import time
import random

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124.0.0.0 Safari/537.36",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
}

def scrape_etsy_search(query, max_pages=3):
    all_products = []
    for page in range(1, max_pages + 1):
        url = f"https://www.etsy.com/search?q={query}&ref=pagination&page={page}"
        resp = requests.get(url, headers=headers, timeout=30)
        if "captcha" in resp.text.lower():
            print(f"Diblokir di halaman {page}. Coba tambahkan jeda atau proxy.")
            break
        soup = BeautifulSoup(resp.text, "lxml")
        for script in soup.find_all("script", type="application/ld+json"):
            data = json.loads(script.string)
            if data.get("@type") == "ItemList":
                for item in data.get("itemListElement", []):
                    all_products.append({
                        "name": item.get("name"),
                        "url": item.get("url"),
                        "image": item.get("image"),
                        "price": item.get("offers", {}).get("price"),
                        "currency": item.get("offers", {}).get("priceCurrency"),
                        "position": item.get("position"),
                    })
        time.sleep(random.uniform(2, 5))
    return all_products

Ekstrak Data Listing dari JSON-LD

Array itemListElement memberi Anda nama, URL, gambar, harga, dan mata uang setiap listing. Kalau Anda juga butuh rating bintang atau jumlah hasil (tidak selalu ada di JSON-LD), gunakan CSS selector sebagai fallback:

  • Listing card: .v2-listing-card
  • Judul: h3.v2-listing-card__title
  • Harga: span.currency-value
  • Link: a.listing-link (href)

Tangani Pagination

Loop melalui halaman dan tambahkan jeda acak di antara setiap permintaan. Etsy biasanya mengembalikan hingga 20–250 halaman tergantung query.

results = scrape_etsy_search("handmade+jewelry", max_pages=5)
print(f"Berhasil scrape {len(results)} produk.")

Untuk scrape 5 halaman, ini memakan sekitar 20 detik dalam pengujian saya — dibandingkan 30+ menit copy-paste manual.

Langkah 2: Scrape Halaman Produk Etsy dengan Python

Setelah Anda punya daftar URL produk dari hasil pencarian, langkah berikutnya adalah mengambil data detail dari setiap halaman listing.

Ambil Halaman Produk

def scrape_etsy_product(url):
    resp = requests.get(url, headers=headers, timeout=30)
    soup = BeautifulSoup(resp.text, "lxml")
    for script in soup.find_all("script", type="application/ld+json"):
        data = json.loads(script.string)
        if data.get("@type") == "Product":
            offers = data.get("offers", {})
            price = offers.get("price") or offers.get("lowPrice")
            rating_data = data.get("aggregateRating", {})
            return {
                "name": data.get("name"),
                "description": data.get("description", "")[:500],
                "brand": data.get("brand", {}).get("name") if isinstance(data.get("brand"), dict) else data.get("brand"),
                "category": data.get("category"),
                "price": price,
                "currency": offers.get("priceCurrency"),
                "availability": offers.get("availability"),
                "rating": rating_data.get("ratingValue"),
                "review_count": rating_data.get("reviewCount"),
                "images": data.get("image", []),
                "sku": data.get("sku"),
                "material": data.get("material"),
            }
    return None

Tangani Variasi Harga

Beberapa produk punya satu offers.price. Yang lain (dengan variasi seperti ukuran atau warna) menggunakan offers.lowPrice dan offers.highPrice. Kode di atas menangani keduanya dengan fallback dari price ke lowPrice.

Parse Field Tambahan via CSS Selector

Untuk data yang tidak ada di JSON-LD — info pengiriman, opsi variasi, detail penjual lengkap — Anda perlu CSS selector:

  • Judul: h1[data-buy-box-listing-title]
  • Variasi: select[data-selector-id] atau div[data-option-set]
  • Pengiriman: div.wt-text-caption di dekat bagian pengiriman

Konsekuensinya: JSON-LD lebih bersih dan lebih stabil saat layout berubah. CSS selector lebih rapuh tapi mencakup lebih banyak field.

Langkah 3: Scrape Halaman Toko Etsy dengan Python

Ini bagian yang sering dilewati sepenuhnya oleh panduan kompetitor — padahal bisa dibilang paling berharga untuk tim sales dan analis kompetitif.

Bangun URL Toko dan Ambil Halamannya

def scrape_etsy_shop(shop_name):
    url = f"https://www.etsy.com/shop/{shop_name}"
    resp = requests.get(url, headers=headers, timeout=30)
    soup = BeautifulSoup(resp.text, "lxml")

    # Metadata toko dari HTML (bukan dari JSON-LD)
    sales_el = soup.select_one("div.shop-sales-reviews a")
    rating_el = soup.find("input", {"name": "initial-rating"})
    location_el = soup.select_one("div.shop-location")

    shop_data = {
        "name": shop_name,
        "sales": sales_el.text.strip() if sales_el else None,
        "rating": rating_el["value"] if rating_el else None,
        "location": location_el.text.strip() if location_el else None,
    }

    # Listing dari JSON-LD
    listings = []
    for script in soup.find_all("script", type="application/ld+json"):
        data = json.loads(script.string)
        if data.get("@type") == "ItemList":
            for item in data.get("itemListElement", []):
                listings.append({
                    "name": item.get("name"),
                    "url": item.get("url"),
                    "price": item.get("offers", {}).get("price"),
                })
    shop_data["listings"] = listings
    return shop_data

Apa yang Bisa Diekstrak dari Halaman Toko

JSON-LD pada halaman toko adalah @type: ItemList — ini mencakup listing produk, tetapi tidak mencakup metadata level toko seperti jumlah penjualan, lokasi, atau rating. Untuk itu, Anda perlu CSS selector:

Titik DataSelectorCatatan
Nama tokoh1 atau meta titleBiasanya ada di judul halaman
Total penjualandiv.shop-sales-reviews aTeks seperti "12.345 sales"
Rating bintangNilai input[name="initial-rating"]Angka 1–5
Lokasidiv.shop-locationKota, negara
Bergabung sejakdiv.shop-infoTeks tanggal

Data toko sangat berharga untuk menyusun daftar prospek, benchmarking kompetitor, atau mengidentifikasi penjual teratas di niche tertentu.

Langkah 4: Scrape Ulasan Etsy dengan Python

Ulasan termasuk data paling berharga — dan paling rumit — di Etsy. Teks ulasan lengkap, rating, dan tanggalnya tidak ada di HTML awal halaman; semuanya dimuat lewat endpoint API internal.

Pendekatan 1: Temukan Endpoint API Ulasan Internal Etsy

Buka halaman produk di Chrome, buka DevTools (F12), masuk ke tab Network, lalu scroll ke bagian ulasan. Anda akan melihat permintaan POST ke sesuatu seperti:

https://www.etsy.com/api/v3/ajax/bespoke/member/neu/specs/deep_dive_reviews

Endpoint ini mengembalikan fragmen HTML berisi kartu ulasan. Untuk menggunakannya, Anda butuh:

  • listing_id — ID numerik dari URL produk
  • shop_id — ekstrak dari HTML halaman produk menggunakan regex
  • csrf_nonce — ekstrak dari tag <meta> di halaman

Ekstrak ID dan Token CSRF

import re

def get_review_params(product_url):
    resp = requests.get(product_url, headers=headers)
    html = resp.text
    listing_id = product_url.split("/")[-1].split("?")[0]
    shop_id_match = re.search(r'"shopId"\s*:\s*(\d+)', html)
    shop_id = shop_id_match.group(1) if shop_id_match else None
    soup = BeautifulSoup(html, "lxml")
    csrf_meta = soup.find("meta", {"name": "csrf_nonce"})
    csrf = csrf_meta["content"] if csrf_meta else None
    return listing_id, shop_id, csrf

Scrape Ulasan dengan Pagination

def scrape_reviews(listing_id, shop_id, csrf, max_pages=5):
    session = requests.Session()
    session.headers.update(headers)
    all_reviews = []
    for page in range(1, max_pages + 1):
        payload = {
            "specs": {
                "deep_dive_reviews": {
                    "module_path": "neu/specs/deep_dive_reviews",
                    "listing_id": listing_id,
                    "shop_id": shop_id,
                    "page": page,
                }
            }
        }
        resp = session.post(
            "https://www.etsy.com/api/v3/ajax/bespoke/member/neu/specs/deep_dive_reviews",
            json=payload,
            headers={"x-csrf-token": csrf, "Content-Type": "application/json"},
        )
        data = resp.json()
        html_fragment = data.get("output", {}).get("deep_dive_reviews", "")
        review_soup = BeautifulSoup(html_fragment, "lxml")
        for card in review_soup.select("div.review-card"):
            rating_el = card.find("input", {"name": "rating"})
            text_el = card.select_one("div.wt-text-body")
            user_el = card.select_one("a[data-review-username]")
            date_el = card.select_one("p.wt-text-body-small")
            all_reviews.append({
                "rating": rating_el["value"] if rating_el else None,
                "text": text_el.text.strip() if text_el else None,
                "reviewer": user_el.text.strip() if user_el else None,
                "date": date_el.text.strip() if date_el else None,
            })
        time.sleep(random.uniform(2, 5))
    return all_reviews

Pendekatan 2: Parse Ulasan dari HTML (Fallback)

Kalau pendekatan API gagal (misalnya karena masalah token CSRF), Anda bisa parsing halaman pertama ulasan langsung dari HTML halaman produk. Keterbatasannya: hanya batch awal ulasan yang ada di HTML statis. Untuk lebih banyak, Anda butuh API atau alat otomasi browser seperti Selenium.

Menangani Data yang Membutuhkan Login: Scrape Toko Etsy Milik Sendiri

Ini adalah celah yang tidak dibahas tutorial lain, padahal kebutuhan ini nyata — terutama bagi penjual Etsy yang ingin mengekstrak pesanan, pendapatan, dan statistik mereka sendiri.

Masalahnya: requests saja tidak bisa mengakses dashboard Etsy Anda karena tidak membawa cookie sesi login.

Opsi 1: Selenium dengan Login Manual dan Pengambilan Cookie

Gunakan Selenium untuk membuka browser, login secara manual (atau otomatis), lalu lanjutkan scraping saat sudah terautentikasi:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.etsy.com/signin")
# Login manual di jendela browser, lalu:
input("Tekan Enter setelah login...")

cookies = driver.get_cookies()
# Sekarang gunakan driver.get() untuk menavigasi ke halaman dashboard dan scrape

Anda juga bisa menyimpan cookie dari sesi Selenium dan menggunakannya kembali dengan requests.Session() untuk scraping yang lebih cepat dan ringan setelah login awal.

Opsi 2: Ekspor Cookie Browser untuk Dipakai di Requests

Gunakan ekstensi browser (seperti "EditThisCookie") untuk mengekspor cookie sesi Etsy aktif Anda, lalu muat ke sesi Requests:

import requests

session = requests.Session()
# Tambahkan cookie yang diekspor dari browser Anda
session.cookies.set("uaid", "NILAI_UAID_ANDA", domain=".etsy.com")
session.cookies.set("user_prefs", "NILAI_USER_PREFS_ANDA", domain=".etsy.com")
# ... tambahkan cookie sesi lain sesuai kebutuhan

resp = session.get("https://www.etsy.com/your/orders", headers=headers)

Jalur Termudah: Mode Browser Scraping Thunderbit

Karena Thunderbit berjalan di dalam browser Chrome Anda, ia otomatis mewarisi sesi Etsy aktif Anda. Tidak perlu kode autentikasi, tidak perlu ekspor cookie — cukup buka dashboard Etsy Anda dan scrape. Ini benar-benar berguna untuk mengekstrak pesanan, pendapatan, statistik, dan data lain khusus penjual tanpa scripting.

Scrape Dashboard Etsy Anda dengan AI

Mengekspor dan Menggunakan Data Etsy yang Sudah Di-scrape

Simpan ke CSV atau JSON

import pandas as pd

df = pd.DataFrame(results)
df.to_csv("etsy_products.csv", index=False, encoding="utf-8")
df.to_json("etsy_products.json", orient="records", indent=2)

Praktik terbaik: sertakan timestamp di nama file, gunakan encoding UTF-8, dan tangani karakter khusus di nama produk (penjual Etsy suka emoji dan karakter beraksen).

Ekspor ke Google Sheets, Airtable, atau Notion

Bagi pengguna Python, library seperti gspread (Google Sheets) atau Airtable API memungkinkan Anda mendorong data secara terprogram. Tapi kalau Anda memakai Thunderbit, semua ekspor — ke Google Sheets, Excel, Airtable, dan Notion — gratis dan satu klik. Tanpa API key, tanpa setup OAuth.

Lewati Kode: Cara Scrape Etsy dengan Thunderbit (Alternatif No-Code)

Tidak semua orang ingin menulis script Python, memelihara konfigurasi proxy, atau debug CSS selector jam 2 pagi. Kalau itu Anda, berikut cara mendapatkan data Etsy dengan Thunderbit.

Instal Ekstensi Chrome Thunderbit

Buka Chrome Web Store dan instal Thunderbit. Buat akun gratis — tier gratis memberi Anda 6 halaman/bulan dan semua ekspor gratis.

Gunakan AI Suggest Fields di Halaman Etsy Mana Pun

Buka halaman pencarian, produk, atau toko Etsy. Klik "AI Suggest Fields" di sidebar Thunderbit. AI akan memindai halaman dan merekomendasikan kolom — nama produk, harga, rating, gambar, nama toko, tag, info pengiriman. Sesuaikan atau tambahkan kolom sesuai kebutuhan.

Klik Scrape dan Export

Klik "Scrape" untuk mengekstrak data dari halaman saat ini. Untuk hasil multi-halaman, gunakan scraping pagination Thunderbit. Untuk memperkaya daftar URL produk dengan detail dari tiap halaman produk (deskripsi, ulasan, pengiriman), gunakan subpage scraping — Thunderbit akan mengunjungi setiap link dan menarik data tambahan secara otomatis.

Ekspor ke Excel, Google Sheets, Airtable, atau Notion — semuanya gratis.

Kapan Thunderbit Lebih Unggul daripada Python untuk Scraping Etsy

  • Tidak perlu setup proxy atau kode anti-bot. Thunderbit berjalan di browser Chrome asli Anda, jadi ia mewarisi sesi Anda dan terlihat seperti pengguna biasa bagi DataDome.
  • AI menyesuaikan dengan perubahan layout secara otomatis. Tidak ada selector yang rusak saat Etsy memperbarui frontend.
  • Cocok untuk riset sekali pakai, analisis kompetitif, atau anggota tim non-teknis. Kalau Anda hanya butuh dataset cepat, Anda tidak perlu lingkungan Python.
  • Subpage scraping memungkinkan Anda memperkaya daftar URL produk dengan data detail tanpa menulis loop bersarang.

Untuk panduan langkah demi langkah, lihat channel YouTube Thunderbit.

Perbandingan Biaya 6 Bulan: Python vs. Thunderbit

FaktorPython DIYThunderbit
Waktu setup8–20 jamDi bawah 5 menit
Biaya 6 bulan (termasuk tenaga kerja, proxy)$2.720–9.450$90–228
Pemeliharaan bulanan4–10+ jam (update selector = overhead 80%+)0–1 jam
Penanganan anti-botResidential proxy dengan biaya kredit 85x normalBerbasis browser, secara native melewati DataDome
Kualitas dataTinggi (dengan usaha)Tinggi (berbasis AI)

Saya tidak bilang Python pilihan yang salah — kalau Anda butuh kontrol penuh, logika khusus, atau integrasi ke pipeline yang lebih besar, kode tetap raja. Tapi untuk kebanyakan pengguna bisnis yang hanya butuh data Etsy, hitung-hitungan ROI lebih memihak alat no-code.

Tips Hukum dan Etika untuk Scraping Etsy

Saya selalu ditanya soal legalitas di setiap artikel scraping, jadi ini versi singkatnya:

  • Syarat Penggunaan Etsy secara eksplisit melarang akses otomatis. Meski begitu, Etsy lebih mengandalkan penegakan teknis (DataDome) daripada litigasi — sejauh ini tidak ada kasus hukum yang diketahui secara khusus menarget scraper Etsy.
  • Scrape hanya data yang tersedia publik. Jangan mengakali autentikasi atau mengakses dashboard penjual privat yang bukan milik Anda.
  • Gunakan laju permintaan yang wajar. Jeda 2–7 detik antar permintaan, dan jangan membebani server Etsy.
  • Hormati robots.txt. Etsy mengizinkan halaman pencarian tetapi membatasi beberapa path.
  • Tangani data pribadi secara bertanggung jawab sesuai hukum privasi seperti GDPR.
  • Konsultasikan dengan penasihat hukum untuk proyek scraping skala komersial.

Untuk latar belakang lebih lanjut, lihat tulisan kami tentang implikasi hukum web scraping — termasuk Meta v. Bright Data (2024), di mana scraping data publik dinyatakan sah.

Penutup: Poin Utama yang Perlu Diingat

Kita sudah membahas banyak hal di sini. Ini yang saya ingin Anda bawa pulang:

  • Data terstruktur JSON-LD Etsy membuat ekstraksi lebih bersih daripada parsing HTML mentah untuk sebagian besar field.
  • DataDome adalah hambatan nyata — gunakan header yang tepat, jeda, manajemen cookie, dan residential proxy untuk scraping Python dalam skala besar.
  • Etsy API terbatas. Kalau Anda butuh ulasan, toko kompetitor, atau analisis lintas penjual, scraping adalah jalur yang paling praktis.
  • Thunderbit menawarkan alternatif no-code yang menangani anti-bot dan autentikasi secara native — layak dicoba kalau Anda ingin data Etsy tanpa memelihara script.
  • Selalu scrape dengan bertanggung jawab dan patuhi ketentuan Etsy.

Kalau Anda ingin mulai tanpa menulis kode, coba Thunderbit gratis. Atau gunakan kode Python dari tutorial ini untuk membangun scraper khusus Anda sendiri — dan semoga selector Anda tidak pernah rusak di Jumat sore.

Untuk panduan scraping lainnya, lihat panduan Etsy scraper dan roundup AI web scraper terbaik.

Coba Thunderbit untuk Scrape Data Etsy Lebih Cepat Get Started Free

FAQ

1. Apakah legal scrape Etsy dengan Python?

Scraping data yang tersedia publik umumnya diperbolehkan berdasarkan preseden hukum terbaru (misalnya, Meta v. Bright Data, hiQ v. LinkedIn). Namun, Syarat Penggunaan Etsy melarang akses otomatis, jadi selalu tinjau ToS dan robots.txt mereka sebelum scraping. Untuk penggunaan skala besar atau komersial, konsultasikan dengan penasihat hukum.

2. Bisakah saya scrape Etsy tanpa diblokir?

Etsy menggunakan DataDome, salah satu sistem anti-bot terkuat. Header yang realistis, jeda permintaan, persistensi cookie, dan rotasi proxy residential semuanya membantu mengurangi blokir. Pendekatan browser-native Thunderbit menghindari sebagian besar deteksi karena berjalan di dalam sesi Chrome asli Anda.

3. Apakah Etsy punya API yang bisa saya gunakan вместо scraping?

Ya — Etsy menawarkan API v3, tetapi sebagian besar terbatas pada data toko Anda sendiri dan tidak punya akses ulasan yang kuat. Sebagian besar use case intel kompetitif dan analisis lintas toko membutuhkan scraping.

4. Library Python apa yang saya butuhkan untuk scrape Etsy?

Minimal: requests, beautifulsoup4, pandas (untuk ekspor), dan json (bawaan). Untuk halaman yang berat JS atau membutuhkan login, tambahkan selenium. Untuk parsing HTML yang lebih cepat, gunakan lxml.

5. Bagaimana cara scrape ulasan Etsy secara spesifik?

Ulasan Etsy dimuat lewat endpoint API internal (/api/v3/ajax/bespoke/member/neu/specs/deep_dive_reviews). Anda perlu mengekstrak listing ID, shop ID, dan token CSRF dari halaman produk, lalu melakukan POST ke endpoint tersebut dengan pagination. Sebagai fallback, Anda bisa mem-parsing batch pertama ulasan dari HTML halaman produk — kedua pendekatan dibahas langkah demi langkah dalam tutorial ini.

Pelajari Lebih Lanjut

Shuai Guan
Shuai Guan
CEO di Thunderbit | Ahli Otomasi Data AI Shuai Guan adalah CEO Thunderbit dan lulusan Teknik dari University of Michigan. Dengan pengalaman hampir satu dekade di bidang teknologi dan arsitektur SaaS, ia berfokus mengubah model AI yang kompleks menjadi alat ekstraksi data praktis tanpa coding. Di blog ini, ia membagikan wawasan apa adanya yang sudah teruji di lapangan tentang web scraping dan strategi otomasi untuk membantu Anda membangun alur kerja yang lebih cerdas dan berbasis data. Saat tidak sedang mengoptimalkan alur kerja data, ia menyalurkan ketelitian yang sama pada kecintaannya terhadap fotografi.
Daftar Isi

Ambil data halaman web cukup dengan bertanya

Cukup bilang apa yang kamu butuhkan dalam bahasa Inggris sederhana. Atau lebih baik lagi, tak perlu bilang apa-apa.

Coba Thunderbit gratis
Ekstrak Data menggunakan AI
Dengan mudah transfer data ke Google Sheets, Airtable, atau Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week