Гайд по интеграции с ИИ
Подключите ASINSpotlight Scraping API к Cursor, Claude Code, Continue, ChatGPT — с готовыми промптами, которые генерируют идиоматичный код, учитывающий квоту.
О чём это
Практическое руководство по работе с ASINSpotlight Scraping API через AI-инструменты разработки. API — это REST + JSON с одним заголовком для авторизации — именно та форма, с которой LLM хорошо справляются. Эта страница существует, потому что технически правильный AI-сгенерированный код часто идиоматически неверен: игнорирует сигналы квоты, неправильно пагинирует, путает данные о товаре с данными о продавцах. Промпты и паттерны ниже закрывают этот разрыв.
За формальным контрактом направьте свой AI на OpenAPI-спецификацию:
https://www.asinspotlight.com/scraping-api-docs/openapi.jsonCursor, Claude Code, Continue, Windsurf и ChatGPT — все нативно работают с OpenAPI. Каждый промпт ниже сразу указывает URL спецификации, чтобы ассистент строил реализацию на реальных схемах.
Быстрый старт за 5 минут
Создайте ключ на board.asinspotlight.com/dashboard/api, добавьте его в окружение:
export ASINSPOTLIGHT_API_KEY="sk_live_..."Сделайте один запрос:
curl -H "x-api-key: $ASINSPOTLIGHT_API_KEY" \
"https://api.asinspotlight.com/v1/product?asin=B0B3ZD8QXJ&marketplace=us"Ответ должен выглядеть примерно так:
{
"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}
}
}Это и есть контракт. В каждом успешном ответе есть meta.usage.requests_remaining — читайте его на каждом вызове, чтобы код учитывал квоту без отдельной проверки.
Эндпоинты — обзор
| Задача | Путь | Для чего |
|---|---|---|
| Получить детали товара | GET /v1/product?asin=…&marketplace=… | Название, цена Buy Box, BSR, рейтинг, отзывы, бренд, категория, спрос за месяц. Менее секунды на типичных PDP. |
| Поиск по ключевому слову | GET /v1/search?keyword=…&marketplace=… | Первая страница органического поиска. Каждая запись уже содержит цену, рейтинг, отзывы, спрос за месяц, ASIN — без дополнительного вызова /product для шорт-листа. |
| Получить всех продавцов | GET /v1/offers?asin=…&marketplace=… | Полная панель Buy Box: каждый продавец, цена, доставка, FBA/FBM, рейтинг. В реальном времени, не из кэша. |
| Скрапить любой URL | POST /v1/scrape | apiDocs.ai.endpoints.row4UseFor |
Готовые промпты
Каждый промпт можно вставить в Cursor, Claude Code, ChatGPT или любой другой AI-ассистент. Они указывают URL спецификации, переменную окружения и подвох, который AI обычно пропускает.
1. Сравнение цен по маркетплейсам
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.Что AI обычно делает правильно: цикл запросов, авторизация через env-var, парсинг JSON.
Что обычно упускает: чтение meta.usage, ограничение параллелизма. Оба пункта явно прописаны в промпте именно поэтому.
2. Ежедневный трекер ключевых слов
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).Подвох: AI часто генерирует follow-up вызов /v1/product для каждого результата поиска, удваивая расход кредитов. shallow_parts уже содержит всё, что нужно ежедневному трекеру.
3. Мониторинг владельца Buy Box
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).Подвох: ассистенты часто берут buybox / bb_price из /v1/product и называют это владельцем Buy Box. Это поле говорит, что цена является Buy Box, а не кто им владеет. Данные о владельце живут только в /v1/offers.
4. Пакетное обновление списка ASIN
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.Подвох: наивные batch-задачи игнорируют лимит параллелизма и порог квоты. Оба сигналят чётко через 429 и meta.usage — промпт говорит AI их учитывать.
5. Конвейер поиск → база (с пагинацией)
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.Подвох: AI пробует /v1/search?keyword=...&page=2, потому что это очевидная форма. Типизированный поисковый эндпоинт не принимает page. Чтобы пройти по страницам, используйте POST /v1/scrape с явным URL Amazon — промпт делает эту замену явной.
Подключение к AI-инструментам
Cursor
Добавьте правило проекта со ссылкой на OpenAPI-спецификацию. Создайте .cursor/rules/asinspotlight.md:
---
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
Передайте URL спецификации в промпте или добавьте в CLAUDE.md в корне проекта. Claude Code загрузит её и будет использовать как контекст. Те же инструкции, что и в правиле для Cursor выше, работают как раздел CLAUDE.md.
Continue.dev
Добавьте спецификацию в ~/.continue/config.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"
}
]
}Затем ссылайтесь на неё в чате через @docs ASINSpotlight Scraping API.
ChatGPT (web)
Вставьте URL OpenAPI в чат и попросите ChatGPT её загрузить. С включённым браузингом он подгружает спецификацию и использует её как контракт для любого кода, который пишет. Работает так же в Claude (claude.ai) и Gemini.
Другие инструменты (Windsurf, Cline, codex CLI, …)
Любой агент, который умеет загружать URL или принимать OpenAPI-документ, интегрируется так же: укажите ему https://www.asinspotlight.com/scraping-api-docs/openapi.json и используйте промпты выше.
Паттерны для имитации
Это идиомы, которые отличают продакшен-код, учитывающий квоту, от наивных скриптов.
Циклы с учётом квоты
Каждый успешный ответ содержит meta.usage.requests_remaining. Не нужно опрашивать отдельный эндпоинт, чтобы решить, продолжать ли — читайте на каждом вызове:
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);
}Переключение маркетплейсов
marketplace — единственный параметр, который определяет, какую витрину Amazon запрашивать. Передавайте его явно на каждом вызове — не полагайтесь на дефолт us, если только это не намеренно. Допустимые коды есть в схеме Marketplace спецификации.
Обработка ошибок без расхода кредитов
Большинство ошибок не расходуют кредиты. Исключение — PAGE_NOT_FOUND (404) — он биллится, потому что парсер всё-таки отработал. Учитывайте: задача обновления, упирающаяся в удалённые ASIN, медленно расходует квоту по 1 кредиту, поэтому помечайте такие записи и переставайте обновлять.
Пагинация через /scrape
/v1/search возвращает первую страницу. Для страниц 2+ используйте POST /v1/scrape с явным URL Amazon https://www.amazon.com/s?k=…&page=N. Форма ответа совпадает с SearchData.
Частые ошибки в AI-сгенерированном коде
- Путать
/v1/productс/v1/offers. Product даёт цену Buy Box; offers даёт владельца Buy Box и всех остальных продавцов. Не смешивайте их. - Пробовать
?page=Nна /v1/search. Типизированный поисковый эндпоинт принимает толькоkeywordиmarketplace. Для дальнейших страниц используйте/scrape. - Опрашивать вместо чтения
meta.usage. Остаток кредитов есть в каждом успешном ответе. Больше ничего вызывать не нужно. - Игнорировать разницу 429 и 503. 429 значит слишком много параллельных запросов или нет кредитов — отступите или остановитесь. 503 с кодом
CAPTCHA_DETECTEDвременна — повторите с экспоненциальной задержкой. - Забывать параметр
marketplace. Без него каждый вызов идёт на amazon.com — тихий UX-баг для европейских и японских воркфлоу. Всегда передавайте его явно. - Считать
PAGE_NOT_FOUNDбесплатным. Это 1 кредит (парсер отработал). Задачи обновления по устаревшим спискам тихо расходуют квоту. - Слепо повторять 4xx. Ошибки валидации (400) и авторизации (401) сами не починятся. Повторять стоит только 429, 502 и 503.
Куда дальше
- OpenAPI-спецификация — формальный контракт, машиночитаемый
- Текстовая документация — справочник для людей с формами ответов и примерами
- Создать API-ключ