Reverb Scraper — Sold Listings & Price Guide avatar

Reverb Scraper — Sold Listings & Price Guide

Pricing

Pay per event

Go to Apify Store
Reverb Scraper — Sold Listings & Price Guide

Reverb Scraper — Sold Listings & Price Guide

Pull Reverb's sold-listing-based estimated value range for any musical-gear search via the Reverb price-guide API — used-price lows and highs plus make, model, year, finish — export to JSON or CSV. One row per price guide. No login; we handle the retries.

Pricing

Pay per event

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

18 hours ago

Last modified

Categories

Share

Reverb Scraper — Sold Listings & Price Guide Data

Reverb Scraper — Sold Listings & Price Guide Data

We do the dirty work so your dataset stays clean. 😈

$5.05 / 1,000 rows — Pull Reverb's sold-listing-based estimated value range for any musical gear search. One row per price guide entry: priceLow, priceHigh, make, model, year, finish, product type — the same signal Reverb's own price-guide pages publish. We handle the blocks, the retries, and the fingerprint rotation. You get clean JSON.

The Reverb Price Guide is the internet's largest public database of musical-instrument valuations, computed directly from completed sales ("We look at sold listings — based on how much gear in the same condition has sold for on Reverb recently"). Reverb offers no bulk export and no public API for estimates. This reverb scraper walks the price-guide search API, fetches each matching guide's estimated value range from Reverb's GraphQL endpoint, and emits one flat dataset row per guide — ready for reseller pricing models, gear-investment tracking, insurance valuations, or used-instrument market journalism.

🎯 What this scrapes

One row per Reverb price-guide entry. Each row carries the estimated sold-based value range (low and high) alongside full gear context. The marketplace_url links to Reverb's live marketplace search for the item — useful for cross-referencing current asking prices against the estimated value.

FieldTypeDescription
guide_idintegerReverb price-guide entry ID
guide_titlestringHuman-readable title (e.g. Fender Stratocaster 1979 Red)
makestring | nullManufacturer (e.g. Fender)
modelstring | nullModel name (e.g. Stratocaster)
yearstring | nullYear string — Reverb mixes 1979 / 1970s
finishstring | nullFinish / colour (e.g. Red, Sunburst)
product_typestring | nullReverb category (e.g. Electric Guitars, Tube Combos)
estimate_low_amountnumber | nullLow end of estimated value, original currency
estimate_low_centsinteger | nullLow end in smallest currency unit (e.g. cents)
estimate_low_displaystring | nullReverb's pre-formatted low estimate (e.g. $935)
estimate_high_amountnumber | nullHigh end of estimated value, original currency
estimate_high_centsinteger | nullHigh end in smallest currency unit
estimate_high_displaystring | nullReverb's pre-formatted high estimate (e.g. $1,320)
estimate_currencystring | nullISO 4217 currency code (e.g. USD)
marketplace_urlstringReverb marketplace search link for this gear
scraped_atstringISO 8601 UTC datetime this row was written

🔥 Features

  • Sold-data signal, not speculative listing prices — Reverb's estimated value range is computed from actual completed transactions on the platform. The priceLow / priceHigh pair is the same figure Reverb displays on their own price-guide pages under the heading "Estimated Value."
  • Two-stage pipeline — supply a free-text query (e.g. fender stratocaster) and the Actor pages Reverb's price-guide search API, optionally filters by productType, then fetches each matching guide's estimate via Reverb's GraphQL endpoint. One row out per guide.
  • Or skip the search entirely — supply explicit guideIds and the Actor goes straight to the estimate fetch. Useful for incremental crawls, watch-lists, and price-monitoring pipelines.
  • maxGuides cap — generic queries like fender match tens of thousands of price-guide entries; the cap (default 20, up to 200) keeps fan-out bounded and cost predictable.
  • Pydantic v2 input validation — XOR between query and guideIds enforced before any network call; maxGuides bounds enforced at parse time.
  • We rotate browser fingerprintscurl-cffi with Chrome/Firefox/Safari TLS impersonation means Reverb's servers see real-browser traffic, not raw Python.
  • We retry with exponential backoff408 / 429 / 503 trigger a retry sequence (2 → 4 → 8 → 16 → 30 s, max 5 attempts) with Retry-After honoured.
  • We rotate proxies on every block — Apify Proxy handles IP rotation so a single rate-limited IP never stalls your run.
  • Clean, Pydantic-validated rows — every dataset row passes schema validation before it lands. ISO 8601 timestamps, stable column names, no partial writes.
  • Pay only for results that land — no data, no charge beyond the small actor-start warm-up fee.

