Reverb Musical Instruments Marketplace Scraper avatar

Reverb Musical Instruments Marketplace Scraper

Pricing

Pay per event

Go to Apify Store
Reverb Musical Instruments Marketplace Scraper

Reverb Musical Instruments Marketplace Scraper

Search and export active Reverb musical gear listings with prices, condition, seller, inventory, shipping, timestamps, and photos.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 hours ago

Last modified

Categories

Share

Search active Reverb musical-gear inventory and export clean listing records.

This Apify Actor turns keywords or public Reverb marketplace search URLs into analysis-ready rows with prices, condition, make, model, seller shop, inventory, shipping, timestamps, descriptions, and photos.

It is built for recurring price monitoring, sourcing, valuation, and inventory research without browser automation.

What does this Reverb scraper do?

The Actor queries Reverb's anonymous marketplace listings surface.

It can:

  • search one or many instrument keywords;
  • reuse a public reverb.com/marketplace search URL;
  • filter used or new inventory;
  • apply minimum and maximum buyer prices;
  • sort by relevance, publication time, or price;
  • target a shipping destination;
  • follow pagination up to an exact result limit;
  • deduplicate overlapping searches by stable listing ID;
  • export JSON, CSV, Excel, XML, or RSS through Apify datasets.

The default dataset contains one row per active listing.

Sold-listing history and Reverb price-guide estimates are outside this Actor's scope.

Who is it for?

Music retailers

Take scheduled snapshots of competing shops, models, conditions, and asking prices.

Gear resellers and sourcing teams

Find fresh used inventory inside a target price range and route it to a spreadsheet or alerting workflow.

Valuators and appraisers

Collect current asking-price comparables with make, model, year, finish, and condition context.

Market researchers

Build repeatable category or keyword samples without manually copying marketplace cards.

Developers and data teams

Feed normalized Reverb records into a warehouse, dashboard, matching model, or internal API.

Why use this Actor?

  • HTTP-only extraction: no browser startup or image downloads are required.
  • Two input routes: use buyer keywords or preserve a Reverb marketplace search URL.
  • Exact limits: maxItems applies across every source in a run.
  • Stable deduplication: overlapping searches do not emit the same listing twice.
  • Typed output: money, booleans, arrays, timestamps, and nested shipping fields remain structured.
  • Useful descriptions: both plain text and source HTML are included.
  • Bounded recovery: transient timeouts, rate limits, and temporary server failures use conservative backoff.

What data can I extract?

FieldMeaning
listingIdStable numeric Reverb listing ID
urlCanonical public item URL
apiUrlPublic JSON detail endpoint
titleSeller's listing title
make, modelReverb make and model fields
year, finishSeller-provided year and finish
condition, conditionSlugDisplay and normalized condition
price, currencyStructured displayed buyer price
displayPriceReverb-formatted price string
listingCurrencySeller's original currency when available
buyerPrice, buyerCurrencyBuyer-facing converted price
sellerShopReverb shop name
descriptionPlain-text description
descriptionHtmlOriginal description HTML
inventory, hasInventoryStock information
sku, stateSeller SKU and listing state
offersEnabled, auctionSale-format flags
categoriesReverb category UUIDs
shippingLocal pickup, US shipping, and US rate
photosFull or large photo URLs
createdAt, publishedAtSource timestamps
searchQuery, sourceUrlSearch provenance
scrapedAtExtraction timestamp

Fields can be null when a seller or Reverb does not provide them.

How to scrape Reverb listings

  1. Open the Actor input page.
  2. Add one or more search terms, or paste a Reverb marketplace URL.
  3. Choose condition, price, sorting, and destination filters if needed.
  4. Set maxItems for the total unique listings required.
  5. Start the run.
  6. Open the Reverb listings dataset view.
  7. Export the rows or connect the dataset to your downstream system.

Start with 25 results while confirming that the query matches your workflow.

Increase the limit for scheduled inventory snapshots after checking output quality.

Input parameters

searchTerms

An array of non-empty Reverb searches.

Examples:

  • Fender Jazzmaster
  • Gibson Les Paul
  • Moog synthesizer
  • vintage tube amplifier

At least one searchTerms value or startUrls entry is required.

startUrls

Public URLs with this shape:

