Reverb Music Gear and Sold Price Guide Scraper icon

Reverb Music Gear and Sold Price Guide Scraper

Scrape reverb.com music gear: guitars, amps, synths, pedals, drums and pro audio. Search live listings by brand, category, condition, price, year,…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

Reverb Music Gear and Sold Price Guide Scraper at a glance

Reverb Music Gear and Sold Price Guide Scraper is a ready-to-run Apify actor from abotapi for collecting ecommerce data. Its documented output includes type, title, change type (incremental mode), brand and model, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.00 per 1,000 results on the Apify Free plan and from $1.20 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Ecommerce
Pricing
$2.00 per 1,000 results (Free plan), from $1.20 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
38 options

Scrape reverb.com music gear: guitars, amps, synths, pedals, drums and pro audio. Search live listings by brand, category, condition, price, year, region and shipping, or paste links. Uniquely returns the sold Price Guide per gear model: median, low, high and quartile realised prices.

What Reverb Music Gear and Sold Price Guide Scraper can do

  • Realised sale prices, not just asking prices. An asking price tells you what a seller hopes for. This returns what buyers actually paid: median, low, high, 25th and 75th percentile, per condition, with the individual sales behind the numbers and their dates.
  • A deal rating on every live listing. Each listing is positioned against its own model's sold history and labelled below-market, at-market or above-market, with the exact percentage above or below the sold median.
  • Over 60 fields per listing including view and watcher counts, days on market, price drops, seller feedback and rating, seller location, per region shipping rates, return policy, and the canonical model id.
  • Three modes, one actor. Keyword search across live listings, Price Guide lookup by gear model, and paste anything: item links, price guide links, product links, shop links, brand links, marketplace search links, or bare listing ids.
  • Built for recurring monitoring. Incremental mode returns only what changed since the last run, so a daily watch on "1960s Stratocasters under $8,000" returns the new listings and the price drops instead of the same catalogue every day.
  • Filters that actually narrow. Category and price are re-checked against each listing's own data after the search, because the marketplace's own filters can otherwise let off-category or out-of-window rows through.

Choose what to collect

These inputs let you configure Reverb Music Gear and Sold Price Guide Scraper. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredChoose 'search' for keyword search across live listings with filters, 'price-guide' to look up gear models and their realised sale prices (median, range, per condition, over time), or 'url' to scrape pasted links.

Choices: search, price-guide, url

queriesarrayOne or more keywords. In search mode each keyword returns live listings; in Price Guide mode each keyword returns matching gear models with their sold-price statistics. Examples: 'Fender Stratocaster', 'Moog Subsequent 37', 'Shure SM57'.
urlsarrayMix freely: item links (reverb.com/item/), Price Guide or product links (reverb.com/price-guide/ or reverb.com/p/), shop links (reverb.com/shop/), brand links (reverb.com/brand/), marketplace search links (reverb.com/marketplace?query=...), or bare listing ids. A link that is not one of these is reported and skipped rather than guessed at.
makestringOnly return gear from this brand, for example 'Fender', 'Gibson', 'Moog' or 'Shure'. The name is matched against the marketplace's own brand list (capitalisation does not matter); a brand that does not exist stops the run with a clear message instead of searching everything. Applies to search mode and Price Guide mode.
categorystringOnly return gear in this category. Type a top-level category (accessories, acoustic-guitars, amps, band-and-orchestra, bass-guitars, dj-and-lighting-gear, drums-and-percussion, effects-and-pedals, electric-guitars, folk-instruments, home-audio, keyboards-and-synths, parts, pro-audio) or the name of any sub-category, for example 'Solid Body' or 'Electric Guitars / Solid Body'. A name shared by several categories (such as '12-String') must be typed with its full path. A category that does not exist stops the run with a clear message instead of searching everything. Applies to search mode and Price Guide mode. The source also relevance-matches nearby categories into its own results, so in search mode the actor additionally checks each listing's own top-level category and drops the ones that do not belong.
minYearintegerOnly return gear made in this year or later. Applies to search mode and Price Guide mode. Useful with the latest year for vintage windows, for example 1950 to 1969.
maxYearintegerOnly return gear made in this year or earlier. Applies to search mode and Price Guide mode.
Show 31 more inputs
More input fields
InputWhat it controls
conditionsarrayOnly return listings in these conditions. Pick several to combine them. Search mode only. Note the source answers an unknown condition with the WHOLE catalogue rather than an error, so a value it does not recognise stops the run instead of quietly returning everything.
minPriceintegerOnly return listings priced at or above this amount, in US dollars. Search mode only. The window is also re-checked against each listing's reported US dollar price, because the source applies it to the seller's own currency.
maxPriceintegerOnly return listings priced at or below this amount, in US dollars. Search mode only. The window is also re-checked against each listing's reported US dollar price, because the source applies it to the seller's own currency.
itemRegionstringOnly return listings whose seller is in this country. Search mode only.

