选品评分 · 贡献利润测算 · 竞品变化监控 —— 同一套逻辑,命令行 / AI / 网页三个入口
改任意一项,右侧实时重算。
因为佣金和支付手续费按 售价 百分比收取,不是按成本收取。 固定成本 43 元、费率合计 12% 时,正确算法是 43 ÷ 0.88 = 48.86, 而不是 43 × 1.12 = 48.16。后者每单会少算几块钱,而且错得不明显。
广告 Broke-even ROAS = 1 ÷ 贡献利润率。利润率 20% 意味着广告每花 1 元 至少要带回 5 元销售额才不亏 —— 同一个 ROAS 在不同利润率的品上,可能一个赚一个亏。
需求稳定性 25 + 竞争缺口 20 + 贡献利润 20 + 物流履约 15 + 合规风险 10 + 内容展示 10 = 100。
贡献利润由系统按真实平台费率计算,是唯一客观项。 另外四项(需求稳定性、竞争缺口、物流履约、内容展示)需要运营自己判断打分。 这个工具的定位是把打分标准固定下来 + 算准利润 + 自动执行红线, 不是替人做判断 —— 它是纪律工具,不是决策替代品。
识别降价 / 涨价 / 新品上榜 / 下架 / 促销变化 / 评分变化,每类配一条处理建议。
保存后自动重算。缺采购价或计划售价的品会被判为无法测算。
¥38/件 · MOQ 1000 · 不含税 · 不含运 和
¥42/件 · MOQ 100 · 含税 · 含运 哪个便宜?
你只要 200 件时,前者根本买不到;就算买得到,加上税和国内运费后可能更贵。
真正可比的是 到仓成本单价:
适用阶梯单价(按需含税)+(国内运费 + 打样费 + 模具费)÷ 实际采购量
这些数不是你估的,是去 1688 / 阿里巴巴问供应商拿的。 打开商品页,或者点「聊天」问店家,把他给的数原样抄进来。 至少录两三家才有比价的意义——只录一家,算出来还是那一家。
| 列 | 填什么 | 不知道就填 |
|---|---|---|
| 平台 | 报价从哪来的(1688 / 义乌购 / 线下档口…) | 照实选 |
| 供应商 | 店铺名或工厂名,用来区分是哪一家。 例: 义乌某某日用品厂、1688-旺铺A | 随便写个能认出来的代号 |
| 标价¥ | 商品页上挂的单价(人民币/件) | ——必填 |
| MOQ | 最小起订量。商品页写「10 件起批」就填 10 | 1 |
| 阶梯价 | 买越多越便宜的那张表。格式
数量:单价,多档用 ; 隔开:100:42.5;500:38;1000:35 | 留空(没有阶梯就按标价算) |
| 含税 | 报价是否已含增值税。1688 大多数标价是不含税的, 要专票得另加 13%。不确定就问店家「这个价含不含票」 | 不勾(当作不含税,成本算高一点更安全) |
| 含运 | 是否包邮到你手里 | 不勾 |
| 国内运费¥ | 这一整批货的运费总额,不是每件的。 系统会自己除以件数 | 0,但记得回头补 |
| 打样费¥ | 寄样品收的钱。一次性费用,会摊到每件上 | 0 |
| 模具费¥ | 开模费。定制品才有,现货一般是 0 | 0 |
| 交期天 | 下单到发货要几天。超过 20 天会提示断货风险 | 留空 |
| 报价日期 | 店家给你报价那天。留空会被警告—— 报价会变,没日期的报价不能当决策依据 | 今天的日期 |
填不全也能先比。 不确定的留默认值先跑一遍,看看差距有多大,再决定值不值得回头问店家要准数。 每条报价缺什么,比价结果里都会单独提示。
写入 data/products.csv 的 cost_price,打通到选品评分。写前自动备份。
决策层出「内容策略卡」→ 执行层按平台出文案 → 质检层扫合规风险。 架构复用自开源项目 xhs-content-workflow,从小红书内容场景迁移而来。
在网页里调 LLM 需要把 API Key 放进浏览器 —— 密钥会暴露在前端,且你的产品数据会发给第三方。 本面板刻意只生成 Prompt、不碰任何 API Key,你把 Prompt 粘到自己的 AI 工具里跑, 数据流向完全由你控制。
想要全自动,正确做法是把这套 Prompt 装成 Claude Code Skill
(cp -r skills/listing ~/.claude/skills/),
或通过 MCP 由 AI 助手编排 —— 两者都在你自己机器上运行。
⚠️ 两份快照必须同类目、同页数。范围不同时多出来的商品会被误判成「新品上榜」—— 系统会自动只在共同区间内比对并在顶部警告,但那部分数据等于白抓了。
一次跑完「导入 → 比对 → 评分摘要 → 落盘报告」。
这三类清单不写在代码里,都是 data/*.yaml 配置文件。
在这里改完保存即刻生效,所有计算立刻用新配置,不需要重启、不需要动代码。
platforms.yaml你的平台名:
commission_rate: 0.13 # 平台佣金率(必需)
payment_fee_rate: 0.029 # 支付手续费率(必需,含在佣金里就填 0)
return_rate: # 退货准备金率(可按类目区分)
default: 0.08
baby_safety: 0.12
已内置 16 个平台:Amazon(标准 / 电子 / 服饰)、TikTok Shop(常规 / 新卖家)、 独立站(Stripe / PayPal)、eBay、Walmart(常规 / 低费率类目)、Etsy、Temu、 Shopee(本地 / 新加坡跨境 / 马来跨境)、Lazada。 佣金与支付费率是查公开费率表填的,来源链接写在文件头注释里; 退货率全部是估算占位值。
logistics_rates.yaml你的市场代码: base_fee: 15 # 首重基础费(元,必需) rate_per_kg: 20 # 续重单价(元/kg,必需)
已内置 10 个市场:US / EU / SEA / UK / JP / CA / AU / MX / BR / ME。 全部是估算占位值 —— 货代报价一对一议价、不公开挂牌, 找货代(4PX、云途、燕文、递四方等)要一份 rate card 后替换。
sites.yaml站点代码: domain: www.amazon.xx currency: XXX verified: false # 是否实测抓取成功过(面板会标 ✓) enabled: true # 改成 false 就不出现在抓取下拉里 note: 备注
enabled: false,
因为需要先在抓取工具的 SITES 里补对应配置。
类目不需要配置,本来就是自由填的。只校验格式(小写字母、数字、连字符),
不限制取值 —— 因为各站 slug 不同(美国站玩具是 toys-and-games 而不是 toys)。
抓不到时去目标站榜单页,看地址栏 /gp/bestsellers/<这一段>/ 的真实值。
本面板不会把你的数据上传到任何服务器。三种存储方式,你自己选:
| 浏览器本地 默认可用 |
存在浏览器 localStorage 里,只在这台机器这个浏览器中。
清缓存会丢,不同设备不同步,Claude 和任何人都读不到。适合临时对比结果。 |
| 本机文件 需本地服务 |
抓取结果写成 data/real/*.csv 与本地 SQLite
(data/history.db),完全在你机器上。这是主力方式。 |
| 自建数据库 需自行接入 |
见下方说明。要用支持浏览器直连的数据库(如 Supabase), 或让本地服务代写。凭据只存在你本地,不进仓库。 |
浏览器只能直连显式开放了 CORS 的数据库服务(Supabase、PocketBase 这类)。 MySQL / PostgreSQL 这类原生协议数据库浏览器连不上,必须由本地服务代写。
| 真实公开数据 | 平台佣金、支付手续费率。来源链接与查询日期写在 data/platforms.yaml 文件头注释里。
例如 TikTok Shop 美区 referral fee 为 6%,已包含支付处理费,无单独交易手续费。 |
| 估算占位值 | 退货率(平台不公布,只能用自己店铺历史订单统计)、头程物流费率(货代一对一报价,不公开挂牌)。 这两项换成真实数字不需要改任何代码。 |
| 训练用虚构 | 示例商品清单、演示用竞品快照(URL 为不可路由占位域名)。 保留它们是为了让测试与演示不依赖网络。 |
第一次用真实数据做对比时,系统报出 38 条「新品上榜」——全是假的。 原因是两次抓取的页数不同:前一次抓 1 页(前 30 名),后一次抓 2 页(前 88 名), 第 31–88 名的商品在前一份快照里根本不存在,自然全被判成新出现。 工具没算错,是对比方法错了。
修法:自动只在两份快照共同覆盖的排名区间内比对, 范围不一致就在报告顶部警告。修完重跑同一组数据,38 条假新品全部消失,只剩 1 条真实降价。
| 命令行 | python cli.py score-products / profit / monitor / ingest。全部离线运行,无需账号与 API Key。 |
| AI 助手 | MCP Server 暴露 6 个工具,含审批分级:4 个只读;起草 Listing 需人工审核;改价工具禁止自动执行 —— 函数里根本没有调用店铺 API 的代码。 |
| 网页 | 本页面。计算公式由 Python 端移植,页面加载时会自动校验与 Python 结果一致(见页脚)。 |
本项目不做自动改价、自动上架、自动投放广告、自动发送客户或达人消息 —— 这些永远需要人工在平台后台确认执行。