💡 Use cases

  • Reseller pricing models — fetch estimated value ranges for every variant of a model (Gibson Les Paul, all years and finishes), feed the estimate_low / estimate_high pairs into your pricing algorithm, and stop pricing by gut.
  • Gear-investment and vintage-appreciation tracking — schedule weekly runs for canonical vintage models (1959 Les Paul, 1965 Fender Twin Reverb) and watch the estimate bands move over time. The data is direct from Reverb's sold-price engine.
  • Insurance valuation — pull estimates for a specific instrument and export them as a defensible "current market value" backed by Reverb's own sold-data methodology. Works for individual items or entire collections.
  • Used-gear market journalism — Reverb's estimates are the de facto standard for secondhand instrument values. Pull a category-wide sweep (productType=Electric Guitars, query=gibson) and you have the dataset behind a market-movement story.
  • Buy / sell price-band alerts — combine with a downstream notification workflow: if estimate_low_amount for a target guide crosses a threshold, fire an alert. The Actor's guideIds mode makes repeated single-guide polling cheap.
  • Shop inventory appraisal — for a guitar shop doing a bulk valuation, run one guideIds batch against all catalogue SKUs and get the Reverb-anchored estimate for every piece in the warehouse.

⚙️ How to use it

  1. Open the Actor input form in Apify Console.
  2. Provide either query (free-text search) or guideIds (explicit Reverb price-guide IDs). Providing both or neither raises a validation error before any network call.
  3. Optionally narrow query mode with productType — case-insensitive match against Reverb's category column. Common values: Electric Guitars, Bass Guitars, Tube Combos, Solid State Combos, Pedals, Synths, Drum Sets.
  4. Set maxGuides to cap how many estimate rows to emit (default 20, up to 200). Generic queries can match tens of thousands of entries; the cap keeps cost predictable.
  5. Leave useProxy on (default) — we use it for IP rotation and stability. Disable only when debugging locally.
  6. Click Start. Results stream into the default dataset as JSON, CSV, Excel, or XML.

Search for one model — top 20 estimates

{
"query": "fender stratocaster",
"productType": "Electric Guitars",
"maxGuides": 20,
"useProxy": true
}
{
"guideIds": ["18677", "1404", "1021"],
"useProxy": true
}

Wide category sweep

{
"query": "gibson les paul",
"productType": "Electric Guitars",
"maxGuides": 200,
"useProxy": true
}

📥 Input

FieldTypeRequiredDefaultDescription
querystringXORFree-text search passed to Reverb's price-guide API. XOR with guideIds. Prefilled: fender stratocaster.
guideIdsstring[]XORExplicit Reverb price-guide IDs to fetch estimates for (skips the search stage).
productTypestringnoCase-insensitive filter on product_type (query mode only). E.g. Electric Guitars, Pedals.
maxGuidesintegerno20Cap on estimate rows emitted (1–200). The Actor over-fetches search results to hit this target after skipping guides without a published estimate.
useProxybooleannotrueRoute requests through Apify Proxy for IP rotation and stability.

Exactly one of query or guideIds must be provided.

📤 Output

One row per Reverb price-guide entry that has a published estimate. Field shapes match the table in the "What this scrapes" section above. Export to JSON, CSV, Excel, or XML from the Apify Console.

Example row (live run, 2026-06-01):

{
"guide_id": 18677,
"guide_title": "Fender Stratocaster 1979 Red",
"make": "Fender",
"model": "Stratocaster",
"year": "1979",
"finish": "Red",
"product_type": "Electric Guitars",
"estimate_low_amount": 935.0,
"estimate_low_cents": 93500,
"estimate_low_display": "$935",
"estimate_high_amount": 1320.0,
"estimate_high_cents": 132000,
"estimate_high_display": "$1,320",
"estimate_currency": "USD",
"marketplace_url": "https://reverb.com/marketplace?query=Fender+Stratocaster+1979+Red",
"scraped_at": "2026-06-01T06:03:40+00:00"
}

Guides that Reverb hasn't published an estimate for (roughly 20% of search results) are skipped cleanly — the Actor over-fetches search pages to compensate and still reach maxGuides rows.

💰 Pricing

This Actor is priced per-event — you pay only for results that land in your dataset.