Choices: , US, CA, GB, DE, FR, IT, ES, NL, SE, JP, AU, NZ, MX, BR

shipsTostringOnly return listings the seller will ship to this country. Search mode only.

Choices: , US, CA, GB, DE, FR, IT, ES, NL, SE, JP, AU, NZ, MX, BR

shopSlugstringOnly return listings from one shop, given as the shop handle in its address, for example 'guitar-sauce-italy' from reverb.com/shop/guitar-sauce-italy. Search mode only. To sweep a shop without setting a keyword, paste its shop link in URL mode instead.
handmadeOnlybooleanOnly return gear the seller has marked as handmade or custom built. Search mode only.
freeShippingOnlybooleanOnly return listings that ship free. Search mode only. A listing counts as free shipping when it quotes a zero rate to any destination it ships to.
preferredSellersOnlybooleanOnly return listings from sellers the marketplace has marked as preferred. Search mode only.
sortBystringOrdering asked of the source for a keyword search. Search mode only. Only orderings the source actually honours are offered here.

Choices: relevance, price-asc, price-desc, newest

includeSoldPriceGuidebooleanAttach what this gear has actually SOLD for: median, low, high, quartiles, a breakdown per condition, the average gap between asking and realised price, the recent individual sales, and a period-by-period history. In search and URL modes it also scores each live listing against that history (below market, at market, above market). Turn off for the cheapest run: Price Guide records then keep only the live-market snapshot (how many are listed used and new, and the lowest asking price).
fetchDetailsbooleanAdds view and watcher counts, seller location, shipping and return policies, barcode, videos and accepted payment methods to every listing. Off by default because the result page already carries title, brand, model, year, finish, condition, price, seller and photos. Turning on the Price Guide above reads the item page too, so switching this on as well costs nothing extra.
maxReviewsPerProductintegerOwner reviews (title, text, star rating, reviewer, date) attached to each Price Guide record as a reviews list, newest first. Set 0 to skip reviews. The ceiling of 1000 keeps one run bounded. Reviews add no charge of their own. In incremental mode the reviews list never decides UPDATED, so a changed review count or a failed review read does not create a billable row.
maxItemsintegerMaximum number of results returned across the whole run. This is the run's cap, up to 1,000,000. Use 0 for the largest allowed run (1,000,000).
maxPagesintegerMaximum result pages walked per keyword or link, at 50 results a page. 0 means no page limit: the run then stops only at Max results, or when the source runs out of results.
resumeFromRunIdstringPaste a previous run id or dataset id to continue a large crawl without returning, or charging for, results already collected there. Use this after an interrupted run. For recurring daily monitoring of the same search, use Incremental mode below instead.
incrementalModebooleanTurn this on for daily or recurring monitoring. The first run returns everything matching as NEW. Later runs compare every result against the last run (asking price, currency, condition, state and inventory, title, description, seller, shipping, photos and every other field of the record; price-guide statistics for Price Guide records) and return only NEW, UPDATED and REAPPEARED results, with an UPDATED row's changedFields naming what moved. Never compared: the scrape time, days on market, the views, watchers and offer-count counters, which tick on their own without a real change, and the reviews list of a Price Guide record (its read can fail or be limited, so it would bill rows for data that did not change); all of these stay in the rows. Time-zone offsets, the order of recent sales and the edge-of-window sold statistics (unless the model's sale count or latest sale date moved) are not counted as changes either. Use What counts as a change to compare price and availability only, and Ignore fields to exclude more. State is kept separately for each mode, keyword set and filter setup, so two different searches never mix.
stateKeystringOptional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently configured runs. Leave empty to let the actor derive a key from the mode, keywords, links and filters.
emitUnchangedbooleanOff by default. Turn on to also return results that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you want the full snapshot every run.
emitExpiredbooleanOff by default. Turn on to also return results that were present in a previous run but are no longer found, marked EXPIRED, which is how a listing selling or being withdrawn shows up. Only produced once a run has fully scanned the tracked search, never when Max results capped it or Resume was used. This returns, and bills, extra rows.
changeScopestringAll fields (default): any change to the record, except the always-ignored counters, returns an UPDATED row. Price and availability only: only price (asking, buyer, original and drop percent), currency, listing state, live flag inventory and shipping-rate (per region) changes (for Price Guide records, the sold median and average, ask average, used and new low price and listing counts) return an UPDATED row; changes to titles, descriptions, photos, shipping or seller details never do.

Choices: all, priceAndStock

