ASINSpotlight

Guía de integración con IA

Conecta la ASINSpotlight Scraping API a Cursor, Claude Code, Continue, ChatGPT — con recetas de prompts que generan código idiomático y consciente de la cuota.

De qué se trata

Una guía pragmática para construir sobre la ASINSpotlight Scraping API con herramientas de IA. La API es REST + JSON con un solo header para autenticación — exactamente la forma que los LLMs manejan bien. Esta página existe porque el código generado por IA técnicamente correcto a menudo es idiomáticamente erróneo: ignora señales de cuota, pagina de forma equivocada, confunde detalles de producto con ofertas. Los prompts y patrones de abajo cierran esa brecha.

Para el contrato formal, apunta tu IA a la especificación OpenAPI:

url
https://www.asinspotlight.com/scraping-api-docs/openapi.json

Cursor, Claude Code, Continue, Windsurf y ChatGPT — todos consumen OpenAPI de forma nativa. Cada receta de prompt nombra la URL de la spec primero, así el asistente fundamenta su implementación en los esquemas reales.

Inicio rápido en 5 minutos

Genera una clave en board.asinspotlight.com/dashboard/api, ponla en tu entorno:

bash
export ASINSPOTLIGHT_API_KEY="sk_live_..."

Ejecuta una petición:

bash
curl -H "x-api-key: $ASINSPOTLIGHT_API_KEY" \
  "https://api.asinspotlight.com/v1/product?asin=B0B3ZD8QXJ&marketplace=us"

Deberías ver algo como esto:

json
{
  "success": true,
  "page_type": "product",
  "data": {
    "asin": "B0B3ZD8QXJ",
    "title": "Soundcore Q20i Headphones",
    "bb_price": 39.99,
    "rating": 4.6,
    "reviews": 58800,
    "bsr": 12,
    "in_stock": true,
    "bought_past_month": 20000
  },
  "meta": {
    "marketplace": "us",
    "timing_ms": 1842,
    "request_url": "https://www.amazon.com/dp/B0B3ZD8QXJ",
    "timestamp": "2026-05-03T10:14:22.318Z",
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "usage": {"requests_consumed": 1, "requests_remaining": 49999}
  }
}

Ese es el contrato. Cada respuesta exitosa lleva meta.usage.requests_remaining — léelo en cada llamada para hacer tu código consciente de la cuota sin un chequeo aparte.

Endpoints de un vistazo

TareaRutaÚsalo para
Obtener detalles de productoGET /v1/product?asin=…&marketplace=…Título, precio Buy Box, BSR, rating, reviews, marca, categoría, demanda mensual. Sub-segundo en PDPs típicas.
Buscar por keywordGET /v1/search?keyword=…&marketplace=…Página 1 de resultados orgánicos. Cada entrada ya trae precio, rating, reviews, demanda mensual, ASIN — sin llamada de seguimiento a /product para hacer una preselección.
Obtener todos los vendedoresGET /v1/offers?asin=…&marketplace=…Panel completo de Buy Box: cada vendedor, precio, envío, FBA/FBM, rating. En tiempo real, no cacheado.
Scrape de cualquier URLPOST /v1/scrapeapiDocs.ai.endpoints.row4UseFor

Recetas de prompts

Cada receta está lista para pegar en Cursor, Claude Code, ChatGPT o cualquier otro asistente de código. Nombran la URL de la spec, la variable de entorno y el detalle que la IA suele pasar por alto.

1. Comparación de precios entre marketplaces

prompt
Build a script that compares prices for a list of ASINs across multiple Amazon marketplaces using the ASINSpotlight Scraping API.

OpenAPI spec: https://www.asinspotlight.com/scraping-api-docs/openapi.json
API base URL: https://api.asinspotlight.com (note: api., not www.)
Auth: API key in the `x-api-key` header (read from env var `ASINSPOTLIGHT_API_KEY`).
Endpoint: GET /v1/product?asin=...&marketplace=...

