Tony Wang6 min de lecturaCómo hacer scraping de Etsy en 2026 (API y Python)
Scrapea Etsy en 2026: listings, tiendas y reseñas por API — DIY, no-code o API estructurada, y qué bloquea la API v3 oficial de Etsy.
La forma más rápida de scrapear Etsy en 2026 es llamar a una API estructurada que devuelve JSON normalizado para listings, tiendas y reseñas — en lugar de parsear tú mismo las páginas de producto de Etsy o esperar en una cola de revisión de apps. Etsy es un caso particular en esta serie: sí publica una Open API v3 oficial, pero conseguir una key funcional implica un proceso de aprobación, y sus Terms of Use prohíben el scraping por separado y sin rodeos. Esta guía repasa los tres enfoques, qué devuelve cada uno y dónde están realmente los límites de la API oficial.
¿Por qué scrapear Etsy?
Los datos de listings, tiendas y reseñas de Etsy alimentan:
- Investigación de precios y tendencias — seguir cómo se precian las categorías handmade/vintage frente a la demanda, por keyword o nicho.
- Monitoreo de vendedores y tiendas — observar cómo evolucionan el catálogo, las ventas y la valoración de una tienda a lo largo del tiempo.
- Investigación competitiva de producto — ver qué se vende en un nicho antes de lanzar una tienda o una línea de producto.
- Analítica de reseñas y reputación — valoración agregada y volumen de reseñas por listing o por toda una tienda.
- Agregación de marketplaces — combinar el inventario de Etsy con otros marketplaces para tener una vista cross-platform de handmade/vintage.
¿Es legal scrapear Etsy?
Opción 1: DIY en Python (y por qué se rompe)
Las páginas de listing y de tienda de Etsy se renderizan a partir de JSON embebido en lugar de markup plano y estable, así que un scraper DIY tiene que extraer ese blob de la página:
import requests
from bs4 import BeautifulSoup
resp = requests.get(
"https://www.etsy.com/listing/1044347578/",
headers={"User-Agent": "Mozilla/5.0 (compatible; research-bot/1.0)"},
)
soup = BeautifulSoup(resp.text, "html.parser")
# Price, quantity, and shop data live inside a server-rendered
# state blob, not selectable markup — you parse JSON out of a <script> tag
Funciona en la demo y luego se rompe:
- Los ToS son explícitos. Los Terms of Use de Etsy nombran directamente crawling, scraping y spidering, y su
robots.txtbloquea el crawling del patrón de URL de resultados de búsqueda (/search?*q=) para user agents no listados — este no es un caso ambiguo. - El camino sancionado tiene su propio filtro. La Open API v3 de Etsy existe, pero una Personal App necesita aprobación (típicamente 24-48 horas) antes de funcionar siquiera, y todo lo que vaya más allá de tu propia tienda — una herramienta de investigación, un agregador — necesita encima una solicitud de Commercial Access revisada por separado.
- Un tope diario firme incluso una vez aprobada. La API oficial limita a una app estándar a 10.000 requests y 10 queries/segundo por día por defecto; ir más alto significa escribirle por correo al equipo de developers de Etsy con una descripción del caso de uso y una estimación de QPD/QPS.
- Endurecimiento reciente de la privacidad sobre datos de compradores. Etsy ha restringido qué campos vinculados al comprador (por ejemplo, el email completo del buyer) pueden extraer las apps de terceros a través de la API oficial, encima de la revisión por app ya existente — una tendencia que hace el acceso DIY ad hoc a esos datos más arriesgado, no más fácil.
- Tampoco hay markup estable. Las páginas de listing se sirven como JSON renderizado en el servidor dentro de una etiqueta script; la forma cambia con los rediseños y rompe un parser sin avisar.
Opción 2: herramientas no-code
Existen actors de scraping de marketplaces para extracciones puntuales de Etsy que se saltan la espera de aprobación de la app, pero heredan la misma exposición a los ToS que el DIY y no resuelven el problema del monitoreo continuo — vuelves a ejecutar una herramienta puntual en lugar de llamar a un endpoint estable.
Opción 3: una API estructurada de Etsy
Para un flujo de trabajo repetible, una API de scraping de Etsy devuelve JSON normalizado para listings, tiendas y reseñas sin esperar revisión de app y sin parsear páginas. Busca por keyword:
curl "https://api.crawlora.net/api/v1/etsy/search?q=handmade+mug" \
-H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"query": "handmade mug",
"offset": 0,
"count": 112886,
"results": [
{
"listing_id": "4474501681",
"title": "Custom Mermaid Mug, Crystal Handle, Mothers Day Gift",
"shop_id": "7894049",
"shop_name": "MerakiDesigned",
"price": "5371901",
"price_int": 5371901,
"currency": "VND",
"url": "https://www.etsy.com/listing/4474501681/handmade-ceramic-mermaid-mug-gold",
"quantity": 7,
"is_sold_out": false
}
]
}
}
Fíjate en que currency refleja el render locale del request (VND arriba, no USD) — léelo por cada resultado en lugar de asumir una moneda. Obtén el detalle del listing, el perfil de la tienda y las reseñas en Python:
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/etsy"
hits = requests.get(f"{base}/search", headers=h, params={"q": "handmade mug"}).json()["data"]["results"]
listing_id = hits[0]["listing_id"]
shop_id = hits[0]["shop_id"]
listing = requests.get(f"{base}/listing/{listing_id}", headers=h).json()["data"]
reviews = requests.get(f"{base}/listing/{listing_id}/reviews", headers=h, params={"offset": 0}).json()["data"]
shop = requests.get(f"{base}/shop/{shop_id}", headers=h).json()["data"]
shop_listings = requests.get(f"{base}/shop/{shop_id}/listings", headers=h, params={"limit": 25}).json()["data"]
El detalle del listing es JSON normalizado (campos reales — revisa los docs):
{
"code": 200,
"msg": "OK",
"data": {
"listing_id": "1044347578",
"title": "Handmade Ceramic Mug",
"price": "$29.99",
"price_int": 2999,
"currency": "USD",
"shop_id": "87654321",
"shop_name": "gaguatelier",
"is_sold_out": false,
"category_name": "Mugs",
"materials": ["Ceramic", "Glaze"],
"quantity": 4,
"favorites": 812,
"views": 15230,
"when_made": "made_to_order",
"state": "active"
}
}
El perfil de la tienda devuelve campos de valoración y ventas para el monitoreo de vendedores:
{
"data": {
"shop_id": "87654321",
"shop_name": "gaguatelier",
"seller_name": "Victoria",
"average_rating": 4.9,
"reviews_count": 363,
"sold_count": 1900,
"is_star_seller": true
}
}
Las reseñas (tanto /etsy/listing/{id}/reviews como /etsy/shop/{id}/reviews) devuelven avg_rating, total_rating_count y un array reviews paginado con buyer_name, rating y text por entrada — el mismo nombre de pila y texto que Etsy muestra públicamente junto a cada reseña. Guarda una fila por listing (o por tienda) y vuelve a ejecutarlo en un cronograma para seguir la deriva de precio, cantidad y valoración.
Qué puedes recopilar
Datos públicos de listings y tiendas: resultados de búsqueda (listing_id, título, tienda, precio, moneda, cantidad, estado de agotado); detalle completo del listing (categoría, descripción, materiales, tags, favoritos, vistas, when_made, imágenes); perfiles de tienda (nombre del vendedor, valoración promedio, cantidad de reseñas, ventas, estado de star-seller, titular); catálogos de tienda vía /shop/{id}/listings; descubrimiento de tiendas vía /shop/search (nombre, ubicación, cantidad de listings activos); y reseñas paginadas con valoración, texto y nombre de pila del comprador, tanto para listings como para tiendas. Solo datos públicos del marketplace.
Limitaciones y desafíos comunes
- La moneda no es fija.
price/price_int/currencyreflejan el render locale del request — leecurrencypor cada resultado en lugar de asumir USD. - Los nombres de reseñadores son datos personales.
buyer_namees una identidad real (aunque parcial) — úsalo para agregación consistente con lo que se muestra, no para armar una lista de compradores contactables, y respeta las solicitudes de eliminación tipo GDPR/CCPA si lo almacenas. - No hay exportación masiva oficial para terceros. La propia Open API v3 de Etsy es el camino sancionado para quien construya una integración de producción a gran escala; esta API es más adecuada para extracciones a escala de investigación, de solo lectura, que para reemplazar una integración comercial aprobada.
- La valoración y la cantidad se mueven rápido en tiendas populares. Los bestsellers se reponen o se agotan en cuestión de días — vuelve a extraer en un cronograma en lugar de confiar en una instantánea.
- Solo datos públicos. Esto es información de páginas de listing y de tienda, no una forma de llegar a los datos de contacto privados de un vendedor ni de sortear el propio sistema de mensajería entre comprador y vendedor de Etsy.
Dónde se usa esto
- Investigación de precios — seguir cómo se precia un nicho o keyword entre los listings activos.
- Monitoreo de tiendas — observar la valoración, las ventas y el tamaño del catálogo de una tienda competidora o proveedora a lo largo del tiempo.
- Analítica de reseñas — tendencias de valoración agregada por listing o tienda para el seguimiento de reputación.
Fuentes
Empieza a recopilar
Pruébalo primero, gratis: pasa cualquier URL pública por el Free Web Scraper, o revisa si un sitio bloquea bots con el Anti-Bot Checker — sin registro.
Prueba los endpoints de search, listing y shop en el Playground, revisa el esquema en los API docs y consulta el pricing. Etsy es la contraparte handmade y vintage de las tiendas construidas sobre Shopify que cubrimos en how to scrape Shopify stores y de la capa de descubrimiento cross-merchant en how to scrape Shop app — combina las tres para tener una vista más completa del comercio independiente. Para el lado de reventa de ese mismo mercado handmade/de segunda mano, ver how to scrape eBay; para la versión de listados locales peer-to-peer de artículos de segunda mano, ver how to scrape Facebook Marketplace; y para la contraparte de moda retail en 25 mercados europeos, ver how to scrape Zalando. Ver también how to choose a web scraping API y is web scraping legal.
Parte de nuestra serie de guías how-to-scrape — todas las plataformas que cubrimos, en un solo índice.
Preguntas frecuentes
¿Etsy tiene una API oficial?
Sí — la Open API v3 de Etsy es una API real y documentada, pero requiere una app aprobada (primero la aprobación como Personal App, luego una capa de Commercial Access revisada manualmente para todo lo que vaya más allá de tu propia tienda) y limita a las apps estándar a 10.000 requests/día.
¿Es legal hacer scraping de Etsy?
Los Terms of Use de Etsy prohíben explícitamente hacer crawling, scraping o spidering de sus páginas sin permiso, y su robots.txt bloquea el crawling del patrón de URL de resultados de búsqueda para crawlers genéricos. Los datos públicos no tienen derechos de autor, pero la recolección automatizada fuera de la API oficial conlleva un riesgo real de incumplimiento de los ToS — ver is web scraping legal para el marco general.
¿Cómo busco listings de Etsy con una API?
Envía una keyword a un endpoint /etsy/search y recibe tarjetas de listing normalizadas (listing_id, title, shop, price, currency, quantity) como JSON — sin necesidad de parsear HTML.
¿Qué incluye el detalle de un listing de Etsy?
Título, precio, moneda, cantidad, categoría, descripción, materiales, tags, favoritos, vistas, when_made y estado de agotado, todo vinculado por listing_id.
¿Puedo obtener el catálogo completo de una tienda de Etsy?
Sí — /etsy/shop/{id}/listings devuelve el catálogo de listings de una tienda en la misma forma normalizada de tarjeta de listing que los resultados de búsqueda, y /etsy/shop/search encuentra tiendas por nombre.
¿Se incluyen las reseñas de Etsy, y son datos personales?
Tanto /etsy/listing/{id}/reviews como /etsy/shop/{id}/reviews devuelven valoración, texto de la reseña y un campo buyer_name — el mismo nombre de pila que Etsy muestra públicamente. Trata buyer_name como dato personal bajo GDPR/CCPA y úsalo para análisis agregado de valoraciones, no para construir una lista de compradores contactables.
¿La moneda varía según el request?
Sí — price, price_int y currency reflejan el render locale del request (por ejemplo, VND en lugar de USD), así que lee el campo currency por cada resultado en lugar de asumir una moneda fija.