Amazon Product API. Send a product link or ID.
Price, rating, monthly sales and specs by ASIN. We handle the proxies, blocks and platform changes.
Amazon Product API at a glance
Returns an Amazon product from its link, short link or ASIN, on any Amazon marketplace. You get the title, the current price with the list price it is discounted from, the seller and who ships it, stock, the star rating with its exact count and breakdown, and the monthly sales badge. It also has the Best Sellers Rank, brand or authors, the bullets and description, every specification, all images and videos, and every variation's ASIN.
GET /v1/amazon/product
- 1 credit per request, $0.75–$1.97 per 1,000 requests
- 23 typed fields null when unknown
urlis all it needs, e.g.https://www.amazon.com/dp/B0FQFB8FMG- 100 credits free when you sign up, no card, so you can build before you spend
Send one request. Get 23 fields back.
Copy the request in your language, or hand it to your agent. Sign up for an API key and your first 100 credits are free.
$ npm install socialtapurl = https://www.amazon.com/dp/B0FQFB8FMGconst params = new URLSearchParams({
url: "https://www.amazon.com/Apple-AirPods-Pro-3/dp/B0FQFB8FMG",
});
const res = await fetch(`https://socialtap.dev/v1/amazon/product?${params}`, {
headers: { "x-api-key": process.env.SOCIALTAP_API_KEY ?? "" },
});
const body = await res.json();
if (!res.ok) throw new Error(`${body.error.code}: ${body.error.message}`);
const { data, meta } = body;
console.log(data, meta.credits_charged);import os
import requests
res = requests.get(
"https://socialtap.dev/v1/amazon/product",
params={"url": "https://www.amazon.com/Apple-AirPods-Pro-3/dp/B0FQFB8FMG"},
headers={"x-api-key": os.environ["SOCIALTAP_API_KEY"]},
)
body = res.json()
if not res.ok:
raise RuntimeError(f"{body['error']['code']}: {body['error']['message']}")
data, meta = body["data"], body["meta"]
print(data, meta["credits_charged"])require "json"
require "net/http"
uri = URI("https://socialtap.dev/v1/amazon/product")
uri.query = URI.encode_www_form('url' => 'https://www.amazon.com/Apple-AirPods-Pro-3/dp/B0FQFB8FMG')
req = Net::HTTP::Get.new(uri)
req["x-api-key"] = ENV.fetch("SOCIALTAP_API_KEY")
res = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == "https") { |http| http.request(req) }
body = JSON.parse(res.body)
raise "#{body["error"]["code"]}: #{body["error"]["message"]}" unless res.is_a?(Net::HTTPSuccess)
pp body["data"]
puts body["meta"]["credits_charged"]<?php
$query = http_build_query([
'url' => 'https://www.amazon.com/Apple-AirPods-Pro-3/dp/B0FQFB8FMG',
]);
$ch = curl_init('https://socialtap.dev/v1/amazon/product?' . $query);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['x-api-key: ' . getenv('SOCIALTAP_API_KEY')],
]);
$body = json_decode(curl_exec($ch), true);
if (curl_getinfo($ch, CURLINFO_RESPONSE_CODE) >= 400) {
throw new RuntimeException($body['error']['code'] . ': ' . $body['error']['message']);
}
print_r($body['data']);
echo $body['meta']['credits_charged'], PHP_EOL;package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
"net/url"
"os"
)
func main() {
q := url.Values{}
q.Set("url", "https://www.amazon.com/Apple-AirPods-Pro-3/dp/B0FQFB8FMG")
req, err := http.NewRequest("GET", "https://socialtap.dev/v1/amazon/product?"+q.Encode(), nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("x-api-key", os.Getenv("SOCIALTAP_API_KEY"))
res, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer res.Body.Close()
var body struct {
Data json.RawMessage `json:"data"`
Meta map[string]any `json:"meta"`
Error *struct {
Code string `json:"code"`
Message string `json:"message"`
} `json:"error"`
}
if err := json.NewDecoder(res.Body).Decode(&body); err != nil {
log.Fatal(err)
}
if body.Error != nil {
log.Fatalf("%s: %s", body.Error.Code, body.Error.Message)
}
fmt.Println(string(body.Data), body.Meta["credits_charged"])
}curl -G 'https://socialtap.dev/v1/amazon/product' \
--data-urlencode 'url=https://www.amazon.com/Apple-AirPods-Pro-3/dp/B0FQFB8FMG' \
-H "x-api-key: $SOCIALTAP_API_KEY"{
"data": {
"approximate_fields": [
"platform_specific.amazon.rating",
"platform_specific.amazon.metrics.rating_distribution",
"platform_specific.amazon.metrics.bought_past_month_count"
],
"attributes": [
{
"name": "Brand",
"value": "Apple"
},
{
"name": "Color",
"value": "White"
},
{
"name": "Ear Placement",
"value": "In Ear"
}
],
"availability": "in_stock",
"category": null,
"category_id": null,
"condition": "new",
"condition_label": null,
"country_code": "US",
"currency": "USD",
"description": "WORLD’S BEST IN-EAR ACTIVE NOISE CANCELLATION — Removes up to 2x more unwanted noise than AirPods Pro 2* so you can stay fully immersed in the moment.*\n\nBREAKTHROUGH AUDIO PERFORMANCE — Experience breathtaking, three-dimensional audio with AirPods Pro 3. A new acoustic architectu…",
"id": "B0FQFB8FMG",
"max_price": null,
"media": [
{
"alt_text": null,
"duration_ms": null,
"expires_at": null,
"height": null,
"thumbnail_url": null,
"type": "image",
"url": "https://m.media-amazon.com/images/I/61solmQSSlL._AC_SL1500_.jpg",
"width": null
},
{
"alt_text": null,
"duration_ms": null,
"expires_at": null,
"height": null,
"thumbnail_url": null,
"type": "image",
"url": "https://m.media-amazon.com/images/I/71dt0UurPZL._AC_SL1500_.jpg",
"width": null
},
{
"alt_text": null,
"duration_ms": null,
"expires_at": null,
"height": null,
"thumbnail_url": null,
"type": "image",
"url": "https://m.media-amazon.com/images/I/61pH6X22khL._AC_SL1500_.jpg",
"width": null
}
],
"original_price": 249,
"platform": "amazon",
"platform_specific": {
"amazon": {
"availability_label": "In Stock",
"best_sellers_ranks": [],
"brand": "Apple",
"categories": [],
"contributors": [],
"deal": null,
"features": [
"WORLD’S BEST IN-EAR ACTIVE NOISE CANCELLATION — Removes up to 2x more unwanted noise than AirPods Pro 2* so you can stay fully immersed in the moment.*",
"BREAKTHROUGH AUDIO PERFORMANCE — Experience breathtaking, three-dimensional audio with AirPods Pro 3. A new acoustic architecture delivers transformed bass, detailed clarity so you can hear every instrument, and stunningly vivid vocals.",
"HEART RATE SENSING — Built-in heart rate sensing lets you track your heart rate and calories burned for up to 50 different workout types.* With iPhone, you will have access to the Move ring, step count, and the new Workout Buddy,* powered by Apple Intelligence.*"
],
"is_sponsored": null,
"metrics": {
"bought_past_month_count": 10000,
"offer_count": 11,
"rating_count": 17730,
"rating_distribution": {
"five_star_count": 14007,
"four_star_count": 1241,
"one_star_count": 1596,
"three_star_count": 532,
"two_star_count": 355
}
},
"parent_asin": null,
"rank": null,
"rating": 4.4,
"ships_from": "Amazon.com",
"variants": []
}
},
"price": 199,
"seller": {
"avatar_url": null,
"display_name": "Amazon.com",
"id": "ATVPDKIKX0DER",
"is_verified": null,
"url": null,
"username": null
},
"shipping": {
"fee": 0,
"is_offered": true
},
"thumbnail_url": "https://m.media-amazon.com/images/I/61solmQSSlL._AC_SL1500_.jpg",
"title": "Apple AirPods Pro 3 Wireless Earbuds with Active Noise Cancellation",
"type": "product",
"unknown_fields": [],
"url": "https://www.amazon.com/dp/B0FQFB8FMG"
},
"meta": {
"request_id": "req_3f9c2a7d1e8b4c6a9f0e2d4b6a8c0e1f",
"platform": "amazon",
"source": "page",
"is_cached": false,
"credits_charged": 1,
"latency_ms": 0,
"fetched_at": "2026-10-25T12:00:00Z",
"input": {
"kind": "product",
"id": "B0FQFB8FMG",
"url": "https://www.amazon.com/dp/B0FQFB8FMG"
},
"credits_remaining": 9999,
"client_request_id": null,
"warnings": []
}
}import { SocialTap } from "socialtap";
const client = new SocialTap(); // apiKey defaults to process.env.SOCIALTAP_API_KEY
const res = await client.amazon.product.get({ url: "https://www.amazon.com/Apple-AirPods-Pro-3/dp/B0FQFB8FMG" });
console.log(res.data);
console.log(res.credits.charged, res.meta.request_id);import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
public class Main {
public static void main(String[] args) throws Exception {
String query = "url=" + encode("https://www.amazon.com/Apple-AirPods-Pro-3/dp/B0FQFB8FMG");
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://socialtap.dev/v1/amazon/product?" + query))
.header("x-api-key", System.getenv("SOCIALTAP_API_KEY"))
.GET()
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
// An error is {"error": {"code", "message", ...}}; success is {data, meta}, meta.credits_charged its price.
if (response.statusCode() >= 400) throw new RuntimeException(response.body());
System.out.println(response.body());
}
static String encode(String value) {
return URLEncoder.encode(value, StandardCharsets.UTF_8);
}
}using System.Text.Json;
using var http = new HttpClient();
http.DefaultRequestHeaders.Add("x-api-key", Environment.GetEnvironmentVariable("SOCIALTAP_API_KEY"));
var query = string.Join("&",
"url=" + Uri.EscapeDataString("https://www.amazon.com/Apple-AirPods-Pro-3/dp/B0FQFB8FMG"));
var res = await http.GetAsync("https://socialtap.dev/v1/amazon/product?" + query);
using var body = JsonDocument.Parse(await res.Content.ReadAsStringAsync());
if (!res.IsSuccessStatusCode)
{
var error = body.RootElement.GetProperty("error");
throw new Exception($"{error.GetProperty("code")}: {error.GetProperty("message")}");
}
Console.WriteLine(body.RootElement.GetProperty("data"));
Console.WriteLine(body.RootElement.GetProperty("meta").GetProperty("credits_charged"));// Cargo.toml: reqwest = { version = "0.12", features = ["blocking", "json"] }, serde_json = "1"
use std::env;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let res = reqwest::blocking::Client::new()
.get("https://socialtap.dev/v1/amazon/product")
.query(&[("url", "https://www.amazon.com/Apple-AirPods-Pro-3/dp/B0FQFB8FMG")])
.header("x-api-key", env::var("SOCIALTAP_API_KEY")?)
.send()?;
let ok = res.status().is_success();
let body: serde_json::Value = res.json()?;
if !ok {
return Err(format!("{}: {}", body["error"]["code"], body["error"]["message"]).into());
}
println!("{} {}", body["data"], body["meta"]["credits_charged"]);
Ok(())
}200 OK · GET https://socialtap.dev/v1/amazon/productLong arrays and strings are shortened here. Real responses are complete.Docs One schema on 3 platforms.
The response reference lists every field, its type and when it is null. See the full schema.
Null means unknown
A field Amazon doesn't show is null, never zero or an empty string, so a real zero always means zero.
What it accepts
The product: its link on any Amazon marketplace (amazon.com/dp/B0FQFB8FMG, with or without the title before /dp/, /gp/product/, /gp/aw/d/, /product-reviews/ and the older /exec/obidos/ASIN/ links), a short link (amzn.to, a.co/d/, amzn.eu/d/, amzn.asia/d/, amzn.com), or its ASIN alone (B0FQFB8FMG, or a book's ISBN-10).
Write one parser
Amazon, TikTok Shop and Facebook Marketplace answer in these fields, so the code that reads one reads them all.
platformstring- Platform ID (tiktokshop, facebook, …).
idstring- Platform-native product or listing ID (string).
urlstring- Canonical product page URL.
typestring- product: a catalog product a shop sells in many units, often in variants (TikTok Shop, Instagram and YouTube shopping); listing: a single item a person or business lists for sale (Facebook Marketplace). New values may be added; treat unknown values as product.
titlestring- Product name or listing title, as the seller wrote it.
descriptionstring- Description as plain text (paragraphs separated by blank lines); null when it has none or the source does not show it (lists and search results).
categorystring- The platform's most specific category label (Bicycles, Vitamins & Supplements), as shown; not normalized across platforms.
category_idstring- The platform's ID of that category (what its category browsing and filters take).
Live data from 33 platforms.
What teams build with the Amazon Product API.
Track a product's price and stock
Monitor Best Sellers Rank over time
Compare a product across marketplaces
Enrich a catalog with specifications and images
Watch competitors' ratings and monthly sales
Good to know before you build.
- Prices, stock and sellers are the marketplace's own, in its currency: the same ASIN can be another listing, or missing, on another marketplace, which answers not_found.
- The seller and price are the featured offer's (the buy box). platform_specific.amazon.metrics.offer_count counts the other sellers' offers.
- rating is shown to one decimal and the monthly sales badge is a lower bound (10K+ is 10000): both are listed in approximate_fields, as is the rating breakdown, which Amazon shows as whole percentages.
- Variations list every color and size with its ASIN and options. Their prices and stock are on their own pages: send a variation's ASIN to get them.
- A product with no description of its own has its About this item bullets as description. They are also in platform_specific.amazon.features.
1 credit per request. Failed requests are free.
Buy credits once and spend them on any endpoint, on any platform.
| Source | Price per successful request | Per 1,000 requests |
|---|---|---|
Public page page | 1 credit | $0.75–$1.97 |
- Cache hits are free.
- Credits from packs and top-ups never expire.
- A monthly plan's credits are spent first, and what is left of them ends at each renewal.
- Prices exclude tax: sales tax is added at checkout where it applies.
- Outside the US, plans and packs are sold to businesses: checkout asks for your VAT, GST or other business tax ID.
Questions about the Amazon Product API.
More in the API reference.
Does it return reviews?
Which marketplaces does it support?
How much does the Amazon Product API cost?
Try it on a link you already have.
Paste it in the playground, or copy the request into your code.
- No credit card
- Failed requests are free
- Works on all 218 endpoints