
前言:本文面向有一定亚马逊运营基础、希望将选品调研流程系统化和数据化的卖家和工具开发者。将完整拆解选品市场调研的五大模块,并提供关键数据的采集思路与代码示例。
目录
调研框架总览
亚马逊选品市场调研的本质是风险过滤机制,而非机会发现机制。每一个分析模块都在回答一个核心问题:
| 分析模块 | 核心问题 | 关键指标 |
|---|---|---|
| 市场分析 | 市场够不够大,趋势向好吗? | 品类GMV、BSR趋势、搜索趋势 |
| 竞争程度 | 进得去吗?壁垒有多高? | 品牌集中度、新品成功率、CPC |
| 竞品分析 | 别人怎么做的,我的差异化在哪? | 产品策略、定价策略、评论分析 |
| 需求挖掘 | 用户真正想要什么? | 评论聚类、关键词搜索量 |
| 利润风险 | 这个项目能赚到钱吗? | 利润率、专利风险、政策风险 |
第一步:市场分析 {#market}
1.1 市场体量评估
关键指标计算方法:
品类月度GMV(估算)= Top100 ASIN 平均月销量 × 平均售价
市场集中度 = 前5名销量 / 品类总销量
判断标准参考:
- 品类月GMV < $500K → 体量偏小,慎入
- 前5名集中度 > 70% → 高度垄断,新品空间有限
- 前5名集中度 < 40% → 相对分散,新品有机会
1.2 市场趋势分析
需要区分两种趋势信号,不能混用:
搜索趋势:反映用户需求端的变化。工具:Google Trends(宏观)、亚马逊关键词搜索量历史(平台端)。
销量趋势:反映市场供给端的竞争格局变化。工具:Keepa 的 BSR 历史图、第三方工具的销量历史估算。
两者背离时的解读:
搜索量↑ + 销量↑ = 真实市场扩张,机会信号
搜索量↑ + 销量持平或↓ = 供给增速超过需求,竞争加剧,谨慎
搜索量↓ + 销量↓ = 市场萎缩,高风险
1.3 淡旺季分析
通过连续12-24个月的 BSR 月度数据确认季节性周期。主要方法:
- 取品类头部5-10个 ASIN 的历史 BSR 数据
- 按月份取平均值,绘制年度季节曲线
- 识别旺季起止窗口(通常定义为 BSR 改善超过20%的连续月份)
旺季备货逆推:旺季开始前6-8周,FBA 货物需到亚马逊仓库。逆推采购、生产、头程节点,确认资金到位时间。
第二步:竞争程度分析
2.1 品牌垄断度量化
# 品牌垄断度评估示例(伪代码)
def calculate_brand_concentration(top50_data):
"""
top50_data: List of {brand, monthly_sales}
Returns: HHI指数 (Herfindahl-Hirschman Index)
"""
total_sales = sum(item['monthly_sales'] for item in top50_data)
brand_shares = {}
for item in top50_data:
brand = item['brand']
share = item['monthly_sales'] / total_sales
brand_shares[brand] = brand_shares.get(brand, 0) + share
# HHI = 各品牌市场份额的平方和 × 10000
hhi = sum(share ** 2 for share in brand_shares.values()) * 10000
# 解读:HHI < 1500 分散;1500-2500 中等集中;> 2500 高度集中
return hhi, brand_shares
2.2 新品成功率评估
观察维度:
- 过去6个月内,上架不足6个月的 ASIN 中,有多少进入了品类 Top 50?
- 这些新品的评论积累速度(从0到100条评论用了多少天)?
- 新品的平均评分是否高于品类均值(说明产品质量有提升)?
2.3 推广成本评估矩阵
| 指标 | 低竞争(绿灯) | 中等竞争(黄灯) | 高竞争(红灯) |
|---|---|---|---|
| 核心词 CPC | < $1.0 | $1.0-$2.0 | > $2.0 |
| 首页平均评论数 | < 200 | 200-500 | > 500 |
| 首页平均评分 | < 4.3 | 4.3-4.5 | > 4.5 |
| 品牌集中度(HHI) | < 1500 | 1500-2500 | > 2500 |
第三步:竞品深度分析
3.1 全竞品扫描数据维度
全竞品扫描 Checklist:
□ 价格区间分布(按 $5 为区间分段统计)
□ 品牌入驻时间分布(按季度)
□ 变体属性分布(颜色/尺寸/材质/功能)
□ FBA vs FBM 比例
□ 评分区间分布(1-3星/3-4星/4-4.5星/4.5-5星)
□ 评论数分布(0-50/50-200/200-1000/1000+)
□ 是否有 A+ 页面
□ 是否有品牌旗舰店
3.2 头部竞品四维拆解
产品策略:单品撑量 vs. 变体矩阵覆盖。多变体策略可以提升流量覆盖面,但运营复杂度更高,库存风险更分散。
定价策略:对比主图标价和 Keepa 价格历史曲线,判断是否存在频繁的优惠券/Deal 行为。频繁促销的品牌通常利润空间较薄,但转化率更高。
广告策略:使用关键词工具查看竞品在哪些词上投放 SP 广告,广告位分布情况。品牌词保护力度(是否在自品牌词上投放)反映了品牌成熟度。
评论分析(最重要):
import asyncio
import httpx
from collections import Counter
import re
async def fetch_reviews_batch(asin_list: list, api_key: str):
"""
通过 Pangolinfo Scrape API 批量抓取亚马逊评论
"""
results = []
async with httpx.AsyncClient(timeout=30.0) as client:
tasks = []
for asin in asin_list:
payload = {
"url": f"https://www.amazon.com/dp/{asin}/",
"parse_type": "reviews",
"country": "US",
"star_filter": "all"
}
tasks.append(
client.post(
"https://api.pangolinfo.com/scrape",
json=payload,
headers={"Authorization": f"Bearer {api_key}"}
)
)
responses = await asyncio.gather(*tasks, return_exceptions=True)
for resp in responses:
if not isinstance(resp, Exception) and resp.status_code == 200:
results.append(resp.json())
return results
def analyze_review_keywords(reviews: list, top_n: int = 20):
"""
提取评论高频关键词
"""
# 停用词(简化版)
stop_words = {'the', 'a', 'an', 'is', 'it', 'i', 'and', 'or', 'but',
'this', 'that', 'to', 'for', 'in', 'on', 'at', 'with'}
all_words = []
for review in reviews:
text = review.get('body', '').lower()
words = re.findall(r'\b[a-z]{3,}\b', text)
all_words.extend([w for w in words if w not in stop_words])
# 分正负评论统计
positive = [r for r in reviews if r.get('star_rating', 0) >= 4]
negative = [r for r in reviews if r.get('star_rating', 0) <= 2]
def get_freq(reviews_subset):
words = []
for r in reviews_subset:
text = r.get('body', '').lower()
ws = re.findall(r'\b[a-z]{3,}\b', text)
words.extend([w for w in ws if w not in stop_words])
return Counter(words).most_common(top_n)
return {
'positive_keywords': get_freq(positive),
'negative_keywords': get_freq(negative),
'total_reviews': len(reviews)
}
说明:通过 Pangolinfo Scrape API可以批量抓取亚马逊评论原始数据,支持按星级过滤、按日期范围筛选。完整 API 文档见docs.pangolinfo.com
第四步:需求挖掘
4.1 评论需求矩阵
将评论关键词按两个维度分类:
高频提及
↑
┌────────────┼────────────┐
│ │ │
已满足的需求 核心价值区 未满足的高频需求
(继续保持) (核心卖点) ← 产品改进重点
│ │ │
└────────────┼────────────┘
↓
低频提及
横轴:正面评价 ←——→ 负面评价
正面高频词 = 用户最在乎的核心价值,是产品定位的基础。
负面高频词 = 用户最不满的痛点,是产品改进和差异化的方向。
4.2 关键词需求分析
关键词分析的三个层次:
Layer 1 - 需求规模:核心词月搜索量。反映市场需求的绝对规模。
Layer 2 - 需求精度:长尾词分布。长尾词通常包含更多的修饰词(颜色、材质、用途、规格),揭示用户对产品的具体期望。例如:“wireless earbuds” 是核心词,“wireless earbuds for running waterproof” 是长尾词,后者的转化意图明显更强。
Layer 3 - 需求验证:搜索词报告中的转化关键词。哪些词带来了实际购买行为,说明用户在该词背后的需求与产品的匹配度最高。
第五步:利润与风险评估
5.1 利润模型标准公式
def calculate_profit_model(
selling_price: float,
cogs: float, # 采购成本
inbound_freight: float, # 头程物流(分摊到单件)
fba_fee: float, # FBA 配送费
referral_fee_pct: float, # 平台佣金比例(小数)
target_acos: float, # 目标广告 ACOS(小数)
return_rate: float = 0.03 # 退货率,默认3%
) -> dict:
referral_fee = selling_price * referral_fee_pct
ad_spend = selling_price * target_acos
return_loss = selling_price * return_rate
total_cost = (cogs + inbound_freight + fba_fee +
referral_fee + ad_spend + return_loss)
profit = selling_price - total_cost
gross_margin = (selling_price - cogs - inbound_freight -
fba_fee - referral_fee) / selling_price
net_margin = profit / selling_price
return {
'selling_price': selling_price,
'total_cost': round(total_cost, 2),
'profit': round(profit, 2),
'gross_margin': f"{gross_margin:.1%}", # 广告前毛利率
'net_margin': f"{net_margin:.1%}",
'is_viable': gross_margin >= 0.40 and net_margin >= 0.10
}
# 示例
result = calculate_profit_model(
selling_price=29.99,
cogs=7.50,
inbound_freight=1.20,
fba_fee=5.80,
referral_fee_pct=0.15,
target_acos=0.25,
return_rate=0.03
)
print(result)
# 输出示例:
# {'selling_price': 29.99, 'total_cost': 26.68, 'profit': 3.31,
# 'gross_margin': '50.3%', 'net_margin': '11.0%', 'is_viable': True}
5.2 三类风险评估清单
政策合规风险:
□ 产品品类是否在亚马逊限制/审核品类列表内?
□ 是否需要额外认证(UL、CE、FCC、ASTM 等)?
□ 是否有近期的品类整治记录?(可查看相关论坛和公告)
竞争手段风险:
□ 品类内是否存在明显的差评攻击行为?(看头部竞品的差评是否集中在某时段)
□ 是否存在大量相同价格的跟卖者?(FBA 卖家质量如何)
□ 平台近期对该品类的违规处理力度?
专利侵权风险:
□ USPTO 外观专利检索(Design Patent)
□ USPTO 实用新型检索(Utility Patent)
□ 亚马逊品牌注册品牌数量(越多专利风险越高)
□ 是否存在对中国卖家的历史投诉记录?
数据采集实战:批量抓取类目数据
以下是通过 Pangolinfo Scrape API 抓取亚马逊类目 BSR 榜单数据的完整示例:
import asyncio
import httpx
import json
from datetime import datetime
API_KEY = "your_pangolinfo_api_key"
BASE_URL = "https://api.pangolinfo.com"
async def fetch_category_bestsellers(
category_node_id: str,
country: str = "US",
pages: int = 3
) -> list:
"""
抓取指定类目的 BSR 榜单数据
Args:
category_node_id: 亚马逊类目节点ID
country: 站点国家代码
pages: 抓取页数(每页约20个产品)
Returns:
List of product data dicts
"""
results = []
async with httpx.AsyncClient(timeout=60.0) as client:
for page in range(1, pages + 1):
url = (f"https://www.amazon.com/Best-Sellers/zgbs/"
f"?node={category_node_id}&pg={page}")
payload = {
"url": url,
"parse_type": "bestseller_list",
"country": country
}
try:
response = await client.post(
f"{BASE_URL}/scrape",
json=payload,
headers={
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
)
if response.status_code == 200:
data = response.json()
products = data.get('products', [])
# 添加抓取时间戳(用于时间序列分析)
for p in products:
p['scraped_at'] = datetime.utcnow().isoformat()
p['page'] = page
results.extend(products)
print(f"Page {page}: fetched {len(products)} products")
else:
print(f"Page {page} failed: {response.status_code}")
except Exception as e:
print(f"Error on page {page}: {e}")
# 避免频率限制
await asyncio.sleep(1.0)
return results
def analyze_market_concentration(products: list) -> dict:
"""分析市场集中度"""
if not products:
return {}
# 按品牌聚合销量估算
brand_sales = {}
total_sales = 0
for p in products:
brand = p.get('brand', 'Unknown')
sales = p.get('monthly_sales_estimate', 0)
brand_sales[brand] = brand_sales.get(brand, 0) + sales
total_sales += sales
if total_sales == 0:
return {'error': 'No sales data available'}
# 计算各品牌市场份额
brand_shares = {
brand: sales / total_sales
for brand, sales in brand_sales.items()
}
# 排序
sorted_brands = sorted(
brand_shares.items(),
key=lambda x: x[1],
reverse=True
)
# 计算 HHI
hhi = sum(share ** 2 for share in brand_shares.values()) * 10000
# 前5品牌占比
top5_share = sum(share for _, share in sorted_brands[:5])
return {
'total_brands': len(brand_sales),
'hhi': round(hhi),
'top5_concentration': f"{top5_share:.1%}",
'top5_brands': [(b, f"{s:.1%}") for b, s in sorted_brands[:5]],
'market_type': (
'fragmented' if hhi < 1500 else
'moderately_concentrated' if hhi < 2500 else
'highly_concentrated'
)
}
# 主程序
async def main():
# 示例:抓取特定类目
CATEGORY_NODE = "172659" # 示例:Electronics > Portable Audio
print("开始抓取类目榜单数据...")
products = await fetch_category_bestsellers(
category_node_id=CATEGORY_NODE,
pages=3
)
print(f"\n共抓取 {len(products)} 个产品")
# 市场集中度分析
concentration = analyze_market_concentration(products)
print("\n市场集中度分析:")
print(json.dumps(concentration, ensure_ascii=False, indent=2))
# 保存原始数据
with open(f'category_{CATEGORY_NODE}_{datetime.now().strftime("%Y%m%d")}.json', 'w') as f:
json.dump(products, f, ensure_ascii=False, indent=2)
if __name__ == "__main__":
asyncio.run(main())
常见问题解答
Q:BSR 数据可信度有多高,能直接用来估算销量吗?
A:BSR 和销量之间的换算关系因品类而异,且会随时间变化。一般来说,BSR 在某个类目内是相对稳定的相对排名指标,可以用来比较竞品间的相对销量水平,但不宜直接换算成绝对销量数字。建议结合多个数据维度交叉验证。
Q:CPC 数据怎么获取比较准确?
A:最准确的方式是直接在亚马逊后台开一个小额广告活动,对目标关键词出价后查看系统建议竞价范围。第三方工具的 CPC 数据通常有延迟,仅供参考。
Q:专利检索需要专业机构吗?
A:基础的外观专利检索可以自行在 USPTO 网站(patents.google.com 或 patft.uspto.gov)进行,搜索产品相关的设计专利。如果产品涉及复杂功能或创新结构,建议委托专业知识产权机构出具正式检索报告,费用通常在 $500-$2000 之间,相比专利诉讼风险是值得的。
Q:整个调研流程大概需要多长时间?
A:取决于品类复杂度和数据获取效率。使用纯手工方式,一个品类的完整调研通常需要1-2周。使用数据 API 工具进行批量采集和自动化分析,可以压缩到3-5天。建议优先花时间在竞品评论分析和利润核算两个环节,这两个环节的决策价值最高。
总结
亚马逊选品的市场调研流程,核心是通过系统性分析,在不确定的市场环境中建立高可复用的决策逻辑。五个模块缺一不可,每个模块回答一个关键问题,合并起来构成完整的选品决策框架。
做完这五步,你得到的不是"确定成功的产品",而是"在目前可见条件下,风险相对可控的方向"——这已经比市场上90%依赖直觉和跟风的卖家,拥有了明显更高的决策质量。
标签:亚马逊选品 | 市场调研 | 竞品分析 | 数据采集 | Python | 跨境电商



被折叠的 条评论
为什么被折叠?



