亚马逊FBA和FBM产品研究与卖家分析。使用14种选品策略寻找爆款产品,追踪竞争对手,监控BSR排名。
AI-powered Amazon product research. From market discovery to daily operations.
Language rule: Always respond in the user's language. If the user asks in Chinese, reply in Chinese. If in English, reply in English. The language of this skill document does not affect output language. All API calls go through
scripts/apiclaw.py— one script, 5 endpoints, built-in error handling.
Required: APICLAW_API_KEY
Scope: used only for https://api.apiclaw.io
Setup: Guide user to set the environment variable: bash
export APICLAW_API_KEY='hms_live_xxxxxx'
Fallback: The script also checks config.json in the skill root directory if the env var is not set.
Do NOT write keys to disk files. Always recommend the environment variable approach.
New keys may need 3-5 seconds to activate — if first call returns 403, wait 3 seconds and retry (max 2 retries).
FileWhen to LoadSKILL.md (this file)Start here — covers 80% of tasksscripts/apiclaw.pyExecute for all API calls (do NOT read into context)references/reference.mdNeed exact field names or filter parameter detailsreferences/scenarios-composite.mdComprehensive recommendations (2.10) or Chinese seller cases (3.4)references/scenarios-eval.mdProduct evaluation, risk assessment, review analysis (4.x)references/scenarios-pricing.mdPricing strategy, profit estimation, listing reference (5.x)references/scenarios-ops.mdMarket monitoring, competitor tracking, anomaly alerts (6.x)references/scenarios-expand.mdProduct expansion, trends, discontinuation decisions (7.x)references/scenarios-listing.mdListing writing, optimization, content creation (8.x)
Don't guess field names — if uncertain, load reference.md first.
Task TypeModeBehaviorSingle ASIN lookup, simple data queryQuickExecute command, return key data. Skip evaluation criteria and output standard block.Market analysis, product selection, competitor comparison, risk assessmentFullComplete flow: command → analysis → evaluation criteria → output standard block.
Quick mode trigger: User asks for a single specific data point ("B09XXX monthly sales?", "how many brands in cat litter?") — no decision analysis needed.
Before running any Full-mode product selection or market analysis, complete this checklist:
Step 1 — Mode Selection: Check the Product Selection Mode Mapping table below. If ANY of the 14 preset modes matches the user's intent, USE IT ( --mode xxx). Do NOT manually piece together filters when a preset mode exists. Common mappings:
--mode low-price--mode beginner--mode long-tail--mode emergingStep 2 — Realtime Supplement: Plan to call product --asin for the top 3-5 ASINs from results (see Realtime Data Supplementation below).
Step 3 — Review Analysis: Plan to call analyze --asins for top ASINs to get consumer insights (especially painPoints, improvements, buyingFactors).
Step 4 — Output Blocks: Prepare to include both 📋 Data Source & Conditions and 📊 API Usage at the end.
Why this exists: In testing, AI agents repeatedly skipped preset modes, realtime supplements, and review analysis — even though the instructions below clearly describe them. This checklist forces a pause-and-verify before execution.
Prioritize script execution for API calls. The script includes:
_query metadata injection (for query traceability)Fallback: If script fails and can't be quickly fixed, use curl directly. Note "using curl direct call" in output.
When products or competitors returns ASINs in Full-mode analysis, call product --asin for the top 3-5 most relevant ASINs to get current real-time data. For bulk lookups (>3 ASINs), confirm with the user before proceeding.
ScenarioSupplement?How many ASINsSingle ASIN lookup (Quick mode)Already using realtime—Market overview (no specific ASINs)❌ No—Product selection / competitor analysis✅ YesTop 3 by salesRisk assessment✅ YesTarget ASIN + top 2 competitorsMulti-product comparison✅ YesAll compared ASINs (max 5)Listing analysisAlready using realtime—
Handling data conflicts — products/ competitors has ~T+1 delay; realtime/product is live:
FieldUse fromReasonPricerealtime ( buyboxWinner.price)Changes frequentlyBSRrealtime ( bestsellersRank)Updates hourlyRating / ratingCountrealtimeMore currentMonthly Salesproducts/competitorsRealtime doesn't have thisProfit Margin / FBA Feeproducts/competitorsRealtime doesn't have this
When realtime data differs significantly, note it: e.g. "⚡ Price updated: database $29.99 → realtime $24.99 (likely promotion)"
All commands output JSON. Progress messages go to stderr.
bash
python3 scripts/apiclaw.py categories --keyword "pet supplies"
python3 scripts/apiclaw.py categories --parent "Pet Supplies"
Common fields: categoryName (not name), categoryPath, productCount, hasChildren
bash
python3 scripts/apiclaw.py market --category "Pet Supplies,Dogs" --topn 10
Key output fields: sampleAvgMonthlySales, sampleAvgPrice, topSalesRate (concentration), topBrandSalesRate, sampleNewSkuRate, sampleFbaRate, sampleBrandCount
bash
# Preset mode (14 built-in)
python3 scripts/apiclaw.py products --keyword "yoga mat" --mode beginner
# Explicit filters
python3 scripts/apiclaw.py products --keyword "yoga mat" --sales-min 300 --reviews-max 50
# Mode + overrides (overrides win)
python3 scripts/apiclaw.py products --keyword "yoga mat" --mode beginner --price-max 30
Available modes: fast-movers, emerging, single-variant, high-demand-low-barrier, long-tail, underserved, new-release, fbm-friendly, low-price, broad-catalog, selective-catalog, speculative, beginner, top-bsr
Keyword matching: Default is fuzzy (matches brand names too — e.g. "smart ring" matches "Smart Color Art" pens). Use --keyword-match-type exact or phrase for precise results. Always combine with --category when possible to reduce noise.
Category path with commas: Some category names contain commas (e.g. "Pacifiers, Teethers & Teething Relief"). Use > separator instead of , to avoid parsing errors:
bash
# ❌ Wrong — comma in name breaks parsing
--category "Baby Products,Baby Care,Pacifiers, Teethers & Teething Relief"
# ✅ Correct — use ' > ' separator
--category "Baby Products > Baby Care > Pacifiers, Teethers & Teething Relief"
bash
python3 scripts/apiclaw.py competitors --keyword "wireless earbuds"
python3 scripts/apiclaw.py competitors --asin B09V3KXJPB
Easily confused fields (products/competitors shared):
❌ Wrong✅ CorrectNotereviewCount``ratingCountReview countbsr``bsrRankBSR ranking (integer, only in products/competitors)monthlySales / salesMonthly``atLeastMonthlySalesMonthly sales (lower bound estimate, NOT in realtime/product)bestsellersRank``bsrRank``bestsellersRank is realtime/product only (array format); use bsrRank for products/competitorsprice (in realtime)buyboxWinner.pricerealtime/product nests price inside buyboxWinner objectprofitMargin (in realtime)❌ N/Arealtime/product does NOT return profitMargin; use products/competitors
Complete field list:
reference.md→ Shared Product Object
bash
python3 scripts/apiclaw.py product --asin B09V3KXJPB
Returns: title, brand, rating, ratingBreakdown, features, topReviews, specifications, variants, bestsellersRank, buyboxWinner
bash
# Single ASIN
python3 scripts/apiclaw.py analyze --asin B09V3KXJPB
# Multiple ASINs (competitive review comparison)
python3 scripts/apiclaw.py analyze --asins B09V3KXJPB,B08YYYYY,B07ZZZZZ
# Category-level insights
python3 scripts/apiclaw.py analyze --category "Pet Supplies,Dogs,Toys" --period 90d
# Specific insight dimension
python3 scripts/apiclaw.py analyze --asin B09V3KXJPB --label-type painPoints,buyingFactors
Returns: totalReviews, avgRating, sentimentDistribution, ratingDistribution, consumerInsights (by labelType), topKeywords, verifiedRatio
Available labelType: scenarios, issues, positives, improvements, buyingFactors, painPoints, keywords, userProfiles, usageTimes, usageLocations, behaviors
bash
python3 scripts/apiclaw.py report --keyword "pet supplies"
Runs: categories → market → products (top 50) → realtime detail (top 1).
bash
python3 scripts/apiclaw.py opportunity --keyword "pet supplies" --mode fast-movers
Runs: categories → market → products (filtered) → realtime detail (top 3).
The 4 types of interfaces return different fields. Do NOT assume they share the same structure.
Datamarket``products/ competitors``realtime/product``reviews/analyzeMonthly SalessampleAvgMonthlySales✅ atLeastMonthlySales❌❌RevenuesampleAvgMonthlyRevenue``salesRevenue❌❌PricesampleAvgPrice``price``buyboxWinner.price❌BSRsampleAvgBsr``bsrRank (integer)bestsellersRank (array)❌RatingsampleAvgRating``rating``rating``avgRatingReview CountsampleAvgReviewCount``ratingCount``ratingCount``totalReviewsReview Details❌❌✅ topReviews + ratingBreakdown❌ (no raw reviews)Sentiment Analysis❌❌❌✅ sentimentDistributionConsumer Insights❌❌❌✅ consumerInsights (11 dimensions)Pain Points/Issues❌❌❌ (manual from topReviews)✅ AI-analyzedTop Keywords❌❌❌✅ topKeywordsSeller❌buyboxSeller (string)buyboxWinner (object)❌Profit Margin❌profitMargin❌❌FBA Fee❌fbaFee❌❌Seller Count❌sellerCount❌❌Features/Bullets❌❌✅ features❌Variants❌variantCount (integer)variants (full list)❌
Usage rule:
products / competitors for sales, pricing, and competition datarealtime/product for review details, listing content, and seller infomarket for category-level aggregate metricsreviews/analyze for AI-powered review insights (sentiment, pain points, buying factors — covers all reviews, not just topReviews)products/ competitors (quantitative) + realtime/product (qualitative) + reviews/analyze (consumer insights) as evidenceAll interfaces return .data as an array. Use .data[0] to get the first record, NOT .data.fieldName.
User SaysRun ThisScenario File?"which category has opportunity"market + categoriesNo"check B09XXX" / "analyze ASIN"product --asin XXXNo"Chinese seller cases"competitors --keyword XXX --page-size 50``scenarios-composite.md → 3.4"pain points" / "negative reviews" / "consumer insights"analyze --asin XXX + product --asin XXX``scenarios-eval.md → 4.2"category pain points" / "category user portrait"analyze --category XXX``scenarios-eval.md → 4.6"compare products"competitors or multiple product``scenarios-eval.md → 4.3"risk assessment" / "can I do this"product + market + competitors``scenarios-eval.md → 4.4"monthly sales" / "estimate sales"competitors --asin XXX``scenarios-eval.md → 4.5"help me select products" / "find products"products --mode XXX (see mode table)No"comprehensive recommendations" / "what should I sell"products (multi-mode) + market``scenarios-composite.md → 2.10"pricing strategy" / "how much to price"market + products``scenarios-pricing.md → 5.1"profit estimation"competitors``scenarios-pricing.md → 5.2"listing reference"product --asin XXX``scenarios-pricing.md → 5.3"market changes" / "recent changes"market + products``scenarios-ops.md → 6.1"competitor updates"competitors --brand XXX``scenarios-ops.md → 6.2"anomaly alerts"market + products``scenarios-ops.md → 6.4"what else can I sell" / "related products"categories + market``scenarios-expand.md → 7.1"trends"products --growth-min 0.2``scenarios-expand.md → 7.3"should I delist"competitors --asin XXX + market``scenarios-expand.md → 7.4"write listing" / "generate bullet points" / "write title"product --asin XXX (competitors)scenarios-listing.md → 8.2"analyze competitor listing" / "their selling points"product --asin XXX (multiple)scenarios-listing.md → 8.1"optimize my listing" / "listing diagnosis"product --asin XXX + competitors``scenarios-listing.md → 8.3Need exact filters or field names—Load reference.md
Product Selection Mode Mapping (14 types):
User IntentModeKey Filters"beginner friendly" / "new seller"--mode beginnerSales≥300, growth≥3%, $15-60, FBA, ≤1yr, auto-excludes 150+ red ocean keywords"fast turnover" / "hot selling"--mode fast-moversSales≥300, growth≥10%"emerging" / "rising"--mode emergingSales≤600, growth≥10%, ≤180d"single variant" / "small but beautiful"--mode single-variantGrowth≥20%, variants=1, ≤180d"high demand low barrier" / "easy entry"--mode high-demand-low-barrierSales≥300, reviews≤50, ≤180d"long tail" / "niche"--mode long-tailSales≤300, BSR 10K-50K, ≤$30, sellers≤1"underserved" / "has pain points"--mode underservedSales≥300, rating≤3.7, ≤180d"new products" / "new release"--mode new-releaseSales≤500, NR tag, FBA+FBM"FBM" / "self-fulfillment" / "low stock"--mode fbm-friendlySales≥300, FBM, ≤180d"low price" / "cheap"--mode low-price≤$10"broad catalog" / "cast wide net"--mode broad-catalogBSR growth≥99%, reviews≤10, ≤90d"selective catalog"--mode selective-catalogBSR growth≥99%, ≤90d"speculative" / "piggyback"--mode speculativeSales≥600, sellers≥3, ≤180d"top sellers" / "best sellers"--mode top-bsrSub-category BSR≤1000
market output)#MetricGoodMediumWarningMarket value (avgRevenue × skuCount)> $10M$5–10M< $5MConcentration (topSalesRate, topN=10)< 40%40–60%> 60%New SKU rate (sampleNewSkuRate)> 15%5–15%< 5%FBA rate (sampleFbaRate)> 50%30–50%< 30%Brand count (sampleBrandCount)> 5020–50< 20
product output)#MetricHighMediumLowBSRTop 10001000–5000> 5000Reviews< 200200–1000> 1000Rating> 4.34.0–4.3< 4.0Negative reviews (1-2★ %)< 10%10–20%> 20%
When atLeastMonthlySales is null: Monthly sales ≈ 300,000 / BSR^0.65
Two blocks are REQUIRED at the end of every Full-mode analysis: ① Data Source & Conditions, ② API Usage. Missing either one = violating the skill contract.
markdown
---
📋 **Data Source & Conditions**
| Item | Value |
|----|-----|
| Data Source | APIClaw API |
| Interface | [interfaces used] |
| Category | [category path] |
| Time Range | [dateRange] |
| Sampling | [sampleType] |
| Top N | [topN value] |
| Sort | [sortBy + sortOrder] |
| Filters | [specific parameter values] |
**Data Notes**
- Monthly sales are **lower bound estimates** (Amazon displays "10,000+ bought"), actual may be higher
- Database data has ~T+1 delay; realtime/product is current real-time data
- Concentration metrics based on Top N sample; different topN → different results
Rules:
📋 **Data Source & Conditions**, ADD IT before replyingThis block is NON-NEGOTIABLE. Every single response — Quick or Full mode — MUST end with this table. No exceptions. If you forget, you are violating the skill contract.
markdown
📊 **API Usage**
| Interface | Calls |
|-----------|-------|
| categories | 1 |
| markets/search | 1 |
| products/search | 2 |
| realtime/product | 3 |
| reviews/analyze | 1 |
| **Total** | **8** |
| **Credits consumed** | **8** |
| **Credits remaining** | **492** |
Tracking rules:
apiclaw.py execution as 1 call to the corresponding interface_credits.consumed from every API response for total consumed_credits.remaining from the last API response as remaining balance_credits fields are null, show "N/A"📊 **API Usage** at the bottom, ADD IT before replyingrealtime/product topReviews for specific review quotes)ScenarioCoverageSuggestionMarket data: Popular keywords✅ Has dataUse --keyword directlyMarket data: Niche/long-tail keywords⚠️ May be emptyUse --category insteadProduct data: Active ASIN✅ Has data—Product data: Delisted/variant ASIN❌ No dataTry parent ASIN or realtimeReal-time data: US site✅ Full support—Real-time data: Non-US sites⚠️ PartialCore fields OK, sales may be null
HTTP errors (401/402/403/404/429) are handled by the script with structured JSON output.
Self-check: python3 scripts/apiclaw.py check
ErrorFixCannot index array with stringUse .data[0].fieldName ( .data is array)Empty data: []Use categories to confirm category existsatLeastMonthlySales: nullBSR estimate: 300,000 / BSR^0.65