From marketplace-lister
Identify items from photos, research pricing, and generate multi-platform listings for FB Marketplace, Mercari, and eBay (with full API publish support for eBay)
npx claudepluginhub infiquetra/infiquetra-claude-plugins --plugin marketplace-listerThis skill uses the workspace's default tool permissions.
Turn photos into ready-to-post listings for Facebook Marketplace, Mercari, and eBay. Claude identifies items using native vision, researches pricing via WebSearch, selects platforms, and generates optimized content for each platform. eBay listings can be published programmatically via the eBay API.
Guides 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.
Automates semantic versioning and release workflow for Claude Code plugins: bumps versions in package.json, marketplace.json, plugin.json; verifies builds; creates git tags, GitHub releases, changelogs.
Turn photos into ready-to-post listings for Facebook Marketplace, Mercari, and eBay. Claude identifies items using native vision, researches pricing via WebSearch, selects platforms, and generates optimized content for each platform. eBay listings can be published programmatically via the eBay API.
python3 plugins/marketplace-lister/skills/marketplace-list/scripts/marketplace_client.py <command> [args]
When scanning reveals loose photos (not in subfolders), run inbox grouping first:
python3 marketplace_client.py scan
If loose_count > 0, run:
python3 marketplace_client.py group
The group command returns proposed item groupings based on filename sequence gaps (gap โฅ 5 between IMG numbers = likely new item).
Present to user for confirmation:
I found 14 loose photos and grouped them into 3 items:
๐ Group 1 (IMG_2670โ2672): 3 photos โ appears to be a network router
๐ Group 2 (IMG_2673โ2676): 4 photos โ appears to be server rack rails
๐ Group 3 (IMG_2677โ2683): 7 photos โ appears to be a mix (split?)
Does this grouping look right? I can adjust any group before creating folders.
View the first photo of each group to visually confirm the grouping. If a group looks like two items, suggest splitting it.
After user confirms, create subfolders for each group:
python3 marketplace_client.py create-folder --name <slug> --photos IMG_2670.JPG,IMG_2671.JPG,IMG_2672.JPG
Run create-folder once per group. Use a descriptive slug (e.g., router, rack-rails, item-3). After creating folders, proceed to Step 1.
Determine how the user is providing items:
A. Photos pasted directly in conversation โ Skip to Step 3 (identify immediately)
B. User points to a specific folder โ Run scan --path <folder>, then Step 3
C. "Process inbox" / no path given โ Run scan on default inbox:
python3 marketplace_client.py scan
Show results and ask user which item(s) to process. If inbox is empty and no loose photos, say so and stop.
Use the Read tool to view each image file in the folder. Claude's native vision handles HEIC, JPG, PNG, and WEBP without conversion.
python3 marketplace_client.py photos --folder <path>
Read each returned path using the Read tool.
Analyze all photos and identify:
Present to user for confirmation:
"I see a [Item Name] in [Condition] condition. [One sentence of key details]. Estimated weight: ~[N] lbs. Is that correct?"
If user corrects โ update identification. If truly unidentifiable โ run:
python3 marketplace_client.py unidentified --source <folder>
Then ask user to add more photos or a description.
Use WebSearch to research market prices:
"[item name] used price site:ebay.com sold" โ actual transaction prices"[item name] Facebook Marketplace Indianapolis" โ local market"[item name] new price" โ new price anchor (ceiling for used)Synthesize into 4-tier pricing:
| Tier | Target | Strategy |
|---|---|---|
| Quick Sale | 20-30% below fair market | Sells in 24-48 hours |
| Fair Market | Based on eBay sold + local FB comps | Recommended start, sells in 3-7 days |
| Above Market | 10-15% above fair market | Patient seller, 1-2 weeks |
| Maximum Realistic | Highest justifiable | Perfect condition premium |
Indianapolis adjustment: Prices typically run 10-15% below coastal markets for FB listings.
Shipping cost estimate: Based on estimated item weight:
Present pricing tiers with reasoning. Ask user to confirm or adjust before proceeding.
Using references/platform-selection.md, recommend which platform(s) to list on:
Ask yourself:
eBay decision: Recommend eBay when the item has a known brand/model, benefits from the widest buyer pool, and is worth the ~13.25% fee. Brand-name electronics, tools, collectibles with MPN โ strong eBay candidates.
Ship vs. Local:
Price adjustments:
Present recommendation:
Platform recommendation:
- โ
Facebook Marketplace ($70) โ local pickup, no fees
- โ
Mercari ($78) โ nationwide buyers, 10% fee (nets same as FB)
- โ
eBay ($80) โ global buyers, API publish, 13.25% FVF (nets ~$69)
- ๐ฆ Shipping: 3 lbs estimated โ USPS Ground Advantage via Pirate Ship (~$7โ9)
This is a Cisco networking switch โ strong eBay demand from home lab buyers.
I recommend all three platforms.
Does this work, or would you prefer to skip any?
Produce optimized listings for each recommended platform.
TITLE: [Brand] [Model] [Key Spec] - [Condition] (max 100 chars)
PRICE: $[fair_market]
CATEGORY: [FB Marketplace category]
CONDITION: [New/Like New/Good/Fair/Poor]
LOCATION: Indianapolis, IN
DESCRIPTION:
[2-4 paragraphs. Lead with what it is and why someone wants it.
Include key specs. End with pickup/payment logistics.]
Cash or Venmo. Pickup in [neighborhood], Indianapolis. No holds without deposit.
TITLE: [keyword-dense, 80 char max โ pack brand/model/spec]
PRICE: $[mercari_price]
CATEGORY: [Mercari category]
CONDITION: [same condition value]
SHIPPING: Prepaid label โ [carrier, estimated cost]
DESCRIPTION:
[1,000 char max. Specs first. No markdown renders. End with 1-3 hashtags.]
#[keyword] #[keyword] #[keyword]
Key differences:
TITLE: [keyword-dense, 80 char max โ brand/model/MPN/key spec/condition keyword]
PRICE: $[ebay_price] โ FB price รท 0.87
CATEGORY: [eBay category name]
CONDITION CODE: [1000/1500/4000/5000/6000/7000]
FORMAT: Fixed Price (or Auction if vintage/collectible/uncertain value)
LISTING DURATION: Good 'Til Cancelled (or 7-day for auction)
ITEM SPECIFICS:
Brand: [Brand]
Model: [Model]
MPN: [Part number if known]
[other category-relevant specifics]
DESCRIPTION (HTML):
<div style="font-family: Arial, sans-serif; max-width: 700px;">
<h2>[Brand] [Model] โ [Condition]</h2>
<h3>What You're Getting</h3>
<p>[2-3 sentences: what it is, why someone wants it]</p>
<h3>Specifications</h3>
<ul>
<li><strong>Brand:</strong> [Brand]</li>
<li><strong>Model:</strong> [Model]</li>
[key specs as li items]
</ul>
<h3>Condition Details</h3>
<p>[Specific condition notes โ mention cosmetic issues, confirm functionality]</p>
<h3>Shipping</h3>
<p>Ships within 1 business day. Carefully packaged.</p>
<h3>Returns</h3>
<p>30-day returns accepted.</p>
</div>
Key differences from other platforms:
references/ebay-fields.md)Also generate:
Print full listing in conversation for user review.
After generating the listing but before saving, review it against references/listing-improvement-checklist.md.
Check for:
Present only real suggestions (skip checklist items where listing is already good):
## Suggested Improvements
Before I save this listing, here are a few suggestions:
๐ธ **Photos:**
1. Add a photo with the unit powered on (LEDs lit) โ shows it works
2. Move the model label close-up to position 3 (builds trust)
โ๏ธ **Description:**
1. Add rack depth compatibility note โ buyers always ask
2. Add "home lab" to Mercari title โ that community searches for it
Apply these improvements? [Yes, all / Pick which ones / Skip]
Wait for user response before proceeding. Apply any approved changes.
Organize the folder:
python3 marketplace_client.py organize --source <inbox-folder-name> --name <item-slug>
Use concise, searchable slug: dewalt-drill-set, cisco-sg300-switch, yeti-tundra-45
Write the listing file (pipe JSON via stdin):
echo '<listing-json>' | python3 marketplace_client.py listing --folder <organized-folder-path>
The JSON schema for the listing command:
{
"title": "Brand Model Key Spec - Condition",
"mercari_title": "Brand Model KeySpec Keyword2 Good",
"ebay_title": "Brand Model KeySpec MPN Good Keyword",
"category": "Electronics > Networking",
"mercari_category": "Electronics > Networking Equipment",
"ebay_category": "Switches & Hubs",
"condition": "Good",
"condition_code": 5000,
"description": "Full FB description text...",
"mercari_description": "Spec-forward Mercari description... #networking #cisco",
"ebay_description": "<div style=\"font-family:Arial\"><h2>Cisco SG300-28</h2><ul><li><strong>Ports:</strong> 28 Gigabit</li></ul><p>Condition: Good. Minor cosmetic wear only.</p></div>",
"location": "Indianapolis, IN",
"platforms": ["fb", "mercari", "ebay"],
"listing_format": "fixed_price",
"listing_duration": "GTC",
"item_specifics": {
"Brand": "Cisco",
"Model": "SG300-28",
"MPN": "SG300-28-K9-NA",
"Number of Ports": "28"
},
"ebay_shipping": "calculated",
"return_policy": "30_day_free",
"pricing": {
"quick_sale": 55,
"fair_market": 70,
"above_market": 80,
"maximum": 90,
"mercari_price": 78,
"ebay_price": 80,
"reasoning": "eBay sold comps show $65-85 for Good condition"
},
"shipping": {
"estimated_weight_lbs": 3.0,
"recommended_carrier": "USPS Ground Advantage via Pirate Ship",
"estimated_cost": "~$8-10",
"packaging": "Medium box, bubble wrap around unit, kraft paper fill",
"ship_or_local": "Both โ item is light enough to ship profitably"
},
"strategy": [
"List Thursday for maximum weekend traffic",
"Mention home lab use in Mercari title โ that community pays full price"
],
"photo_coaching": [
"Add a photo with LEDs lit to show it powers on",
"Include a close-up of the rear ports"
],
"specs": {
"Brand": "Cisco",
"Model": "SG300-28",
"Ports": "28 ร Gigabit",
"Managed": "Yes โ Layer 3",
"Condition": "Good"
}
}
For FB-only listings, omit mercari_* and ebay_* fields and set "platforms": ["fb"].
For FB + Mercari only, omit ebay_* fields and set "platforms": ["fb", "mercari"].
Copy to clipboard โ use the copy command after saving:
python3 marketplace_client.py copy --folder <path> --field description --platform fb | pbcopy
For Mercari:
python3 marketplace_client.py copy --folder <path> --field description --platform mercari | pbcopy
For eBay (HTML description โ paste into eBay's description field):
python3 marketplace_client.py copy --folder <path> --field description --platform ebay | pbcopy
Tell user: "FB listing copied to clipboard โ ready to paste into Facebook Marketplace."
Tell user (if Mercari): "Run the copy command with --platform mercari when ready to post there."
Tell user (if eBay): "For eBay, use the API publish flow (Step 7) or run copy --platform ebay for manual posting."
eBay supports full API-based publishing. Walk the user through the interactive review process.
python3 ebay_client.py publish --folder <organized-folder-path>
This returns:
items_listed / 20, amount_listed / $1,000)Present each decision point and wait for user confirmation:
Category:
I found these eBay categories for this item:
1. Switches & Hubs (most common โ recommended)
2. Enterprise Networking
3. Computer Components > Networking
Which category? (Enter 1-5 or type a different one)
Item specifics: Show eBay-suggested specifics pre-filled from the listing. Ask user to confirm or adjust.
Listing format:
Format recommendation:
- Fixed Price (Good 'Til Cancelled) โ recommended for networking gear with known market value
- Auction (7-day) โ better if you're unsure of value or want fastest possible sale
Go with Fixed Price at $80?
Shipping:
Shipping options:
1. Calculated โ buyer pays actual carrier rate based on their zip (recommended for 3+ lbs)
2. Flat rate โ set $12 regardless of distance
3. Free shipping โ bake into price (recommend only for < 1 lb)
For 5 lbs, I recommend Calculated shipping. Confirm?
Return policy:
Return policy: 30-day free returns (recommended โ improves search rank)
Confirm?
Photo order: Show current photo list. Ask if user wants to reorder.
Final summary with limits check:
Ready to publish to eBay:
- Title: Cisco SG300-28 28-Port Gigabit Managed Switch Good
- Price: $80.00 (Fixed Price)
- Category: Switches & Hubs
- Condition: Good (5000)
- Shipping: Calculated
- Returns: 30-day free
Monthly limits: 5/20 items, $245/$1,000 โ plenty of capacity.
Publish now?
When user approves, pipe the confirmed JSON to publish-confirm:
echo '<confirmed-json>' | python3 ebay_client.py publish-confirm --folder <path>
This will:
ebay.json in the item folder with listing ID and URLMarketplace/ebay-limits.json with the new listingReport success:
โ
Published to eBay!
URL: https://www.ebay.com/itm/[listing-id]
eBay listing ID saved to ebay.json
Monthly limits updated: 6/20 items, $325/$1,000
After publishing, these commands are available via ebay_client.py:
| Command | When to Use |
|---|---|
status --folder <path> | Check views, watchers, sold status |
ship --folder <path> --tracking NUM --carrier NAME | Add fulfillment after sale |
relist --folder <path> | Re-publish an ended listing |
messages | Check buyer messages |
limits | Show current monthly limit usage |
Ask: "Want me to create Todoist tasks to track posting?"
If yes, use the todoist-manage skill to create:
Post [Item Name] on Facebook Marketplace - $[fair_market]Post [Item Name] on Mercari - $[mercari_price]Publish [Item Name] on eBay - $[ebay_price]references/fb-marketplace-fields.md โ FB form fields, categories, condition values, listing tipsreferences/mercari-fields.md โ Mercari fields, fee structure, shipping rates, platform tipsreferences/ebay-fields.md โ eBay condition codes, HTML description, item specifics, fees, OAuth scopesreferences/platform-selection.md โ Which platform(s) to use, ship vs. local decision matrix, eBay recommendation logicreferences/shipping-guide.md โ Starter kit, Pirate Ship, carrier selection, packaging tips, eBay shipping optionsreferences/pricing-framework.md โ 4-tier methodology, platform price adjustments, WebSearch query templatesreferences/listing-improvement-checklist.md โ Review checklist for Step 5.5, including eBay-specific checks| Command | Key Args | Output |
|---|---|---|
init | โ | Creates iCloud Marketplace dirs |
scan | --path <dir> (optional) | JSON: folder list + loose photos |
group | --path <dir> (optional) | JSON: proposed photo groupings |
create-folder | --name <slug> --photos <csv> | JSON: new folder path |
photos | --folder <path> | JSON: array of image file paths |
organize | --source <path> --name <slug> | JSON: new folder path |
unidentified | --source <path> | JSON: moved path |
listing | --folder <path> (stdin: JSON) | JSON: listing.md + post.md paths |
copy | --folder <path> [--field title|description] [--platform fb|mercari|ebay] | Plain text for pbcopy |
status | โ | JSON: all organized items |
| Command | Key Args | Output |
|---|---|---|
publish | --folder <path> | JSON: category suggestions + review data |
publish-confirm | --folder <path> (stdin: confirmed JSON) | JSON: listing ID + URL |
status | [--folder <path>] | JSON: listing status + views/watchers |
relist | --folder <path> | JSON: new listing ID |
ship | --folder <path> --tracking NUM --carrier NAME | JSON: fulfillment confirmation |
messages | [--limit N] | JSON: recent buyer messages |
limits | โ | JSON: monthly usage (items + amount) |
categories | --query TEXT | JSON: eBay category suggestions |