Parse Endpoint
POST /v1/parse — the single endpoint that extracts product data from any URL.
Overview
POST https://api.productparse.dev/v1/parse
Content-Type: application/json
Authorization: Bearer YOUR_API_KEY
Accepts a product URL and returns structured JSON. The response schema is consistent regardless of which extraction method was used.
Minimal request
{
"url": "https://www.example.com/products/widget-pro"
}
Full request
{
"url": "https://www.example.com/products/widget-pro",
"extractionHint": "Include all colour and size variants separately. Return shipping lead time.",
"includeScreenshot": true,
"forceRefresh": false,
"strategies": ["jsonld", "cached-script", "adaptive"]
}
Minimal response
{
"title": "Widget Pro",
"brand": "Acme Corp",
"price": {
"amount": 129.99,
"currency": "USD"
},
"availability": "in_stock",
"images": ["https://example.com/images/widget-pro.jpg"],
"source": {
"type": "jsonld",
"method": "fast-path",
"confidence": 0.97
}
}
Full response
{
"title": "Widget Pro – Titanium Edition",
"brand": "Acme Corp",
"sku": "WP-TI-001",
"description": "The most durable widget we've ever built...",
"price": {
"amount": 129.99,
"currency": "USD"
},
"availability": "in_stock",
"images": [
"https://example.com/images/widget-pro-1.jpg",
"https://example.com/images/widget-pro-2.jpg"
],
"variants": [
{ "colour": "Titanium Silver", "size": "M" },
{ "colour": "Midnight Black", "size": "M" },
{ "colour": "Midnight Black", "size": "L" }
],
"shipping": {
"summary": "Free shipping over $75",
"eta": "3–5 business days"
},
"quantityBreaks": [
{ "minQuantity": 1, "maxQuantity": 9, "unitPrice": 129.99 },
{ "minQuantity": 10, "maxQuantity": 49, "unitPrice": 114.99 },
{ "minQuantity": 50, "maxQuantity": null, "unitPrice": 99.99 }
],
"source": {
"type": "adaptive",
"method": "cached-script",
"confidence": 0.94
},
"artifacts": {
"screenshotUrl": "https://cdn.productparse.dev/s/abc123.png",
"screenshotToken": "abc123"
},
"meta": {
"extractionTime": 312,
"requestId": "req_01j8x..."
}
}
Batch mode
Send an array of URLs to process up to 20 URLs in parallel:
{
"urls": [
"https://example.com/products/widget-a",
"https://example.com/products/widget-b",
"https://example.com/products/widget-c"
]
}
Batch response:
{
"batch": true,
"results": [
{
"url": "https://example.com/products/widget-a",
"success": true,
"title": "Widget A",
"price": { "amount": 49.99, "currency": "USD" },
...
},
{
"url": "https://example.com/products/widget-b",
"success": false,
"error": "Page returned 404"
}
],
"meta": {
"total": 3,
"succeeded": 2,
"failed": 1,
"extractionTime": 1840
}
}
Each URL in a batch counts as one request against your quota. A batch of 10 URLs uses 10 of your monthly requests.
HTTP status codes
| Status | Meaning |
|---|---|
200 | Success |
400 | Bad request — missing or invalid url field |
401 | Unauthorised — invalid or missing API key |
422 | Unprocessable — URL returned a non-product page |
429 | Rate limit exceeded |
500 | Internal error — contact support with requestId |