Expert guidance for selling musical production equipment on Reverb.com using the reverb-mcp-server. Use this skill whenever the user wants to list gear on Reverb, price items for resale, manage orders, optimize listings, research market value of musical equipment, run a Reverb shop, handle offers/negotiations, find arbitrage deals, scan for underpriced listings, or asks anything about selling on Reverb. Also trigger when the user mentions "Reverb", "reverb.com", "sell my gear", "list my pedal/synth/guitar", "price check", "what's my gear worth", "find deals", "arbitrage", or "underpriced".
You have access to the reverb-mcp-server, which provides tools for managing a Reverb.com seller account. Tools are organized into groups:
Prerequisites: The user must have a Reverb Personal Access Token configured in .env. For testing, use REVERB_ENV=sandbox.
When the user wants to price an item:
search_sold_listings with the make and model to get recent sold prices.get_price_guide for Reverb's estimated value range.search_listings with state=live to see current competition.references/pricing_strategy.md for edge cases and advanced pricing tactics.Always present: median sold price, price range, number of competitors, recommended list price, and estimated net after fees.
When the user wants to list an item:
get_categories to resolve the correct category UUID.get_listing_conditions to resolve the condition UUID.[Brand] [Model] [Variant] [Color/Finish] [Year]. Keep it under 80 characters.create_listing with all resolved fields. Set offers_enabled=true by default.publish_listing.Read references/listing_optimization.md for title formulas, photo guidance, and category-specific tips.
When the user wants a status update or daily check-in:
get_orders_awaiting_shipment. List each order with item name and buyer.
get_negotiations. List pending offers with item name, offer amount, and listing price.get_messages with unread_only=true. List unread conversations.
When evaluating an incoming offer:
search_sold_listings for the item.To send an outgoing offer to a buyer (proactive offer): call send_direct_offer with listing_id and price. Optionally include shipping to offer free shipping as an incentive.
After an order is placed:
ship_order with carrier and tracking number. Set send_notification=true to email the buyer.reply_to_message.leave_feedback with a positive rating.get_order_payments and get_payout_line_items to log:
Most-used tools with their required parameters:
| Tool | Required Params | Notes |
|---|---|---|
search_sold_listings | query | — |
get_price_guide | query | — |
find_deals | query or category_uuid | min_discount_pct default 15, min_profit_usd default 20 |
create_listing | make, model, condition_uuid, price_amount, price_currency | — |
publish_listing | listing_id | — |
get_orders_awaiting_shipment | — | — |
ship_order | order_id, provider, tracking_number | — |
respond_to_offer | negotiation_id, action (+ counter_price if counter) | — |
get_messages | — | use unread_only=true |
If airtable-mcp-server MCP tools (mcp__airtable__*) are available, you can sync Reverb listings to an Airtable base for inventory and sales tracking.
Single table called "Listings" with these fields:
| Field | Airtable Type | Source |
|---|---|---|
| Title | Single line text (primary) | title |
| Reverb ID | Number | id |
| Make | Single line text | make |
| Model | Single line text | model |
| Year | Single line text | parsed from title |
| Category | Single line text | categories[0].name (requires per-listing fetch) |
| Condition | Single select | condition.display_name |
| Price | Currency (USD) | price.amount |
| Status | Single select | Draft / Live / Ended / Sold |
| Listed Date | Date | created_at |
| Published Date | Date | published_at |
| Sold Date | Date | manual or cross-referenced via orders |
| Reverb Slug | URL | https://reverb.com/item/{slug} |
mcp__airtable__list_bases to identify the target base, then mcp__airtable__list_tables to find or confirm the Listings table.find_my_listings with state=all and paginate through all pages.mcp__airtable__search_records with filterByFormula matching Reverb ID to check for an existing record before creating or updating.state.slug → Airtable Status (draft → Draft, live → Live, ended → Ended, sold → Sold). Build URL as https://reverb.com/item/{slug}.mcp__airtable__create_record for new items or mcp__airtable__update_records for existing ones.get_listing call per item, or fill it in manually.Two prompts are available for identifying pricing opportunities:
find_arbitrage_dealsUse when you want to buy underpriced gear and resell at market. Two modes:
query (e.g. "Roland JX-08"). Runs one shared sold comps search, fast.category_uuid (or category name; it resolves automatically). Scans newest listings in the category, per-item sold comps.Results come back in a single deals list. Each entry has a no_comps flag:
no_comps: false - compared against a price guide median. Has market_price, discount_pct, est_profit_usd. Sorted by profit.no_comps: true - no price guide median available (thin market). Shows the cheapest active listing for that model. market_price, discount_pct, est_profit_usd are null. Sorted by price after the comped deals.Tips:
condition= when you know the condition tier. Mixed-condition comps skew the median.no_comps: true entries are not arbitrage-qualified - use them as a price floor reference, then verify with search_sold_listings.references/arbitrage.md for fee math, thin market handling, and when to skip a deal.scan_my_listings_for_underpricingUse when you want to audit your own active listings. Flags listings priced more than min_gap_pct% (default 10%) below the median sold price, with a suggested reprice.
Tips:
category= to scope the scan when you have many listings to reduce first-run API call volume.Encode these into every interaction:
find_my_listings without state=all only returns live listings. Always default to state=all.inventory=0 on any listing ends it immediately regardless of other flags.reason=reverb_sale incurs a selling fee on the monthly bill.year field accepts fuzzy input: "1980s", "1979-1981", "mid 80s", "1959".publish=true can be included in the initial POST to skip the draft step — but prefer drafts for user review.inventory > 1.photo_upload_method: "override_position" when reordering images via PUT.