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.

| Use Case | Apa yang Di-scrape | Siapa yang Diuntungkan | Dampak Bisnis |
|---|---|---|---|
| Analisis Harga Kompetitor | Hasil pencarian + harga produk | Operasional e-commerce, penjual | Dynamic pricing bisa meningkatkan pendapatan rata-rata 5–22% |
| Penemuan Niche & Tren | Hasil pencarian, listing yang sedang tren | Founder, analis | Menangkap niche yang sedang naik lebih awal (misalnya, "preppy pajamas" melonjak +1.112% dalam pencarian) |
| Pengembangan & Perbaikan Produk | Ulasan, detail produk | Tim produk | Satu brand peralatan dapur merebut kembali posisi #1 Best Seller dalam 60 hari dengan data sentimen ulasan |
| SEO & Riset Kata Kunci | Hasil pencarian, judul/tag produk | Tim marketing | Mengidentifikasi kata kunci berpermintaan tinggi dengan persaingan rendah |
| Benchmarking Penjual | Halaman toko, jumlah penjualan | Tim sales, analis | Menyusun daftar prospek berkualitas dengan biaya $0,01–0,10/rekor vs. daftar beli |
| Pemantauan Inventaris & Stok | Ketersediaan produk | Operasional e-commerce | Bereaksi 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
| Kriteria | API Resmi Etsy | Python Web Scraping | Thunderbit (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-bot | Tidak ada | TINGGI (DataDome) | Ditangani (native browser) |
| Waktu setup | Sedang (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.
| Pendekatan | Paling Cocok Untuk | Kurva Belajar | Menangani JS? | Penanganan Anti-Bot | Biaya |
|---|---|---|---|---|---|
| Requests + BeautifulSoup | Developer yang ingin kontrol penuh | Sedang | ❌ | Manual (header, proxy) | Gratis + biaya proxy |
| Selenium / Playwright | Halaman berat JS, alur login | Tinggi | ✅ | Sebagian (browser fingerprint) | Gratis + biaya proxy |
| Layanan Proxy API | Skala besar + bypass anti-bot | Sedang | ✅ (via API) | ✅ Bawaan | $49+/bulan |
| Thunderbit (no-code) | Non-developer, ekstraksi cepat | Sangat 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.

Apa Itu DataDome dan Bagaimana Cara Kerjanya?
DataDome tidak hanya memeriksa alamat IP Anda. Sistem ini menjalankan stack deteksi berlapis:
- TLS fingerprinting (JA3): Library
requestsmilik 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
datadomeharus 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
ddatau 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]ataudiv[data-option-set] - Pengiriman:
div.wt-text-captiondi 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 Data | Selector | Catatan |
|---|---|---|
| Nama toko | h1 atau meta title | Biasanya ada di judul halaman |
| Total penjualan | div.shop-sales-reviews a | Teks seperti "12.345 sales" |
| Rating bintang | Nilai input[name="initial-rating"] | Angka 1–5 |
| Lokasi | div.shop-location | Kota, negara |
| Bergabung sejak | div.shop-info | Teks 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
| Faktor | Python DIY | Thunderbit |
|---|---|---|
| Waktu setup | 8–20 jam | Di bawah 5 menit |
| Biaya 6 bulan (termasuk tenaga kerja, proxy) | $2.720–9.450 | $90–228 |
| Pemeliharaan bulanan | 4–10+ jam (update selector = overhead 80%+) | 0–1 jam |
| Penanganan anti-bot | Residential proxy dengan biaya kredit 85x normal | Berbasis browser, secara native melewati DataDome |
| Kualitas data | Tinggi (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
- Cara Menggunakan Etsy Scraper untuk Meningkatkan Strategi Penjualan Anda
- Cara Mudah Scrape Produk dari Situs E-Commerce
- Cara Menulis Web Scraper dengan Python: Dari Awal hingga Akhir
- Cara Scrape Data dari Website Menggunakan Python Secara Efisien
- Cara Scrape Data Menggunakan Python: Tutorial untuk Pemula