https://reverb.com/marketplace?query=Moog%20synthesizer&condition=used

The Actor forwards supported query, condition, price, sorting, destination, and category parameters.

Individual /item/ detail URLs are not accepted.

Shared filters

InputTypeDefaultNotes
conditionstringallall, used, or new
minPricenumbernoneNon-negative buyer price
maxPricenumbernoneMust be at least minPrice
sortstringrelevancerelevance, published_at, or price
orderstringdescdesc or asc
shipsTostringnoneUppercase country code such as US
maxItemsinteger251 to 10,000 unique listings

Shared filters override matching values in each marketplace URL so every source follows the same run scope.

Example input: used Fender Jazzmasters

{
"searchTerms": ["Fender Jazzmaster"],
"condition": "used",
"sort": "published_at",
"order": "desc",
"maxItems": 25
}

Example input: recurring retailer snapshot

{
"searchTerms": ["Gibson Les Paul"],
"condition": "used",
"minPrice": 500,
"maxPrice": 2500,
"sort": "published_at",
"order": "desc",
"shipsTo": "US",
"maxItems": 200
}

Example output

The values below illustrate the current output shape; live listings change continuously.

{
"listingId": 12345678,
"url": "https://reverb.com/item/12345678-example-electric-guitar",
"apiUrl": "https://reverb.com/api/listings/12345678-example-electric-guitar",
"title": "Example electric guitar in sunburst",
"make": "Example Brand",
"model": "Model 60",
"year": "2020",
"finish": "Sunburst",
"condition": "Excellent",
"conditionSlug": "excellent",
"price": 1299.99,
"currency": "USD",
"displayPrice": "$1,299.99",
"listingCurrency": "USD",
"buyerPrice": 1299.99,
"buyerCurrency": "USD",
"sellerShop": "Example Music Shop",
"description": "Well-maintained instrument with a padded case.",
"inventory": 1,
"hasInventory": true,
"sku": "SKU-EXAMPLE-01",
"state": "live",
"offersEnabled": true,
"auction": false,
"categories": ["00000000-0000-4000-8000-000000000001"],
"shipping": { "local": true, "us": true, "usRate": 35 },
"photos": ["https://rvb-img.reverb.com/i/example.jpg"],
"createdAt": "2025-01-15T12:00:00-05:00",
"publishedAt": "2025-01-16T09:30:00-05:00",
"searchQuery": "example electric guitar",
"sourceUrl": "https://reverb.com/marketplace?query=example%20electric%20guitar",
"scrapedAt": "2025-01-20T14:30:00.000Z"
}

How much does it cost to scrape Reverb musical instrument listings?

Pay-per-event pricing has two parts:

  • $0.005 per run for the start event;
  • a tiered item event for each saved listing.
Apify tierPrice per listing
Free$0.000041071
Bronze$0.000035714
Silver$0.000027857
Gold$0.000021429
Platinum$0.000014286
Diamond$0.000010000

Free-tier examples:

  • 25 listings: about $0.00603
  • 100 listings: about $0.00911
  • 1,000 listings: about $0.04607

No listing event is charged for duplicates, rejected rows, or empty result pages.

Platform usage and final charge details remain visible on each Apify run.

Scheduling price and inventory monitoring

Use Apify Schedules to run the same input hourly, daily, or weekly.

A practical retailer workflow is:

  1. search one model family;
  2. filter to the condition and price band you stock;
  3. sort newest first;
  4. save 100–500 rows;
  5. export the dataset to Google Sheets or a webhook;
  6. compare stable listingId values with the prior snapshot.

The Actor returns snapshots, not a built-in historical database.

Your downstream workflow should store prior runs when change history matters.

Integrations

Dataset results work with:

  • Google Sheets;
  • Slack and email automation;
  • Make;
  • Zapier;
  • webhooks;
  • Python and JavaScript clients;
  • BI tools and warehouses;
  • Apify Schedules and Actor-to-Actor pipelines.

Use listingId as the preferred join and deduplication key.

Use publishedAt and scrapedAt separately: one is source freshness, the other is collection time.

Run with the Apify API using cURL

Replace YOUR_TOKEN with an Apify API token.

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~reverb-musical-instruments-marketplace-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"searchTerms": ["Fender Jazzmaster"],
"condition": "used",
"maxItems": 25
}'

