Документация Scraping API
Полный справочник по ASINSpotlight Amazon Scraping API
Базовый URL
https://api.asinspotlight.com/v1
Аутентификация
Все запросы требуют API-ключ в заголовке x-api-key:
curl -H "x-api-key: YOUR_API_KEY" "https://api.asinspotlight.com/v1/product?asin=B0B3ZD8QXJ"
| Заголовок | Обязательный | Описание |
|---|---|---|
x-api-key |
Да | Ваш API-ключ |
Метаданные ответа
Каждый успешный ответ содержит объект meta с метаданными по конкретному запросу. Блок meta.usage позволяет строить циклы с учётом квоты, не обращаясь к отдельному эндпоинту:
"meta": {
"marketplace": "us",
"language": "en",
"timing_ms": 1842,
"request_url": "https://api.asinspotlight.com/v1/product?asin=B0B3ZD8QXJ&marketplace=us",
"timestamp": "2026-05-03T10:14:22.318Z",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"usage": { "requests_consumed": 1, "requests_remaining": 49999 }
}
requests_consumed равно 1 для любого успешного скрейпинга (HTTP 200) — включая результаты «не найдено», где found равно false, поскольку страница всё равно была загружена и разобрана; 0 для любой неудачи. Блок meta.usage также включается в ошибки 429 (превышение лимита запросов и квоты), чтобы вы могли узнать остаток кредитов даже при отклонённом запросе.
Found vs. Not Found
Коды состояния отражают работоспособность нашего сервиса, а не содержимое Amazon. Каждый успешный ответ содержит логическое поле верхнего уровня found:
found: true— сущность найдена;dataсодержит данные.found: false— скрейпинг выполнен успешно, но сущность отсутствует на Amazon (неверный ASIN/продавец, удалённый листинг).dataравноnull, HTTP-статус по-прежнему200, и запрос всё равно списывает один кредит.
Ориентируйтесь на found, а не на HTTP-статус, чтобы отличить «найдено» от «не найдено». Оставьте 4xx для ошибок ваших запросов, а 5xx — для наших сбоев.
Язык отображения
Каждый эндпоинт принимает необязательный параметр language:
| Значение | Поведение |
|---|---|
en |
Английская версия страницы (по умолчанию) |
native |
Родной язык маркетплейса (сейчас поддерживаются: it, fr, de, es, список расширяется) |
С language=native текстовые поля (название, категория и бренд, condition_text, тексты о доставке) возвращаются на языке маркетплейса, а нормализованные поля (слаги состояний, цены, даты, единицы измерения) остаются каноническими, поэтому фильтры по состоянию и ваш парсинг продолжают работать без изменений. Запрошенный язык дублируется в meta.language.
Запрос native для маркетплейса без поддержки родного языка возвращает HTTP 400 с кодом ошибки NATIVE_LANGUAGE_NOT_SUPPORTED и не тарифицируется.
Пример (итальянская карточка товара на итальянском)
curl -H "x-api-key: YOUR_API_KEY" \
"https://api.asinspotlight.com/v1/product?asin=B0BWSCJ13H&marketplace=it&language=native"
Акции и скидки
Данные товара и элементы списковых страниц содержат объект promotion, описывающий состояние скидки на предложение: бейдж акции, который Amazon показывает только пока акция активна, и зачёркнутые справочные цены, относительно которых считается скидка. Один запрос отвечает на вопрос «действует ли сейчас акция на этот товар и насколько глубока скидка» без истории цен.
promotion присутствует в данных /v1/product и в каждом элементе shallow_parts[] списковых страниц (поиск, категория, бестселлеры). Значение null означает, что на странице нет ни бейджа акции, ни зачёркнутой цены: товар продаётся по обычной цене.
"promotion": {
"deal": {
"kind": "limited_time",
"label": "Limited time deal",
"deal_id": "amzn1.deal.b12c9bd2",
"ends_at": "2026-08-16T04:00:00Z",
"ends_on": "2026-08-16",
"ends_in_days": 15,
"ends_on_text": null
},
"list_price": {
"amount": 199.99,
"label": "List Price:",
"savings_amount": 50.99,
"savings_percent": 25.0
},
"lowest_price_30_days": null
}
Три части объекта независимы: обычная уценка может показываться зачёркнутой ценой без бейджа, а акция с бейджем может вовсе не иметь справочной цены.
Бейдж deal
Сигналом служит само присутствие бейджа: Amazon показывает его только пока акция идёт, поэтому непустой deal означает, что акция активна в момент запроса, а null означает, что нет. Вопрос «закончилась ли акция?» решается одним запросом вместо анализа истории цен.
| Поле | Описание |
|---|---|
kind |
Нормализованный тип акции: limited_time, lightning или prime_exclusive. null, если формулировка бейджа не называет механику (бейджи с обратным отсчётом, сезонные бейджи вроде «Black Friday Deal», нераспознанные локали); исходный текст остаётся в label |
label |
Дословный текст бейджа на языке страницы («Limited time deal», «Oferta flash») |
deal_id |
Собственный идентификатор акции Amazon (amzn1.deal.…), стабильный на всё время жизни одной акции и общий для всех ASIN, которые она покрывает. Сравнивайте его между запросами, чтобы отличить продолжающуюся акцию от новой с похожей ценой. null в элементах списковых страниц |
ends_at |
Точный момент окончания акции, ISO 8601 в UTC (2026-08-16T04:00:00Z). Читается из машиночитаемой метки времени Amazon и не зависит от локали; используйте его для всего, что чувствительно ко времени |
ends_on |
Календарный день окончания акции, ISO YYYY-MM-DD: день ends_at в UTC либо день из всплывающего окна условий акции, когда на странице нет метки времени. Это сводка с точностью до дня, а не крайний срок покупки |
ends_in_days |
Целое число дней от даты запроса до ends_on; 0 означает, что акция заканчивается сегодня. null в элементах списковых страниц (там вычисляйте из ends_at) |
ends_on_text |
Дословная фраза Amazon о дате окончания («Questa offerta termina il 26 luglio 2026»). Отсутствует на витринах без всплывающего окна условий акции (amazon.com в их числе) |
Справочные цены
list_price и lowest_price_30_days имеют одинаковую структуру:
| Поле | Описание |
|---|---|
amount |
Зачёркнутая цена |
label |
Дословная подпись Amazon («List Price:», «Typical:», «Prezzo consigliato:»). null, если зачёркнутая цена показана без подписи |
savings_amount |
amount минус текущая цена. Никогда не бывает отрицательным: справочная цена не выше текущей не является скидкой, поэтому поле остаётся null, а не нулём или минусом |
savings_percent |
Скидка в целых процентах, положительная. Если Amazon сам показывает процент, берётся именно он (его и видит покупатель), иначе значение вычисляется и округляется так же, как это делает Amazon |
list_price содержит основную зачёркнутую цену. Обычно это рекомендованная цена производителя, но когда её нет, Amazon подставляет в тот же слот типичную, медианную или прежнюю цену («Typical:», «Prezzo mediano:», «Ancien prix :»); только формулировка label говорит, какая именно цена перед вами. lowest_price_30_days содержит минимальную цену за последние 30 дней, которую европейские витрины обязаны показывать рядом со скидкой (директива Omnibus); за пределами ЕС поле отсутствует.
На списковых страницах. Элемент выдачи поиска, категории или бестселлеров представляет собой краткий тайл, поэтому его promotion содержит сокращённую версию того, что отдаёт карточка товара: тип и текст бейджа (kind, label) и зачёркнутая цена присутствуют, но нет deal_id и ends_on_text, ends_at появляется только у бейджей с обратным отсчётом (они сами указывают свой дедлайн), а ends_in_days всегда null. Когда нужны идентификатор акции или точный дедлайн, запросите /v1/product по этому ASIN.
Купоны учитываются отдельно. Купон, который нужно «применить», представляет собой другой механизм скидки и остаётся в собственном поле coupon ({"unit": "percent", "value": 15} или {"unit": "currency", "value": 5}) как в данных товара, так и в элементах списковых страниц, и означает одно и то же в обоих случаях: value — это размер скидки, а не цена, которая останется после её применения. Купон с percent содержит процент, купон с currency — сумму в местной валюте маркетплейса. В поле price купон не учитывается, итоговую цену вы считаете сами. Товар может одновременно иметь и купон, и акцию.
Эндпоинты
GET /v1/product
Получить информацию о товаре по ASIN.
Параметры
| Параметр | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
asin |
string | Да | ASIN товара на Amazon | |
marketplace |
string | Нет | us |
Код маркетплейса (см. ниже) |
language |
string | Нет | en |
en или native (см. Язык отображения) |
Пример
curl -H "x-api-key: YOUR_API_KEY" \
"https://api.asinspotlight.com/v1/product?asin=B0B3ZD8QXJ&marketplace=us"
Ответ
{
"success": true,
"found": true,
"page_type": "product",
"data": {
"asin": "B0B3ZD8QXJ",
"title": "Product Title",
"buybox": true,
"bb_price": 29.99,
"rating": 4.5,
"reviews": 1234,
"bsr": 5678,
"in_stock": true,
"is_prime": true,
"promotion": {
"deal": {
"kind": "limited_time",
"label": "Limited time deal",
"deal_id": "amzn1.deal.b12c9bd2",
"ends_at": "2026-08-16T04:00:00Z",
"ends_on": "2026-08-16",
"ends_in_days": 15,
"ends_on_text": null
},
"list_price": {
"amount": 39.99,
"label": "List Price:",
"savings_amount": 10.00,
"savings_percent": 25.0
},
"lowest_price_30_days": null
},
"brand": { "name": "BrandName", "url": "/stores/BrandName" },
"category": { "name": "Electronics", "url": "/b?node=123" },
"image_url": "https://m.media-amazon.com/images/I/...",
"sellers_all": 5,
"bought_past_month": 1000
},
"meta": {
"marketplace": "us",
"timing_ms": 2340,
"request_url": "https://api.asinspotlight.com/v1/product?asin=B0B3ZD8QXJ&marketplace=us",
"timestamp": "2026-04-03T12:00:00.000Z",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}
promotion показывает, действует ли на предложение акция, и зачёркнутые цены, относительно которых считается скидка; null означает, что товар продаётся по обычной цене. См. Акции и скидки.
GET /v1/offers
Получить все предложения продавцов для товара — полную панель Buy Box и список всех предложений (All Offers Display) — с указанием для каждого предложения состояния, цены, стоимости доставки, способа исполнения заказа, рейтинга продавца и наличия на складе.
Параметры
| Параметр | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
asin |
string | Да | ASIN товара на Amazon | |
marketplace |
string | Нет | us |
Код маркетплейса |
condition |
string | Нет | all |
Фильтрация предложений по состоянию (см. ниже) |
language |
string | Нет | en |
en или native (см. Язык отображения) |
Фильтрация по состоянию
По умолчанию (condition=all) возвращаются предложения любого состояния. Передайте condition, чтобы ограничить результат одним состоянием или градацией состояния «бывший в употреблении»:
| Значение | Возвращает |
|---|---|
all |
Все состояния (по умолчанию) |
new |
Только новые предложения |
used |
Любая градация б/у (как новый / очень хорошее / хорошее / приемлемое) |
used_like_new |
Только б/у — как новый |
used_very_good |
Только б/у — очень хорошее |
used_good |
Только б/у — хорошее |
used_acceptable |
Только б/у — приемлемое |
collectible |
Только коллекционные предложения |
Фильтр применяется к итоговому condition каждого предложения, поэтому ответ содержит только предложения запрошенного состояния, а fba_count / fbm_count / sold_by_amazon отражают отфильтрованный набор. Каждый запрос списывает один кредит независимо от фильтра.
Пример
curl -H "x-api-key: YOUR_API_KEY" \
"https://api.asinspotlight.com/v1/offers?asin=B0B3ZD8QXJ&marketplace=us"
Пример (только б/у предложения)
curl -H "x-api-key: YOUR_API_KEY" \
"https://api.asinspotlight.com/v1/offers?asin=B0B3ZD8QXJ&marketplace=us&condition=used"
Ответ
Каждая запись в product_sellers_info содержит нормализованное состояние condition (new, used_like_new, used_very_good, used_good, used_acceptable или collectible) и дословный заголовок condition_text, который Amazon показывает для этого предложения. condition равно null, когда заголовок Amazon отсутствует или не распознан (например, Renewed/Refurbished или некоторые неанглийские формулировки) — исходная подпись по-прежнему доступна в condition_text. seller_id равно null для предложений, продаваемых напрямую Amazon.
Рекомендуемое предложение (Buy Box) помечено флагом is_pinned. В ответе его несёт не более одного предложения, поэтому победителя Buy Box можно прочитать напрямую, а не выводить из цены. Позиция в массиве не заменяет этот флаг: в ответе может быть много предложений и ни одного помеченного, что означает, что Amazon не показал рекомендуемое предложение для этого ASIN. Фильтр condition также может убрать помеченное предложение из ответа, поскольку Amazon возвращает рекомендуемое предложение независимо от запрошенного состояния.
Каждое предложение содержит массив delivery с обещаниями доставки, которые показал Amazon. Значение kind равно standard для основного слота и fastest для дополнительного, который Amazon также использует для рекламы Prime, поэтому его стоит читать как «другой показанный вариант», а не как гарантированно более быструю доставку. Поля date_min / date_max дают обещанный интервал в виде абсолютных дат, а days_min / days_max выражают то же обещание в целых днях от даты запроса, где 0 означает доставку сегодня. Если обещание не удалось разобрать в дату, все поля дат и дней равны null, а не подставному числу, поэтому null следует трактовать как «неизвестно». Чтобы отличить бесплатную доставку от стоимости, которую не удалось разобрать, используйте is_free, а не shipping_price. Поле text содержит дословную формулировку Amazon и может включать обратный отсчёт, поэтому не используйте его как ключ кеша.
{
"success": true,
"found": true,
"page_type": "offers",
"data": {
"sold_by_amazon": true,
"fba_count": 3,
"fbm_count": 2,
"product_sellers_info": [
{
"name": "Amazon.com",
"price": 29.99,
"shipping_price": 0,
"is_fba": true,
"is_amazon": true,
"stock_qty": 100,
"rating_percent": 95,
"reviews_count": 50000,
"condition": "new",
"condition_text": "New",
"seller_id": null,
"domain": "com",
"is_just_launched": false,
"is_pinned": true,
"delivery": [
{
"kind": "standard",
"days_min": 8,
"days_max": 8,
"date_min": "2026-07-25",
"date_max": "2026-07-25",
"is_free": true,
"text": "FREE delivery Saturday, July 25."
},
{
"kind": "fastest",
"days_min": 5,
"days_max": 7,
"date_min": "2026-07-22",
"date_max": "2026-07-24",
"is_free": null,
"text": "Or fastest delivery July 22 - 24."
}
]
},
{
"name": "ThriftBooks",
"price": 18.50,
"shipping_price": 3.99,
"is_fba": false,
"is_amazon": false,
"stock_qty": 5,
"rating_percent": 97,
"reviews_count": 4200,
"condition": "used_like_new",
"condition_text": "Used - Like New",
"seller_id": "A3XYZ123456",
"domain": "com",
"is_just_launched": false,
"is_pinned": false,
"delivery": [
{
"kind": "standard",
"days_min": 6,
"days_max": 11,
"date_min": "2026-07-23",
"date_max": "2026-07-28",
"is_free": false,
"text": "$3.99 delivery July 23 - 28."
}
]
}
]
},
"meta": { "..." : "..." }
}
GET /v1/search
Поиск товаров по ключевому слову.
Параметры
| Параметр | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
keyword |
string | Да | Ключевое слово для поиска | |
marketplace |
string | Нет | us |
Код маркетплейса |
language |
string | Нет | en |
en или native (см. Язык отображения) |
Пример
curl -H "x-api-key: YOUR_API_KEY" \
"https://api.asinspotlight.com/v1/search?keyword=wireless+headphones&marketplace=us"
Ответ
{
"success": true,
"found": true,
"page_type": "search",
"data": {
"title": "wireless headphones",
"current_page": 1,
"last_page_number": 20,
"total_results_count": 10000,
"shallow_parts": [
{
"asin": "B0CQXMXJC5",
"title": "Soundcore Q20i Headphones",
"index_on_page": 1,
"page_number": 1,
"price": 39.99,
"shipping": 0,
"is_prime": true,
"rating": 4.6,
"reviews": 58800,
"bought_past_month": 20000,
"in_stock": true,
"coupon": null,
"image_url": "https://m.media-amazon.com/images/I/...",
"promotion": {
"deal": {
"kind": "limited_time",
"label": "Limited time deal",
"deal_id": null,
"ends_at": null,
"ends_on": null,
"ends_in_days": null,
"ends_on_text": null
},
"list_price": {
"amount": 49.99,
"label": "List:",
"savings_amount": 10.00,
"savings_percent": 20.0
},
"lowest_price_30_days": null
}
}
]
},
"meta": { "..." : "..." }
}
Каждый элемент также содержит promotion тайла (бейдж акции и зачёркнутую справочную цену) в сокращённом виде, описанном в разделе Акции и скидки: без deal_id, ends_at только у бейджей с обратным отсчётом, ends_in_days всегда null. Поле присутствует в shallow_parts[] на всех списковых страницах (поиск, категория, бестселлеры).
GET /v1/seller
Получить профиль витрины продавца по его ID.
Параметры
| Параметр | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
sellerId |
string | Да | ID продавца (мерчанта) на Amazon — токен A… из URL витрины (/sp?seller=<sellerId>) |
|
marketplace |
string | Нет | us |
Код маркетплейса |
language |
string | Нет | en |
en или native (см. Язык отображения) |
Пример
curl -H "x-api-key: YOUR_API_KEY" \
"https://api.asinspotlight.com/v1/seller?sellerId=A1PXYTJNWCR133&marketplace=us"
Ответ
Возвращает имя продавца, рейтинг отзывов и долю положительных отзывов за последние 12 месяцев, общее количество оценок, ссылку на витрину, а также блок «Detailed Seller Information» (юридическое название компании и адрес), если Amazon его публикует. Неверный ID продавца возвращает 200 с found: false и data: null.
{
"success": true,
"found": true,
"page_type": "seller",
"data": {
"seller_id": "A1PXYTJNWCR133",
"name": "Lovinio",
"storefront_url": "/s?ie=UTF8&marketplaceID=ATVPDKIKX0DER&me=A1PXYTJNWCR133",
"rating": 3.4,
"positive_percent": 59,
"ratings_count": 217,
"business_name": "Lovinio Inc",
"business_address": ["4652 Eagle Falls Pl", "Tampa", "FL", "33619", "US"]
},
"meta": { "..." : "..." }
}
POST /v1/scrape
Извлечь данные с любой страницы Amazon. Тип страницы определяется автоматически.
Тело запроса (JSON)
| Поле | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
url |
string | Да | Полный URL страницы Amazon | |
marketplace |
string | Нет | us |
Код маркетплейса |
language |
string | Нет | en |
en или native (см. Язык отображения) |
Пример
curl -X POST -H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://www.amazon.com/s?k=laptop+stand", "marketplace": "us"}' \
"https://api.asinspotlight.com/v1/scrape"
Ответ
Форма data соответствует определённому page_type. Для product, search, offers и seller она совпадает с данными типизированных эндпоинтов выше. category, bestseller, storefront и reviews возвращают структурированные данные, адаптированные под страницу. Страница «не найдено» возвращает found: false и data: null.
{
"success": true,
"found": true,
"page_type": "search",
"data": { "...": "..." },
"meta": { "...": "..." }
}
Поддерживаемые маркетплейсы
| Код | Страна | Домен |
|---|---|---|
us |
США | amazon.com |
uk |
Великобритания | amazon.co.uk |
de |
Германия | amazon.de |
fr |
Франция | amazon.fr |
it |
Италия | amazon.it |
es |
Испания | amazon.es |
ca |
Канада | amazon.ca |
au |
Австралия | amazon.com.au |
jp |
Япония | amazon.co.jp |
in |
Индия | amazon.in |
mx |
Мексика | amazon.com.mx |
br |
Бразилия | amazon.com.br |
tr |
Турция | amazon.com.tr |
sa |
Саудовская Аравия | amazon.sa |
ae |
ОАЭ | amazon.ae |
sg |
Сингапур | amazon.sg |
nl |
Нидерланды | amazon.nl |
pl |
Польша | amazon.pl |
se |
Швеция | amazon.se |
be |
Бельгия | amazon.com.be |
Ответы с ошибками
Все ошибки возвращаются в едином формате:
{
"success": false,
"error": {
"code": "ERROR_CODE",
"message": "Описание ошибки"
}
}
Отсутствующая сущность (неверный ASIN/продавец, удалённый листинг) не является ошибкой — возвращается 200 с found: false и data: null, и списывается один кредит. См. Found vs. Not Found.
| HTTP-статус | Код | Описание |
|---|---|---|
| 400 | NATIVE_LANGUAGE_NOT_SUPPORTED |
language=native запрошен для маркетплейса без поддержки родного языка (см. Язык отображения). Не тарифицируется |
| 401 | MISSING_API_KEY |
Заголовок x-api-key не передан |
| 401 | INVALID_API_KEY |
Недействительный API-ключ |
| 500 | SCRAPE_FAILED |
Не удалось извлечь данные |
| 500 | INTERNAL_ERROR |
Внутренняя ошибка сервиса |