compactUpdatesbooleanOff by default. When on, UPDATED and EXPIRED rows are short: ids, url, title, current price and availability, plus priceChanges with the old and new value of each moved price or availability field and variantChanges with the old and new rate of each shipping-rate region that changed. NEW rows always carry the complete record. A compact row carries no item-page or sold Price Guide data, so the detail surcharge is not billed for it.
expireAfterMissedScansintegerOnly used with Emit expired results. A result is marked EXPIRED only after it has been missing from this many complete scans in a row (default 1). Raise it (for example 3) so a listing that briefly drops out of the search is not reported as gone. A result that comes back resets the count. EXPIRED means the listing was not found again, it does not prove the listing sold or was withdrawn; use the state and inventory fields for availability.
ignoreFieldsForChangesarrayOptional. Field names to exclude from UPDATED change detection, in addition to the built-in handling (scrape time, days on market, views, watchers and offer count never trigger an UPDATED). Use this if another field turns out to be noisy for your search, for example photos. Use a dotted name such as priceGuide.recentSales to ignore a key inside a nested field. The ignored fields still appear in every returned row.
mcpConnectorsarrayOptionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API and Integrations, then select it here. Notion gets a rich page per item; other connectors get a best-effort write or digest. Leave empty to skip; this never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).
notionParentPageUrlstringURL or id of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on items written to each connector per run. Does not affect the dataset.
searchQueriesarrayAlias of Search queries, accepted so inputs written for other Reverb scrapers keep working.
conditionstringAlias of Conditions: a single condition (new, b-stock, used, non-functioning...).
maxListingsintegerAlias of Max items.
scrapeDetailsbooleanAlias of Fetch details.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

recordTypeType
titleTitle
changeTypeChange type (incremental mode)
makeBrand
modelModel
yearYear
conditionCondition
priceAsking price
currencyCurrency
guideMedianPriceSold median (guide)
priceVsGuidePercentVs sold median %
dealRatingDeal rating
Show 65 more fields
soldPriceMedianSold median
soldPriceLowSold low
soldPriceHighSold high
soldSalesTotalSales on record
soldSampleSizeSales sampled
lastSaleDateLast sale
usedListingsUsed listed now
usedLowPriceLowest used ask
shopNameSeller
sellerLocationSeller location
photoPhoto (image)
urlLink (link)
listingIdListing id
productIdModel id
scrapedAtScraped at (datetime)
finishFinish
originalPriceWas
priceDropPercentPrice drop %
categoriesCategories (array)
stateState
inventoryQuantity
offersEnabledTakes offers (boolean)
offerCountOffers
isAuctionAuction (boolean)
freeExpeditedShippingFree shipping (boolean)
shopSlugSeller handle
preferredSellerPreferred seller (boolean)
sellerFeedbackCountSeller feedback
sellerRatingPercentageSeller rating %
viewsViews
watchersWatchers
daysOnMarketDays listed
publishedAtListed at (datetime)
changedFieldsChanged fields (incremental mode) (array)
firstSeenAtFirst seen (incremental mode) (datetime)
lastSeenAtLast seen (incremental mode) (datetime)
shippingPolicyShipping policy
returnPolicyReturn policy
acceptedPaymentMethodsPayment methods
upcBarcode
videosVideos
descriptionDescription
reviews.reviewIdReview ID
reviews.titleReview title
reviews.bodyReview
reviews.ratingRating
reviews.reviewerReviewer
reviews.dateDate (datetime)
reviews.verifiedVerified
reviews.helpfulVotesHelpful votes
rootCategoryCategory
soldPriceP25Sold 25th pct
soldPriceP75Sold 75th pct
soldPriceAverageSold average
askPriceAverageAsking average
askToSoldDiscountPercentAsk to sold gap %
firstSaleDateFirst sale
byConditionBy condition (array)
priceHistoryPrice history (array)
recentSalesRecent sales (array)
newListingsNew listed now
newLowPriceLowest new ask
productRatingOwner rating
productReviewCountOwner reviews
reviewsReviews (array)

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "recordType": "listing",
  "listingId": "00000001",
  "sku": "REF-0001",
  "slug": "sample-brand-model-1965-sunburst",
  "url": "https://reverb.com/item/00000001-sample-brand-model-1965-sunburst",
  "comparisonShoppingPageId": "000000",
  "title": "Sample Brand Model 1965 Sunburst",
  "make": "Sample Brand",
  "brandSlug": "sample-brand",
  "model": "Model X",
  "year": "1965",
  "finish": "Sunburst",
  "rootCategory": "electric-guitars",
  "categories": [
    "Electric Guitars / Solid Body"
  ],
  "condition": "Very Good",
  "conditionSlug": "very-good",
  "price": 1200,
  "currency": "USD",
  "priceDisplay": "$1,200",
  "originalPrice": 1400,
  "priceDropPercent": 14,
  "state": "live",
  "inventory": 1,
  "offersEnabled": true,
  "offerCount": 0,
  "isAuction": false,
  "freeShipping": true,
  "freeExpeditedShipping": false,
  "shippingRates": [
    {
      "regionCode": "US",
      "price": 0,
      "currency": "USD"
    }
  ],
  "shopName": "Sample Music Shop",
  "shopSlug": "sample-music-shop",
  "preferredSeller": true,
  "sellerFeedbackCount": 120,
  "sellerRatingPercentage": 100,
  "sellerLocation": "Springfield, United States",
  "sellerCountryCode": "US",
  "views": 240,
  "watchers": 12,
  "daysOnMarket": 30,
  "publishedAt": "2026-01-01T00:00:00Z",
  "scrapedAt": "2026-01-01T00:00:00Z",
  "guideMedianPrice": 1350,
  "priceVsGuidePercent": -11.11,
  "dealRating": "below-market",
  "priceGuide": {
    "soldSalesTotal": 140,
    "soldSampleSize": 60,
    "currency": "USD",
    "soldPriceLow": 900,
    "soldPriceP25": 1100,
    "soldPriceMedian": 1350,
    "soldPriceP75": 1600,
    "soldPriceHigh": 2200,
    "soldPriceAverage": 1380,
    "askPriceAverage": 1490,
    "askToSoldDiscountPercent": 7.4,
    "firstSaleDate": "2024-03-01",
    "lastSaleDate": "2026-01-01",
    "byCondition": [
      {
        "condition": "Excellent",
        "salesCount": 22,
        "lowPrice": 1200,
        "medianPrice": 1450,
        "highPrice": 1700
      }
    ],
    "recentSales": [
      {
        "date": "2026-01-01",
        "condition": "Excellent",
        "askPrice": 1500,
        "soldPrice": 1425,
        "currency": "USD"
      }
    ],
    "priceHistory": [
      {
        "periodStart": "2025-12-01",
        "averageAskPrice": 1490,
        "averageSoldPrice": 1380
      }
    ],
    "liveMarket": {
      "usedListings": 34,
      "newListings": 6,
      "usedLowPrice": 900,
      "newLowPrice": 1899
    },
    "mixedCurrencySalesSkipped": 0
  }
}

