Scout products on 1688.com using JS extraction (zero screenshots). Use when: finding new products, comparing suppliers, vetting vendors, sourcing alternatives.
Find and filter products on 1688.com for DressLikeMommy. Data extraction only -- human does visual review.
When to invoke this skill:
| Input | Source | Required | Example |
|---|
| category | User message | Yes | "matching swimwear" |
| keywords_cn | Auto-translated or user | No | "亲子泳衣" |
| min_margin | Default (50%) or user override | No | "60%" |
| vendor_min | Default (6/10) or user override | No | "8" (stricter vetting) |
| seen_urls | knowledge/1688-seen-urls.jsonl | Auto | (loaded automatically for dedup) |
Why: Screenshots cost ~2,000 tokens each. JS extraction costs ~200-500 tokens per page and returns structured data. For scouting 10 pages (~400 products), that's 3-5K tokens vs 50-100K.
Navigate to search -- tool: browser
https://s.1688.com/selloffer/offer_search.htm?keywords=亲子装+[category]&sortType=va_rmdarkgmv30rtExtract product data (JavaScript) -- tool: browser (JS execution)
(() => {
const items = document.querySelectorAll(
'[class*="offer-list"] [class*="card"], .sm-offer-item',
);
return Array.from(items)
.map((el) => {
const title = el.querySelector('[class*="title"], .title')?.textContent?.trim() || "";
const price = el.querySelector('[class*="price"], .price')?.textContent?.trim() || "";
const sales =
el.querySelector('[class*="sale"], [class*="deal"]')?.textContent?.trim() || "";
const vendor =
el.querySelector('[class*="company"], [class*="seller"]')?.textContent?.trim() || "";
const link = el.querySelector('a[href*="detail.1688.com"]')?.href || "";
return { title, price, sales, vendor, link };
})
.filter((x) => x.link);
})();
Score vendors -- tool: browser (JS extraction on vendor pages)
procedures/vendor-vetting.md for detailed checks| Factor | 0 pts | 1 pt | 2 pts |
|---|---|---|---|
| Rating | <4.0 | 4.0-4.4 | 4.5+ |
| Sales | None | Some | Active |
| Store Age | <1yr | 1-3yr | 3+yr |
| Response | <80% | 80-90% | 90%+ |
| Stock | Low/unclear | Moderate | Plenty |
Deduplicate -- tool: read
knowledge/1688-seen-urls.jsonlFilter candidates -- tool: native
Output ranked table -- tool: write / task card
human laneLog seen URLs -- tool: write
knowledge/1688-seen-urls.jsonlpresented, filtered, approved, rejectedWhen an existing product's supplier becomes unreliable:
Delivery method: Task card (moved to human lane) + Telegram summary
File path: knowledge/scouting/scout-YYYY-MM-DD-[category].md
**Supplier Scout -- [Date] -- [Category]**
**Search:** [keywords used] | **Pages scanned:** [N] | **Products extracted:** [N]
**After dedup:** [N] | **After filtering:** [N]
| # | Product | Price | Est. Margin | Vendor Score | Link |
|---|---------|-------|-------------|-------------|------|
| 1 | [Name] | [CNY] | ~[X]% | [X]/10 | [->](url) |
**Rejected (top reasons):**
- [N] below margin threshold
- [N] vendor score too low
- [N] already seen
**Notes:** [any observations about market, pricing trends, etc.]
knowledge/1688-seen-urls.jsonl| Failure | Detection | Response |
|---|---|---|
| Captcha / login wall | Page shows captcha instead of results | Use saved search URLs; navigate manually then run JS; mark task blocked with BlockerType=Captcha |
| JS selectors return empty | Extraction returns 0 products | Take ONE screenshot, inspect DOM, update selectors, retry once |
| 1688 page won't load | Timeout or connection error | Retry once after 30s; if still fails, abort and notify |
| Vendor page inaccessible | 404 or timeout on vendor URL | Score as 0 ("unverifiable"); exclude from recommendations |
| Seen-urls file missing | File not found error | Proceed without dedup; create file in logging step |
| Zero products pass filters | Filtered list is empty | Widen margin to 40%, re-filter; if still empty, report "no viable products" |
| Price parsing fails | Price field contains non-numeric | Flag product as [unconfirmed price]; exclude from margin calc |
| Action | Tier | Rule |
|---|---|---|
| Research, browse, extract data | 0 | Just do it |
| Save findings to workspace | 0 | Just do it |
| Recommend products (ranked table) | 1 | Do it, report to Francisco |
| Import to BuckyDrop | 1 | Do it, report after |
| Commit to new supplier | 2 | Confirm with Francisco |
| Publish listing (Draft -> Active) | HUMAN ONLY | Francisco does this |