Reverb Scraper icon

E-commerce

Reverb Scraper — Sold Listings & Price Guide

Pull Reverb's sold-listing-based estimated value range — low and high, in amount, cents and Reverb's own display string — for any musical-gear price guide, straight from the GraphQL node reverb.com/price-guide itself fires. Reverb retired its per-guide web pages and publishes no bulk export; this is one flat row per guide with make, model, year, finish and a live marketplace link.

Free Apify credit covers a first run. No credit card to try.

What this Actor scrapes

One row per Reverb price guide. Each row carries the estimated sold-based value range (low and high) alongside 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.

What we handle for you

  • 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."
  • Free-text search, one call — supply a query (e.g. fender stratocaster) and the Actor drives the same price-guide search Reverb's own site uses, reading each matching guide's estimated value range straight from the results. One row out per guide, no second round-trip.
  • Or skip the search entirely — supply explicit guideIds and the Actor goes straight to Reverb's per-guide estimate endpoint. Useful for incremental crawls, watch-lists, and price-monitoring pipelines.
  • maxGuides cap — generic queries like fender match thousands of guides; 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 (query=gibson les paul, maxGuides=200) 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.

Input

Paste this into the Apify Console, or send it as the run input over the API. Proxy settings are on by default; you rarely need to touch them.

FieldTypeRequiredWhat it does
query string no Free-text search passed to Reverb's price-guide search (e.g. fender stratocaster). Matches Reverb's model-family price guides (not individual listings), each with an estimated value range. Either query OR guideIds must…
guideIds array no Explicit Reverb price-guide entry IDs to drill into directly (skips the search stage). Each ID is fetched for its estimated value. Either query OR guideIds must be provided — not both.
productType string no Deprecated. Reverb's current search API no longer exposes a product-type field, so this filter is accepted for back-compat but ignored. Refine results by making the query more specific instead (e.g. fender precision…
maxGuides integer no Cap on how many price-guide estimate rows to emit. The Actor over-fetches search entries to reach this many rows after skipping guides without a published estimate. Range 1-200.
useProxy boolean no Route requests through Apify Proxy (BUYPROXIES94952). Recommended ON for stability. Disable only for debugging.
{
  "guideIds": [
    "1404",
    "1021"
  ],
  "maxGuides": 20,
  "useProxy": true
}

Output

One row per result, schema-validated before it is written. Export JSON, CSV, Excel or XML from the run, or read it over the API.

guide_idguide_titlemakemodelyearfinishproduct_typeestimate_low_amountestimate_low_centsestimate_low_displayestimate_high_amountestimate_high_centsestimate_high_displayestimate_currencymarketplace_urlscraped_at

{
  "guide_id": 126164,
  "guide_title": "Fender American Professional II Stratocaster",
  "make": "Fender",
  "model": "American Professional II Stratocaster",
  "year": null,
  "finish": null,
  "product_type": null,
  "estimate_low_amount": 868.0,
  "estimate_low_cents": 86800,
  "estimate_low_display": "$868",
  "estimate_high_amount": 1266.0,
  "estimate_high_cents": 126600,
  "estimate_high_display": "$1,266",
  "estimate_currency": "USD",
  "marketplace_url": "https://reverb.com/marketplace?query=Fender+American+Professional+II+Stratocaster",
  "scraped_at": "2026-07-11T08:03:07+00:00"
}

Pricing

EventPriceWhen
Actor start$0.20Once per run, covers warm-up and proxy session setup.
Result row emitted$0.0050Per result written to the dataset.

You pay only for results that land. Cap any run with maxTotalChargeUsd. See pricing & billing for worked examples.

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.
  • query mode returns model-family guides — Reverb's current search groups gear by model (e.g. Fender American Professional II Stratocaster), not by individual year/finish variant, and the estimate is the range across its used-condition tiers. year and finish are therefore null in query mode. For a specific year/finish variant, use guideIds mode with that guide's ID.
  • guide_id differs by mode — in query mode guide_id is the guide's Canonical Sell Page (CSP) ID; guideIds mode expects the legacy price-guide node ID. Reverb runs these as separate systems, so a query-mode guide_id cannot be fed back into guideIds mode.
  • 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 thousands of guides; the Actor walks search results until maxGuides rows have been emitted. Use a more specific query for targeted results.
  • Currency is whatever Reverb returns — most estimates are in USD; estimate_currency tells you which.
  • productType is accepted but ignored — Reverb's current search API exposes no category filter field. Refine results with a more specific query instead (e.g. fender precision bass instead of a category filter).

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 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. In v0.4.0, Reverb also retired the public REST price-guide search, so query mode was rewired to the same search Reverb's own price-guide page runs — no change to the output columns.
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 legacy numeric price-guide IDs as strings. Note that guideIds mode uses Reverb's legacy price-guide node IDs — a different ID space from the CSP IDs that query mode returns in guide_id, so the two aren't interchangeable. Find legacy IDs from earlier guideIds-mode runs or from Reverb's price-guide URLs.
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 run finishes SUCCEEDED with a clear status message (No estimate rows emitted — N guides inspected) — a search that ran and matched nothing isn't a failure. You'll see it in the run summary. You're still charged the actor-start fee (the search itself ran), but not the per-row result-row fee since nothing was emitted.
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.20 and the one row emitted costs $0.005 — about 20.5 cents per poll. Apify's Scheduler can automate this on any interval.

Ready to run it?

Open the listing on Apify, paste the input above, and watch rows land. If it ever breaks, it is our problem before it is yours.

Read more

Articles about this Actor

Related Actors

Teams that run this also run