Ways to use this data

  • Gear buyers and collectors: check whether an asking price sits below, at, or above what the exact model has actually sold for before making an offer.
  • Dealers and resellers: source stock across brands and categories, and price it against realised sale history instead of sticker prices.
  • Vintage gear researchers: track price trends by condition, year and category over time using the period by period sale history.
  • Marketplace monitoring tools: watch a saved search or a shop and get only new listings, price drops and Price Guide changes on a schedule.
  • Price comparison and alert apps: feed live asking prices plus realised sold prices into your own app, bot or spreadsheet.
  • Market analysts: build datasets of completed sales, ask to sold spreads and per condition pricing for a category of instruments.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does Reverb Music Gear and Sold Price Guide Scraper return?

The documented output for Reverb Music Gear and Sold Price Guide Scraper includes type, title, change type (incremental mode), brand, model, year, condition and asking price. Availability of each field depends on the source page and the selected mode.

How much does Reverb Music Gear and Sold Price Guide Scraper cost?

It costs $2.00 per 1,000 results on the Apify Free plan and from $1.20 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

Can I get only new or changed listings on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new, updated and reappeared results by default, and unchanged ones are not billed unless you turn emitUnchanged on. Leave Max results at 0 for monitoring runs so the walk is not cut short by unchanged listings.

Why did I get fewer results than Max results asked for?

A few reasons, all described under How to Use above. The category and price filters are re-checked against each listing's own data after the walk has already stopped reading pages, so a heavily filtered run can return fewer than maxItems even when later pages hold more matches. Each keyword only gets its own share of the cap, and an unused share is not passed on. Keywords that overlap in one run can take matches away from each other. In incremental mode, unchanged listings are suppressed but still count toward the walk's stop point. Raise maxItems, broaden the filters, or run overlapping keywords separately.

Why did incremental mode return more EXPIRED rows than Max results?

emitExpired rows come from comparing the whole tracked baseline against what a complete scan found this run, and that comparison is not capped by maxItems, only the live collection is. A state key watching a large catalogue that shrank a lot since the last run (for example after narrowing the filters) can return many more EXPIRED rows in one run than maxItems was set to. Keep emitExpired off if you need a hard ceiling on a single run's output.

Why did my run fail instead of returning an empty dataset?

If every request was refused, the run stops with a clear message so "nothing matched" is never confused with "nothing could be read". Run it again in a few minutes, or switch the connection if it keeps happening.

Ready to collect with Reverb Music Gear and Sold Price Guide Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.