Inputs:
  - List of ASINs (e.g., ["B0B3ZD8QXJ", "B0CQXMXJC5"])
  - List of marketplace codes (e.g., ["us", "uk", "de"])

For each (asin, marketplace) pair, fetch product details and collect: asin, marketplace, title, bb_price, in_stock, rating.

Output: CSV with columns asin, marketplace, title, bb_price, in_stock, rating.

Constraints:
  - Stop early and surface the error if a request returns 401, 429, or 5xx.
  - After each successful response, read `meta.usage.requests_remaining` and abort if it drops below 50.
  - Don't run more than 5 requests in parallel — the account has a parallel-request limit.

Lo que la IA suele hacer bien: el bucle de peticiones, autenticación por env-var, parseo de JSON.
Lo que suele omitir: leer meta.usage, limitar el paralelismo. Ambos están explícitos en el prompt por esa razón.

2. Rastreador diario de keywords

prompt
Build a daily keyword tracker that records the top 10 ASINs for a list of keywords using the ASINSpotlight Scraping API.

OpenAPI spec: https://www.asinspotlight.com/scraping-api-docs/openapi.json
API base URL: https://api.asinspotlight.com (note: api., not www.)
Auth: API key in the `x-api-key` header (env var `ASINSPOTLIGHT_API_KEY`).
Endpoint: GET /v1/search?keyword=...&marketplace=...

For each keyword, fetch the search results page, take the first 10 entries from `data.shallow_parts`, and write one row per (keyword, rank, asin, title, price, rating, reviews, bought_past_month, captured_at).

Storage: append to a SQLite table `keyword_rankings` keyed on (keyword, marketplace, captured_at, rank).

Run cadence: once per day, intended to be invoked by cron.

Don't:
  - Don't try to "follow up" with a /v1/product call for each search result — `shallow_parts` already contains everything we need.
  - Don't paginate past page 1; we only care about the top 10.
  - Don't retry on 4xx errors; only on 5xx and `CAPTCHA_DETECTED` (with backoff).

La trampa: la IA a menudo genera una llamada de seguimiento a /v1/product por cada resultado de búsqueda, duplicando el consumo de créditos. El payload shallow_parts ya incluye todo lo que un rastreador diario necesita.

3. Monitor de propietario de Buy Box

prompt
Build a Buy Box ownership monitor for a watchlist of ASINs using the ASINSpotlight Scraping API.

OpenAPI spec: https://www.asinspotlight.com/scraping-api-docs/openapi.json
API base URL: https://api.asinspotlight.com (note: api., not www.)
Auth: API key in the `x-api-key` header (env var `ASINSPOTLIGHT_API_KEY`).
Endpoint: GET /v1/offers?asin=...&marketplace=...

For each ASIN, call /v1/offers and identify the current Buy Box owner — the seller in `data.product_sellers_info` whose price equals the lowest `price + shipping_price` and who has `is_fba: true` (the typical Amazon Buy Box rule).

Compare against the previously recorded owner stored in a JSON file `buybox_state.json` keyed by asin. When the owner changes, log a line to stdout with: timestamp, asin, previous owner, new owner, new price.

Run as a loop with a 10-minute interval between full sweeps.

Don't:
  - Don't conflate /v1/product and /v1/offers — `/v1/product` returns the Buy Box price but not the full seller list. You need /v1/offers for ownership.
  - Don't ignore `stock_qty: 0` sellers; filter those out before picking a winner.
  - Don't run all watchlist requests at once; respect the parallel limit (default ~5).

La trampa: los asistentes a menudo toman buybox / bb_price de /v1/product y lo llaman propietario del Buy Box. Ese campo te dice que el precio es Buy Box, no quién lo tiene. La data de propietario solo vive en /v1/offers.

4. Refresh masivo de lista de ASINs

prompt
Build an ASIN-list batch refresh that updates cached product data using the ASINSpotlight Scraping API.