For production, pass tokens through environment variables instead of source code.

Run with JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor(
'automation-lab/reverb-musical-instruments-marketplace-scraper'
).call({
searchTerms: ['Gibson Les Paul'],
condition: 'used',
minPrice: 500,
maxPrice: 2500,
maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Run with Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor(
"automation-lab/reverb-musical-instruments-marketplace-scraper"
).call(run_input={
"searchTerms": ["Moog synthesizer"],
"condition": "used",
"maxItems": 50,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

Use with MCP and AI agents

Add the Actor to Claude Code:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/reverb-musical-instruments-marketplace-scraper"

Claude Desktop, Cursor, and VS Code setup

Claude Desktop, Cursor, and VS Code can use the same remote MCP configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/reverb-musical-instruments-marketplace-scraper"
}
}
}

Example prompts:

  • "Find 50 recently published used Fender Jazzmasters on Reverb."
  • "Export Moog synthesizer listings and group them by condition and price."
  • "Collect Gibson Les Paul inventory between $500 and $2,500 that ships to the US."

Performance and limits

The Actor requests up to 50 marketplace rows per page.

A small direct-HTTP run normally completes quickly and fits the 256 MB memory configuration.

Large limits require more pagination and increase runtime linearly.

Reverb can change its anonymous API, filters, field availability, or anti-automation controls.

Transient 429 and 5xx responses are retried with bounded exponential backoff.

Stable authorization errors, malformed inputs, and unexpected response shapes fail the run instead of returning a misleading empty dataset.

Data quality notes

  • Prices are asking prices, not completed-sale prices.
  • Currency conversion is controlled by Reverb and can differ from the seller's listing currency.
  • Seller descriptions may contain formatting or imperfect text encoding.
  • Category values are UUIDs because that is what the listings response exposes.
  • Shipping fields do not guarantee delivery eligibility at checkout.
  • Inventory can be absent or stale when sellers do not maintain it.
  • Listings can change or disappear after collection.

Responsible use and legality

This Actor collects publicly accessible marketplace listing data.

You are responsible for how you use, retain, and share the results.

Review Reverb's current terms, applicable database rights, privacy rules, and local law for your use case.

Do not use the Actor to harass sellers, bypass access controls, republish protected images or descriptions without permission, or make deceptive valuation claims.

Keep collection frequency and volume proportionate to a legitimate business or research need.

Troubleshooting

The Actor says an input source is required

Add at least one non-empty searchTerms value or one valid https://reverb.com/marketplace?... entry in startUrls.

A URL is rejected

Only Reverb marketplace search URLs are supported.

Paste /marketplace URLs, not product /item/ pages or unrelated domains.

The dataset is empty

Open the same query on Reverb and check whether active inventory exists.

Try removing a narrow condition, destination, or price filter.

A successful empty run is expected for a query with no live matches.

A run fails with an upstream HTTP error

Check the run log for the status and retry count.

Retry later if Reverb is temporarily unavailable.

Do not repeatedly launch identical runs during an extended source outage.

I received fewer rows than maxItems

The source may have fewer unique matching listings.

Overlapping searches are deduplicated, so their combined raw total can exceed the saved total.

These Actors do not replace Reverb marketplace inventory extraction; use them only when the wider music-data workflow needs those sources.

FAQ

Does it scrape sold Reverb listings?

No. It exports active marketplace inventory and asking prices.

Does it require a Reverb login or API key?

No. The current implementation uses an anonymous listings JSON surface.

Does it use residential proxies?

No automatic proxy or browser mode is enabled.

Can I search multiple models in one run?

Yes. Add multiple searchTerms values; the global maxItems cap and deduplication apply across all of them.

Can I paste category URLs?

Paste public /marketplace search URLs with their supported category query parameters.

Other Reverb page paths are rejected rather than silently broadening the search.

Can I download the photos?

The dataset includes source photo URLs but the Actor does not download image binaries.

Can I use the results for appraisal?

The records can support comparable-listing research, but asking prices are not completed sales and are not a professional valuation on their own.

How do I keep historical snapshots?

Schedule runs and persist each default dataset in your warehouse, spreadsheet, or storage system.

Join snapshots on listingId to identify additions, removals, and price changes.