This skill should be used when the user asks to "search Facebook Marketplace", "find deals on Marketplace", "compare marketplace listings", "find used products", "search for deals", "find items to flip", "marketplace arbitrage", "resell for profit", "check marketplace prices", "browse marketplace near me", or "show me a dashboard of marketplace deals". Also covers mentions of secondhand goods, used electronics, local marketplace shopping, price comparisons, or buying items to resell. Supports both personal deal-finding and resale arbitrage workflows.
From marketplace-scoutnpx claudepluginhub brightops-ai/brightopsai-plugins-official --plugin marketplace-scoutThis skill is limited to using the following tools:
assets/dashboard/eslint.config.jsassets/dashboard/index.htmlassets/dashboard/package.jsonassets/dashboard/src/App.tsxassets/dashboard/src/components/DetailPanel.tsxassets/dashboard/src/components/ErrorBoundary.tsxassets/dashboard/src/components/GradeBadge.tsxassets/dashboard/src/components/Header.tsxassets/dashboard/src/components/ListingCard.tsxassets/dashboard/src/components/ListingGrid.tsxassets/dashboard/src/components/ListingTable.tsxassets/dashboard/src/components/NavTabs.tsxassets/dashboard/src/components/SearchTabs.tsxassets/dashboard/src/components/Sidebar.tsxassets/dashboard/src/components/StatsBar.tsxassets/dashboard/src/components/ViewToggle.tsxassets/dashboard/src/hooks/useListings.tsassets/dashboard/src/hooks/useTheme.tsassets/dashboard/src/main.tsxassets/dashboard/src/styles/global.cssGuides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Details PluginEval's skill quality evaluation: 3 layers (static, LLM judge), 10 dimensions, rubrics, formulas, anti-patterns, badges. Use to interpret scores, improve triggering, calibrate thresholds.
A marketplace research assistant that searches Facebook Marketplace, analyzes listings against fair market prices, grades them A+ through F, saves results to CSV, and launches an interactive dashboard.
references/grading-algorithm.md — Full grading weights, formulas, red flag definitions, and grade boundariesreferences/resale-arbitrage.md — Complete resale/flip mode: profitable categories, eBay cross-referencing, modified grading weightsreferences/shipping-estimates.md — Shipping cost table by item category and eBay fee calculationsreferences/image-extraction.md — Playwright code pattern for extracting product images from listing pagesreferences/dashboard-guidelines.md — Accessibility, styling, and responsive rules for dashboard modificationsexamples/sample-output.csv — 3-row sample demonstrating the 37-column CSV schema with proper escaping, JSON-in-CSV, and signed percentagesexamples/sample-searches.json — Sample search index entry showing the expected formatThe assets/dashboard/ directory contains a complete Vite + React + TypeScript dashboard application. On first run, if no dashboard/ directory exists in the working directory, scaffold it by copying assets/dashboard/ to ./dashboard/ and running npm install. On subsequent runs, just update the data files and tell the user to refresh.
Ask the user (one at a time via AskUserQuestion):
Parse the first answer into separate search terms by splitting on commas.
Navigate to https://www.facebook.com/marketplace/ using Playwright. Take a snapshot. If a login form appears, tell the user to log in manually in the Playwright browser and confirm when ready.
For each search term:
https://www.facebook.com/marketplace/search/?query={encoded_search_term}&exact=falseFor each unique product type, use WebSearch and WebFetch:
"{product}" sold site:ebay.com and "{product}" price site:swappa.com — extract low/high/median prices"{product}" site:apple.com/shop/refurbished (or manufacturer refurbished)"{product}" buy official site — get retail URL and price"{product}" review site:wirecutter.com OR site:tomsguide.com OR site:rtings.com — get URL and scoreSort listings by price attractiveness. Deep-dive priority:
For each deep-dive listing:
Image extraction — save a product photo locally for each listing. Facebook CDN URLs expire quickly, so images must be downloaded during the scrape and saved to ./data/images/.
For each listing page already open in Playwright:
Extract a product image per listing and save to ./data/images/{listing_id}.jpg. Set image_url in the CSV to /data/images/{listing_id}.jpg. Leave image_url empty if no image can be extracted — the dashboard shows a styled placeholder with the search term. See references/image-extraction.md for the browser code pattern and fallback selectors.
Anti-detection: wait 2-5s between listings, 5-15s pause every 5 listings.
Consult references/grading-algorithm.md for the full grading algorithm. Apply the five weighted categories (Price Value 35%, Seller Trust 25%, Listing Quality 20%, Red Flags 15%, Condition vs Price 5%) and compute the final grade.
For resale arbitrage mode, consult references/resale-arbitrage.md for modified grading weights that prioritize flip profitability, and references/shipping-estimates.md for shipping cost estimates and eBay fee calculations.
Grading output rules:
GradeLetter union: A+, A, B, C, D, F. Never output grade X or any other value.F with a red flag explanation (e.g. "Specs unverified — graded conservatively as F"). Do not use a placeholder grade.grade_breakdown must be a JSON object with exactly 5 string fields: priceValue, sellerTrust, listingQuality, redFlags, conditionConsistency. Each value must be a single letter grade (A+, A, B, C, D, or F) as a string — never a number, array, or nested object.Generate timestamped filename: marketplace_results_{YYYY-MM-DD_HH-mm}.csv
Write to ./data/{filename} with columns:
id,search_term,title,price,market_price_low,market_price_high,market_price_median,price_vs_market,grade,grade_breakdown,summary,condition,seller_name,seller_rating,seller_reviews,seller_account_age,seller_response_time,location,distance,description,photo_count,photos_original,red_flags,listing_url,listing_age,vendor_url,vendor_price,review_url,review_score,shipping_estimate_low,shipping_estimate_high,ebay_fees,net_profit_low,net_profit_high,roi_low,roi_high,platform,image_url,date_scraped,search_location,search_radius
See examples/sample-output.csv for the expected format. Rules:
grade_breakdown is a JSON string with exactly 5 fields (see Step 6 grading output rules)red_flags is comma-separatedprice_vs_market is a signed integer percentage (negative = below market)platform column with "facebook" or "ebay" — the dashboard reads this field directly and must not infer platform from URL parsingprice, market_price_low, market_price_high, market_price_median, vendor_price, shipping_estimate_low, shipping_estimate_high, ebay_fees, net_profit_low, net_profit_high) empty — use 0 for unknown valuesshipping_estimate_low, shipping_estimate_high, ebay_fees, net_profit_low, net_profit_high, roi_low, and roi_high columns with real calculated values — the dashboard should not re-derive theseGradeLetter set (A+, A, B, C, D, F) in the grade column — never X or other valuesUpdate ./data/searches.json (create if missing) — append a new entry:
{
"id": "YYYY-MM-DD_HH-mm",
"timestamp": "ISO 8601",
"label": "Short summary of search terms",
"searchTerms": ["term1", "term2"],
"location": "City, ST",
"radius": 25,
"maxPrice": null,
"csvFile": "marketplace_results_YYYY-MM-DD_HH-mm.csv",
"listingCount": 32,
"gradeDistribution": {"A": 3, "B": 11, "C": 11, "D": 3, "F": 4}
}
Copy both files to ./dashboard/public/data/ and maintain latest.csv as a copy of the newest CSV.
Check if the dashboard exists at ./dashboard/. If not, scaffold it from the plugin's assets/dashboard/ directory:
cp -r "${CLAUDE_PLUGIN_ROOT}/skills/marketplace-scout/assets/dashboard/" ./dashboard/
cd dashboard && npm install
Check if the dev server is already running on port 5173. If running, tell the user to refresh. If not:
cd dashboard && npm run dev
Summarize findings: total listings per search term, grade distribution, top 3 deals with grades and prices, critical red flags, and changes from prior searches if applicable.
When modifying the dashboard, follow the compatibility rules in references/dashboard-guidelines.md.
searches.json has valid JSON before appending.assets/dashboard/ on first run. Never overwrite an existing dashboard directory — the user may have customized it.