OpenAPI spec: https://www.asinspotlight.com/scraping-api-docs/openapi.json
API base URL: https://api.asinspotlight.com (note: api., not www.)
Auth: API key in the `x-api-key` header (env var `ASINSPOTLIGHT_API_KEY`).
Endpoint: GET /v1/product?asin=...&marketplace=...

Inputs: a JSON file `watchlist.json` of `{asin, marketplace, last_refreshed_at}` records.

Refresh strategy:
  1. Sort the list by `last_refreshed_at` ascending (oldest first).
  2. For each entry, call /v1/product. On a successful 200, write the response data and the new timestamp back to the file.
  3. After every response, read `meta.usage.requests_remaining`. If it would dip below the configured floor (default 1000), stop the run and log how many entries were skipped.
  4. Run requests in batches of 5 in parallel.

Error handling:
  - `PAGE_NOT_FOUND` (404): mark the entry as `status: gone` and continue. PAGE_NOT_FOUND consumes 1 credit — that's expected.
  - `CAPTCHA_DETECTED` (503): retry up to 3 times with exponential backoff.
  - `RATE_LIMIT_EXCEEDED` (429): wait 30 seconds and retry the same entry.
  - Any other error: log and stop.

La trampa: los jobs masivos ingenuos ignoran el límite de paralelismo y el piso de cuota. Ambos surgen claramente vía 429 y meta.usage — el prompt le dice a la IA que los consulte.

5. Pipeline de búsqueda → base de datos (con paginación)

prompt
Build a search-to-database pipeline that captures the full first 5 pages of results for a keyword using the ASINSpotlight Scraping API.

OpenAPI spec: https://www.asinspotlight.com/scraping-api-docs/openapi.json
API base URL: https://api.asinspotlight.com (note: api., not www.)
Auth: API key in the `x-api-key` header (env var `ASINSPOTLIGHT_API_KEY`).

The /v1/search endpoint returns page 1 by default. To walk further pages, use POST /v1/scrape with an explicit Amazon search URL containing `&page=N`:

  POST /v1/scrape
  Body: {"url": "https://www.amazon.com/s?k=wireless+headphones&page=2", "marketplace": "us"}

Steps:
  1. Call GET /v1/search?keyword=...&marketplace=us — this is page 1. Read `data.last_page_number` to know the upper bound.
  2. For pages 2..min(5, last_page_number), call POST /v1/scrape with the page-N URL.
  3. Append every entry to a Postgres table `search_results` with columns (keyword, marketplace, page, rank, asin, title, price, rating, reviews, captured_at).

Don't:
  - Don't try `?page=2` on the typed /v1/search endpoint — that endpoint doesn't accept a `page` parameter.
  - Don't fetch past `last_page_number` — Amazon will return an empty result set and you'll waste credits.

La trampa: la IA prueba /v1/search?keyword=...&page=2 porque es la forma obvia. El endpoint tipado de búsqueda no acepta page. Para recorrer páginas, usa POST /v1/scrape con una URL de Amazon explícita — el prompt hace ese cambio explícito.

Conectar con herramientas de IA

Cursor

Agrega una regla de proyecto que referencie la spec OpenAPI. Crea .cursor/rules/asinspotlight.md:

markdown
---
description: ASINSpotlight Amazon Scraping API
globs: ["**/*.py", "**/*.ts", "**/*.js"]
alwaysApply: false
---

When working with the ASINSpotlight Scraping API:

- Spec: https://www.asinspotlight.com/scraping-api-docs/openapi.json
- Auth: `x-api-key` header, value from env var `ASINSPOTLIGHT_API_KEY`
- Base URL: https://api.asinspotlight.com/v1
- Endpoints: /product (asin, marketplace), /search (keyword, marketplace), /offers (asin, marketplace), POST /scrape (body: {url, marketplace})
- Read `meta.usage.requests_remaining` after every successful response
- Cap parallelism at 5 unless told otherwise
- For search pagination beyond page 1, use POST /scrape with an explicit Amazon URL containing `&page=N`