EventPrice (USD)When charged
actor-start$0.05Once at the start of each run
result-row$0.005Per estimate row written to the dataset

A run of 20 guides (the default) costs $0.15 total. A full 200-guide sweep costs $1.05. The default maxGuides=20 keeps trial runs cheap.

Gear-pricing SaaS tools charge $50–200/month per seat for used-instrument valuation data. Reverb publishes no bulk export. This Actor is the only programmatic way to pull this signal at scale.

🚧 Limitations

  • One row per guide, not per transaction — Reverb retired its per-transaction public endpoint in 2026. The estimated value range is Reverb's current authoritative sold-data signal; individual transaction-level rows (sale date, condition, buyer-paid amount) are no longer available from any public Reverb API path.
  • ~20% of guides have no published estimate — Reverb only computes an estimate when enough recent sold data exists for that specific guide. Guides without estimates are skipped; the Actor over-fetches to compensate.
  • No individual condition tiers — Reverb's estimate is a single range across all conditions for that guide. Condition-stratified pricing requires downstream logic on your side.
  • Day-precision scraped_at — the estimate itself carries no timestamp from Reverb; scraped_at records when this Actor fetched the row.
  • Individual guide pages are gone — Reverb retired reverb.com/price-guide/guide/<id> pages (they 301 to a search landing). The marketplace_url column links to Reverb's marketplace search instead, which shows current live listings for the gear.
  • Generic queries may exhaust maxGuides quicklyquery=fender matches tens of thousands of entries; the Actor walks search pages until maxGuides rows have been emitted. Tighten with productType and a more specific query for targeted results.
  • Currency is whatever Reverb returns — most estimates are in USD; estimate_currency tells you which.

❓ FAQ

Q: Why did the output shape change from per-transaction to per-guide? Reverb retired the public /api/priceguide/{id}/transactions endpoint in 2026 — it now returns empty results for every guide. The estimated value range (fetched from Reverb's GraphQL endpoint) is the current authoritative sold-data signal Reverb publishes. We made the change in v0.3.0 rather than ship an Actor that emits zero rows.

Q: Is the estimated value range really based on sold listings? Yes — Reverb's own price-guide pages state: "We look at sold listings, which means that the value you see is based on how much gear in the same condition has sold for on Reverb recently." This reverb scraper fetches that same figure programmatically.

Q: Is there an official Reverb API for sold listings or price guide data? Reverb has no official public API for sold listing data or bulk price guide exports. Reverb's own documentation does not cover programmatic access to the price guide — no reverb api key, no OAuth, no documented endpoint. This Actor is the only programmatic route to Reverb sold listings at scale.

Q: What is "reverb data export" and how do I do it? Reverb offers no native bulk data export. You can't download reverb sold listings as CSV or JSON from the Reverb dashboard. This Actor is the reverb data export path: run it with your search terms or guide IDs and download the results as JSON, CSV, Excel, or XML from the Apify Console.

Q: How do I get estimates for a fixed list of gear items? Use guideIds mode. Supply the numeric guide IDs as strings. You can find a guide's ID from the guide_id field of any previous run, or by inspecting Reverb's price-guide search results.

Q: Why does maxGuides cap the output but the Actor sometimes fetches more pages? Reverb doesn't tell us upfront which guides have a published estimate. The Actor over-fetches search results — walking more guide entries than maxGuides — to ensure it reaches the requested count after skipping guides without estimates. Billing is still based only on rows actually emitted.

Q: What happens when zero estimates are found? The Actor exits with a non-zero status code and sets a clear status message (No estimate rows emitted — N guides inspected). You'll see it in the run summary. You will still be charged the actor-start fee.

Q: Can I poll a single guide repeatedly for price changes? Yes. Use guideIds mode with a single ID. The actor-start fee is $0.05 and the one row emitted costs $0.005 — about 5.5 cents per poll. Apify's Scheduler can automate this on any interval.

Q: Does the Actor de-duplicate across runs? No. Each run emits fresh rows from the current Reverb data. De-dup on guide_id downstream if you're accumulating results over time.

💬 Your feedback

This Actor is built and maintained by Devil Scrapes. If a Reverb search returns fewer rows than expected, if you notice the estimate shape has changed upstream, or if you need a feature (condition-tier breakdown, scheduled monitoring mode), open an issue on the Actor page and we'll patch it within a release cycle. The target blocks; we get back up.