# Ebay Prepare Listing

> Create an eBay listing from photos and a description — research item, verify specs, check sold comps, produce listing.json. Use when the user wants to sell something, list an item on eBay, or says things like "sell this", "list this on eBay", "how much is this worth", or provides photos of items they want to sell.

- Skill: `glebmish/ebay-prepare-listing` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add glebmish/ebay-prepare-listing`
- Raw SKILL.md: https://api.skillmd.com/api/skills/glebmish/ebay-prepare-listing/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Research & Search
- Author: glebmish (https://skillmd.com/u/glebmish)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/glebmish/ebay-prepare-listing

---


# Prepare eBay Listing

Photos + description → research → interactive Q&A → validated `listing.json`.

## Input

User provides:
- **Photos** — pasted into chat (you'll see source paths) or file paths
- **Description** — free text, 1-3 sentences about the item. May be passed as `$ARGUMENTS`.

## Steps

Follow this exact order. Do not skip steps or reorder.

1. **Create listing directory.** Generate a short slug from the user's description: `listings/<slug>-<YYYY-MM-DD>/`. The slug must match `[a-z0-9-]+` (lowercase letters, digits, and hyphens only — no spaces, dots, slashes, or shell metacharacters). A rough name from the description is fine (e.g., `listings/carbon-handlebar-2026-03-21/`). Create `photos/` inside it.

2. **Copy photos** into `photos/` with their original filenames.

3. **Write `input.txt`** with the seller's description.

4. **Examine every photo.** Read each image in `photos/`. Rename files to short meaningful names that describe what the photo shows (e.g., `front.webp`, `back.webp`, `scratch-left.webp`, `ports.webp`). Filenames must be plain basenames matching `[a-z0-9-]+\.(webp|jpg|jpeg|png)` — no directory components, no `..`, no spaces or shell metacharacters. The validator rejects anything else.

5. **Identify the item** — brand, model, variant, generation. Use visible text, labels, and design cues from the photos combined with the seller's description.

6. **STOP. Confirm identification with the seller.** Ask: "I believe this is [identification]. Is that correct?" Do not proceed until confirmed.

7. **Search the web** for full specs from authoritative sources (manufacturer site, GSMArena, etc.). Save 1-3 reference URLs.

8. **Assess condition** from each photo — note any visible damage, wear, scratches, missing parts.

9. **STOP. Ask the seller about item state.** Ask about: damage, wear, missing parts, accessories included, battery health if applicable. Also ask any other clarifying questions. Do not proceed until answered.

10. **Search eBay sold listings** for pricing data. Find recently sold comparable items. Record comps. If none can be found (rare items, fresh release with no resale market yet), leave `price.comparable_sales` as an empty array and note the lack of comps to the seller — it's valid, but pricing will be a judgment call rather than data-driven.

11. **Write `listing.json`.** Follow the schema in `${CLAUDE_SKILL_DIR}/schema/reference.md` exactly. The file contains both buyer-facing fields (title, description, condition, price, specs, photos) and internal fields (`price.comparable_sales`, `references`, `ebay_url`, `ebay_item_id`). Buyer-facing fields appear on eBay — quality matters. Internal fields support the seller's workflow — they're for provenance and posting state, not shown to buyers.

12. **Run validation:**
    ```bash
    python3 ${CLAUDE_SKILL_DIR}/scripts/validate_listing.py listings/<slug>-<YYYY-MM-DD>/listing.json
    ```
    Fix any errors and re-validate. If validation still fails after the second attempt, stop and report to the seller — don't loop indefinitely.

13. **Present a summary** to the seller: title, price with comps, condition, and any notes. Include reference URLs and comp URLs as clickable links so the seller can verify the research.

## Rules

- **No marketing fluff.** Descriptions are factual — specs, condition, what's included. No "perfect for", "stunning", "excellent choice", or any sales language. Buyers on eBay want facts, not pitches.
- **Don't guess specs.** If you can't confirm a spec from an authoritative source, leave it out and mention it to the seller. Wrong specs erode buyer trust and lead to returns.
- **Be honest about condition.** If you see a scratch, call it a scratch. Buyers trust honest sellers, and under-disclosing damage leads to disputes.
- **Price from data, not intuition.** Always check eBay sold listings before setting a price — the market decides what something is worth.
- **Use round prices.** No .99 or .95 pricing tricks — use whole numbers (e.g., £20, not £19.99).
- **Two mandatory stops.** Steps 6 and 9 require seller confirmation before continuing. Getting these wrong wastes all the research work that follows.
- **Never delete `published.json`.** If it exists in the listing directory, the listing is already live on eBay. Do not overwrite, delete, or recreate it. Only the post-listing skill writes `published.json`.
- **Preserve posting state.** When writing or editing `listing.json`, preserve existing `ebay_url` and `ebay_item_id` values. Clearing these breaks the link between the local listing and the live eBay item.

## Schema

Read `${CLAUDE_SKILL_DIR}/schema/reference.md` for the full listing.json schema, field descriptions, and example.