Claude Code

Pasa la URL de la spec en tu prompt o agrégala al CLAUDE.md en la raíz del proyecto. Claude Code la trae y razona sobre ella en la primera referencia. Las mismas instrucciones de la regla de Cursor de arriba funcionan como sección de CLAUDE.md.

Continue.dev

Agrega la spec a ~/.continue/config.json como fuente de documentación:

json
{
  "docs": [
    {
      "title": "ASINSpotlight Scraping API",
      "startUrl": "https://www.asinspotlight.com/scraping-api-docs/openapi.json",
      "rootUrl": "https://www.asinspotlight.com/scraping-api-docs/openapi.json"
    }
  ]
}

Después referénciala en chat con @docs ASINSpotlight Scraping API.

ChatGPT (web)

Pega la URL de OpenAPI en la conversación y pídele a ChatGPT que la traiga. Con browsing activado descarga la spec y la usa como contrato para cualquier código que escribe. Funciona igual en Claude (claude.ai) y Gemini.

Otras herramientas (Windsurf, Cline, codex CLI, …)

Cualquier agente que pueda traer URLs o aceptar un documento OpenAPI integra de la misma forma: apúntalo a https://www.asinspotlight.com/scraping-api-docs/openapi.json y reutiliza las recetas de arriba.

Patrones a imitar

Estos son los modismos que separan código de producción consciente de cuota de scripts ingenuos.

Bucles conscientes de cuota

Cada respuesta exitosa lleva meta.usage.requests_remaining. No consultes un endpoint aparte para decidir si seguir — léelo en cada llamada:

typescript
for (const asin of asins) {
  const res = await fetchProduct(asin);
  if (!res.success) handleError(res.error.code);
  if (res.meta.usage.requests_remaining < FLOOR) break;
  store(res.data);
}

Cambio de marketplace

marketplace es el único parámetro que controla cuál tienda de Amazon se consulta. Pásalo explícitamente en cada llamada — no confíes en el default us a menos que lo quieras así. Los códigos válidos están listados en el esquema Marketplace de la spec.

Manejo de errores que no quema créditos

La mayoría de errores no consumen créditos. La excepción es PAGE_NOT_FOUND (404) — se cobra porque el parser igual corrió. Plánealo: un job de refresh sobre ASINs eliminados drena cuota lentamente a 1 crédito cada uno, así que márcalos y deja de refrescarlos.

Paginación vía /scrape

/v1/search devuelve la página 1. Para páginas 2+, usa POST /v1/scrape con la URL de Amazon explícita https://www.amazon.com/s?k=…&page=N. La forma de la respuesta coincide con SearchData.

Errores frecuentes en código generado por IA

  • Confundir /v1/product con /v1/offers. Product te da el precio de Buy Box; offers te da el propietario de Buy Box y todos los demás vendedores. No los mezcles.
  • Probar ?page=N en /v1/search. El endpoint tipado de búsqueda solo acepta keyword y marketplace. Usa /scrape para más páginas.
  • Sondear en vez de leer meta.usage. El conteo de créditos restantes está en cada respuesta exitosa. No hay nada más que llamar.
  • Ignorar la diferencia entre 429 y 503. 429 significa demasiadas peticiones en vuelo o sin créditos — retrocede o detente. 503 con código CAPTCHA_DETECTED es transitorio — reintenta con backoff exponencial.
  • Olvidar el parámetro marketplace. Sin él, cada llamada va a amazon.com — un bug de UX silencioso para flujos europeos o japoneses. Pásalo siempre explícitamente.
  • Tratar PAGE_NOT_FOUND como gratis. Cuesta 1 crédito (el parser corrió). Jobs de refresh contra watchlists viejas drenan cuota silenciosamente.
  • Reintentar 4xx ciegamente. Errores de validación (400) y de auth (401) no se arreglan solos. Solo 429, 502 y 503 valen reintentar.

Siguientes pasos