GET
/scrape
2 credits
Amazon Scrape by URL API
Point the parser at any Amazon URL and get structured JSON back. The route type is detected automatically — detail page, search results, category grid or storefront — and parsed with the matching extractor.
Try it
You are not signed in, so this runs against sample data and costs nothing.
Create a free account to run it against your own key.
Query parameters
| Name | Type | Default | Description |
|---|---|---|---|
|
url
required |
string | — | Any Amazon URL. |
| marketplace | string | US | Two-letter marketplace code (US, UK, DE, FR, IT, ES, CA, JP, IN, AU, …). |
| zip | string | — | Delivery postcode. Without one, many listings report “cannot be shipped to your location” and come back with no price or images. Always send it for price-accurate data. |
Request
curl -sS "https://amazoncrawler.com/v1/scrape?url=https%3A%2F%2Fwww.amazon.com%2Fdp%2FB07CMS5Q6P&marketplace=US&zip=10001" \
-H "x-api-key: YOUR_API_KEY"
import requests
API_KEY = "YOUR_API_KEY"
response = requests.get(
"https://amazoncrawler.com/v1/scrape",
params={
"url": "https://www.amazon.com/dp/B07CMS5Q6P",
"marketplace": "US",
"zip": "10001",
},
headers={"x-api-key": API_KEY},
timeout=30,
)
response.raise_for_status()
data = response.json()
print(data)
const API_KEY = "YOUR_API_KEY";
const url = new URL("https://amazoncrawler.com/v1/scrape");
const params = {
url: "https://www.amazon.com/dp/B07CMS5Q6P",
marketplace: "US",
zip: "10001",
};
Object.entries(params).forEach(([k, v]) => url.searchParams.set(k, v));
const response = await fetch(url, {
headers: { "x-api-key": API_KEY },
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const data = await response.json();
console.log(data);
<?php
$apiKey = 'YOUR_API_KEY';
$query = http_build_query([
'url' => 'https://www.amazon.com/dp/B07CMS5Q6P',
'marketplace' => 'US',
'zip' => '10001',
]);
$ch = curl_init("https://amazoncrawler.com/v1/scrape?$query");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["x-api-key: $apiKey"],
CURLOPT_TIMEOUT => 30,
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($data);
package main
import (
"encoding/json"
"fmt"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://amazoncrawler.com/v1/scrape")
q := u.Query()
q.Set("url", "https://www.amazon.com/dp/B07CMS5Q6P")
q.Set("marketplace", "US")
q.Set("zip", "10001")
u.RawQuery = q.Encode()
req, _ := http.NewRequest("GET", u.String(), nil)
req.Header.Set("x-api-key", "YOUR_API_KEY")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
var data map[string]any
json.NewDecoder(res.Body).Decode(&data)
fmt.Println(data)
}
Response
{
"url": "https://www.amazon.com/dp/B07CMS5Q6P",
"data": {
"asin": "B07CMS5Q6P",
"brand": "Logitech G",
"price": {
"amount": 29.99,
"display": "$29.99",
"currency": "USD"
},
"title": "Logitech G305 Lightspeed Wireless Gaming Mouse - Black",
"rating": 4.6,
"in_stock": true,
"reviews_count": 39364
},
"marketplace": "US",
"detected_type": "product_detail"
}
Errors
Beyond the shared error codes, this endpoint returns
422 when a parameter fails validation — the
detail array names the field.
{
"detail": [
{
"loc": ["query", "url"],
"msg": "Field required",
"type": "missing",
"input": null
}
]
}