Tony Wang5 min de lecturaScrapea el Chrome Web Store en 2026 (API y Python)
Scrapea el Chrome Web Store en 2026: búsqueda, ratings, reviews, permisos y privacidad, vía DIY, sin código o API estructurada.
La forma más rápida de scrapear el Chrome Web Store en 2026 es llamar a una API estructurada que devuelve JSON normalizado — resultados de búsqueda, detalle de listado, reviews de usuarios, permisos declarados y disclosures de privacidad — en lugar de parsear tú mismo las páginas renderizadas del lado del cliente de la tienda. No existe una API pública para desarrolladores con estos datos, y los términos generales de Google restringen el acceso automatizado. Esta guía cubre los tres enfoques, qué devuelve cada uno, dónde se rompe el DIY y los fundamentos legales.
¿Por qué scrapear el Chrome Web Store?
Los datos de listado y permisos del Chrome Web Store impulsan:
- Inteligencia de mercado de extensiones — seguir a los líderes de categoría, los que crecen rápido y las tendencias de conteo de instalaciones a lo largo del tiempo.
- Investigación de competidores y ASO — comparar listados, keywords, ratings y velocidad de reviews para una categoría.
- Inventario de seguridad — monitorear qué extensiones solicitan acceso amplio a hosts (
<all_urls>), rastrear la migración de MV2 a MV3 y marcar cambios de permisos entre versiones. - Investigación de confianza y privacidad — leer la disclosure de recolección de datos declarada por una extensión antes de recomendarla o incluirla en una allowlist.
- Investigación de publisher y portafolio — ver todo lo que ha publicado una cuenta de desarrollador.
¿Es legal scrapear el Chrome Web Store?
Opción 1: DIY en Python (y por qué se rompe)
Las páginas de ítem de la tienda se renderizan del lado del cliente, así que un scraper DIY tiene que llegar a los datos embebidos en la página o a los endpoints internos de la tienda:
import requests
resp = requests.get(
"https://chromewebstore.google.com/detail/cjpalhdlnbpafiamejdnhcphjbkeiagm",
headers={"User-Agent": "Mozilla/5.0 (compatible; research-bot/1.0)"},
)
# Rating, install count, and permissions live in an embedded JSON blob,
# not selectable markup — and /reviews and /privacy are separate,
# robots.txt-disallowed sub-pages you'd have to fetch individually
Funciona en la demo y luego se rompe:
robots.txtrecorta explícitamente las partes interesantes. El sitemap cubre las páginas base de ítem, pero/searchy las subpáginas/reviewsy/privacyde un ítem están prohibidas — justo los endpoints que más necesita un caso de uso de inteligencia de mercado o investigación de seguridad.- No hay markup estable. Los ratings, conteos de instalación y permisos viven en un blob JSON embebido que cambia de forma con cada rediseño de la tienda.
- La escala de catálogo completo es real. El propio sitemap de la tienda abarca más de 30 shards que cubren aproximadamente 250K+ extensiones — un barrido completo son decenas de gigabytes de respuestas antes de siquiera parsear nada, así que un loop ingenuo página por página no escala a un censo completo.
- Los permisos y los datos de privacidad requieren solicitudes separadas. Detalle, reviews, permisos y disclosures de privacidad son cuatro fetches distintos por extensión, cada uno con su propia forma.
Opción 2: Herramientas sin código
Existen actores de scraping de marketplace para búsquedas de extensiones individuales y sirven para extracciones puntuales, pero un caso de uso de catálogo completo o monitoreo de seguridad necesita el mismo fan-out por ítem a través de cuatro endpoints, sin importar la herramienta.
Opción 3: Una API estructurada del Chrome Web Store
Para un flujo de trabajo repetible, una API de scraping del Chrome Web Store devuelve JSON normalizado sin parsear páginas. Busca extensiones:
curl "https://api.crawlora.net/api/v1/chromewebstore/search?term=vpn" \
-H "x-api-key: $CRAWLORA_API_KEY"
Obtén detalle, permisos y disclosure de privacidad de un resultado en Python:
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/chromewebstore"
hits = requests.get(f"{base}/search", headers=h, params={"term": "ad blocker"}).json()["data"]["results"]
ext_id = hits[0]["id"]
item = requests.get(f"{base}/item", headers=h, params={"id": ext_id}).json()["data"]
permissions = requests.get(f"{base}/permissions", headers=h, params={"id": ext_id}).json()["data"]
privacy = requests.get(f"{base}/privacy", headers=h, params={"id": ext_id}).json()["data"]
reviews = requests.get(f"{base}/reviews", headers=h, params={"id": ext_id, "num": 20}).json()["data"]
Una respuesta de búsqueda es JSON normalizado (campos reales — revisa los docs):
{
"code": 200,
"msg": "OK",
"data": {
"query": "vpn",
"count": 1,
"results": [
{ "id": "majdfhpaihoncoakbjgbdhglocklcgno", "name": "Free VPN for Chrome - VPN Proxy VeePN", "rating": 4.5, "rating_count": 50285, "publisher": "veepn.com", "url": "https://chromewebstore.google.com/detail/majdfhpaihoncoakbjgbdhglocklcgno" }
]
}
}
Los permisos devuelven el acceso declarado de la extensión, incluyendo cualquier permiso amplio de host:
{
"data": {
"id": "cjpalhdlnbpafiamejdnhcphjbkeiagm",
"manifest_version": 2,
"permissions": ["alarms", "contextMenus", "storage", "tabs", "webNavigation", "webRequest", "webRequestBlocking", "<all_urls>"]
}
}
Y el endpoint de privacidad devuelve la propia disclosure del desarrollador — qué categorías de datos declara recolectar y sus compromisos de uso declarados:
{
"data": {
"id": "kbfnbcaeplbcioakkpcpgfkobkghlhen",
"collects_data": true,
"data_collected": ["Personally identifiable information", "Personal communications", "Location", "User activity", "Website content"],
"declarations": ["Not being sold to third parties, outside of the approved use cases"]
}
}
Guarda una fila por extensión por extracción, y vuelve a ejecutarlo según un calendario para rastrear la deriva de rating, conteo de instalación, permisos y versión a lo largo del tiempo.
Qué puedes recopilar
Datos públicos de extensiones: resultados de búsqueda (id, nombre, rating, conteo de rating, publisher); detalle de listado (descripción, categoría, desarrollador, tamaño, versión, fecha de actualización, conteo de instalación, capturas de pantalla, enlaces de soporte/privacidad); reviews de usuarios (autor, rating, texto, versión, fecha); permisos declarados y permisos de host, incluyendo los opcionales; disclosures de privacidad (categorías de datos recolectados, declaraciones del desarrollador); además de categorías, colecciones curadas, top charts, perfiles de publisher y sugerencias de ítems relacionados. Solo datos públicos de listado y reviews.
Limitaciones y desafíos comunes
robots.txtprohíbe search y las subpáginas de reviews/privacidad. Presupuesta una API estructurada en lugar de crawlear esas rutas directamente.- Cuatro llamadas separadas por extensión. Detalle, reviews, permisos y privacidad necesitan cada uno su propio fetch — planifica el fan-out si vas a cubrir una categoría o un censo completo.
- Escala de catálogo completo. El sitemap público abarca más de 30 shards y aproximadamente un cuarto de millón de extensiones — trata un barrido completo como un crawl duradero y reanudable, no como la ejecución de un único script.
- Las heurísticas de permisos no son un puntaje de seguridad.
<all_urls>o un conjunto amplio de permisos es una señal, no una prueba de intención maliciosa — no etiquetes una heurística derivada como "malware" sin una metodología real. - Solo datos públicos. Esto devuelve metadatos de listado, no el paquete de código real de la extensión (el archivo
.crx) — descargarlo y analizarlo es un esfuerzo aparte, mucho más pesado y con su propia revisión.
Dónde se usa esto
- Inteligencia de mercado de extensiones — líderes de categoría, los que crecen rápido y extensiones abandonadas con alto número de instalaciones.
- Inventario de seguridad — seguimiento de la migración de MV2 a MV3, deriva de permisos y acceso a hosts, cambios en disclosures de privacidad.
- Investigación de competidores y ASO — comparaciones de keywords y ratings dentro de una categoría.
Fuentes
Empieza a recopilar
Pruébalo primero, gratis: pasa cualquier URL pública por el Free Web Scraper, o comprueba si un sitio bloquea bots con el Anti-Bot Checker — sin registro.
Prueba los endpoints de search, item y permissions en el Playground, revisa el esquema en los API docs, y consulta los precios. Las extensiones son una superficie de distribución más de un producto; cómo scrapear Google Play y cómo scrapear reviews del App Store cubren el lado de apps móviles con la misma forma de búsqueda-luego-detalle-luego-reviews. Consulta también cómo elegir una API de web scraping y si el web scraping es legal.
Preguntas frecuentes
¿Existe una API oficial del Chrome Web Store para metadatos de extensiones?
No hay una API pública para desarrolladores con datos de búsqueda o listado. Los términos generales de Google restringen el acceso automatizado, y el propio robots.txt de la tienda prohíbe crawlear /search y las subpáginas /reviews y /privacy de un ítem directamente — aunque sí publica un sitemap para el catálogo base.
¿Es legal scrapear el Chrome Web Store?
Los hechos públicos de un listado (nombre, rating, conteo de instalaciones, permisos declarados) no son objeto de copyright, pero los términos de Google restringen el acceso automatizado y robots.txt prohíbe explícitamente crawlear search y las subpáginas de reviews/privacidad. Los nombres y textos de reviewers son datos personales bajo GDPR/CCPA. Usa campos públicos y factuales y respeta los límites de tasa. No es asesoría legal.
¿Puedo revisar los permisos de una extensión antes de instalarla?
Sí — /chromewebstore/permissions devuelve los permisos declarados y los permisos de host de una extensión, incluyendo cualquier acceso amplio <all_urls>, además de su versión de manifest (MV2 vs. MV3).
¿Puedo consultar la disclosure de privacidad de una extensión?
Sí — /chromewebstore/privacy devuelve las categorías de recolección de datos y los compromisos de uso declarados por el propio desarrollador — la misma disclosure que se muestra en el listado de la tienda.
¿Cuántas extensiones tiene el Chrome Web Store?
El sitemap público de la tienda abarca más de 30 shards con aproximadamente un cuarto de millón de extensiones. Trata un censo completo como un crawl duradero y reanudable, no como la ejecución de un único script.
¿Puedo obtener las reviews de una extensión?
Sí — /chromewebstore/reviews devuelve filas individuales de reviews (autor, rating, texto, versión, fecha) para un id de extensión dado, ordenables y paginables.
¿Puedo ver todo lo que ha publicado un desarrollador?
Sí — /chromewebstore/developer devuelve el perfil de un publisher y sus demás ítems listados, útil para investigación de portafolio y de riesgo de publisher.