Reverb
Reverb listed price, price before a drop, condition, make, model, year, finish, category, shop and shop rating, offers flag, quantity and shipping price, by listing id, about 1 million listings per credit. Sold listings too. Search for available or sold listings. No listing rating, and no sold price or date.
Reverb listed price, price before a drop, condition, make, model, year, finish, category, shop and shop rating, offers flag, quantity and shipping price, by listing id, about 1 million listings per credit. Sold listings too. Search for available or sold listings. No listing rating, and no sold price or date.
At a glance
Property | Value |
|---|---|
|
|
Item id | The number after |
Marketplaces | Live: |
Tier |
|
Ids per call | 50. Each listing is its own lookup, so a call with many ids takes proportionally longer. |
Typical call | 10–25 s for 50 listings |
Search |
|
What a sold listing's price means
price is the listed price: the last price the listing carried, also on a sold listing. Reverb gives no sold price and no sold date, so a sold row's price is not necessarily what the buyer paid (an accepted offer can sell below the listed price). A sold listing's publishedAt is when it went up, not when it sold.
Price before a drop
reverb.originalPrice (list_price in search) is the price before the seller's price drop, and null when the price never dropped (it is not 0). It is the seller's own earlier price: not a retail price and not a claim about a discount elsewhere.
Search reaches 2,500 listings per query
However large total_results is, a query returns its first 2,500 listings (page 1 to 50, 50 each). To go deeper, split the query with condition, min_price / max_price and category. Asking by id has no such limit.
Example
- cURL
- Python
- Node.js
curl -X POST "https://api.scrapelyserp.com/v1/products" \
-H "Authorization: Bearer $SCRAPELY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"platform": "reverb",
"ids": [
"103777264",
"https://reverb.com/item/14746554-boss-ds-1-keeley-ultra-signed-mint"
]
}'import os
import requests
HEADERS = {"Authorization": f"Bearer {os.environ['SCRAPELY_API_KEY']}"}
r = requests.post(
"https://api.scrapelyserp.com/v1/products",
headers=HEADERS,
json={
"platform": "reverb",
"ids": [
"103777264",
"https://reverb.com/item/14746554-boss-ds-1-keeley-ultra-signed-mint",
],
},
timeout=30,
)
r.raise_for_status()
data = r.json()
for p in data["results"]:
print(p["id"], p["status"], (p.get("price") or {}).get("amount"), (p.get("reverb") or {}).get("status"))const res = await fetch('https://api.scrapelyserp.com/v1/products', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SCRAPELY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
platform: 'reverb',
ids: [
'103777264',
'https://reverb.com/item/14746554-boss-ds-1-keeley-ultra-signed-mint',
],
}),
signal: AbortSignal.timeout(30_000),
});
if (!res.ok) throw new Error((await res.json()).error.code);
const data = await res.json();
for (const p of data.results) console.log(p.id, p.status, p.price?.amount, p.reverb?.status);Full reference → POST /v1/products
Reverb fields
Besides the common fields, each result carries a reverb object.
Field | Description |
|---|---|
| The listed price, in dollars. |
|
|
|
|
| The price before the seller's price drop; |
| Reverb's condition name: |
| As the seller filled them in. |
| The seller's shop name. |
| The shop's positive-feedback share in percent (98.7) and how many feedbacks it has. These describe the shop, not the listing. Only a product lookup carries them; search rows leave them |
| Whether the seller takes offers, and the quantity the seller lists. |
| The shipping charge to the contiguous US (0 for free shipping; |
| When the listing was created and published (ISO 8601, with the offset Reverb writes). |
| The listing link and its first picture. |
Not given | A rating or review count for the listing (listings have none), a sold price or sold date, the listing's other pictures, description and shipping to other regions. |
Prices in dollars
Reverb shows buyers the price in dollars whatever currency the seller listed in. price.currency is what Reverb reports, normally USD.
Statuses on Reverb
partial: Reverb answered without a title. Ask again later.not_found: Reverb has no such listing id, available or sold. A deleted listing is not found.unavailable: no usable answer after retries. Not charged; ask again.