Install
openclaw skills install @apiclaw/amazon-market-trend-scannerAmazon category trend scanner. Scans Amazon category landscapes to discover trending subcategories, emerging niches, and market shifts. Tracks demand surges, brand consolidation, new entrant waves, price band migration, and margin changes across all subcategories under a parent category. Use when user asks about: market trends, category trends, trending categories, what's hot, emerging categories, trend scanner, which categories are growing, where the market is heading. Pick this to track how categories shift OVER TIME (trends, momentum, emerging niches). To evaluate one specific niche right now, use amazon-market-entry-analyzer; to discover products to sell, use amazon-opportunity-discoverer. Requires ZOODATA_API_KEY.
openclaw skills install @apiclaw/amazon-market-trend-scannerFind rising categories before everyone else. Respond in user's language.
| File | Purpose |
|---|---|
{skill_base_dir}/scripts/zoodata.py | Execute for all API calls (run --help for params) |
{skill_base_dir}/references/reference.md | Load for exact field names or response structure |
{skill_base_dir}/scan-data/ | Runtime: watchlist.json, baseline.json, alerts.json, history/ (auto-created) |
Required: ZOODATA_API_KEY. Get free key at zoodata.ai/api-keys.
https://api.zoodata.ai (Bearer ZOODATA_API_KEY). Setting ZOODATA_BASE_URL to an untrusted host (anything other than api.zoodata.ai / *.zoodata.ai / localhost) makes the CLI refuse the request and withhold the key — the Bearer token is never sent to an untrusted host.{skill_base_dir}/scripts/zoodata.py (Python 3, stdlib-only). This skill allows categories, market, products, and check. Do not invoke unrelated subcommands for this skill's tasks.{skill_base_dir}/scan-data/ (baseline.json, watchlist.json, history/*.json); reads the optional credential store ~/.zoodata/config.json.Before selecting or invoking the first command, read and apply the local references/cli-contract.md. Reapply it after every granular or composite result and before any fallback, additional call, state write, interpretation, or user-facing report. Use this skill's fallback logic only when the shared contract classifies the result as non-terminal.
For a terminal interface failure, respond in the user's language that the trend scan could not be completed, then list succeeded and failed endpoint identifiers and state that existing scan state remains unchanged. Do not emit trend signals, hot-category rankings, alerts, or write watchlists, history, or baselines. Keep control tokens, parameters, and retry logs internal unless diagnostics are requested.
Tell the user: "Give me one or more categories to monitor (e.g. 'Pet Supplies > Dogs'). I'll scan all subcategories and find trending directions. Single or batch supported."
Required: 1+ category paths or keywords. Optional: scan depth, metric preferences.
categories --keyword before anything--category; omitting it distorts aggregationsampleAvgMonthlyRevenue, sales=monthlySalesFloor--mode presets are CLI-local, NOT API params — zoodata.py expands them via PRODUCT_MODES before the call; a raw products/search request must send the expanded filter fields and must not send mode (mode raw → 422)When ZOODATA_API_KEY is not set (verify via python {skill_base_dir}/scripts/zoodata.py check — exits 2 if no key in env or ~/.zoodata/config.json), stop before any evidence call. Tell the user that a ZooData API key is required, link to https://zoodata.ai/en/api-keys, and explain that the key may be set in the environment or local config. Do not substitute public knowledge or a "for reference only" analysis.
When _transport.status=401, stop further calls, tell the user that the configured key was rejected, direct them to https://zoodata.ai/en/api-keys, and do not fabricate missing data.
When _transport.status=402, stop further calls. Report where the workflow stopped, any compatible partial findings already gathered, and returned credit metadata when present; direct the user to https://zoodata.ai/en/pricing and do not fabricate missing data.
categories --keyword "{keyword}" → resolve category pathmarket --category "{path}" --page-size 20 → collect all subcategory market data (paginate)products --keyword "{sub}" --category "{path}" --mode emerging --page-size 20 per hot subcategoryproducts --keyword "{sub}" --category "{path}" --mode new-release --page-size 20 per hot subcategory{skill_base_dir}/scan-data/baseline.json, config → {skill_base_dir}/scan-data/watchlist.json{skill_base_dir}/scan-data/watchlist.json + {skill_base_dir}/scan-data/baseline.jsonmarket --category "{path}" per watched category{skill_base_dir}/scan-data/history/{timestamp}.json, update baseline| Signal | Condition | Level |
|---|---|---|
| Demand surge | sampleAvgMonthlySales >20% vs baseline | 🔴 |
| Red ocean warning | topBrandSalesRate >70% AND rising | 🔴 |
| New entrant wave | sampleNewSkuRate up >5 percentage points | 🟡 |
| Brand loosening | topBrandSalesRate down >3 percentage points | 🟡 |
| Price band shift | sampleAvgPrice change >10% | 🟡 |
| Margin change | sampleAPlusRate change >5 percentage points | 🟡 |
| Minor movement | None of the above triggered | 🟢 Silent log |
| Signal Combination | Market Phase | Recommended Action |
|---|---|---|
| Demand surge + New entrant wave | 🚀 Growth phase | Enter quickly, first-mover advantage matters 💡 |
| Demand surge + Brand loosening | 🎯 Opportunity window | Best timing — demand up, incumbents losing grip 💡 |
| Demand surge + Red ocean warning | ⚠️ Late stage growth | High demand but leaders consolidating — need strong differentiation 💡 |
| Red ocean warning + No demand surge | 🔒 Mature/locked | Avoid — established players dominate with flat demand 💡 |
| Brand loosening + Price band shift down | 💰 Price war | Wait — margins compressing, enter after shakeout 💡 |
| New entrant wave + Margin change | 🔄 Disruption | Category being redefined — study new entrants' strategies 🔍 |
Rank subcategories by composite attractiveness (apply market-entry scoring logic):
After each Full Scan, ask user to enable scheduled monitoring. If yes, generate cron config with: category list, alert thresholds, schedule. Supports OpenClaw /cron, ChatGPT Scheduled Tasks, Claude Projects. Quick Check only notifies on 🔴 alerts.
Full Scan: Trend Dashboard (all subcategories) → 🔥 Hot Categories TOP 5 → 🆕 New Entrants Scan → ⚠️ Risk Alerts → Subcategory Detail (per hot category) → Next Steps → Data Provenance → API Usage.
Output language MUST match the user's input language. If the user asks in Chinese, the entire report is in Chinese. If in English, output in English. Exception: API field names (e.g. monthlySalesFloor, categoryPath), endpoint names, technical terms (e.g. ASIN, BSR, CR10, FBA, credits) remain in English.
Data is based on ZooData API sampling as of [date]. Monthly sales (
monthlySalesFloor) are lower-bound estimates. This analysis is for reference only and should not be the sole basis for business decisions. Validate with additional sources before acting.
Rules: Strategy recommendations are NEVER 📊. Anomalies (>200% growth) are always 💡. Sample bias note required. User criteria override AI judgment.
Include a table at the end of every report:
| Data | Endpoint | Key Params | Notes |
|---|---|---|---|
| (e.g. Market Overview) | markets/search | categoryPath, topN=10 | 📊 Top N sampling, sales are lower-bound |
| ... | ... | ... | ... |
Extract endpoint and params from _query in JSON output. Add notes: sampling method, T+1 delay, realtime vs DB, minimum review threshold, etc.
| Endpoint | Calls | Credits |
|---|---|---|
| (each endpoint used) | N | N |
| Total | N | N |
Extract from meta.creditsConsumed per response. End with Credits remaining: N.
Full Scan: ~40-60 credits (~2-3 per subcategory × 20). Quick Check: ~20-30 credits (market only).