本页内容

电商数据 API 文档

SellWinners API 通过 HTTPS 以 JSON 响应为您提供电商和广告情报:Shopify 店铺及其商品和流量;店铺商品及其价格、销量估算、评价和广告;Meta、Google 和 TikTok 广告;广告主;以及品牌发送的邮件。所有端点也可以通过我们托管的 MCP 服务器供 AI 智能体使用。本页介绍身份验证、响应格式、分页、排序和筛选、速率限制和点数、错误和媒体 URL,然后列出每个端点及其参数和请求示例,以及 MCP 服务器的工具。

基础 URL
https://api.sellwinners.com
实时试用

在付费套餐中通过 Playground 发送真实请求,或根据 OpenAPI 规范生成客户端:

https://api.sellwinners.com/openapi.json

快速入门

  1. 创建账户,确认您的邮箱并选择付费套餐:API 和 MCP 服务器从付费套餐开始提供。
  2. 打开API 密钥并创建一个密钥。请立即复制:它只显示一次。
  3. 发出您的第一个请求:
curl "https://api.sellwinners.com/v1/lookup?q=allbirds.com" \
  -H "X-API-Key: YOUR_API_KEY"

身份验证

在每个请求的 X-API-Key 请求头中发送您的 API 密钥,或作为 Bearer 令牌发送:

X-API-Key: YOUR_API_KEY
# or
Authorization: Bearer YOUR_API_KEY

密钥以 ak_live_ 开头。请妥善保密:不要将其放入前端代码或公开代码仓库。您可以创建多个密钥(每个应用或环境一个),并在控制台中撤销任意密钥;被撤销的密钥会立即失效。

响应

所有响应均为 JSON。响应包含一个 requestId,结果位于 data 下:搜索和列表返回数组,单条记录返回一个对象。列表还会附带 pagination 对象,部分响应还会附带 meta。

{
  "requestId": "req_8f2c1a9b4d7e6f3a2b1c0d9e",
  "data": [
    {
      "id": "facebook_1203948571620394",
      "platform": "facebook",
      "status": "active",
      "daysRunning": 42,
      "media": { "type": "video", "thumbnailUrl": "https://api.sellwinners.com/v1/media/file/b7a0.jpg", "mediaUrl": "https://api.sellwinners.com/v1/media/file/4c1e.mp4" },
      "advertiser": { "id": "104958372615", "name": "Glow Labs", "liveAdsCount": 86 },
      "content": { "title": "Glass skin in 14 days", "body": "Dermatologist tested.", "callToAction": "Shop now", "landingPageUrl": "https://glowlabs.example/serum" },
      "metrics": { "reach": 184000, "estimatedSpend": 1656, "duplicates": 3 },
      "audience": { "targetedCountries": ["FR", "DE"], "mainCountry": "FR" },
      "rank": { "currentRank": 4, "rankDelta": -2, "improvementPct": 0.3333 },
      "flags": { "isEuAd": true },
      "extra": { "shop": { "domain": "glowlabs.example" } }
    }
  ],
  "pagination": { "page": 1, "limit": 25, "total": 1840, "totalPages": 74, "hasMore": true }
}

记录是嵌套对象:广告包含 media、advertiser、content、metrics、audience、rank 和 flags,店铺、广告主、Google 广告、TikTok 条目和邮件也以同样的方式分组。未知的值为 null。没有固定位置的其他字段放在 extra 下。上面的示例已做删减。

在广告中,content.title 是标题,content.callToAction 是可读文本,例如「Shop now」。metrics.estimatedSpend 在已有支出估算时取该估算(通过 /v1/ads/{adId} 获取的单条广告会读取它),否则为覆盖人数 x 9 / 1000(每覆盖 1,000 人 9 USD);支出估算在 10 USD 以下保留两位小数,10 USD 及以上取整数美元。rank.rankDelta 是当前排名减去之前的排名,因此负值表示广告排名上升;rank.improvementPct 是一个比例(0.25 表示四分之一)。

品牌追踪排名报告(/ad-rank、/scaling-ads、/v1/workspace/scaling-ads 以及 MCP 工具 get_brandtracker_scaling_ads)带有各自的 metrics:其中 metrics.rankDelta 是之前的排名减去当前排名(正值表示名次上升),metrics.improvementPct 是相对之前排名上升的比例,与广告中的含义相同(0.875 表示 87.5%)。在单条广告中,metrics.reachDelta1d、reachDelta7d 和 reachDelta30d 根据其覆盖人数历史计算得出。店铺会注明其品类:列表中为 catalog.mainCategory,单个店铺还包含 catalog.categories。

在 Google 广告中,media.type 和 media.format 的值为 text、image 或 video,media.url 是广告的图片:视频广告则为其缩略图(没有视频文件)。transparencyUrl 是该广告在 Google 广告透明度中心的页面,视频广告可在那里播放;广告没有 Google ID 时为 null。network 的值为 search、youtube、shopping、maps 或 other,extra.networks 的值也是如此。

2026年10月19日更新:

  • Google 广告的 media.format 原为格式代码,现在为 text、image 或 video;其 media.type 可以是 text 或 video;extra.networks 使用 network 的小写名称。
  • 即使 media.type 为 video,Google 的 media.url 也绝不会是视频文件。
  • 在 Google 的 formats 筛选中,image 现在表示图片广告(之前表示文字广告),因此文字广告请使用 text。之前的代码 static_image、html5_iframe 和 responsive_display 及其简称仍然可用。

只有在 Google 展示广告期间,Google 广告的 status 才为 active:Google 超过 7 天未展示的广告为 unknown。daysRunning 统计从 firstSeenAt 到 lastSeenAt 的天数(两端都计入);extra.servedDays 是另一种独立计数,在广告停止后仍会继续累计。筛选条件与每条广告显示的内容一致:status=active 保留 Google 在最近 7 天内展示过的广告,status=inactive 保留被标记为已停止的广告,因此 unknown 的广告不属于其中任何一类;minDaysRunning 和 maxDaysRunning 保留 daysRunning 在范围内的广告。此类列表的 pagination.total 为 null;当读取的广告中匹配的很少时,列表会提前结束,并附带 meta.partial 和一条警告。

没有搜索文本时,sortBy=relevance 列出最新的广告;sortBy=reach 仅支持 order=desc。使用 status=active 时,sortBy=reach 列出的广告很少:按覆盖人数排序时,排在前面的大多是 Google 已停止展示的广告,因此要查看 Google 当前展示的广告,请按最新排序(其警告中也会说明)。Google 广告不支持 sortBy=longestRunning:该排序按广告停止后仍继续累计的天数排名,会列出 Google 已不再展示的广告,因此会返回 400 并说明原因。

extra.startIsFloor 标记首次出现于 2018年5月31日(Google 广告数据的第一天)的广告,因此该广告的实际投放时间可能更早。audience.countries 列出所有受众国家,只有仅在一个国家展示的广告才带有 percentage;remarketing 和 interest 在未知时为 null。

Google 只对部分在欧盟展示的广告报告覆盖人数,而且通常只报告 10,000,000,即其刻度的上限(一千万或更多):大多数广告没有覆盖人数,nullReasons 会说明 reach.value 为 null 的原因(not_reported:在欧盟展示但 Google 未报告覆盖人数的广告;eu_only:在其他地区展示的广告),套餐不包含覆盖人数的情况除外。extra.networks 是该广告所在平台的列表,其中可能不包含 network。extra.shop.google 包含广告主网站的 Google 汇总数据;对于不是店铺的网站(应用商店、社交网站、短链接服务),advertiser.domain 和 websiteId 为 null。

2026年10月20日更新:

  • 域名(GET /v1/shops/{domain}、lookup、TikTok 的 domain、竞争对手简报)指的是域名完全一致的网站,也包括店铺索引之外的网站;无法获取的域名返回 404。
  • GET /v1/lookup 按匹配度从高到低排列结果:对于域名,依次是该域名自己的网站、它自己的 Facebook 主页(主主页优先),然后是名称相似的主页;对于名称,依次是该品牌自己的网站和主页(主主页优先),然后是按名称找到的店铺和主页。
  • 找到品牌网站后,名称只出现在某个单词内部的店铺或主页会被排除;同名网站只有在投放广告时才算精确匹配;否则,名称匹配只有在有流量或广告时才算精确匹配。名称不同且没有在投广告的官方主页排在按名称找到的主页之后。
  • 店铺行的 signals.activeAdsSource 说明其 activeAds 的取值方式:page(其主主页的在投广告,实时读取,见于店铺自己的行)或 index(店铺索引中的计数,可能较旧)。
  • 店铺域名搜索(searchType=domain)会把完全匹配的网站排在最前面,并附带 extra.exactDomainMatch(当店铺索引中没有该网站时,extra.inShopIndex 为 false)。
  • 对于不是店铺的网站(应用商店、社交或即时通讯网站、短链接服务或跟踪重定向),广告主行的 extra.domain 为 null,广告主记录会在 extra.nonShopSite 中注明该网站,不包含 extra.platforms,并从其落地页获取 linkedShops(fromLandingPages),而广告则没有 shops。
  • 未带时区的日期时间均为 UTC,现在会附带 +00:00。
  • 在邮件统计中,emailsByDayOfWeek 以星期几的编号为键:0 表示星期日,6 表示星期六。
  • lookup 结果行可能带有 nullReasons;当店铺的列表数据无法读取时,店铺记录会带有 meta.partial。

2026年10月20日的其他更新(TikTok):

  • TikTok 条目的 publishedAt 为 UTC。之前它晚了 1 或 2 小时,因此在 UTC 日最后几个小时发布的帖子会显示为第二天,daysRunning 也少算一天。
  • 筛选条件与之一致:publishedAfter 和 publishedBefore 为 UTC(只写日期表示当天开始,publishedBefore 列出该时间之前的帖子),minDaysRunning 和 maxDaysRunning 与 daysRunning 一样按 UTC 日计算,sortBy=longestRunning 从 2016年8月31日 22:00 UTC 开始。

2026年10月20日的其他更新(Google 广告):

  • GET /v1/google-ads、POST /v1/google-ads/query 和 MCP 工具不支持 sortBy=longestRunning(也不支持 daysRunning),会返回 400 并说明原因:该排序按广告停止后仍继续累计的天数排名,会列出 Google 已不再展示的广告。
  • Free 搜索中,如果 status=active 使前几个结果不足,响应会带有 meta.partial 和一条警告,说明在读取的广告中列出了多少条。
  • 在 extra.shop 中,没有流量数据的网站不带 monthlyVisits(之前为 0),trafficGrowth30d 只在访问量大于 0 时出现;extra.shop.google 不包含为 0 的 totalReach 或 weeklyReach(从未报告),在没有统计到任何广告时也不包含为 0 的计数。
  • 保存到看板的 Google 广告读取结果相同。

2026年10月20日的其他更新(店铺):

  • 在 GET /v1/shops/{shopId} 中,advertising.summary.reach30d 是最近 30 天按日期汇总的欧盟覆盖人数(之前是自开始追踪以来的总数,现在为 totalReach),spend30d 为该覆盖人数 x 9 / 1000,extra.estimatedSpendUsd 是自开始追踪以来的支出,extra.adsLaunched30d 汇总最近 30 天上线的广告;对于没有欧盟或英国覆盖人数的店铺,这些值均为 null。
  • 店铺记录、店铺列表和邮件统计带有 nullReasons,它将字段路径映射到其为 null 的原因:not_shopify(销量和商品只对 Shopify 店铺进行估算)、no_estimate、not_measured、eu_uk_only、not_linked(没有 TikTok 主页)、not_on_tp、no_reviews、none_found。
  • 在记录、列表和销量历史中,售出件数旁为零的销量估算记为 null;销量历史的 period=week 每周一个数据点。
  • traffic.growth30d 是一个比例(-0.1543 表示 -15.4%),traffic.history 从第一个有访问量的月份开始。
  • catalog.mainCategory 取自分类 ID(主分支中最具体的一个),并附带 catalog.categoryLeaves 和 productsCountCapped(25,001 是计数上限,表示 25,000 或更多)。
  • 没有评价的 Trustpilot 页面,其评分为 null。
  • 当 TikTok 数据是通过店铺的社交媒体资料,或通过按账号名找到的主页匹配到的时,tiktok.matchedBy 为 socials 或 handle(这是匹配结果,而非已有的关联)。
  • advertising.mainPageActiveAds 是主主页的在投广告数(取自其广告概览的读数,与 linkedAdvertisers 中其主主页显示的一致;店铺列表中的计数仅在没有该读数时显示),linkedAdvertisers[].rank 是该主页的排名。
  • 相似店铺不包含店铺本身及其自有网站,每一页会用列表中更靠后的店铺补足(offset 和 limit 按排除它们之后的列表计数)。
  • 按热度排序的商品会把店铺的畅销商品排在最前面(meta.order)。
  • 店铺的邮件和邮件统计会计入所有营销活动类型,其 90 天数据在未知时为 null。
  • 按销量排序时,每个 Shopify 店铺只列出一行(extra.sharedSalesWith),sortBy=estMonthlySales&order=asc 会排除没有估算值的店铺。

2026年10月20日的其他更新(店铺数据):

  • GET /v1/shops 按销量排序时,会继续读取被合并为每个 Shopify 店铺一行的域名之后的内容(之前在最初几行后就停止了),也会合并列表中更靠后的同一店铺的域名,并且在列表读取到末尾之前,其 pagination.total 为 null;sortBy=estMonthlySales&order=asc 从 100 USD 的估算值开始(minMonthlySales 100)。
  • 在记录、列表和销量历史中,每件售出商品低于 0.50 USD 的销量估算记为 null(no_estimate)。
  • 对于尚未测量的网站,traffic.monthlyVisits 为 null;当上个月没有访问量时,traffic.growth30d 为 null(not_measured);当社交网络的 growth30d 为 0 或缺失时,会根据其粉丝历史计算,0 个粉丝记为 null(not_measured)。
  • 店铺列表会说明 catalog.productsCount 和 sales.unitsSold 为 null 的原因。
  • extra.storeWide 标记访问量为 0 但承载其店铺销量的域名(测得为 0,或该店铺的另一个域名拥有这些访问量,并在 extra.sharedSalesWith 中注明;Free 套餐的店铺记录中不显示该名称)。
  • advertising.mainPageActiveAds 是其广告概览读取到的主主页在投广告数(店铺列表中的计数仅在没有该读数时显示)。
  • 相似店铺也不包含该店铺的品牌店;对于相似度索引中没有的店铺,extra.similarIndexed 为 false。
  • catalog.mainCategory 仅当原有标签是某个分类的名称时才保留该标签。
  • 如果响应中链接的媒体文件已不存在,请求会返回 200、空响应体和 X-Media-Missing: true。

2026年10月20日的其他更新(广告主和 Meta 广告):

  • 广告主的覆盖人数是欧盟和英国的覆盖人数,采用广告主搜索自己的时间窗口:对于没有欧盟或英国广告且没有覆盖人数的主页,或尚未统计的时间窗口,advertising.reach30d、extra.reach14d、reach90d 和 totalReach 为 null,nullReasons 会说明原因(eu_uk_only、not_measured);在某个时间窗口内创建的主页,其全部覆盖人数都计入该窗口(之前为 0)。
  • 在 GET /v1/advertisers/{advertiserId} 中,覆盖人数与广告主列表中显示的一致(之前读取的是 30 个读数之前的值,而读数会跳过某些日期),支出估算随之为 null;extra.avgSpendUsd14d 是 14 天的日均支出;extra.avgActiveAds14d 是其在投广告的 14 天平均值(之前是 14 天内的新广告),在没有现成计算值时,对于 14 天内创建的主页,根据其创建首日以来读取的在投广告计算(extra.averagedFrom),否则为 null;在时间窗口内创建的主页,其新广告计数会计入它的每一条广告。
  • advertising.countryDistribution 是其在投广告中定向各个国家的占比(一条广告会定向多个国家),extra.reachCountries 包含各国家在欧盟覆盖人数中的占比,extra.platforms.meta 包含该主页自己的广告(之前包含的是店铺主主页的广告),没有数值的 TikTok 或 Google 计数会被省略,extra.mainLandingPages 会回退到新主页落地页的预览;对于广告搜索尚未收录其广告的主页,lastAds 为其广告主行列出的最新广告,并附带 meta.indexing,与 GET /v1/advertisers/{advertiser_id}/ads 一致(附带 meta.liveAds)。
  • 新增:GET /v1/advertisers/{advertiserId}/history,按日列出主页的在投广告及其新增的欧盟覆盖人数。
  • Instagram 粉丝数为 0 时记为 null(主页没有已知的 Instagram 账户时会记为 0)。
  • 对于未在欧盟或英国展示的广告(eu_uk_only;之前为 0 或 null),以及覆盖人数尚未统计的欧盟广告(not_measured;之前为 0),Meta 广告的 metrics.reach 及其支出为 null,媒体行会在 nullReasons.reach 中说明原因;包含多张图片或多个视频的广告,其 media.type 为 carousel;extra.startIsFloor 标记开始于 2018年1月1日(Meta 广告日期数据的第一天)的广告。
  • 无论排序方向如何,sortBy=adRank 都会把最佳排名(1)排在最前面。
  • 单条广告(GET /v1/ads/{adId})采用最新报告的覆盖人数及其支出,在其覆盖人数历史为最新时按日期计算覆盖人数增量(否则为 null),像其搜索结果行一样列出其图片和视频,填充 advertiser.reach30d 和 pageAnalytics.instagramFollowersHistory,新增 pageAnalytics.reachHistory(与 impressionsHistory 为同一序列),并为记录中仅给出 ID 的店铺补上名称(网站尚未测量时,其 traffic 为 null,并带有 nullReasons shops.traffic);其 audience.gender、ageMin、ageMax 和 metrics.aggregatedReach 始终为 null,因为单条广告不提供这些数据。
  • 在广告主搜索中,sortBy=reach 按自开始追踪以来的总覆盖人数排名,newAds 按 14 天内的新广告排名。
  • Meta 广告的定向决定了其覆盖人数为 null 的原因:只有不定向任何欧盟或英国国家的广告才是 eu_uk_only;定向了其中某个国家、或定向尚不明确的广告,在前 7 天为 not_measured,之后为 not_reported(之前为 eu_uk_only),这适用于广告列表、媒体行和单条广告。
  • 单条广告会把其覆盖人数历史和支出历史作为同一个序列读取,每天一个读数(其增量也是如此);当记录中的覆盖人数超过该序列最后读数的两倍、且该序列一直延续到广告的最后一天时,采用该序列的最后读数及其支出;其 media 会回退到其列出的第一个文件,advertiser.totalReach 会回退到主页详情中的欧盟覆盖人数。
  • 如果广告主记录的行中没有读取到覆盖人数,而主页详情中读取到了,则采用主页详情的覆盖人数(extra.totalReach、其支出,以及据此计算的 advertising.reach30d);其 extra.reachCountries 占比绝不会被四舍五入为 0,extra.averagedFrom 绝不会早于主页的创建日期,其每日历史(extra.history、GET /v1/advertisers/{advertiserId}/history)不包含缺失的读数(两个大于 0 的读数之间连续 14 天或更短的 0)。
  • 采用序列读数的单条广告会把记录中的覆盖人数保留在 extra.recordReach 中(即广告列表显示的数字);在广告主搜索中,如果某一行没有读取到欧盟覆盖人数,而主页详情中读取到了,则与其记录一样采用主页详情的覆盖人数;对于目前没有欧盟广告、但在所请求的日期之前获得过覆盖人数的主页,GET /v1/advertisers/{advertiserId}/history 会保留其为 0 的读数(它没有新增覆盖人数;之前这些读数作为 not_measured 被省略)。
  • 在 Free 套餐中,覆盖人数未知的广告会像在付费套餐中一样说明原因;只有套餐不包含的覆盖人数没有原因。

2026年10月20日的其他更新(支出估算):

  • 低于 10 USD 的预估支出保留两位小数:按每覆盖 1,000 人 9 USD 计算,覆盖人数 140 对应 1.26(之前为 1),日均值也保留自己的美分;10 USD 及以上的支出估算取整数美元(覆盖人数 2,000 对应 18)。
  • 这适用于广告主记录的 extra.estimatedSpendUsd 和 extra.avgSpendUsd14d、店铺的 advertising.summary.spend30d 和 extra.estimatedSpendUsd、Meta 广告的 metrics.estimatedSpend,以及品牌追踪的 statistics.euData.estimatedSpend30d 和每个 /time-series 数据点的 estimatedSpend(这两者之前在任何金额下都保留两位小数),API 和 MCP 工具均是如此。如果原有数值是以整数美元表示的该估算,也会以同样的方式保留美分。

2026年10月20日的其他更新(广告主覆盖人数和每日历史):

  • GET /v1/advertisers/{advertiserId} 新增 extra.reachScope:对于按国家统计的覆盖人数大部分出现在欧盟和英国以外的主页,其值为 outside_eu_uk(部分在其他地区展示的广告也会报告覆盖人数;此时其覆盖人数及据此得出的估算即为该覆盖人数,而非欧盟覆盖人数),否则为 eu_uk。对于 14 天内创建的主页,其 extra.avgSpendUsd14d 为创建以来完整天数内的支出(至少一天;之前在广告主行有数据时,是 14 天覆盖人数除以 14 天)。
  • 广告主记录的 extra.history 和 GET /v1/advertisers/{advertiserId}/history 从主页创建当天开始;extra.history.newAds 不包含缺失日期的 0,extra.followersHistory 以及广告的 pageAnalytics 中的点赞数和粉丝数不包含两个大于 0 的读数之间的 0 或此类日期的 0,每日支出估算在 10 USD 以下保留两位小数。
  • 如果某个主页的在投广告尚未被任何列表收录,其记录会带有 meta.indexing,GET /v1/advertisers/{advertiser_id}/ads 的第一页为空,并带有 meta.indexing 和 meta.liveAds。
  • 单条广告(GET /v1/ads/{adId}):extra.spendHistory 从广告开始投放当天开始,每个 spendUsd 在 10 USD 以下保留两位小数;advertiser.totalReach 绝不会低于 pageAnalytics.reachHistory 的最后读数(此时 extra.pageRecordReach 保存记录中的总数,即广告主列表显示的数字);extra.recordSpend 是 extra.recordReach 对应的支出;extra.reachScope 和 extra.pageReachScope 说明广告及其主页的大部分覆盖人数出现在哪里。

2026年10月20日的其他更新(品牌追踪):

  • 在 GET /v1/brandtrackers 和 GET /v1/brandtrackers/{id} 中,如果最近 7 天有新投放,而 advertising.newAdsLastDay 为 0,系统会对照店铺昨天的新投放进行核对:取其数量,若当天没有读数则为 null(not_measured);列表每次调用最多核对 20 个品牌,即所请求页面上的品牌。
  • 在 /top-ads 和 /v1/workspace/top-ads 中,metrics.totalReach 是广告的欧盟覆盖人数:对于在欧盟和英国以外展示的广告(eu_uk_only)或尚未统计的欧盟广告(not_measured),其值为 null 并带有 nullReasons,在按覆盖人数排序时排在最后(之前为 0)。
  • /testing 根据覆盖人数已知的广告计算其覆盖人数统计;对于没有此类广告的批次,带有 nullReasons stats.reach。
  • 在 /hooks、/transcripts、/landing-pages 以及工作区的开头钩子和落地页中,为 0 的 totalImpressions 记为 null,并带有新的原因 no_eu_reach(其广告没有统计到欧盟或英国覆盖人数;与 euOnly 一起时为 not_measured),在排序中排在最后。
  • 在 /ad-rank、/scaling-ads 和 /v1/workspace/scaling-ads 中,如果广告的排名历史开始于 14 天或 30 天时间窗口之内,metrics.previousRank 和 rankDelta 从其在窗口内最早的读数开始计算:metrics.since 为该日期,meta.windowNote 会加以说明,无法给出的数值为 null 并带有 nullReasons。
  • 在 /partners 中,对于店铺的主主页、与品牌同名的官方主页以及以品牌命名的主页(创作者也可能被列为官方),isOwnPage 为 true;为 null 的覆盖人数或支出带有 nullReasons。
  • 带有 adCopyHashes 的 /ads 第一页包含 meta.latestAdDate 和 dataFreshnessLagDays,使用 status=active 时还包含 meta.stoppedCount。
  • /demography 是欧盟和英国的受众,低于第一名国家万分之一的国家会从 countryDistribution 移到 otherCountries。
  • /ad-copy-evolution 和 /headline-evolution 在每个有记录的日期都有一个数据点(未使用该文本时为 0,在按保留的文本截断的日期为 null),按最新日期对文本排名,并且不包含读数有误的日期(在投广告不到前后日期的十分之一,单日或连续 2 到 3 天,或文本数量远少于两侧日期),正如 meta.periodNote 所说明的;meta.recordedDays 统计日期数。每周和每月 /time-series 的在投广告同样不包含连续 2 或 3 个此类读数。

2026年10月20日的其他更新(品牌追踪报告、lookup 和 Google 覆盖人数):

  • 在 /ad-rank、/scaling-ads 和 /v1/workspace/scaling-ads 中,每一行的所有排名都来自广告的排名历史:metrics.currentRank 是广告库读取排名当天的读数(即 /top-ads 显示的排名;广告库可能比历史晚一天),否则为其最新读数;trajectory 截止到该日期;如果时间窗口开始当天没有读数,则以窗口内最早的读数为准(不再使用原有的窗口期变化值)。
  • 广告库的前 50 条广告(跨品牌时每个品牌 10 条)会根据这些数值重新排名:按这些数值计算,上升幅度小于 minRankDelta 或排名低于 maxCurrentRank 的广告会被排除(即按广告库自身的计数,排名历史显示没有上升的广告),pagination 涵盖保留的广告,meta.rankNote 说明读取和排除了哪些内容,跨品牌时也是如此。
  • 每日 /time-series(以及概览的 graph)在以下日期为 null:在投广告读数有误的日期(低于其前后两侧日期的十分之一;最新一天保持读取值,文本演变中也是如此),这些日期的新投放也是如此;当后一天的新投放几乎全是其在投广告时,后一天的新投放同样为 null;周和月数据不包含这些新投放,leftOut 列出这些日期。/landing-page-evolution 会从每个页面中排除这些日期,以及页面自身低于两侧读数十分之一的读数,正如其 meta.periodNote 所说明的,并在历史滞后时注明历史所到达的日期。
  • 没有统计到覆盖人数的 /testing 批次带有 nullReasons stats.reach no_eu_reach,除非其中某条广告尚未统计(not_measured)或所有广告都在欧盟和英国以外展示(eu_uk_only);/partners 行中缺失的覆盖人数和支出,仅在其 launchDate 之后 7 天内为 not_measured,之后为 no_eu_reach。
  • /creatives 把包含多张图片或多个视频的广告标为 carousel(之前为 unknown)。
  • 在 GET /v1/lookup 中,对于尚未测量的网站,店铺的 signals.monthlyVisits 为 null(nullReasons not_measured;之前为 0);精确匹配的店铺行的在投广告(所有 type,包括 shop)为其广告概览读取到的主主页在投广告,即其 mainPageActiveAds,店铺自有主页的行也以同样方式读取;对于尚未测量的网站,追踪品牌的 signals.monthlyVisits(以及 GET /v1/brandtrackers 中的 totalTraffic)为 null,并说明缺失原因(not_measured,或对于没有店铺的主页为 no_shop);在 Free 套餐中,任何套餐都没有的主页覆盖人数会保留其原因(eu_uk_only、not_measured),广告主列表中也是如此。
  • Google 广告为 null 的 reach.value 带有 nullReasons(not_reported、eu_only),套餐不包含的覆盖人数除外。
  • 在 GET /v1/shops/{shopId} 中,advertising.mainPageActiveAds 是其广告概览读取到的主主页在投广告数,即 linkedAdvertisers 中其主主页显示的数字(之前是店铺索引中的计数,可能晚一天)。

2026年10月20日的其他更新(TikTok 和邮件):

  • TikTok 行的 metrics.engagementRate 为(点赞 + 评论 + 分享 + 收藏)/ 观看次数,以比例表示(0.0513 表示 5.13%;之前搜索返回的是百分比,GET /v1/tiktok/library/{itemId} 返回的是另一项指标),daysRunning 在两者中都是帖子发布以来的天数。
  • metrics.rank 是该帖子在其创作者所有帖子中的排名(1 为最佳)。
  • 尚未统计粉丝数时,profile.followers 为 null(之前返回 0);对于兜底分类 All,content.category 为 null;content.hashtags 是帖子的标签,每个只出现一次,拼写与描述中一致,且不带其后的标点(记录中的标签取自原有的标签列表,搜索结果行中的标签取自描述)。
  • TikTok 记录新增 profile.adsCount、organicCount 和 avgPostsPerWeek90d,填充 profile.pageCreation;对于背后没有对应 TikTok 内容的数据行(ID 少于 15 位,或发布于 2016年8月31日 22:00 UTC 之前),links 为 null。
  • sortBy=longestRunning 从最早的 TikTok 开始(2016年8月31日 22:00 UTC)。
  • 邮件记录会注明其促销类型、分类和节日活动,其店铺的月访问量、在投广告、商品和 90 天数据与邮件列表中显示的一致,邮件统计的 last90Days 数据也是如此。
  • 对于没有广告总数的 0,邮件行会省略 extra.shopActiveAds(其 nullReasons 为 not_measured),此时邮件记录的 shop.marketing.activeAds 为 null;当店铺数据无法读取时,记录会带有 meta.partial、一条警告以及针对这些数据的 nullReasons failed。
  • 在 MCP 工具 analyze_shop_emails 中,dominant 会分别对营销活动类型、分类、促销类型和节日活动进行排名,并排除 No Promotion 和 No Event。

2026年10月21日更新:

  • 在搜索和 GET /v1/tiktok/library/{itemId} 中,如果返回的观看次数为 0,而点赞、评论、分享或收藏大于 0,则 TikTok 条目的 metrics.views 以及旁边读数为 0 的 likes 和 saves 为 null,并带有 nullReasons not_measured(engagementRate 也是如此);sortBy=views 或 likes 配合 order=asc 时,会列出已统计观看次数的帖子(minViews 1)。
  • 带有 websiteIds 的 Meta 广告搜索会列出店铺自己的广告:店铺主主页及与其同名的官方主页的所有广告,以及其他主页(为其投放广告的创作者、发布者和合作方)中链接到该店铺或其域名下网站的广告;在列表读取到末尾之前,此时搜索的 pagination.total 为所搜索的店铺自有主页的广告数,是一个估算值(pagination.totalEstimated 为 true),如果搜索未包含其任何自有主页,则为 null。
  • 使用 sortBy=longestRunning 时,每批读取的广告都会按 daysRunning 排序。
  • 在 GET /v1/shops/{shopId} 中,advertising.activeAds 统计店铺自有主页(linkedAdvertisers[].isOwnPage)的在投广告;在其 /products 中,排名靠前的畅销商品采用 catalog.bestSellers 中的标题、价格和图片(畅销商品的价格可能是其各变体中的最低价)。
  • 在记录、店铺列表、相似店铺和 lookup 中,如果店铺的流量历史在有大于 0 的销量估算和售出件数时降为 0,导致读数为 0,则其 traffic.monthlyVisits(以及 growth30d)为 null,并带有 not_measured;此类域名仍为 extra.storeWide。
  • 在 GET /v1/ads/{adId} 中,当 pageAnalytics.reachHistory 的最后读数不超过 2 天时,advertiser.totalReach 为该读数(此时 extra.pageRecordReach 保存记录中的总数);extra.advertiserTotalAds 取自主页的列表数据(没有时为 not_measured);在时间窗口内开始投放的广告,其 7 天和 30 天覆盖人数增量即为其全部覆盖人数;低于更短天数增量的增量为 null(not_measured)。
  • 品牌追踪的 statistics.ctaCount 会像 content.callToAction 一样命名每个行动号召(「Shop now」)。

2026年10月21日的其他更新(店铺):

  • 在 GET /v1/shops/{shopId} 中,所有套餐的 advertising.history 都是主主页每日的在投广告(在 Free 套餐中之前统计的是所有主页的),文档说明 advertising.summary 的覆盖人数和支出、extra.adsLaunched30d、extra.totalAds 和 extra.estimatedSpendUsd 涵盖店铺的所有主页,而 advertising.activeAds 统计的是其自有主页。
  • 在记录、店铺列表以及 GET /v1/shops/{shopId}/products 的 meta.productsCount 中,如果店铺的 catalog.productsCount 为 0 且没有列出任何商品,但有访问量、销量估算或售出件数,则其值为 null,并带有 not_measured;sortBy=productsCount 会排除这些店铺,配合 order=asc 时,除非指定了商品数量下限,否则会发送 minProductsCount 1。
  • 如果某个店铺的 Meta 广告搜索被限定在非其自有的主页(trackedPages)并提前结束,会在 meta.warnings 中说明原因,而不会要求缩小范围。
  • 当没有可列出的取值时,GET /v1/filters/shops 会在 meta.warnings 中说明,并指出提供这些取值的列表。

2026年10月21日的其他更新(分页、邮件和广告列表):

  • 当广告主搜索无法继续翻页时,分页不再失败(之前会返回 503,重试也无济于事):前 100 个结果会在一次调用中读取,到达可读取内容末尾的那一页返回 hasMore false,并带有 meta.partial true 和一条说明搜索可读取范围的警告。
  • 起始位置超过搜索精确 total 的页面为空,hasMore 为 false。
  • 按 views 或 likes 排序且 order=asc 的 TikTok 搜索,与 longestRunning 一样从最早的 TikTok 开始(2016年8月31日 22:00 UTC);当 TikTok 条目的观看次数少于点赞数时,其 metrics.views(以及 engagementRate)为 null,并带有 not_measured。
  • 如果返回的是尚未读取正文时的占位内容,邮件的 content.bodyPreview 和 bodyLength 以及记录的 content.body 为 null,并带有 not_measured。
  • 以 UTC 表示的日期时间在列表和记录中采用统一的写法,带有 +00:00,且秒的小数部分不带末尾的零(2026-09-30T00:20:11.507+00:00;您自己的看板、收藏、品牌追踪和分享链接的创建或修改时间与以前一样以 Z 结尾);邮件行会像邮件记录一样带有其分类、促销类型和节日活动的 ID。
  • 所有分页列表都会返回 pagination.hasMore,GET /v1/google-ads/facets/countries 会返回一个 pagination 对象。
  • 请求体不是有效 JSON 时,会返回 400 validation_failed,消息为「The request body is not valid JSON.」,并附带 details.position,即中断处的字符位置。
  • 在 Meta 广告列表中,行的覆盖人数是广告索引的读数,可能比广告记录晚一天;在没有增量数据时,已知覆盖人数旁的覆盖人数增量为 null(not_measured),但广告在其中开始投放的时间窗口除外,此时它获得了其行读数中的全部覆盖人数;在 GET /v1/ads/{adId} 中,已知覆盖人数旁为 null 的增量同样带有 not_measured。

2026年10月22日更新(Free 套餐):

  • API 和 MCP 服务器改为仅限付费套餐:当时,Free 套餐账户的密钥在除 GET /v1/account 外的所有端点都会返回 403 plan_not_eligible,并附带 details.upgradeUrl,且不计任何用量。当时 Free 套餐无法创建任何密钥。
  • 此后 Free 套餐已有变化:Free 套餐一节说明了它现在包含的内容。
  • 在付费套餐中创建的密钥会被保留,账户恢复付费套餐后即可立即恢复使用。Free 套餐账户创建的分享链接也会以同样的方式暂停。

2026年10月22日的其他更新(店铺报告和记录):

  • 在 GET /v1/shops/{shopId}/ad-ranking/series 中,rankDelta 是结束排名减去开始排名(广告排名上升时为负值,与所有广告一致;之前是上升的名次数),improvementPercent 现在改为 improvementPct,以比例表示;/ad-ranking 的每一行都会在 rank 中带有排名窗口期内的这两个数值。
  • 在追踪品牌的 /activity/calendar、日历中的某一天以及 /activity/calendar/days 中,meta.partial 为 true 或 false,meta.partialSources 列出仅读取了部分内容的渠道(见于 /calendar 和单日),预览时间为 UTC,TikTok 帖子的预览时间也是如此。
  • 在 GET /v1/shops/{shopId}/landing-pages/detail 中,activeAds 会回退到该页面的广告,shareOfAds 为 linkedAdsTotal 占 shopActiveAds 的比例,snapshots 统计该页面被截取的天数,lifetimeAds 和 impressions 已移除(展示次数其实就是覆盖人数),为 0 的覆盖人数记为 null,并带有 nullReasons.reach no_eu_reach,linkedAds 带有广告搜索结果行的字段。
  • 店铺的 /feed 会像其广告搜索一样列出它自己的 Meta 广告。
  • GET /v1/market/q4-overview 接受旺季内的任意 from 和 to。
  • 在 /q4-season 中,winners 列出每个促销节点的键及其素材,落地页 URL 带有协议头。
  • Shopify 检测器按不带 www. 的域名读取店铺。
  • GET /v1/advertisers/{advertiserId} 以及追踪品牌的落地页、受众和媒体构成会在 meta.snapshotDate 中返回过去的某一天。
  • 当店铺的 Meta 广告统计数据暂时无法读取时,GET /v1/shops/{shopId} 会返回 meta.partial true 和一条警告:其覆盖人数、据此得出的支出估算以及媒体和格式构成为 null,并带有 nullReasons failed;其各国家广告按搜索结果行的数据计算;该响应不会被缓存,因此下一次调用会重新读取(竞争对手简报带有同样的 meta.partial 和警告)。
  • 位于店铺自有域名或其子域名上的落地页,在 /v1/shops/{shopId}/advertisers 和 /advertisers/{advertiserId}/landing-pages 中为 toShop true;当店铺的域名中没有该域名时,meta.domains 会根据其主页的落地页把它列在最前面(fromLandingPages true,为下限),主页的 shopAds 绝不会少于其落地页指向该店铺的在投广告数(被调高时 shopAdsAtLeast 为 true)。
  • 在 GET /v1/tiktok/library/{itemId} 中,profile.latestPosts[].mediaUrl 是帖子的视频,或为 null 并带有 nullReasons not_reported(之前是封面图片)。
  • 广告主搜索读取其前 100 个结果,并在到达第 100 个结果的那一页说明已结束(hasMore false 及警告),而不是在其后的空白页上说明。
  • 按 views 或 likes 排序且 order=asc 的 TikTok 搜索,现在会排除观看次数未统计(观看次数少于点赞数)的帖子,在列表读取到末尾之前,其 pagination.total 是一个估算值(totalEstimated);其他所有排序都会列出这些帖子,其观看次数为 null。

2026年10月22日的其他更新(已保存内容和广告开头钩子):

  • 新增:GET /v1/boards/search 可在所有看板和您的收藏中查找您保存的内容,依据每个已保存副本所显示的文字(每个词都必须出现,顺序不限;忽略大小写和重音)、其 ID 或其看板名称,并接受 sourceType、boardId、savedFrom 和 savedTo;它只读取您保存的内容,不会查询实时数据(MCP find_saved_items)。
  • 新增:POST /v1/tools/ad-hooks 为您商品的广告撰写三句简短的开头文案,GET /v1/tools/ad-hooks 返回您的额度:付费套餐没有每月上限,但有每分钟限制(429,附带 Retry-After);读取额度不计入用量(MCP write_ad_hooks)。
  • MCP 服务器共有 64 个工具。

2026年10月23日的其他更新(已保存视图和店铺筛选):

  • 新增:GET /v1/views 列出您在网站列表页面上保存的搜索,每个都附带其执行的搜索(request:搜索内容、searchType、sortBy、order 和命名筛选项,格式与搜索端点接受的一致);POST /v1/views 保存一个视图,PATCH /v1/views/{viewId} 重命名、移动或修改视图,DELETE /v1/views/{viewId} 删除视图。它们只读写您自己的视图,不会查询实时数据(MCP list_saved_views)。
  • 店铺搜索接受 excludeCurrencies(货币代码,例如 EUR)、socialNetworks(instagram 或 tiktok:拥有其中任意一个的店铺)和 shopifyPlan(headless)。trafficGrowth 还可读取 90 天(min90、max90),adsGrowth 可读取 7 天(min7、max7),或规则的 period(last90d、last7d);min 和 max 仍为最近 30 天。
  • MCP 服务器共有 65 个工具。

2026年10月23日的其他更新(商品链接):

  • 在 GET /v1/shops/{shopId} 中,catalog.bestSellers 的每一项都带有 handle 和 productUrl,即该商品在店铺自有网站上的页面:当已有地址位于店铺域名(或其子域名)或其 myshopify 域名上时,取该地址;否则在已知其 handle 时为 https://<domain>/products/<handle>;否则为 null。
  • 在 GET /v1/shops/{shopId}/products 中,productUrl 遵循同样的规则,因此不再给出其他网站上的地址;当 handle 不是地址中单独的一段时,其值为 null。

2026年10月23日的其他更新(店铺行、相似店铺和商品):

  • 店铺的 createdAt(店铺记录、店铺行和相似店铺)仅表示 Shopify 店铺的创建日期。对于非 Shopify 网站,给出的日期是开始追踪该网站的日期,而非其创建日期:createdAt 现在为 null(nullReasons tracking_date),该日期改为新的 trackedSince。2000年1月1日或更早的日期是占位值,记为 null(not_reported)。
  • 店铺行的 catalog.bestSellers 带有 handle、productUrl(规则与店铺记录相同)和 rank(1 为最畅销),各行还会像店铺记录一样带有 profile.isHeadless 和 catalog.myShopifyDomain。
  • 店铺行的 googleAds.reach.value 为 null:店铺行不包含 Google 覆盖人数,该数据位于店铺记录中(extra.googleAds.reach)。
  • 相似店铺(GET /v1/shops/{shopId}/similar、记录中的 similarShops)保留其 extra(标志、Trustpilot、销量历史)。如果相似店铺列表在到达末尾前中断,到达该处的那一页会返回 meta.partial 和一条警告。
  • 在 GET /v1/shops/{shopId}/products 中,createdAt 和 publishedAt 之前是以 UTC 形式发送的店铺本地时间(对于使用美国太平洋时间的店铺,早了 8 小时)。现在它们是根据店铺相对 UTC 的时差(meta.shopUtcOffset,例如 -08:00)换算的 UTC 时间,并新增 updatedAt。无法读取时差时,这三个值为 null(local_time),createdAtLocal、publishedAtLocal 和 updatedAtLocal 给出不带时区的店铺本地时间。
  • 仅出现在店铺详情畅销商品中的商品,其 publishedAt 和 updatedAt 为 null(not_reported):原有的这两个值只是其创建时间的副本。
  • 每个商品都会说明它出现在哪些列表中(lists:bestSellers、newest),以及它在畅销商品中的位置(listPosition,1 到 100)。

2026年10月23日的其他更新(店铺记录):

  • 在 GET /v1/shops/{shopId} 中,extra.googleAds.reach.value 之前始终为 null:现在它是店铺的 Google 欧盟覆盖人数,带有 lowerBound 和 upperBound,extra.googleAds 新增 reachHistory、history(按周统计的被标记为在投的 Google 广告)、updatedAt 和 latestAds。
  • 社交网络的 growth30d 现在是粉丝概览的 30 天变化(之前对部分 Facebook 主页使用的是另一个时间窗口:变化为 0.2898 时显示的是 0.3636)。GET /v1/shops/{shopId}/socials 也以 growth30d 提供该值。
  • 店铺的 X 主页为 socials.x。socials.twitter 已更名为 socials.x,但在一个版本内仍会保留,且为同一对象。每个网络都有 url,socials.others 列出店铺的其他链接。
  • tiktok.profileMetrics.percentAds 是百分比(0 到 100);新增的 adsShare 是同一数值的比例形式。tiktok 新增 avatarUrl、history、postsChange30d、postsChange30dPct 和 latestAds;之前为 null 的 tiktok.activity.avgActiveAds7d 和 avgActiveAds30d 现在按日计算其 TikTok 广告的平均值。
  • 付费套餐新增:advertising.summary.firstAdSeenAt、longestRunningDays、medianRunningDays、landingPagesCount,以及在投广告、新投放广告和欧盟覆盖人数的 30 天变化(activeAdsChange30d、launchedChange30d、reachChange30d,每项也有以 Pct 结尾的比例形式),还有 advertising.runningDaysMix、reachCountries、reachHistory、topLandingPages、adsByAgeRange 和 adsByGender。所有套餐新增:advertising.allPagesHistory 和 advertising.topCountries[].ads。
  • 新增:catalog.bestSellers[].rank、sales.hasSubscription、technology.apps[].appStoreUrl 和 categories、profile.isHeadless、extra.updatedAt,以及上述店铺日期中的 createdAt 和 trackedSince。
  • GET /v1/shops/{shopId}/advertisers 新增每个主页的 logoUrl 和 moreLandingPages、在广告概览中没有时补上的 profileUrl,以及每个域名的 landingPagesCount 和 moreLandingPages。

2026年10月23日的其他更新(商品):

  • 新增:GET /v1/products 和 POST /v1/products/query 可搜索和浏览店铺商品,每个商品都附带价格、销量估算、售出件数、评价、畅销排名、Meta 广告、欧盟覆盖人数和支出、销售国家、上架日期和所属店铺,可按 relevance、newest(上架日期)、activeAds 或 spend(最近 30 天的欧盟广告支出)排序(MCP search_products)。searchType 将文本与商品名称或其店铺域名进行匹配,命名筛选项可限定以 USD 计的价格、在投广告数、广告占比、评价数和上架日期,并接受货币和订阅;GET /v1/filters/products 列出它们接受的货币。
  • shop(某个店铺的域名或 ID)在商品搜索和 search_products 中只列出该店铺的商品,且不能同时带有搜索文本。看板会按搜索最后一次显示的样子保存商品(sourceType product),对所有已保存内容的搜索可按其标题和店铺找到它们。
  • MCP 服务器共有 73 个工具。

2026年10月23日的其他更新(商品筛选):

  • 商品搜索还支持更多命名筛选:某月或某日的销量估算(minEstMonthlySales、minEstDailySales 及对应的最大值;按日设置的界限按 30 天折算),每月或每日售出件数(minUnitsSoldMonthly、minUnitsSoldDaily),sellingCountries(销往其中任一国家的商品),shopCountries,评分(minRating、maxRating),minAdsLaunched(过去 30 天上线的 Meta 广告数),minSpendShare,minEuReach(30 天内的欧盟覆盖人数),hasPartnershipAds,promoTypes(百分比折扣)以及 minShopProductsCount,有最大值的筛选均可同时设置最大值;GET /v1/filters/products 也会列出店铺所在国家。
  • sortBy 可取 estSales(销量估算)、adPressure(广告占比)和 bestSelling(在其店铺内的畅销排名,第 1 名在前),searchType 可取 productDescription 和 url。
  • 每个商品都带有其最新广告(advertising.latestAds,图片在 advertising.previewUrls 中)和按周数据(weeks:在投广告、广告占比、欧盟每日支出和覆盖),bestSeller.rankPercent 是其排名占店铺商品总数的百分比(越低越好)。

2026年10月24日更新(参数、读取失败和深层分页):

  • 路由不读取的查询参数现在会以 400 validation_failed 拒绝,错误信息会指出该参数并列出该路由接受的参数;以前它会被直接忽略,不作任何提示(拼错的参数名,或发给不支持筛选的路由的筛选,都会被当作从未发送)。搜索仍像以前一样拒绝未知的命名筛选。普通参数(country、mediaType、active、type)若与某个命名筛选设置同一个筛选,且取值不同,同样会被拒绝。
  • 品牌追踪:/ads 和 /timeline/metadata 拒绝过去的 snapshotDate(它们读取的是广告库的当前状态),/partnership-ads 拒绝未知的 sortBy,/v1/workspace/scaling-ads 拒绝未知的 period,追踪列表拒绝早于 30 天前的 hasNewAdsSince(新广告计数只覆盖 30 天)。/v1/workspace/hooks、/ad-copies 和 /landing-pages 会先按请求的 sortBy 和 order 读取每个品牌的行,再进行合并。网站的跨品牌报告只向会读取 euOnly 的报告发送该参数。
  • 相似店铺拒绝 filters 中的 displayInTrending(该列表没有店铺索引标记),并像店铺搜索一样把增长界限读作百分比;超出单次请求可读范围的 offset(在已读取的店铺之后再往后 600 家)会以 400 拒绝,并说明最深可以读到哪里;读取中途停止的页面带有 meta.partial 和一条警告。店铺的 TikTok 广告库拒绝账号和网站筛选(由店铺自身的范围代替)。
  • 应答中本次未能读取的部分会设置 meta.partial 并附一条警告(该应答不会被缓存),绝不会悄悄留空或返回空列表;读取到的应答不是 JSON 时,返回 503 upstream_error;已保存的店铺、新建的追踪或邮件选项列表读取失败时,返回该错误,绝不返回 not_found。对于单次读取会遗漏行的列表,超出单次读取深度的页面带有 meta.partial,且 hasMore 为 true;品牌的广告文案、合作方和素材测试在单次读取无法覆盖该品牌时,会通过 meta.partial 说明。
  • GET /v1/google-ads/facets/networks 与其他选项列表一样,接受 search、limit 和 offset。/v1/shops/compare 的 metric 为必填(参考文档曾写作可选)。
  • MCP:工具会拒绝其所选类型不读取的参数(shop_report、lookup_filter_ids、market_overview、scan_advertiser)以及相互矛盾的参数(trend_signal 与 sort_by、active_only 与 status、命名参数与 filters);creative_inspiration_pack 会把所有关键词的广告放在一起排序。

2026年10月24日的其他更新(以图搜索):

  • 新增:POST /v1/products/image-search 查找与图片相似的店铺商品,每个结果附带其店铺,最相似的排在前面。以 multipart/form-data 发送图片:不超过 10 MB 的 PNG、JPG 或 WEBP 文件(image),或图片直链(imageUrl),由我们自行下载。每一行都与商品搜索返回的商品行相同,另含 similarity(0.7 至 1)和 matchOnly(商品索引中没有记录的匹配:仅有标题、图片、价格、上架日期和店铺)。
  • 该搜索接受商品搜索的命名筛选、sortBy(relevance、estSales、activeAds、adPressure、newest、spend、spend14d)和 maxPerShop(每家店铺最相似的 1、3、5、10 或 20 个匹配),每页最多 32 条。GET /v1/products/image-search/{searchId} 无需再次发送图片,即可读取其他页、排序、筛选以及按店铺的结果;GET /v1/products/image-search/history 列出您自己最近的以图搜索。
  • 图片在搜索前会被重新写入为不含元数据(EXIF、位置、注释)的 JPEG,图片 URL 绝不会离开我们的服务器。新增错误:400 invalid_image、400 unsupported_url 和 422 unreadable_image。
  • 在 Free 套餐中,以图搜索按相关度排序,不支持筛选。MCP 服务器共有 67 个工具:search_products_by_image 为新增工具。

2026年10月25日更新(点数):

  • API 和 MCP 服务器改为按点数计量,不再按请求计量:1 点 = 返回 1 个结果:一个品牌的详情、一条广告或列表中的一行。空结果不收费。每次调用按其返回的结果计费,各套餐的每月额度以点数计。
  • 计量的应答会发送 X-Usage-Cost、X-Credits-Used、X-Credits-Remaining 和 X-Credits-Source;GET /v1/usage 在 credits.topup.balance 下报告充值点数。
  • 当月点数和充值点数都用完后,返回 402 insufficient_credits,并附 details.upgradeUrl 和 details.topUpUrl。
  • 速率限制由整个工作区共享。

分享链接(shareUrl)会在 https://sellwinners.com 上打开一个任何人都能查看的网页。同一条记录也可通过 /v1/shared/ads/{token} 和 /v1/shared/boards/{token} 以 JSON 获取。所有者使用 Free 套餐的链接会返回 403 forbidden,直到所有者重新使用付费套餐。

身份端点 /v1/me、/v1/usage 和 /v1/workspace 在顶层返回各自的对象,与 requestId 并列。系统端点 /v1、/v1/health 和 /v1/system/freshness 不带 requestId,且 /v1 和 /v1/health 返回不含 data 的普通对象。请求 ID 也会在 X-Request-Id 响应头中发送。联系支持时请提供该 ID。

看板、收藏和品牌追踪还提供 POST、PATCH 和 DELETE 端点。它们接受 JSON 请求体,需以 Content-Type: application/json 发送。

分页

列表端点接受 limit(搜索最多 100;分面列表最多 500,品牌的 /snapshots 最多 365),以及 page(1、2、3…)或 offset 二者之一。两者同时发送时,使用 offset。默认每页条数在各端点下列出。广告、Google 广告、TikTok、邮件和媒体列表的应答格式为:

"pagination": { "page": 2, "limit": 25, "total": 1840, "totalPages": 74, "hasMore": true }

店铺、商品和广告主列表,以及单个广告主的广告,应答格式为:

"pagination": { "limit": 32, "offset": 32, "total": 5120, "hasMore": true }

要获取下一页,请重复同一请求,并将 page 加一,或将 offset 加上 limit。在 POST …/query 请求体中,以字段形式发送 "page" 或 "offset"。最后一页的 hasMore 为 false。当搜索在某个位置之后无法继续读取时,到达该位置的页面会返回 hasMore 为 false、meta.partial 为 true,并附一条警告,说明最多可以读取多少条结果。分页最多可读取一次搜索的前 5,000 条结果(广告主搜索为前 100 条)。如需查看其他结果,请用筛选缩小搜索范围或更改排序。

Google 广告列表返回精确的 total,但按状态或投放天数规则缩小范围的列表除外(参见 Google 广告搜索)。"totalEstimated": true 表示该 total(及其 totalPages)在列表读到末尾之前是估算值,例如店铺的相似店铺,以及针对某个店铺的 Meta 广告搜索(websiteIds)。

看板、收藏和品牌追踪报告接受 page 和 limit,并返回 page、limit、total、totalPages 和 hasMore。分面列表、店铺的 /products 及其 /similar 相似店铺接受 limit 和 offset,并返回 limit、offset、total 和 hasMore。

排序与筛选

搜索端点接受 sortBy 和 order(默认 desc)。传入搜索词时,结果按 relevance 排序,除非您选择其他排序;不带搜索词时,默认为 newest(店铺和商品为 relevance,媒体为 reach)。Google 和 TikTok 广告搜索始终按相关度排序;在这两者中,sortBy 仅在不带搜索词浏览时生效。

每类数据都有一个 POST …/query 端点,接受包含 query、filters、sortBy、order、limit 和 page(或 offset)的 JSON 请求体,用于高级筛选。请使用分面端点查看筛选所接受的取值和 ID。

筛选可以按名称发送:作为 GET 搜索的额外查询参数(?status=active&minDaysRunning=30&mainCountries=US,GB),或作为 POST …/query 请求体的顶层字段({"status": "active", "minDaysRunning": 30})。下文每个端点都列出了它接受的名称。在搜索端点上,端点不支持的筛选名称会返回 400 validation_failed,并列出支持的名称,因此拼写错误绝不会悄悄返回未经筛选的结果;品牌追踪报告则会忽略它们不认识的名称。列表取值可用逗号分隔或用 JSON 数组,日期格式为 2026-01-31,原始的 filters 对象仍可与命名筛选一起使用。

增长筛选(trafficGrowth、adsGrowth、pageReachGrowth、adReachGrowth)接受写作 {"comparison": "greater" | "lower", "value": 50} 或 {"operator": "gte" | "lte", "value": 50} 的规则。取值为过去 30 天的百分比;不支持其他周期。minRankDelta 是广告在 rankDeltaWindow 内至少上升的名次数(默认 7d,也可发送 14d 或 30d)。hideSavedAds 会排除您已保存的广告。所有 categoryIds 筛选的类目 ID 均可从 /v1/facets/categories 获取。

速率限制与点数

套餐每月点数速率限制
Starter5,000每分钟 60 次
Pro15,000每分钟 120 次
Business20,000每分钟 300 次

1 点 = 返回 1 个结果:一个品牌的详情、一条广告或列表中的一行。空结果不收费。每个套餐都包含当月点数,于每月 1 日 00:00 UTC 重置。每次调用按其返回的结果计费,因此较小的 limit 花费更少;MCP 工具调用与 API 一样,按返回的结果计费。点数和速率限制按工作区计算:工作区中的每个人、其所有密钥、API 和 MCP 服务器共享同一个点数池和同一个速率限制。在付费套餐中,工作区所有者可以在账单页面购买充值点数(€1 可购买 120,起购 €10):充值点数在当月点数用完后使用,可以结转,永不过期。

调用点数
搜索或列表每返回 1 条结果计 1 点
单条记录(一个店铺、一条广告、一封邮件)1
空结果0
更改(保存、移动、分享、删除)1(已在看板上的项目:0)
以图搜索每返回 1 条结果计 4 点
店铺的销售历史4
查询、筛选取值(分面)、GET /v1/account 和 GET /v1/usage0
错误或被拒绝的请求0

每个计量的应答都包含:

X-RateLimit-Limit       requests allowed per minute
X-RateLimit-Remaining   requests left this minute
X-Usage-Cost            credits this request cost
X-Credits-Used          credits this request cost (the same number)
X-Credits-Remaining     credits left after this request (monthly and top-up)
X-Credits-Source        recurring, topup or hybrid (when it cost credits)
X-Quota-Limit           credits included this month
X-Quota-Remaining       monthly credits left
X-Quota-Reset           when the monthly credits renew (UTC)
X-Request-Id            the id of this request

超过每分钟速率限制时,您会收到 429 rate_limited,并附 Retry-After 响应头(以秒为单位)。当月点数和充值点数都用完后,您会收到 402 insufficient_credits,并附 details.upgradeUrl 和 details.topUpUrl,直到每月点数重置。您可以随时通过 GET /v1/account 或 GET /v1/usage 查看点数。这些调用不消耗点数,仍会发送 X-Usage-Cost: 0、X-Credits-Used: 0 和 X-Credits-Remaining,即使点数已用完也能使用。

这些限制适用于 API 和 MCP 服务器,付费套餐和 Free 套餐均是如此。网站上的网页应用不计量:在付费套餐中,可在合理使用范围内无限使用。

Free 套餐

Free 套餐包含网页应用和 MCP 服务器(每月 150 点),不含 API。Free 账户可在其控制台中创建用于 MCP 服务器(AI 智能体)的密钥,额度为每月 150 点、每分钟 10 次请求;REST API 仅限付费套餐:使用 Free 密钥时,除 GET /v1/account 外,所有端点都会返回 403 plan_not_eligible,并附 details.feature、details.requiredPlan 和 details.upgradeUrl,且不计任何用量。在付费套餐中创建的密钥在 Free 套餐下会暂停,账户恢复付费套餐后立即重新生效。在 Free 套餐中,搜索只返回前几条结果,Free 不包含其数据的工具或端点会返回付费套餐的提示信息。套餐对比列出了 Free 包含的内容。示例品牌在网站上完整开放。

错误

错误使用标准 HTTP 状态码和 JSON 正文:

{
  "error": {
    "code": "invalid_api_key",
    "message": "This API key is invalid or has been revoked.",
    "requestId": "req_8f2c1a9b4d7e6f3a2b1c0d9e",
    "details": null
  }
}

code 保持稳定,可放心用于分支判断;message 面向人阅读;details 在有额外数据时携带这些数据(400 中被拒绝的字段;402 中的每月点数、其重置日期、upgradeUrl 和 topUpUrl)。

状态code含义
400validation_failed参数、筛选或请求体字段无效。message 会说明是哪一个。
400invalid_image / unsupported_url以图搜索的图片不是不超过 10 MB 的 PNG、JPG 或 WEBP 文件,或其 URL 不是公开的 http 或 https 地址。
401missing_api_key / invalid_api_key未发送密钥,或密钥错误或已被撤销。
402insufficient_credits当月点数和充值点数已用完。每月点数在每月 1 日重置;您可以购买充值点数或升级套餐(details.topUpUrl、details.upgradeUrl)。
403plan_not_eligible您的套餐不包含此功能。在 Free 套餐中,除 GET /v1/account 外的所有请求都是如此。details 会列出 feature、requiredPlan 和 upgradeUrl。
403workspace_public_api_suspended该账户已被停用。请联系支持。
403forbidden此密钥无权执行此操作。
404not_found该资源或 ID 不存在。
409conflict该更改与已保存的内容冲突,例如某个项目已在目标看板上。
422unreadable_image无法读取以图搜索的图片,或无法下载其 URL。请换一个文件或 URL 再试。
429rate_limited本分钟内请求过多。请等待 Retry-After 秒。
500internal_error我们这边出了问题。可以放心重试。
503upstream_error / service_unavailable / service_busy我们这边出现临时问题。可以放心地以退避方式重试(Retry-After)。
503upstream_timeout搜索耗时过长。请减少筛选或收紧筛选条件来缩小范围,或重试。(2026年10月27日之前为 502 和 504。)

媒体 URL

应答中的图片和视频由我们的 CDN 提供,地址为 https://api.sellwinners.com/v1/media/file/…。这些 URL 无需 API 密钥,也不消耗点数,因此您可以直接嵌入 <img> 和 <video> 标签。已不再可用的文件会在一天内以 null 发送,缺失的文件会返回对应媒体类型的空 404。托管在 Shopify CDN 上的商品图片和应用图标也由我们的 CDN 提供。如需显示小图,请添加 ?w=96(缩略图)或 ?w=480(卡片):JPEG、PNG、WebP 或 GIF 图片将以 WebP 格式发送,宽度不超过该值,绝不放大;动图、更小的图片或视频则原样发送。如需扁平、可直接展示的素材列表,请使用 /v1/media。

如需以原尺寸显示图片但减小文件体积,请添加 ?w=full:JPEG、PNG、WebP 或 GIF 图片将以 WebP 格式按原有宽度和高度发送,画质看起来相同,前提是这样至少能节省十分之一的文件大小;否则,以及动图或视频,将原样发送原文件。不带 w 时发送原文件。

发现

把名称、域名或主页 ID 转换为其他端点所需的 ID。

GET/v1/lookup

查找品牌、广告主或店铺. Results are ranked best first (score). A domain: the site with exactly that domain (exact, also outside the shop index), its subdomains, the same name under another suffix, then the sites whose domain only contains it (fuzzy); the shop's own Facebook pages (its main page exact, then its official pages, those named like the shop first), then the pages named like it, exact when they link to the domain. A name: the brand's own site (the website of its page of that name) first, then its own pages as a domain lists them, then the shops and pages found by the name; with the brand's site found, a shop or page that only contains the name is left out, and a site of that name is exact only when it runs ads (else with traffic or ads). Official pages of another name with no live ad come after the pages found by name, and pages that never advertised last. A shop's signals.activeAds are its main page's live ads: read now on the shop's own row when its pages were read (signals.activeAdsSource page: its ad overview's reading, the shop record's mainPageActiveAds; the shop's own pages read theirs the same way), else the shop index's count, which can be older (index); a tracked brand has its page's live ads and its shop's monthlyVisits (null with nullReasons not_measured, also for a site not measured yet, which reads 0, or no_shop for a tracked page with no shop). A shop's signals.monthlyVisits is null for a site the data source has not measured yet (nullReasons not_measured: it reads 0), or one at 0 since its history went to 0 next to a sales estimate and units sold. signals.reach30d and signals.totalReach are EU reach: when one is null, nullReasons says why (eu_uk_only for a page with no EU ads and no reach, not_measured for a window the data source has not counted). To tell rows of one name apart, each carries its picture (logoUrl: a shop's, a page's, on every plan, and a tracked brand's page's), a shop its countryCode and mainMarket and signals.growth30d (its 30-day traffic growth, a fraction; null with nullReasons not_measured when the month before had no visits), a page the shop it links to (advertiser.domain), its mainCountry and signals.facebookLikes, and a tracked brand its shop's id (brandtracker.shopId).
参数说明
q必填 Brand name, domain (allbirds.com) or Facebook page id.
type What to look for (default auto: all of them). 可选值:auto, brandtracker, advertiser, shop。
limit Results, 1-10 (default 10).
curl "https://api.sellwinners.com/v1/lookup?q=allbirds.com&limit=5" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/lookup/facebook-shop

店铺的 Facebook 主页,或主页对应的店铺. Send exactly one of shopId or facebookPageId. primaryShop.monthlyVisits is the shop's monthly visits, null for a site the data source has not measured yet (nullReasons primaryShop.monthlyVisits not_measured); trafficNumber, its old name, keeps the same value for one release. primaryShop.logoUrl is the shop's picture (profilePhotoUrl, its old name, kept one release). With a facebookPageId, primaryShop.adCounts gives the shop's live and total ads on meta, google and tiktok. Each Facebook page has runningAds, totalAds, likes, createdAt and profileUrl.
参数说明
shopId Shop id or domain.
facebookPageId Facebook page id.
limit Results, 1-50 (default 50).
curl "https://api.sellwinners.com/v1/lookup/facebook-shop?shopId=allbirds.com" \
  -H "X-API-Key: YOUR_API_KEY"

店铺

查找 Shopify 店铺,获取商品、流量、销量、社交媒体和广告。

GET/v1/shops

搜索或浏览店铺(留空时显示热门店铺). Searches keep to the shop index, not every website the data source tracks. A domain search (searchType=domain) lists the site with exactly that domain first, with extra.exactDomainMatch true, also when the shop index leaves it out (extra.inShopIndex is false then); not with other filters or another sort. languages takes two-letter codes (fr; names such as french are converted); themeIds, pixelIds and shopifyAppIds take ids from /v1/facets/themes, /pixels and /shopify-apps, not names. Growth ranges are percentages over 30 days (trafficGrowth also takes min90 and max90, over 90 days, and adsGrowth min7 and max7, over 7 days; a rule's period may be last90d or last7d the same way); excludeCurrencies takes currency codes such as EUR, socialNetworks instagram or tiktok (a shop with any of them) and shopifyPlan headless. A listed shop's advertising.activeAds are its main page's live ads as the shop index counts them, which can be a day or more behind its shop record (GET /v1/shops/{shopId} reads them now). A shop row's createdAt is a Shopify store's creation date: a site off Shopify has the day the data source began tracking it in trackedSince instead (createdAt null, nullReasons tracking_date), and a date on or before 2000-01-01, the data source's placeholder, is null (not_reported). Its catalog.bestSellers carry handle, productUrl (its page on the shop's own site, as on the shop record) and rank (1 is the best seller); profile.isHeadless and catalog.myShopifyDomain are as on the shop record. A row's googleAds.reach.value is null: the Google EU reach is on the shop record only (extra.googleAds.reach). A sales sort (estMonthlySales, unitsSold) lists one row per Shopify store: the domains of one myshopify domain read together share the store's sales, so they are one row, the most visited, naming the others in extra.sharedSalesWith (a store's domains further down the list are left out too), and its pagination.total is null until the list is read to its end; sortBy=estMonthlySales with order=asc leaves out the shops with no sales estimate or one under 100 USD (minMonthlySales 100) unless a sales bound is given, and those whose estimate is null; sortBy=growth30d leaves out the shops with no traffic growth or no visits in the latest month (with order=asc, minMonthlyVisits 1 unless a visits minimum is given); sortBy=productsCount leaves out the shops whose count is raised to the best sellers they list (catalog.productsCountAtLeast: the data source ranks by its own count) and those whose count is null (with order=asc, minProductsCount 1 unless a products minimum is given); these have a null pagination.total until the list is read to its end. A sales estimate of 0 next to units sold is null (no_estimate), and so is one too low for its units sold at the shop's own prices: under a hundredth of the median price of its listed best sellers a unit sold (0.50 USD for a shop that lists none), or under a tenth of that price a unit sold while worth under five of its median-priced products: too_low, the data source's floor, not a figure; extra.storeWide marks a domain with 0 visits that carries its Shopify store's sales (a measured 0 or one since its history went to 0, its visits null then, or its store's other domains are named); nullReasons says why an estimate is null (no_estimate, too_low, or not_shopify: sales are estimated for Shopify stores only), and why monthlyVisits (not_measured: a site the data source has not measured yet, or one at 0 since its history went to 0 next to a sales estimate and units sold, its growth30d null too), growth30d (not_measured: no visits the month before; -1, every visit lost, when the latest month has none after a month with visits), unitsSold or productsCount is null (productsCount not_measured also for a count of 0 with no product listed next to visits, a sales estimate or units sold: a count the data source has not made). catalog.productsCountCapped marks the data source's products ceiling (25,001: 25,000 or more), and catalog.productsCountAtLeast a count raised to the best sellers the row lists (the data source's count is behind them).
命名筛选 52额外查询参数
adsGrowthadsTimePeriodcategoryIdscountriescreatedAftercreatedBeforecreationCountriescurrenciesdisplayInTrendingexcludeCreationCountriesexcludeCurrenciesexcludeLanguagesexcludeMarketCountriesexcludePixelIdsexcludeShopifyAppIdshasProductshasTikTokisShopifyPluslanguagesmainMarketCountriesmarketCountriesmaxActiveAdsmaxActiveAdsGrowthmaxAdvertisersCountmaxBestSellerPricemaxEstimatedRevenuemaxMonthlySalesmaxMonthlyVisitsmaxProductsCountmaxTrafficGrowthmaxTrustpilotRatingmaxTrustpilotReviewCountmaxUnitsSoldminActiveAdsminActiveAdsGrowthminAdvertisersCountminBestSellerPriceminEstimatedRevenueminMonthlySalesminMonthlyVisitsminProductsCountminTrafficGrowthminTrustpilotRatingminTrustpilotReviewCountminUnitsSoldpixelIdsshopifyAppIdsshopifyPlansocialNetworksthemeIdstrafficGrowthvisitorCountries
参数说明
search Shop name, domain or keyword.
searchType What the search text is matched against (default name). all is the same as name. 可选值:name, domain, productName, shopContains, all。
country 2-letter ISO code of the country the shop was created in.
sortBy Defaults to relevance when searching, otherwise relevance. 可选值:relevance, newest, monthlyVisits, activeAds, productsCount, growth30d, advertiserCount, spend, estSales, unitsSold, createdAt, estMonthlySales。
order Sort direction (default desc). 可选值:desc, asc。
page Page number, starting at 1.
offset Results to skip. Use it instead of page.
limit Results per page, 1-100 (default 32).
curl "https://api.sellwinners.com/v1/shops?search=shoes&country=US&limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/shops/query

使用高级筛选搜索店铺. Searches keep to the shop index, not every website the data source tracks. A domain search (searchType=domain) lists the site with exactly that domain first, with extra.exactDomainMatch true, also when the shop index leaves it out (extra.inShopIndex is false then); not with other filters or another sort. languages takes two-letter codes (fr; names such as french are converted); themeIds, pixelIds and shopifyAppIds take ids from /v1/facets/themes, /pixels and /shopify-apps, not names. Growth ranges are percentages over 30 days (trafficGrowth also takes min90 and max90, over 90 days, and adsGrowth min7 and max7, over 7 days; a rule's period may be last90d or last7d the same way); excludeCurrencies takes currency codes such as EUR, socialNetworks instagram or tiktok (a shop with any of them) and shopifyPlan headless. A listed shop's advertising.activeAds are its main page's live ads as the shop index counts them, which can be a day or more behind its shop record (GET /v1/shops/{shopId} reads them now). A shop row's createdAt is a Shopify store's creation date: a site off Shopify has the day the data source began tracking it in trackedSince instead (createdAt null, nullReasons tracking_date), and a date on or before 2000-01-01, the data source's placeholder, is null (not_reported). Its catalog.bestSellers carry handle, productUrl (its page on the shop's own site, as on the shop record) and rank (1 is the best seller); profile.isHeadless and catalog.myShopifyDomain are as on the shop record. A row's googleAds.reach.value is null: the Google EU reach is on the shop record only (extra.googleAds.reach). A sales sort (estMonthlySales, unitsSold) lists one row per Shopify store: the domains of one myshopify domain read together share the store's sales, so they are one row, the most visited, naming the others in extra.sharedSalesWith (a store's domains further down the list are left out too), and its pagination.total is null until the list is read to its end; sortBy=estMonthlySales with order=asc leaves out the shops with no sales estimate or one under 100 USD (minMonthlySales 100) unless a sales bound is given, and those whose estimate is null; sortBy=growth30d leaves out the shops with no traffic growth or no visits in the latest month (with order=asc, minMonthlyVisits 1 unless a visits minimum is given); sortBy=productsCount leaves out the shops whose count is raised to the best sellers they list (catalog.productsCountAtLeast: the data source ranks by its own count) and those whose count is null (with order=asc, minProductsCount 1 unless a products minimum is given); these have a null pagination.total until the list is read to its end. A sales estimate of 0 next to units sold is null (no_estimate), and so is one too low for its units sold at the shop's own prices: under a hundredth of the median price of its listed best sellers a unit sold (0.50 USD for a shop that lists none), or under a tenth of that price a unit sold while worth under five of its median-priced products: too_low, the data source's floor, not a figure; extra.storeWide marks a domain with 0 visits that carries its Shopify store's sales (a measured 0 or one since its history went to 0, its visits null then, or its store's other domains are named); nullReasons says why an estimate is null (no_estimate, too_low, or not_shopify: sales are estimated for Shopify stores only), and why monthlyVisits (not_measured: a site the data source has not measured yet, or one at 0 since its history went to 0 next to a sales estimate and units sold, its growth30d null too), growth30d (not_measured: no visits the month before; -1, every visit lost, when the latest month has none after a month with visits), unitsSold or productsCount is null (productsCount not_measured also for a count of 0 with no product listed next to visits, a sales estimate or units sold: a count the data source has not made). catalog.productsCountCapped marks the data source's products ceiling (25,001: 25,000 or more), and catalog.productsCountAtLeast a count raised to the best sellers the row lists (the data source's count is behind them).
命名筛选 52请求体顶层字段
adsGrowthadsTimePeriodcategoryIdscountriescreatedAftercreatedBeforecreationCountriescurrenciesdisplayInTrendingexcludeCreationCountriesexcludeCurrenciesexcludeLanguagesexcludeMarketCountriesexcludePixelIdsexcludeShopifyAppIdshasProductshasTikTokisShopifyPluslanguagesmainMarketCountriesmarketCountriesmaxActiveAdsmaxActiveAdsGrowthmaxAdvertisersCountmaxBestSellerPricemaxEstimatedRevenuemaxMonthlySalesmaxMonthlyVisitsmaxProductsCountmaxTrafficGrowthmaxTrustpilotRatingmaxTrustpilotReviewCountmaxUnitsSoldminActiveAdsminActiveAdsGrowthminAdvertisersCountminBestSellerPriceminEstimatedRevenueminMonthlySalesminMonthlyVisitsminProductsCountminTrafficGrowthminTrustpilotRatingminTrustpilotReviewCountminUnitsSoldpixelIdsshopifyAppIdsshopifyPlansocialNetworksthemeIdstrafficGrowthvisitorCountries
curl -X POST "https://api.sellwinners.com/v1/shops/query" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"limit": 10, "mainMarketCountries": ["US"], "minMonthlyVisits": 50000, "page": 1, "search": "shoes", "sortBy": "monthlyVisits"}'

GET/v1/shops/{shopId}

按 ID 或域名获取单个店铺. Profile, traffic, sales, advertising, technology, TikTok, latest ads and similar shops in one call. A domain is the site with exactly that domain (www. and a path aside), looked up among every website the data source tracks; one it does not reach answers 404 not_found. meta.partial and a warning mean the shop's listing figures (its sales estimate, ad counts and latest ads) could not be read: those stay null. extra.googleAds.liveAds counts the shop's Google ads the data source marks active (some Google no longer shows; GET /v1/google-ads with status=active lists those it shows now), from a Google ad search on the shop when the shop data has none; liveAdsExact is false for a lower bound. advertising.summary.reach30d is the EU reach of the last 30 days, summed by date; totalReach the EU reach since tracking began and extra.adsLaunched30d the ads launched in the last 30 days, summed the same way; these, extra.totalAds and the USD estimates made from the reach are the data source's ad overview's, which covers every page of the shop (linkedAdvertisers, those not its own too), where advertising.activeAds counts its own pages; the reach figures and the estimates made from them are null for a shop with no EU or UK reach (nullReasons eu_uk_only; no_ads for a shop with no Meta ad at all). The USD estimates made from the reach (9 USD per 1,000 people reached) keep two decimals under 10 USD (1.26) and are in whole dollars from 10 USD up. advertising.activeAds counts the live ads of the shop's own pages (its main page and its official pages named like it, linkedAdvertisers[].isOwnPage true: the creators, publishers and partners among its pages run other brands' ads too and are left out), mainPageActiveAds its main page's (its ad overview's reading, as its Main page in linkedAdvertisers shows it; null without one), indexActiveAds the shop index's count of its live ads, the figure shop lists show as advertising.activeAds and the activeAds sort and filter follow (null for a past day or with no search row); linkedAdvertisers[].rank is Main, Official or Whitelisting. advertising.history is the shop's live ads by day as the shop details chart them (the shop index's series, which indexActiveAds ends on; on the Free plan its main page's). nullReasons maps a null field's path to why it is null: not_shopify (sales and products are estimated for Shopify stores only), no_estimate, too_low (the data source's floor, not a figure), not_measured, eu_uk_only, no_ads (a shop with no Meta ad at all), rounded (a follower growth under the rounding of its counts), not_linked (no TikTok profile), not_on_tp (not_measured where the shop's profile carries neither a followers total nor a products count: it does not say), no_reviews, failed (not read this time: its Meta ad statistics when its ad overview could not be read, with meta.partial and a warning, its ads by country then counted as its search row gives them; such an answer is never served again from the cache). A sales estimate of 0 next to units sold is null (no_estimate), and so is one too low for its units sold at the shop's own prices (too_low): under a hundredth of the median price of its listed best sellers a unit sold (0.50 USD for a shop that lists none), or under a tenth of that price a unit sold while worth under five of its median-priced products, in the record and its sales history; extra.storeWide marks a domain with 0 visits that carries its Shopify store's sales (a measured 0 or one since its history went to 0, its visits null then, or a brand store of the same myshopify domain has the visits), extra.sharedSalesWith that brand store. traffic.growth30d is a fraction (-0.1543 is -15.4%) and traffic.history starts at the first month with visits. traffic.monthlyVisits is null for a site the data source has not measured yet (0 visits and no month with visits, not_measured) or no longer measures (0 since its history went to 0, next to a sales estimate and units sold: not_measured, its growth30d null too), traffic.growth30d when the month before had no visits (not_measured), and -1 (every visit lost) when the latest month has none after a month with visits. A social network's growth30d comes from its follower history when the data source gives 0 or none (null with less than 28 days of history, not_measured; null when two readings 30 days apart are equal and the counts are rounded coarser than 0.05%, rounded), and a network's 0 followers is null (not_measured); a network's followers and extra.followersTotal missing from the shop's profile are the followers overview's latest counts (the networks it counts, added up); extra.followersTotal is null when no network is counted (not_measured). catalog.mainCategory is the most specific category of the shop's category ids (the data source's own label only without them, and only when it is a category's name), catalog.categoryLeaves lists its categories as Parent > Leaf, and productsCountCapped marks the data source's ceiling (25,001: 25,000 or more); productsCountAtLeast marks a count raised to the best sellers it lists (the data source's count is behind them, or it has none); productsCount is null (not_measured) for a count of 0 with no product listed next to visits, a sales estimate or units sold, a count the data source has not made. A Trustpilot page with no review has a null rating. tiktok.matchedBy is null for the TikTok profile linked to the shop, socials for the followers of its own social profiles, handle for a profile found by its TikTok or Instagram handle (a match, not a link of the data source). Social networks with neither a handle nor followers are left out; socials.facebook.page is the main page when there is no handle, and a YouTube channel stored by its id has no handle: socials.youtube.channelId and url. similarShops leave out the shop itself and its own sites (the same name under another suffix or subdomain, the same myshopify domain, or one of its brand stores); extra.similarIndexed is false for a shop the similarity index does not hold yet. snapshotDate gives the profile, traffic and Meta ad figures of a past day (meta.snapshotDate); the sales estimate, products, apps and latest ads stay today's. advertising.launchedHistory is the ads launched each day on all the shop's pages, as extra.adsLaunched30d counts them. extra.googleAds carries the Google ads by country (ads and reach), network, targeting and format, with totalAds and newAds; extra.tabCounts counts its products and ads by kind and extra.trafficCountriesCount the countries its visits come from. linkedAdvertisers carry each page's totalAds, facebookLikes, profileUrl, createdAt and adLibraryUrl. catalog.bestSellers lists the shop's best sellers, each with imageUrl, title, price, currency, handle (the last part of its address on the shop, null when not known) and productUrl: its page on the shop's own site, the address the data source gives when it is on the shop's domain (or a subdomain of it) or its myshopify domain, else https://<domain>/products/<handle> when its handle is known, else null. Each best seller also has rank (1 is the best seller, as the shop details rank them). createdAt is a Shopify store's creation date: a site off Shopify has the day the data source began tracking it in trackedSince (createdAt null, nullReasons tracking_date), and a date on or before 2000-01-01, the data source's placeholder, is null (not_reported); profile.isHeadless marks a headless store and extra.updatedAt is the day the data source last read the shop. socials.x is the shop's X profile (socials.twitter is the same, its name before October 23, 2026); each network has url, its profile's address, and socials.others lists the other links (platform is the site's name, such as snapchat); a network's growth30d is the followers overview's 30-day change (a fraction). sales.hasSubscription says whether the shop sells subscriptions (null when not read). technology.apps carry appStoreUrl (the app's page on the Shopify App Store) and categories. extra.googleAds.reach is the shop's Google EU reach now, with lowerBound and upperBound (reported for ads shown in the EU only; null with not_reported when the data source reports none), reachHistory the same by week, history its Google ads marked active by week, updatedAt the day its Google figures were read and latestAds its latest Google ads. On paid plans advertising.summary has firstAdSeenAt, longestRunningDays, medianRunningDays, landingPagesCount and the changes over 30 days of its live ads, launched ads and EU reach (activeAdsChange30d, launchedChange30d, reachChange30d, and each as a fraction, ...Pct), every page's as the ad overview counts them (advertising.allPagesHistory), not its own pages' alone; advertising has runningDaysMix (its ads by days running), reachCountries (its EU reach by country, share a fraction), reachHistory (its EU reach by day), topLandingPages (with share and screenshotUrl), adsByAgeRange and adsByGender (in ads, shares as fractions); these are null on the Free plan, and failed when the ad statistics could not be read. advertising.allPagesHistory is every page's live ads by day, and advertising.topCountries[].ads its ads targeting each country. tiktok.profileMetrics.adsShare is percentAds as a fraction (percentAds is a percent, 0 to 100); tiktok.avatarUrl, history (the profile's posts, views and likes by day), postsChange30d and postsChange30dPct (a fraction) describe the linked profile; tiktok.activity.avgActiveAds7d and avgActiveAds30d average the shop's TikTok ads by day and tiktok.latestAds lists its latest TikTok ads.
参数说明
shopId必填 Shop id or domain, such as allbirds.com.
snapshotDate A past day (YYYY-MM-DD): the profile, traffic and Meta ad figures as they were then.
curl "https://api.sellwinners.com/v1/shops/allbirds.com" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shops/{shopId}/products

店铺商品. sortBy=popularity lists the best sellers the shop's details rank first (rank 1 is the best seller), then its other listed products, unranked (meta.order bestSellers); without that ranking the products are in the data source's order, unranked (meta.order listed). When the product lists are empty, the best sellers are the list (meta.source bestSellers). Every order lists the same products (the ranked best sellers, the other best sellers, then the newest products), each with its rank, once: a ranked best seller has the title, price and image of the shop record's catalog.bestSellers, and a best seller listed among the newest products too keeps its best seller's price and image. A best seller's price is the one the shop's best sellers list, which can be the lowest of its variants' prices; the other products have the price the products list reads, at times another variant's. meta.productsCountCapped marks the data source's ceiling (25,001: 25,000 or more), and meta.productsCountAtLeast a meta.productsCount raised to the products listed (the data source counts fewer). meta.productsCount is null for a count of 0 with no product listed next to visits, a sales estimate or units sold, a count the data source has not made, as on the shop record (meta.nullReasons.productsCount not_measured; not_shopify off Shopify). productUrl is the product's page on the shop's own site, as in the shop record's catalog.bestSellers: the address the data source gives when it is on the shop's domain (or a subdomain of it) or its myshopify domain, else https://<domain>/products/<handle> when its handle is known, else null (never an address on another site); handle is null when it is no single part of an address. When the shop's own domains could not be read this time, every productUrl is null, with meta.partial true. createdAt, publishedAt and updatedAt are UTC: the data source writes the shop's own clock, put in UTC with the shop's offset from UTC (meta.shopUtcOffset, such as -08:00, read from a product its shop details list too); when no offset can be read, the three are null (nullReasons local_time) and createdAtLocal, publishedAtLocal and updatedAtLocal give the shop's clock, without a zone. A best seller listed by the shop details only has their createdAt; its publishedAt and updatedAt are null (not_reported: the data source's are copies of the creation time). lists names the lists a product is in (bestSellers, newest) and listPosition its place among the best-selling products (1 to 100).
参数说明
shopId必填 Shop id or domain, such as allbirds.com.
limit Results per page, 1-100 (default 32).
offset Results to skip.
sortBy Defaults to popularity (best sellers first). 可选值:popularity, price, createdAt。
order Sort direction: asc by default for popularity (best sellers first), desc for price and createdAt. 可选值:asc, desc。
snapshotDate A past day (YYYY-MM-DD): the products as the shop listed them then, unranked.
curl "https://api.sellwinners.com/v1/shops/allbirds.com/products?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shops/{shopId}/similar

与指定店铺 ID 或域名相似的店铺. The shop itself and its own sites (the same name under another suffix or subdomain, the same myshopify domain, or one of its brand stores) are left out, and the page is filled from further down the list: offset and limit count the list without them, so pages never repeat or skip a shop. pagination.total is one total for every order and page: until the list is read to its end in some order, an estimate (pagination.totalEstimated true), the data source's count less the own sites the first read met; then the exact count. When the reads stop before the page fills (a list made mostly of the shop's own sites), the page holds what was found and meta.partial is true, with pagination.hasMore true: the next page reads on. similarityScore is null when the data source gives none. season, or seasonFrom and seasonTo, list the shops similar over a season (meta.season); filters, market and excludeShopIds narrow the full list. Each row's shop is the shop's search row with its extra (logo, Trustpilot, sales history; on the Free plan without its ad averages and TikTok and Google ad history), its createdAt a Shopify store's creation date (trackedSince for a site off Shopify), its catalog.bestSellers with handle, productUrl and rank. When the data source stops the list before its end, the page that reaches that point has meta.partial true and a warning.
参数说明
shopId必填 Shop id or domain, such as allbirds.com.
sortBy Defaults to relevance. 可选值:relevance, monthlyVisits, activeAds, growth30d, productsCount, createdAt。
order Sort direction (default desc). 可选值:desc, asc。
offset Results to skip.
limit Results per page, 1-100 (default 32).
season bfcm-YYYY: the shops similar over that Q4 season (November 1 to December 4).
seasonFrom First day of a season (YYYY-MM-DD).
seasonTo Last day of a season (YYYY-MM-DD).
filters Shop filters of the full list, as a JSON object, such as {"minMonthlyVisits": 1000000}.
market 2-letter ISO code of the market.
excludeShopIds Shops to leave out, comma-separated.
curl "https://api.sellwinners.com/v1/shops/allbirds.com/similar?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shops/{shopId}/advertisers

与店铺关联的广告主主页. Each page's live and total ads, likes, profile, creation date and ad library link. With the shop's page selector each page also carries shopAds and landingPages, and meta.domains lists the shop's domains with their ads, pages and landing pages. A landing page on the shop's own domain (or a subdomain of it) is toShop true, and when the data source's domains leave that domain out, it comes first with its pages' landing pages on it (fromLandingPages true: its counts are those of the landing pages listed, a lower bound; isShopify null). A page's shopAds is never fewer than the live ads of its landing pages that are toShop: a count of the data source's raised to them is marked shopAdsAtLeast true (a lower bound). With the selector each page also carries logoUrl (its picture), profileUrl (the ad overview's, else the selector's) and moreLandingPages (count and ads of its landing pages past those listed), and each domain landingPagesCount and moreLandingPages. The selector's further pages are read too, five reads at most.
参数说明
shopId必填 Shop id or domain, such as allbirds.com.
limit Results, 1-100 (default 100).
curl "https://api.sellwinners.com/v1/shops/allbirds.com/advertisers" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shops/{shopId}/socials/history

社交媒体粉丝历史.
参数说明
shopId必填 Shop id or domain, such as allbirds.com.
period One point per day, week or month. 可选值:day, week, month。
days How many days back, 7-365 (default 90).
curl "https://api.sellwinners.com/v1/shops/allbirds.com/socials/history?days=90" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shops/{shopId}/sales/history

预估销量历史. The data source estimates sales daily: period=week has one point per week (its Monday), period=month one per month, each the bucket's last daily estimate. An estimate of zero next to units sold is null.
参数说明
shopId必填 Shop id or domain, such as allbirds.com.
period One point per day, week or month. 可选值:day, week, month。
days How many days back, 7-365 (default 90).
curl "https://api.sellwinners.com/v1/shops/allbirds.com/sales/history?days=90" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shops/{shop_id}/socials

店铺的社交账号及粉丝数.
参数说明
shop_id必填 Shop id or domain, such as allbirds.com.
curl "https://api.sellwinners.com/v1/shops/SHOP_ID/socials" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shops/{shop_id}/tiktok

店铺 TikTok 概览.
参数说明
shop_id必填 Shop id or domain, such as allbirds.com.
curl "https://api.sellwinners.com/v1/shops/SHOP_ID/tiktok" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shops/{shop_id}/apps

店铺使用的 Shopify 应用.
参数说明
shop_id必填 Shop id or domain, such as allbirds.com.
curl "https://api.sellwinners.com/v1/shops/SHOP_ID/apps" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shops/{shop_id}/pixels

店铺上的追踪像素.
参数说明
shop_id必填 Shop id or domain, such as allbirds.com.
curl "https://api.sellwinners.com/v1/shops/SHOP_ID/pixels" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shops/{shop_id}/stores

同一品牌的其他店铺.
参数说明
shop_id必填 Shop id or domain, such as allbirds.com.
curl "https://api.sellwinners.com/v1/shops/SHOP_ID/stores" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shops/{shop_id}/media-mix

店铺的广告格式构成.
参数说明
shop_id必填 Shop id or domain, such as allbirds.com.
curl "https://api.sellwinners.com/v1/shops/SHOP_ID/media-mix" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shops/{shop_id}/emails

店铺发送的邮件. The shop's emails of every campaign type (Marketing, Newsletter, Welcome and Abandoned Cart), newest first.
参数说明
shop_id必填 Shop id or domain, such as allbirds.com.
page Page number, starting at 1.
offset Results to skip. Use it instead of page.
limit Results per page, 1-100 (default 25).
curl "https://api.sellwinners.com/v1/shops/SHOP_ID/emails?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shops/compare

并排比较多家店铺的同一指标. The brand tracker's compare chart: each shop's value (googleLiveAds: the Google ads it runs, as the data source counts them; tiktokPosts: its TikTok posts; metaReach: its Meta reach) with its change (delta) when the data source gives one, in the order asked.
参数说明
shopIds必填 1 to 10 shop ids or domains, comma-separated.
metric必填 The figure compared. 可选值:googleLiveAds, tiktokPosts, metaReach。
snapshotDate A past day (YYYY-MM-DD) instead of today.
curl "https://api.sellwinners.com/v1/shops/compare?shopIds=allbirds.com%2Con.com" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/tools/shopify-apps

按网址查询店铺使用的 Shopify 应用. Any store, tracked or not: each app's name, icon and a link to find it on the Shopify App Store. The store is read at its domain without www. (meta.url).
参数说明
url必填 The store's address.
curl "https://api.sellwinners.com/v1/tools/shopify-apps?url=allbirds.com" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/tools/shopify-theme

店铺是否基于 Shopify 及其主题. isShopify, theme and isHeadless (a storefront built apart from Shopify's themes). Any store, tracked or not, read at its domain without www. (url).
参数说明
url必填 The store's address.
curl "https://api.sellwinners.com/v1/tools/shopify-theme?url=allbirds.com" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shops/{shopId}/feed

店铺的最新广告和邮件. The newest Meta ads, Google ads, TikTok ads and emails of the shop (metaAds, googleAds, tiktok, emails), each with its total (totalExact false for a lower bound), as their searches show them. metaAds are the shop's own, as its ad searches list them: every ad of its own pages, and the ads of its other pages (creators, publishers and partners, who run other brands' ads too) that link to the shop or to a site on its domain; when such another ad is left out, metaAds.total counts the shop's own ads listed.
参数说明
shopId必填 Shop id or domain, such as allbirds.com.
snapshotDate A past day (YYYY-MM-DD) instead of today.
since Count the totals from this day (YYYY-MM-DD).
curl "https://api.sellwinners.com/v1/shops/allbirds.com/feed" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shops/{shopId}/q4-season

店铺 Q4 旺季的每日数据. November 1 to December 4 of the year, for the shop's main Facebook page (or advertiserIds): the Meta ads live and launched each day (those about Black Friday too), their reach, the creatives, landing pages and products launched, the season's sales (operations) and its best creatives, winners (each sale's key and its creatives), landing pages (url as the season's landing pages write it) and products as the data source lists them, empty when it lists none (the season's creatives lists every creative).
参数说明
shopId必填 Shop id or domain, such as allbirds.com.
year The season's year (default the latest begun).
euOnly Only the ads shown in the EU and the UK. 可选值:true, false。
advertiserIds Only these Facebook pages of the shop, comma-separated.
curl "https://api.sellwinners.com/v1/shops/allbirds.com/q4-season" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shops/{shopId}/q4-season/landing-pages

店铺 Q4 旺季的落地页. The season's landing pages by the date each appeared: url, ads, screenshotUrl, isBlackFriday and blackFridayStartedAt. meta.total counts them all.
参数说明
shopId必填 Shop id or domain, such as allbirds.com.
year The season's year (default the latest begun).
euOnly Only the ads shown in the EU and the UK. 可选值:true, false。
advertiserIds Only these Facebook pages of the shop, comma-separated.
from First day (default November 1).
to Last day (default December 4).
curl "https://api.sellwinners.com/v1/shops/allbirds.com/q4-season/landing-pages" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shops/{shopId}/q4-season/creatives

店铺 Q4 旺季的素材. The season's creatives by the date each was launched: adId, hook, thumbnailUrl, mediaType, reach and isActive. meta.total counts them all.
参数说明
shopId必填 Shop id or domain, such as allbirds.com.
year The season's year (default the latest begun).
euOnly Only the ads shown in the EU and the UK. 可选值:true, false。
advertiserIds Only these Facebook pages of the shop, comma-separated.
from First day (default November 1).
to Last day (default December 4).
curl "https://api.sellwinners.com/v1/shops/allbirds.com/q4-season/creatives" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shops/{shopId}/ad-texts

店铺的开场钩子、文字稿、标题或广告文案. The texts the ads of the shop's own pages use, or of those of its pages advertiserIds names. A hook, a headline and a transcript (fullText, with its hook) have usageCount, longestRunning, euReach, firstUsedAt, lastUsedAt and sampleAd; an ad copy has adCopy, usageCount, longestRunning and hash (the adCopyHashes filter of an ad search takes it).
参数说明
shopId必填 Shop id or domain, such as allbirds.com.
kind必填 The texts to list. 可选值:hook, transcript, headline, ad-copy。
advertiserIds Only these Facebook pages of the shop, comma-separated.
euOnly Over the ads shown in the EU or the UK only.
sortBy The order (default usageCount); an ad copy takes usageCount. 可选值:usageCount, longestRunning, totalImpressions, firstUsedAt, lastUsedAt。
order Descending by default. 可选值:desc, asc。
timePeriod The ads counted (default live); not with ad-copy. 可选值:live, last24h, last3d, last7d, last30d, last3m, last6m, last1y。
page Page number, starting at 1.
limit Results per page, 1-100 (default 25).
curl "https://api.sellwinners.com/v1/shops/allbirds.com/ad-texts?kind=hook&limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shops/{shopId}/landing-pages

店铺的落地页. The landing pages of the shop's Meta ads, the most used first, of all its pages or of those advertiserIds names: url, displayUrl, path, status, activeAds, ads (recorded), longestRunningDays, activeSince, screenshotUrl, reach (the EU and UK reach of its ads, null with nullReasons.reach), shareOfAds (a fraction), targetedCountries, snapshots (the days it was captured) and trend (its live ads day by day, its latest 30 days). meta.total counts them all.
参数说明
shopId必填 Shop id or domain, such as allbirds.com.
advertiserIds Only these Facebook pages of the shop, comma-separated.
euOnly Count the ads shown in the EU or the UK only.
curl "https://api.sellwinners.com/v1/shops/allbirds.com/landing-pages" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shops/{shopId}/landing-pages/detail

店铺广告的单个落地页. landingPage (its ads, live ads, shareOfAds, best rank, reach, countries, technologies and snapshots, the days it was captured), linkedAds (the newest ads linking to it, as ad searches show them), linkedAdsTotal, shopActiveAds, linkedProducts, screenshots and snapshotDates. shareOfAds is linkedAdsTotal out of shopActiveAds (a fraction), null when the shop counts fewer. reach is the EU and UK reach of its ads, null when none is counted (nullReasons.reach no_eu_reach). meta.partial, with a warning, when some linked ads could not be read in full.
参数说明
shopId必填 Shop id or domain, such as allbirds.com.
url必填 The landing page's address.
limit Linked ads, 1-50 (default 12).
snapshotDate One of its snapshotDates (YYYY-MM-DD): its screenshots as they were then.
euOnly Its figures over the ads shown in the EU or the UK only.
curl "https://api.sellwinners.com/v1/shops/allbirds.com/landing-pages/detail?url=https%3A//www.allbirds.com/" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shops/{shopId}/advertisers/{advertiserId}/landing-pages

店铺某个 Facebook 主页的落地页. The pages the advertiser's ads send people to, the most used first: url, ads, activeAds and toShop (the shop's own site: one of the sites the data source counts as the shop's, or on the shop's own domain or a subdomain of it).
参数说明
shopId必填 Shop id or domain, such as allbirds.com.
advertiserId必填 Facebook page id of an advertiser or ad.
limit Results, 1-100 (default 25).
curl "https://api.sellwinners.com/v1/shops/allbirds.com/advertisers/ADVERTISER_ID/landing-pages" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shops/{shopId}/ad-ranking

店铺在某时间窗口内的 Meta 广告排名. The shop's ads as ad searches show them, ranked over the window (meta.from, meta.to): those of its own pages (its main page and its official pages named like it: the creators, publishers and partners among its pages run other brands' ads too), or of those of its pages advertiserIds names (meta.advertiserIds). Each row's rank.rankDelta and rank.improvementPct are its change over the window, as the rank series gives them: its end rank minus its start rank in the window, the series' start and end (negative when it moved up, as in every ad), and the fraction of its start rank gained.
参数说明
shopId必填 Shop id or domain, such as allbirds.com.
mode best-rank (default): the best rank each reached; rank-delta: the places each gained. 可选值:best-rank, rank-delta。
days The window, up to yesterday (default 7). 可选值:7, 14, 30。
advertiserIds Only these Facebook pages of the shop, comma-separated.
page Page number, starting at 1.
limit Results per page, 1-100 (default 24).
curl "https://api.sellwinners.com/v1/shops/allbirds.com/ad-ranking?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/shops/{shopId}/ad-ranking/query

店铺 Meta 广告排名(可筛选). As GET /v1/shops/{shopId}/ad-ranking: mode, days, advertiserIds, page and limit in the body, with euOnly (the ads shown in the EU or the UK, ranked among those) and the filters of POST /v1/ads/query.
参数说明
shopId必填 Shop id or domain, such as allbirds.com.
curl -X POST "https://api.sellwinners.com/v1/shops/allbirds.com/ad-ranking/query" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shops/{shopId}/ad-ranking/series

店铺部分广告的每日排名. Each ad's rank among the live ads of the ranking's pages (the shop's own pages, or those advertiserIds names) on the first and last day (start, end), observedDays, rankDelta (end.rank minus start.rank: negative when the ad moved up, as in its ranking row and every ad), improvementPct (the fraction of start.rank gained) and every day's rank (points).
参数说明
shopId必填 Shop id or domain, such as allbirds.com.
adIds必填 Up to 24 ad ids, comma-separated.
days The window, up to yesterday (default 7). 可选值:7, 14, 30。
advertiserIds Only these Facebook pages of the shop, comma-separated.
curl "https://api.sellwinners.com/v1/shops/allbirds.com/ad-ranking/series" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shops/{shopId}/creative-testing

店铺每日的素材测试. The shop's Meta ads grouped by launch day, newest first: totalAds, activeAds, longRunningActiveAds (running a week or more after launch), isWinner, wasWinner, daysRunning and reach (min, avg, max, total), and asOf, to pass to the day's ads; the ads of its own pages (its main page and its official pages named like it), or of those of its pages advertiserIds names.
参数说明
shopId必填 Shop id or domain, such as allbirds.com.
mediaType Defaults to all. 可选值:all, image, video。
status 可选值:all, active, inactive。
keywords Words in the ads, comma-separated.
keywordMode 可选值:any, all。
advertiserIds Only these Facebook pages of the shop, comma-separated.
page Page number, starting at 1.
limit Results per page, 1-100 (default 25).
curl "https://api.sellwinners.com/v1/shops/allbirds.com/creative-testing?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shops/{shopId}/creative-testing/{date}

店铺某次素材测试中的广告. batch (the day's figures) and ads (the ads launched that day, as ad searches show them), of the shop's own pages or those advertiserIds names.
参数说明
shopId必填 Shop id or domain, such as allbirds.com.
date必填 A day, as YYYY-MM-DD.
mediaType Defaults to all. 可选值:all, image, video。
status 可选值:all, active, inactive。
keywords Words in the ads, comma-separated.
keywordMode 可选值:any, all。
advertiserIds Only these Facebook pages of the shop, comma-separated.
asOf The asOf of the day's creative-test row (default the latest).
limit Ads, 1-50 (default 50).
curl "https://api.sellwinners.com/v1/shops/allbirds.com/creative-testing/2026-10-19" \
  -H "X-API-Key: YOUR_API_KEY"

市场

整个市场的每日汇总及其 Q4 旺季数据。

GET/v1/market/overview

整个市场的每日数据. Each day: metaActiveAds, metaNewAds, metaReach (the EU and UK reach the day's Meta ads gained) and emails. 366 days at most. The totals run a few weeks behind: meta.latestDate is the last day with totals.
参数说明
from First day (YYYY-MM-DD; default 365 days before to).
to Last day (YYYY-MM-DD; default today).
curl "https://api.sellwinners.com/v1/market/overview" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/market/q4-overview

整个市场在 Q4 旺季的每日数据. November 1 to December 4 (from and to may be any days inside it): bfcmContentIndex, shopsFirstBfcmMention, metaNewAds, metaNewBfcmAds, metaActiveBfcmAds, metaBfcmAdvertisers, metaBfcmReach, emails and bfcmEmails, day by day.
参数说明
year The season's year (default the latest begun).
from First day (default November 1).
to Last day (default December 4).
curl "https://api.sellwinners.com/v1/market/q4-overview" \
  -H "X-API-Key: YOUR_API_KEY"

Meta 广告

Facebook 和 Instagram 广告素材,附媒体文件、覆盖人数和排名。

GET/v1/ads

搜索 Meta 广告. A search returns one ad per brand unless maxAdsPerBrand is raised (0: no cap); trackedPages (Facebook page ids) and websiteIds (shop ids) narrow it to those brands, with all their ads: a shop's are its own (every ad of its main page and of its official pages named like it, and the ads of its other pages, creators, publishers and partners who ran its ads, that link to the shop or to a site on its domain; trackedPages narrows the search to the pages it names; until the list is read to its end, its pagination.total is then the ads of the shop's own pages searched, an estimate, pagination.totalEstimated true, as the ads of its other pages that link to it add to them, or null when the search names none of its own pages). sortBy=longestRunning takes order=desc only; each batch of ads read from the data source is put in order of daysRunning (its own order can be a day off); sortBy=adRank lists the best rank (1) first, whatever the order. metrics.reach is EU reach: null for an ad not shown in the EU or the UK, with its spend (nullReasons eu_uk_only), and for an EU ad whose reach is not counted yet (not_measured). The ad's targeting decides: an ad that targets no EU or UK country is eu_uk_only, one that targets one, or whose targeting is not known yet, not_measured in its first 7 days and not_reported after. media.type is carousel for an ad of more than one image or video (the thumbnails of its videos aside). advertiser.instagramFollowers is null for a page with no Instagram account or none the data source knows. extra.startIsFloor marks an ad started on January 1, 2018, the first day of the data source's Meta ad dates: it may be older. metrics.estimatedSpend keeps two decimals under 10 USD (1.26) and is in whole dollars from 10 USD up. A row's reach is the ad index's reading, which can be a day behind the ad's record (GET /v1/ads/{adId}). A row's metrics.reachDelta1d, reachDelta7d and reachDelta30d are null beside a known reach when the data source lists none (nullReasons not_measured), except over a window the ad started in, where it gained all the reach its row reads; the ad's record reads them from its reach history. A row's rank.lastRank is the last rank of an ad not ranked now (rank.currentTotal and rank.lastRankedAt are null on rows: the ad's record has them); metrics.reachGrowth7d, the EU reach growth over 7 days as a fraction, is null beside a known reach when the data source lists none (nullReasons not_measured); advertiser.countryShares is where the page's ads run, each country with its share of the page's ads as a fraction (an ad targets several countries, so the shares can add up to more than 1). growthRank takes rising, stable or falling; ageRanges and excludeAgeRanges 13-17, 18-24, 25-34, 35-44, 45-54, 55-64 and 65+; minPageAdsLaunched and maxPageAdsLaunched count the ads the page launched over pageAdsLaunchedPeriod (yesterday, last7d, last14d, last30d, last90d); adsTimePeriod takes last7d, last14d or last30d; reachPeriod, spendPeriod, reachPerPagePeriod and spendPerPagePeriod last24h, last7d or last30d (no period: all time); shopifyStoresOnly keeps the ads of Shopify stores. Growth ranges are percentages over 30 days; adReachGrowth also takes min7 and max7 (7 days) and adsGrowth min90 and max90 (90 days).
命名筛选 114额外查询参数
adCopyHashesadCountriesadLanguageadRankBasisadRankModeadReachGrowthadsGrowthadsTimePeriodageRangescategoryIdscountriescpmcreatedAftercreatedBeforecreationCountryctaexcludeAdLanguagesexcludeAgeRangesexcludeFormatsexcludePixelsexcludeShopifyAppsexcludeThemesformatsgrowthRankhideDecliningRankAdshideLowReachhideNonEuUkAdshideSavedAdslandingPageslastSeenAfterlastSeenBeforelinkedDomainmainCountriesmarketmaxAdOrdermaxAdRankValuemaxAdReachGrowthmaxAdsmaxAdsPerBrandmaxAgemaxBestSellerPricemaxDatemaxDaysRunningmaxDescriptionLengthmaxDuplicatesmaxFacebookLikesmaxFbPageCreationDatemaxInstagramFollowersmaxLastSeenDatemaxMonthlyVisitsmaxPageAdsGrowthmaxPageAdsLaunchedmaxPageReachGrowthmaxProductsmaxProductsCountmaxReachmaxReachPerPagemaxSpendmaxSpendPerPagemaxTrafficmaxTrafficGrowthmaxVideoDurationmediaTypemediaTypesminAdOrderminAdReachGrowthminAdsminAgeminBestSellerPriceminDateminDaysRunningminDescriptionLengthminDuplicatesminFacebookLikesminFbPageCreationDateminInstagramFollowersminLastSeenDateminMonthlyVisitsminPageAdsGrowthminPageAdsLaunchedminPageReachGrowthminProductsminProductsCountminRankDeltaminReachminReachPerPageminSpendminSpendPerPageminTrafficminTrafficGrowthminVideoDurationpageAdsLaunchedPeriodpageReachGrowthpartnerIdspartnerspixelsplatformplatformsrankDeltaWindowreachPerPagePeriodreachPeriodsexshopCreatedAftershopCreatedBeforeshopifyAppsshopifyStoresOnlyspendPerPagePeriodspendPeriodstatustechnologiesthemestrackedPagestrafficGrowthwebsiteIds
参数说明
search Words in the ad copy, brand or landing page.
mediaType Creative type. 可选值:image, video, dco, carousel, dpa。
country 2-letter ISO country code.
active Running (true) or stopped (false) ads. 可选值:true, false。
sortBy Defaults to relevance when searching, otherwise newest. 可选值:relevance, newest, reach, reachGrowth7d, reachDelta7d, longestRunning, duplicates, spend, adRank, rankDelta7d, rankDelta14d, rankDelta30d, createdAt, relevanceScore, mostDuplicates, adOrder。
order Sort direction (default desc). 可选值:desc, asc。
page Page number, starting at 1.
offset Results to skip. Use it instead of page.
limit Results per page, 1-100 (default 25).
curl "https://api.sellwinners.com/v1/ads?search=skincare&country=US&limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/ads/query

使用高级筛选搜索 Meta 广告. A search returns one ad per brand unless maxAdsPerBrand is raised (0: no cap); trackedPages (Facebook page ids) and websiteIds (shop ids) narrow it to those brands, with all their ads: a shop's are its own (every ad of its main page and of its official pages named like it, and the ads of its other pages, creators, publishers and partners who ran its ads, that link to the shop or to a site on its domain; trackedPages narrows the search to the pages it names; until the list is read to its end, its pagination.total is then the ads of the shop's own pages searched, an estimate, pagination.totalEstimated true, as the ads of its other pages that link to it add to them, or null when the search names none of its own pages). sortBy=longestRunning takes order=desc only; each batch of ads read from the data source is put in order of daysRunning (its own order can be a day off); sortBy=adRank lists the best rank (1) first, whatever the order. metrics.reach is EU reach: null for an ad not shown in the EU or the UK, with its spend (nullReasons eu_uk_only), and for an EU ad whose reach is not counted yet (not_measured). The ad's targeting decides: an ad that targets no EU or UK country is eu_uk_only, one that targets one, or whose targeting is not known yet, not_measured in its first 7 days and not_reported after. media.type is carousel for an ad of more than one image or video (the thumbnails of its videos aside). advertiser.instagramFollowers is null for a page with no Instagram account or none the data source knows. extra.startIsFloor marks an ad started on January 1, 2018, the first day of the data source's Meta ad dates: it may be older. metrics.estimatedSpend keeps two decimals under 10 USD (1.26) and is in whole dollars from 10 USD up. A row's reach is the ad index's reading, which can be a day behind the ad's record (GET /v1/ads/{adId}). A row's metrics.reachDelta1d, reachDelta7d and reachDelta30d are null beside a known reach when the data source lists none (nullReasons not_measured), except over a window the ad started in, where it gained all the reach its row reads; the ad's record reads them from its reach history. A row's rank.lastRank is the last rank of an ad not ranked now (rank.currentTotal and rank.lastRankedAt are null on rows: the ad's record has them); metrics.reachGrowth7d, the EU reach growth over 7 days as a fraction, is null beside a known reach when the data source lists none (nullReasons not_measured); advertiser.countryShares is where the page's ads run, each country with its share of the page's ads as a fraction (an ad targets several countries, so the shares can add up to more than 1). growthRank takes rising, stable or falling; ageRanges and excludeAgeRanges 13-17, 18-24, 25-34, 35-44, 45-54, 55-64 and 65+; minPageAdsLaunched and maxPageAdsLaunched count the ads the page launched over pageAdsLaunchedPeriod (yesterday, last7d, last14d, last30d, last90d); adsTimePeriod takes last7d, last14d or last30d; reachPeriod, spendPeriod, reachPerPagePeriod and spendPerPagePeriod last24h, last7d or last30d (no period: all time); shopifyStoresOnly keeps the ads of Shopify stores. Growth ranges are percentages over 30 days; adReachGrowth also takes min7 and max7 (7 days) and adsGrowth min90 and max90 (90 days).
命名筛选 114请求体顶层字段
adCopyHashesadCountriesadLanguageadRankBasisadRankModeadReachGrowthadsGrowthadsTimePeriodageRangescategoryIdscountriescpmcreatedAftercreatedBeforecreationCountryctaexcludeAdLanguagesexcludeAgeRangesexcludeFormatsexcludePixelsexcludeShopifyAppsexcludeThemesformatsgrowthRankhideDecliningRankAdshideLowReachhideNonEuUkAdshideSavedAdslandingPageslastSeenAfterlastSeenBeforelinkedDomainmainCountriesmarketmaxAdOrdermaxAdRankValuemaxAdReachGrowthmaxAdsmaxAdsPerBrandmaxAgemaxBestSellerPricemaxDatemaxDaysRunningmaxDescriptionLengthmaxDuplicatesmaxFacebookLikesmaxFbPageCreationDatemaxInstagramFollowersmaxLastSeenDatemaxMonthlyVisitsmaxPageAdsGrowthmaxPageAdsLaunchedmaxPageReachGrowthmaxProductsmaxProductsCountmaxReachmaxReachPerPagemaxSpendmaxSpendPerPagemaxTrafficmaxTrafficGrowthmaxVideoDurationmediaTypemediaTypesminAdOrderminAdReachGrowthminAdsminAgeminBestSellerPriceminDateminDaysRunningminDescriptionLengthminDuplicatesminFacebookLikesminFbPageCreationDateminInstagramFollowersminLastSeenDateminMonthlyVisitsminPageAdsGrowthminPageAdsLaunchedminPageReachGrowthminProductsminProductsCountminRankDeltaminReachminReachPerPageminSpendminSpendPerPageminTrafficminTrafficGrowthminVideoDurationpageAdsLaunchedPeriodpageReachGrowthpartnerIdspartnerspixelsplatformplatformsrankDeltaWindowreachPerPagePeriodreachPeriodsexshopCreatedAftershopCreatedBeforeshopifyAppsshopifyStoresOnlyspendPerPagePeriodspendPeriodstatustechnologiesthemestrackedPagestrafficGrowthwebsiteIds
curl -X POST "https://api.sellwinners.com/v1/ads/query" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"limit": 10, "mainCountries": ["US"], "mediaType": "video", "minDaysRunning": 14, "page": 1, "query": "skincare", "sortBy": "reach", "status": "active"}'

GET/v1/ads/{adId}

按 ID 获取单条 Meta 广告. The full record: creative, copy, transcript and hook, spend, rank, linked shop and page history. metrics.reach is the ad's EU reach, the latest the data source reports (the record, its reach and spend figures, its reach and spend histories), and metrics.estimatedSpend the spend of that reach (two decimals under 10 USD, whole dollars from 10 USD up); both are null for an ad not shown in the EU or the UK (nullReasons eu_uk_only: reach is reported for those only), and for an EU ad whose reach is not counted yet (not_measured). The ad's targeting decides: an ad that targets no EU or UK country is eu_uk_only, one that targets one, or whose targeting is not known yet, not_measured in its first 7 days and not_reported after. metrics.reachDelta1d, reachDelta7d and reachDelta30d are the reach gained over those days, by date, while the ad's reach history is current (its last reading at most 2 days old), else null; an ad started inside the window gained all its reach in it, and a gain below that of fewer days is null; a gain that is null beside a known reach has nullReasons not_measured. Its reach and spend histories are read as one series, one reading a day (the higher on a day both read), the deltas and the reach chart too; a record's reach more than twice the last reading of a series that runs to the ad's last day is not this ad's alone, so that reading and its spend are taken, and extra.recordReach holds the record's (the figure ad listings show) and extra.recordSpend the spend of it. media and extra.medias are the ad's images and videos as its search row lists them: media.type is carousel for an ad of more than one; media.mediaUrl and thumbnailUrl fall back on its first listed file when the record has none. advertiser.reach30d is the page's EU reach over 30 days, as advertiser lists show it, and advertiser.totalReach is the page details' EU reach when the record has none, never below the last reading of pageAnalytics.reachHistory (extra.pageRecordReach then holds the record's total, the one advertiser lists show), and that reading while it is current (at most 2 days old), so the figure and the chart agree; null for a page with no reach reported. extra.advertiserTotalAds is the page's total ads (the record's, else its search row's or its advertiser row's; null with nullReasons not_measured when none counts them). pageAnalytics holds the page's EU reach so far (reachHistory; impressionsHistory is the same series), its Facebook likes and Instagram followers, day by day, from the day the page was created, without the readings the data source missed (a 0 of likes or followers between two readings above 0, or of a day it missed the page's other readings); it is null with meta.partial when the page's history could not be read. extra.spendHistory starts on the day the ad started, its spendUsd with two decimals under 10 USD as metrics.estimatedSpend. extra.reachScope and extra.pageReachScope say where most of the ad's reach (by extra.reachByCountry) and of its page's was seen: eu_uk, or outside_eu_uk (the data source reports the reach of some ads shown elsewhere too). shops holds the ad's shop when the record names it, by id or by domain; its traffic is null when the traffic data has not measured the site (nullReasons shops.traffic not_measured). extra.startIsFloor marks an ad started on January 1, 2018, the first day of the data source's Meta ad dates: it may be older. audience.gender, ageMin and ageMax and metrics.aggregatedReach are always null: the data source does not report them for one ad. For an ad whose website is not a shop (a messaging or social site, an app store, a redirect), shops is empty and extra.nonShopSite names the site; in ad listings extra.shop is left out then. rank.currentRank is the ad's rank in its rank history and rank.currentTotal the number of ads it is ranked among there (null with nullReasons not_reported when the data source gives none); extra.rankPopulation is the page's live ads the data source counts, not the ranked pool. rank.rankDelta and rank.improvementPct are the move over 7 days, as on list rows: the current rank minus the rank the history read 7 days before its last day (or the day before that), else the record's own 7-day figure, else null (nullReasons not_reported); negative means it moved up. rank.rankDelta14d is the move since rank.rankDelta14dSince (14 days back, later for an ad ranked for less) and rank.rankDelta3d the move since rank.rankDelta3dSince. An ad not ranked now has rank.lastRank, the last rank it held, and rank.lastRankedAt, the day of it (null when not known). metrics.reachGrowth7d is the EU reach growth over 7 days as a fraction (0.0075 is 0.75%), null while the reach history is not current (as the reach gained) and null beside a known reach with nullReasons not_measured. advertiser.estimatedSpend is the page's estimated spend so far and advertiser.avgDailySpend14d its average daily spend over 14 days (USD), both null with the reason of advertiser.totalReach when that one has one (eu_uk_only). advertiser.countryShares is where the page's ads run: each country with its share of the page's ads, a fraction (an ad targets several countries, so the shares can add up to more than 1), from the ad's search row when the record lists none. shops also holds the shop's logoUrl, trafficGrowth30d (a fraction, only beside monthly visits above 0, else null with nullReasons shops.trafficGrowth30d not_measured), trustpilot (rating and reviewCount, no rating beside 0 reviews; null when the data source has neither), productsCount (productsCountCapped at the data source's ceiling of 25,001: 25,000 or more) and linkedAds (the ads linking to the shop).
参数说明
adId必填 Ad id from an ad search.
curl "https://api.sellwinners.com/v1/ads/AD_ID" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/ads/{adId}/reach-history

单条广告的每日覆盖人数.
参数说明
adId必填 Ad id from an ad search.
limit Most recent days, 1-365 (default 365).
curl "https://api.sellwinners.com/v1/ads/AD_ID/reach-history?limit=30" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/ads/{adId}/media-url

单条广告素材的下载 URL.
参数说明
adId必填 Ad id from an ad search.
curl "https://api.sellwinners.com/v1/ads/AD_ID/media-url" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/ads/facets/landing-pages

店铺或主页的广告所使用的落地页. Send exactly one of scopeDomain or scopeTrackedPages. With scopeTrackedPages a landing page's activeAdsCount is null (only a shop counts its live ads), so status must be all or left out (active or inactive is a 400); a page that could not be read sets meta.partial and meta.warnings.
参数说明
scopeDomain A shop domain.
scopeTrackedPages Up to 20 Facebook page ids, comma-separated.
status Pages with running ads, without, or all (default all). 可选值:active, inactive, all。
limit Results, 1-100 (default 100).
snapshotDate A past day (YYYY-MM-DD), with scopeDomain: the shop's landing pages as they were then.
curl "https://api.sellwinners.com/v1/ads/facets/landing-pages?scopeDomain=allbirds.com" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/ads/facets/ad-copies

店铺广告的文案. The ad texts of the shop's own pages, or of those advertiserIds names, the most used first, for the adCopyHashes filter of an ad search: id (the text's hash), name (its first characters), adCopy (all of it) and usageCount. meta.total counts them all.
参数说明
scopeDomain必填 The shop's domain or id.
limit Results, 1-100 (default 100).
advertiserIds Only these Facebook pages of the shop, comma-separated.
curl "https://api.sellwinners.com/v1/ads/facets/ad-copies?scopeDomain=allbirds.com" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/ads/facets/partners

店铺广告的合作伙伴. The pages that run partnership ads with the shop's own pages, or with those advertiserIds names, those with the most live ads first, for the partnerIds filter of an ad search: id (the Facebook page id), name and usageCount (its live ads). meta.total counts them all.
参数说明
scopeDomain必填 The shop's domain or id.
limit Results, 1-100 (default 100).
advertiserIds Only these Facebook pages of the shop, comma-separated.
curl "https://api.sellwinners.com/v1/ads/facets/partners?scopeDomain=allbirds.com" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/ads/{adId}/share

创建(或返回)广告的公开链接. The answer carries a shareUrl: a web page anyone can open, without an API key.
参数说明
adId必填 Ad id from an ad search.
curl -X POST "https://api.sellwinners.com/v1/ads/AD_ID/share" \
  -H "X-API-Key: YOUR_API_KEY"

DELETE/v1/ads/{adId}/share

移除广告的公开链接.
参数说明
adId必填 Ad id from an ad search.
curl -X DELETE "https://api.sellwinners.com/v1/ads/AD_ID/share" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shared/ads/{token}

通过分享链接获取广告(无需密钥). The same record the share page shows, as JSON.
参数说明
token必填 Token at the end of a share link.
curl "https://api.sellwinners.com/v1/shared/ads/TOKEN" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/tools/ad-hooks

为商品生成广告开头钩子. Three short opening lines for an ad of your product. niche (2 to 80 characters) and product (2 to 100) are required; angle is pain (the default), curiosity, social_proof, transformation or urgency; platform meta (Facebook and Instagram), tiktok or both (the default); language en (the default) or fr. regenerate, the text of one hook to write again, answers one new hook. Each call is one generation, a regenerate too: there is no monthly limit, and a few a minute at most (429 rate_limited with Retry-After). meta.allowance is what is left. Answers are never cached; idempotencyKey (8 to 64 letters, digits, - or _) makes a request sent again within 2 minutes get the first answer without being counted again. Nothing you send and no hook is stored.
curl -X POST "https://api.sellwinners.com/v1/tools/ad-hooks" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"angle": "pain", "language": "en", "niche": "skincare", "platform": "both", "product": "Vitamin C serum"}'

GET/v1/tools/ad-hooks

您本月的开头钩子生成额度. allowance: limit (null: no monthly limit, as on paid plans), used, remaining, resetsAt, perMinute and perDay (null on paid plans); enabled, and the angles, platforms and languages the writer takes. Not counted toward your monthly requests.
curl "https://api.sellwinners.com/v1/tools/ad-hooks" \
  -H "X-API-Key: YOUR_API_KEY"

Google 广告

Google 广告素材。

GET/v1/google-ads

搜索 Google 广告. Searches are ranked by relevance; sortBy applies when browsing without a search term. formats are text, image and video; networks are Search, YouTube, Shopping, Maps and Other. Each ad has media.type and media.format (text, image or video) and media.url, the ad's image (for a video ad, its thumbnail: there is no video file). transparencyUrl is the ad on Google's Ads Transparency Center, where a video ad plays (null without Google's ids for the ad). Excluded audience countries (excludeCountryCodes, audienceCountries.exclude) work only without included ones. hideNonEuUkAds keeps the ads shown in the EU or the UK. Growth ranges are percentages over 30 days. status is active only while Google shows the ad (unknown once it has not for more than 7 days), and status=active keeps the ads Google showed in those 7 days; status=inactive keeps the ads the data source marks stopped, so an unknown ad is under neither. daysRunning counts the days from firstSeenAt to lastSeenAt, both included, and minDaysRunning and maxDaysRunning keep the ads whose daysRunning is in range; extra.servedDays is the data source's own count, which goes on after an ad stops, so longestRunning is not a Google sort; sortBy=relevance with no search term lists the newest; sortBy=reach takes order=desc only. With status=active or a days-running bound, pagination.total is null, and a list where few ads match ends early (meta.partial). With status=active, sortBy=reach lists few ads: in reach order the first ads are mostly ones Google stopped showing, so sort by newest for the ads Google shows now (its warning says so). extra.startIsFloor marks an ad first seen on May 31, 2018, the first day of Google's ad data. audience.countries lists every country (a percentage only for one country). Google reports a reach for some of the ads shown in the EU only, often only as 10,000,000, the top of its scale (10 million or more): most ads have none, and nullReasons says why reach.value is null (not_reported: an ad shown in the EU that Google reports none for; eu_only: an ad shown elsewhere), except for a reach the plan leaves out. extra.networks is the data source's list of the ad's platforms. extra.shop.google holds the Google totals of the advertiser's website, without a 0 reach (never reported) and, when it counts no ad, without its 0 counts; extra.shop has no monthlyVisits for a site with no traffic data, and a trafficGrowth30d only beside visits above 0. network and extra.networks name a network search, youtube, shopping, maps, display or other (display since October 23, 2026: it read other before); network, the ad's main network, is never display, so networks=display is refused with a 400 that says so (the data source answers none for it). advertiser.transparencyUrl is the advertiser's page on Google's Ads Transparency Center (null without Google's id for it) and advertiser.totalAds.all the website's ads on every platform. extra.categories names extra.categoryIds (id and name). extra.shop adds the website's countryCode, productsCount, followersBy (facebook, instagram, tiktok), metaTotalAds and metaNewAds, and extra.shop.google the time its totals were read (recordedAt, UTC) and the bounds of each reach it keeps (totalReachLow, totalReachUp, weeklyReachLow, weeklyReachUp). meta.breakdown, read with the list's total (on the first page of a search; the pages after it reuse that total and carry none), gives the search's ads by status (the data source's active flag, as liveAds counts, not status), by format (text, image, video), by servedDays bucket (the days served, which go on after an ad stops), by country (the first 10) and by network. remarketing and interestTargeting keep the ads that target it (true) or do not (false); minAdvertiserReach and maxAdvertiserReach bound the EU reach of the advertiser behind the ad; websiteIds narrows to one brand's shop; marketCountries, mainMarketCountries, excludeMarketCountries, creationCountries, excludeCreationCountries, the products count, best seller price and shop creation bounds, and shopifyAppIds, themeIds and pixelIds (with their exclude names, ids from /v1/facets/*) filter the shop behind the ad.
命名筛选 41额外查询参数
audienceCountriescategoryIdscountriescreationCountriesexcludeCountryCodesexcludeCreationCountriesexcludeMarketCountriesexcludePixelIdsexcludeShopifyAppIdsexcludeThemeIdsformatshideNonEuUkAdsinterestTargetingmainMarketCountriesmarketCountriesmaxAdvertiserReachmaxBestSellerPricemaxDaysRunningmaxProductsCountmaxReachmaxTrafficmaxTrafficGrowthminAdvertiserReachminBestSellerPriceminDaysRunningminProductsCountminReachminTrafficminTrafficGrowthnetworkspixelIdspublishedAfterpublishedBeforeremarketingshopCreatedAftershopCreatedBeforeshopifyAppIdsstatusthemeIdstrafficGrowthwebsiteIds
参数说明
search
country 2-letter ISO country code.
sortBy Defaults to relevance when searching, otherwise newest. 可选值:relevance, newest, reach。
order Sort direction (default desc). 可选值:desc, asc。
page Page number, starting at 1.
offset Results to skip. Use it instead of page.
limit Results per page, 1-100 (default 25).
curl "https://api.sellwinners.com/v1/google-ads?search=running%20shoes&country=US&limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/google-ads/query

按筛选条件搜索 Google 广告. formats are text, image and video; networks are Search, YouTube, Shopping, Maps and Other. Each ad has media.type and media.format (text, image or video) and media.url, the ad's image (for a video ad, its thumbnail: there is no video file). transparencyUrl is the ad on Google's Ads Transparency Center, where a video ad plays (null without Google's ids for the ad). Excluded audience countries (excludeCountryCodes, audienceCountries.exclude) work only without included ones. hideNonEuUkAds keeps the ads shown in the EU or the UK. Growth ranges are percentages over 30 days. status is active only while Google shows the ad (unknown once it has not for more than 7 days), and status=active keeps the ads Google showed in those 7 days; status=inactive keeps the ads the data source marks stopped, so an unknown ad is under neither. daysRunning counts the days from firstSeenAt to lastSeenAt, both included, and minDaysRunning and maxDaysRunning keep the ads whose daysRunning is in range; extra.servedDays is the data source's own count, which goes on after an ad stops, so longestRunning is not a Google sort; sortBy=relevance with no search term lists the newest; sortBy=reach takes order=desc only. With status=active or a days-running bound, pagination.total is null, and a list where few ads match ends early (meta.partial). With status=active, sortBy=reach lists few ads: in reach order the first ads are mostly ones Google stopped showing, so sort by newest for the ads Google shows now (its warning says so). extra.startIsFloor marks an ad first seen on May 31, 2018, the first day of Google's ad data. audience.countries lists every country (a percentage only for one country). Google reports a reach for some of the ads shown in the EU only, often only as 10,000,000, the top of its scale (10 million or more): most ads have none, and nullReasons says why reach.value is null (not_reported: an ad shown in the EU that Google reports none for; eu_only: an ad shown elsewhere), except for a reach the plan leaves out. extra.networks is the data source's list of the ad's platforms. extra.shop.google holds the Google totals of the advertiser's website, without a 0 reach (never reported) and, when it counts no ad, without its 0 counts; extra.shop has no monthlyVisits for a site with no traffic data, and a trafficGrowth30d only beside visits above 0. network and extra.networks name a network search, youtube, shopping, maps, display or other (display since October 23, 2026: it read other before); network, the ad's main network, is never display, so networks=display is refused with a 400 that says so (the data source answers none for it). advertiser.transparencyUrl is the advertiser's page on Google's Ads Transparency Center (null without Google's id for it) and advertiser.totalAds.all the website's ads on every platform. extra.categories names extra.categoryIds (id and name). extra.shop adds the website's countryCode, productsCount, followersBy (facebook, instagram, tiktok), metaTotalAds and metaNewAds, and extra.shop.google the time its totals were read (recordedAt, UTC) and the bounds of each reach it keeps (totalReachLow, totalReachUp, weeklyReachLow, weeklyReachUp). meta.breakdown, read with the list's total (on the first page of a search; the pages after it reuse that total and carry none), gives the search's ads by status (the data source's active flag, as liveAds counts, not status), by format (text, image, video), by servedDays bucket (the days served, which go on after an ad stops), by country (the first 10) and by network. remarketing and interestTargeting keep the ads that target it (true) or do not (false); minAdvertiserReach and maxAdvertiserReach bound the EU reach of the advertiser behind the ad; websiteIds narrows to one brand's shop; marketCountries, mainMarketCountries, excludeMarketCountries, creationCountries, excludeCreationCountries, the products count, best seller price and shop creation bounds, and shopifyAppIds, themeIds and pixelIds (with their exclude names, ids from /v1/facets/*) filter the shop behind the ad.
命名筛选 41请求体顶层字段
audienceCountriescategoryIdscountriescreationCountriesexcludeCountryCodesexcludeCreationCountriesexcludeMarketCountriesexcludePixelIdsexcludeShopifyAppIdsexcludeThemeIdsformatshideNonEuUkAdsinterestTargetingmainMarketCountriesmarketCountriesmaxAdvertiserReachmaxBestSellerPricemaxDaysRunningmaxProductsCountmaxReachmaxTrafficmaxTrafficGrowthminAdvertiserReachminBestSellerPriceminDaysRunningminProductsCountminReachminTrafficminTrafficGrowthnetworkspixelIdspublishedAfterpublishedBeforeremarketingshopCreatedAftershopCreatedBeforeshopifyAppIdsstatusthemeIdstrafficGrowthwebsiteIds
curl -X POST "https://api.sellwinners.com/v1/google-ads/query" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"limit": 10, "page": 1, "query": "running shoes", "status": "active"}'

GET/v1/google-ads/{adId}

按 ID 获取单条 Google 广告. The fields of a search row, with reachHistory (its reach, day by day), estimatedSpend, platformMix and advertiserDetails (Google's advertiser account behind the ad: its ads live, new and in total, its reach week by week, its top countries by ads and by reach, its networks). reachHistory joins the readings of the ad's details and of its reach history by date (the reach history's on a day both read). platformMix lists the networks the ad ran on: platform (named as network is: search, youtube, shopping, maps, display or other), label (Google's name), share (a fraction) and percentage (0 to 100, as before). audience.countries gives each country's reachLowerBound and reachUpperBound beside its reach when the data source reads them. advertiserDetails.transparencyUrl is the advertiser's page on Google's Ads Transparency Center; advertiserDetails.snapshot holds its totals as a website's Google totals are read (a 0 reach and, with no ad counted, the 0 counts left out; recordedAt in UTC; the bounds of each reach kept), with estimatedSpend (USD) and cpm, the CPM it was made at (spendUsd and cpmUsd, their earlier names, stay for one release); advertiserDetails.platformMix names each network as platformMix does, with its label, ads, adsEu, share and percentage.
参数说明
adId必填 Google ad id from a Google ad search (google_CR...).
curl "https://api.sellwinners.com/v1/google-ads/AD_ID" \
  -H "X-API-Key: YOUR_API_KEY"

TikTok

TikTok 广告和自然帖子。

GET/v1/tiktok/library

搜索 TikTok 广告和帖子. Searches are ranked by relevance; sortBy applies when browsing without a search term. websiteId (a shop id) and domain narrow to one shop: its TikTok profiles, or for a shop with none, the posts linking to the shop or its stores on its domain. websiteIds in filters means the posts linking to those websites. mediaType is video or carousel; categories are the data source's category names, in any case; hashtags are taken with or without the #. Growth ranges are percentages over 30 days. In each row, metrics.engagementRate is (likes + comments + shares + saves) / views as a fraction (0.0513 is 5.13%), daysRunning the days since the post was published, and metrics.rank its rank among its creator's posts (1 is the best; rankPercent the same rank as a percent of the creator's posts). profile.followers is null when the data source has not counted them, and content.category is null for its catch-all All. metrics.views, and the likes and saves that read 0 beside them, are null with nullReasons not_measured (engagementRate too) when the data source sent 0 views next to likes, comments, shares or saves above 0, or fewer views than likes: it has not counted the post; sortBy=views or likes with order=asc lists the posts whose views are counted, from the first TikToks on: a view or more (minViews 1) and no fewer views than likes (the posts not counted are left out of these two orders only; pagination.total is an estimate, totalEstimated, until the list is read to its end). A row the data source sends with no views or likes (and no reason) takes the post's counts from its own record (GET /v1/tiktok/library/{itemId}) once that was read, all of one reading (metrics.countsFromPost true). sortBy=longestRunning starts at the first TikToks (August 31, 2016, 22:00 UTC): the data source's older rows are not real posts. publishedAt is UTC. The filters agree with it: publishedAfter and publishedBefore are UTC (a date alone is the start of its day, and publishedBefore lists the posts before it), and minDaysRunning and maxDaysRunning count from the UTC day, as daysRunning does. media.mediaUrl of a video post is its cover image (the same file as media.thumbnailUrl in most rows), never its video: media.videoUrl is the video. media.durationSec is null when the data source reads 0 (every carousel). profile.adsShare is the share of the profile's posts that are ads, a fraction (profile.percentAds is the same share as the data source's percent, 0 to 100). shop.monthlyVisits is null with nullReasons not_measured for a linked shop the data source reads 0 visits (and 0 growth) for, and shop.trafficGrowth30d is kept only beside visits above 0 (else null with nullReasons not_measured); shop.categories names shop.googleCategoryIds (id and name). sortBy=rank lists the best rank (1) first, whatever the order. GET /v1/tiktok/facets/categories lists the categories the categories filter takes. profileCreatedAfter and profileCreatedBefore bound the profile's creation, minProfileAdsShare and maxProfileAdsShare the percent of its posts that are ads (0 to 100), minProfilePosts and maxProfilePosts its posts; marketCountries, mainMarketCountries, excludeMarketCountries, creationCountries, excludeCreationCountries, minTraffic, maxTraffic, the products count, best seller price and shop creation bounds, and shopifyAppIds, themeIds and pixelIds (with their exclude names, ids from /v1/facets/*) filter the shop the post links to.
命名筛选 58额外查询参数
categoriescategoryIdscountriescreationCountriesdomainexcludeCreationCountriesexcludeHashtagsexcludeMarketCountriesexcludePixelIdsexcludeShopifyAppIdsexcludeThemeIdshandlehasShopLinkedhashtagsisPinnedlanguagesmainMarketCountriesmarketCountriesmaxBestSellerPricemaxDaysRunningmaxDurationmaxFollowersmaxProductsCountmaxProfileAdsSharemaxProfilePostsmaxProfileViewsmaxTrafficmaxTrafficGrowthmaxViewsmediaTypemediaTypesminBestSellerPriceminDaysRunningminDurationminFollowersminProductsCountminProfileAdsShareminProfilePostsminProfileViewsminTrafficminTrafficGrowthminViewspixelIdsprofileCreatedAfterprofileCreatedBeforepublishedAfterpublishedBeforeshopCreatedAftershopCreatedBeforeshopifyAppIdsthemeIdstiktokPageIdtiktokPageIdstrafficGrowthtypeupdatedAfterupdatedBeforewebsiteId
参数说明
search
country 2-letter ISO country code.
sortBy Defaults to relevance when searching, otherwise newest. 可选值:relevance, newest, views, likes, rank, longestRunning, daysRunning。
order Sort direction (default desc). 可选值:desc, asc。
page Page number, starting at 1.
offset Results to skip. Use it instead of page.
limit Results per page, 1-100 (default 25).
curl "https://api.sellwinners.com/v1/tiktok/library?search=fitness&country=US&limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/tiktok/library/query

按筛选条件搜索 TikTok 广告和帖子. websiteId (a shop id) and domain narrow to one shop: its TikTok profiles, or for a shop with none, the posts linking to the shop or its stores on its domain. websiteIds in filters means the posts linking to those websites. mediaType is video or carousel; categories are the data source's category names, in any case; hashtags are taken with or without the #. Growth ranges are percentages over 30 days. In each row, metrics.engagementRate is (likes + comments + shares + saves) / views as a fraction (0.0513 is 5.13%), daysRunning the days since the post was published, and metrics.rank its rank among its creator's posts (1 is the best; rankPercent the same rank as a percent of the creator's posts). profile.followers is null when the data source has not counted them, and content.category is null for its catch-all All. metrics.views, and the likes and saves that read 0 beside them, are null with nullReasons not_measured (engagementRate too) when the data source sent 0 views next to likes, comments, shares or saves above 0, or fewer views than likes: it has not counted the post; sortBy=views or likes with order=asc lists the posts whose views are counted, from the first TikToks on: a view or more (minViews 1) and no fewer views than likes (the posts not counted are left out of these two orders only; pagination.total is an estimate, totalEstimated, until the list is read to its end). A row the data source sends with no views or likes (and no reason) takes the post's counts from its own record (GET /v1/tiktok/library/{itemId}) once that was read, all of one reading (metrics.countsFromPost true). sortBy=longestRunning starts at the first TikToks (August 31, 2016, 22:00 UTC): the data source's older rows are not real posts. publishedAt is UTC. The filters agree with it: publishedAfter and publishedBefore are UTC (a date alone is the start of its day, and publishedBefore lists the posts before it), and minDaysRunning and maxDaysRunning count from the UTC day, as daysRunning does. media.mediaUrl of a video post is its cover image (the same file as media.thumbnailUrl in most rows), never its video: media.videoUrl is the video. media.durationSec is null when the data source reads 0 (every carousel). profile.adsShare is the share of the profile's posts that are ads, a fraction (profile.percentAds is the same share as the data source's percent, 0 to 100). shop.monthlyVisits is null with nullReasons not_measured for a linked shop the data source reads 0 visits (and 0 growth) for, and shop.trafficGrowth30d is kept only beside visits above 0 (else null with nullReasons not_measured); shop.categories names shop.googleCategoryIds (id and name). sortBy=rank lists the best rank (1) first, whatever the order. GET /v1/tiktok/facets/categories lists the categories the categories filter takes. profileCreatedAfter and profileCreatedBefore bound the profile's creation, minProfileAdsShare and maxProfileAdsShare the percent of its posts that are ads (0 to 100), minProfilePosts and maxProfilePosts its posts; marketCountries, mainMarketCountries, excludeMarketCountries, creationCountries, excludeCreationCountries, minTraffic, maxTraffic, the products count, best seller price and shop creation bounds, and shopifyAppIds, themeIds and pixelIds (with their exclude names, ids from /v1/facets/*) filter the shop the post links to.
命名筛选 58请求体顶层字段
categoriescategoryIdscountriescreationCountriesdomainexcludeCreationCountriesexcludeHashtagsexcludeMarketCountriesexcludePixelIdsexcludeShopifyAppIdsexcludeThemeIdshandlehasShopLinkedhashtagsisPinnedlanguagesmainMarketCountriesmarketCountriesmaxBestSellerPricemaxDaysRunningmaxDurationmaxFollowersmaxProductsCountmaxProfileAdsSharemaxProfilePostsmaxProfileViewsmaxTrafficmaxTrafficGrowthmaxViewsmediaTypemediaTypesminBestSellerPriceminDaysRunningminDurationminFollowersminProductsCountminProfileAdsShareminProfilePostsminProfileViewsminTrafficminTrafficGrowthminViewspixelIdsprofileCreatedAfterprofileCreatedBeforepublishedAfterpublishedBeforeshopCreatedAftershopCreatedBeforeshopifyAppIdsthemeIdstiktokPageIdtiktokPageIdstrafficGrowthtypeupdatedAfterupdatedBeforewebsiteId
curl -X POST "https://api.sellwinners.com/v1/tiktok/library/query" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"limit": 10, "minViews": 100000, "page": 1, "query": "fitness", "type": "ad"}'

GET/v1/tiktok/library/{itemId}

按 ID 获取单个 TikTok 内容. profile.latestAds are the creator's latest ads by their cover (thumbnailUrl): a post's mediaUrl is its video when the data source lists one, else null (nullReasons mediaUrl not_reported; the post's own record carries its video). profile.latestAds are the profile's latest ads, as the data source lists them (profile.latestPosts, their earlier name, holds the same rows for one release). profile.followersDelta is null with nullReasons not_measured when profile.followers is null (the data source's change is from its 0). metrics.deltaRank3d, deltaRank7d, deltaRank14d, deltaRank30d and deltaRankPercent7d come from the post's search row when its record has none (the latest row a search showed, kept 30 days); deltaRank7d is null with nullReasons not_reported when neither has it. The fields of a search row read as GET /v1/tiktok/library describes them (media, profile.adsShare, the linked shop).
参数说明
itemId必填 Item id from a TikTok search.
curl "https://api.sellwinners.com/v1/tiktok/library/ITEM_ID" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shops/{shop_id}/tiktok/library

单个店铺的 TikTok 内容. The posts of the shop's TikTok profiles, or for a shop with none, the posts linking to the shop or its stores on its domain.
命名筛选 58额外查询参数
categoriescategoryIdscountriescreationCountriesdomainexcludeCreationCountriesexcludeHashtagsexcludeMarketCountriesexcludePixelIdsexcludeShopifyAppIdsexcludeThemeIdshandlehasShopLinkedhashtagsisPinnedlanguagesmainMarketCountriesmarketCountriesmaxBestSellerPricemaxDaysRunningmaxDurationmaxFollowersmaxProductsCountmaxProfileAdsSharemaxProfilePostsmaxProfileViewsmaxTrafficmaxTrafficGrowthmaxViewsmediaTypemediaTypesminBestSellerPriceminDaysRunningminDurationminFollowersminProductsCountminProfileAdsShareminProfilePostsminProfileViewsminTrafficminTrafficGrowthminViewspixelIdsprofileCreatedAfterprofileCreatedBeforepublishedAfterpublishedBeforeshopCreatedAftershopCreatedBeforeshopifyAppIdsthemeIdstiktokPageIdtiktokPageIdstrafficGrowthtypeupdatedAfterupdatedBeforewebsiteId
参数说明
shop_id必填 Shop id or domain, such as allbirds.com.
search
sortBy Defaults to relevance when searching, otherwise newest. 可选值:relevance, newest, views, likes, rank, longestRunning, daysRunning。
order Sort direction (default desc). 可选值:desc, asc。
page Page number, starting at 1.
offset Results to skip. Use it instead of page.
limit Results per page, 1-100 (default 25).
curl "https://api.sellwinners.com/v1/shops/SHOP_ID/tiktok/library?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

媒体

可直接渲染的素材:托管在我们 CDN 上的图片和视频 URL。

GET/v1/media

以可直接渲染的媒体形式获取广告素材. images are the ad's images and videos its videos, each with its posterUrl: the thumbnail of the same creative (its itemOrder), else the ad's thumbnailUrl; a video's thumbnail is never listed under images. A search returns one ad per brand unless maxAdsPerBrand is raised (0: no cap); trackedPages (Facebook page ids) and websiteIds (shop ids) narrow it to those brands, with all their ads: a shop's are its own (every ad of its main page and of its official pages named like it, and the ads of its other pages, creators, publishers and partners who ran its ads, that link to the shop or to a site on its domain; trackedPages narrows the search to the pages it names; until the list is read to its end, its pagination.total is then the ads of the shop's own pages searched, an estimate, pagination.totalEstimated true, as the ads of its other pages that link to it add to them, or null when the search names none of its own pages). sortBy=longestRunning takes order=desc only; each batch of ads read from the data source is put in order of daysRunning (its own order can be a day off); sortBy=adRank lists the best rank (1) first, whatever the order. metrics.reach is EU reach: null for an ad not shown in the EU or the UK, with its spend (nullReasons eu_uk_only), and for an EU ad whose reach is not counted yet (not_measured). The ad's targeting decides: an ad that targets no EU or UK country is eu_uk_only, one that targets one, or whose targeting is not known yet, not_measured in its first 7 days and not_reported after. media.type is carousel for an ad of more than one image or video (the thumbnails of its videos aside). advertiser.instagramFollowers is null for a page with no Instagram account or none the data source knows. extra.startIsFloor marks an ad started on January 1, 2018, the first day of the data source's Meta ad dates: it may be older. metrics.estimatedSpend keeps two decimals under 10 USD (1.26) and is in whole dollars from 10 USD up. A row's reach is the ad index's reading, which can be a day behind the ad's record (GET /v1/ads/{adId}). A row's metrics.reachDelta1d, reachDelta7d and reachDelta30d are null beside a known reach when the data source lists none (nullReasons not_measured), except over a window the ad started in, where it gained all the reach its row reads; the ad's record reads them from its reach history. A row's rank.lastRank is the last rank of an ad not ranked now (rank.currentTotal and rank.lastRankedAt are null on rows: the ad's record has them); metrics.reachGrowth7d, the EU reach growth over 7 days as a fraction, is null beside a known reach when the data source lists none (nullReasons not_measured); advertiser.countryShares is where the page's ads run, each country with its share of the page's ads as a fraction (an ad targets several countries, so the shares can add up to more than 1). growthRank takes rising, stable or falling; ageRanges and excludeAgeRanges 13-17, 18-24, 25-34, 35-44, 45-54, 55-64 and 65+; minPageAdsLaunched and maxPageAdsLaunched count the ads the page launched over pageAdsLaunchedPeriod (yesterday, last7d, last14d, last30d, last90d); adsTimePeriod takes last7d, last14d or last30d; reachPeriod, spendPeriod, reachPerPagePeriod and spendPerPagePeriod last24h, last7d or last30d (no period: all time); shopifyStoresOnly keeps the ads of Shopify stores. Growth ranges are percentages over 30 days; adReachGrowth also takes min7 and max7 (7 days) and adsGrowth min90 and max90 (90 days).
命名筛选 114额外查询参数
adCopyHashesadCountriesadLanguageadRankBasisadRankModeadReachGrowthadsGrowthadsTimePeriodageRangescategoryIdscountriescpmcreatedAftercreatedBeforecreationCountryctaexcludeAdLanguagesexcludeAgeRangesexcludeFormatsexcludePixelsexcludeShopifyAppsexcludeThemesformatsgrowthRankhideDecliningRankAdshideLowReachhideNonEuUkAdshideSavedAdslandingPageslastSeenAfterlastSeenBeforelinkedDomainmainCountriesmarketmaxAdOrdermaxAdRankValuemaxAdReachGrowthmaxAdsmaxAdsPerBrandmaxAgemaxBestSellerPricemaxDatemaxDaysRunningmaxDescriptionLengthmaxDuplicatesmaxFacebookLikesmaxFbPageCreationDatemaxInstagramFollowersmaxLastSeenDatemaxMonthlyVisitsmaxPageAdsGrowthmaxPageAdsLaunchedmaxPageReachGrowthmaxProductsmaxProductsCountmaxReachmaxReachPerPagemaxSpendmaxSpendPerPagemaxTrafficmaxTrafficGrowthmaxVideoDurationmediaTypemediaTypesminAdOrderminAdReachGrowthminAdsminAgeminBestSellerPriceminDateminDaysRunningminDescriptionLengthminDuplicatesminFacebookLikesminFbPageCreationDateminInstagramFollowersminLastSeenDateminMonthlyVisitsminPageAdsGrowthminPageAdsLaunchedminPageReachGrowthminProductsminProductsCountminRankDeltaminReachminReachPerPageminSpendminSpendPerPageminTrafficminTrafficGrowthminVideoDurationpageAdsLaunchedPeriodpageReachGrowthpartnerIdspartnerspixelsplatformplatformsrankDeltaWindowreachPerPagePeriodreachPeriodsexshopCreatedAftershopCreatedBeforeshopifyAppsshopifyStoresOnlyspendPerPagePeriodspendPeriodstatustechnologiesthemestrackedPagestrafficGrowthwebsiteIds
参数说明
search
mediaType Creative type. 可选值:image, video, dco, carousel, dpa。
country 2-letter ISO country code.
sortBy Defaults to relevance when searching, otherwise reach. 可选值:relevance, newest, reach, reachGrowth7d, reachDelta7d, longestRunning, duplicates, spend, adRank, rankDelta7d, rankDelta14d, rankDelta30d, createdAt, relevanceScore, mostDuplicates, adOrder。
order Sort direction (default desc). 可选值:desc, asc。
page Page number, starting at 1.
offset Results to skip. Use it instead of page.
limit Results per page, 1-100 (default 25).
curl "https://api.sellwinners.com/v1/media?search=sneakers&country=US&limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/media/query

使用高级筛选获取可直接渲染的媒体. images are the ad's images and videos its videos, each with its posterUrl: the thumbnail of the same creative (its itemOrder), else the ad's thumbnailUrl; a video's thumbnail is never listed under images.
命名筛选 114请求体顶层字段
adCopyHashesadCountriesadLanguageadRankBasisadRankModeadReachGrowthadsGrowthadsTimePeriodageRangescategoryIdscountriescpmcreatedAftercreatedBeforecreationCountryctaexcludeAdLanguagesexcludeAgeRangesexcludeFormatsexcludePixelsexcludeShopifyAppsexcludeThemesformatsgrowthRankhideDecliningRankAdshideLowReachhideNonEuUkAdshideSavedAdslandingPageslastSeenAfterlastSeenBeforelinkedDomainmainCountriesmarketmaxAdOrdermaxAdRankValuemaxAdReachGrowthmaxAdsmaxAdsPerBrandmaxAgemaxBestSellerPricemaxDatemaxDaysRunningmaxDescriptionLengthmaxDuplicatesmaxFacebookLikesmaxFbPageCreationDatemaxInstagramFollowersmaxLastSeenDatemaxMonthlyVisitsmaxPageAdsGrowthmaxPageAdsLaunchedmaxPageReachGrowthmaxProductsmaxProductsCountmaxReachmaxReachPerPagemaxSpendmaxSpendPerPagemaxTrafficmaxTrafficGrowthmaxVideoDurationmediaTypemediaTypesminAdOrderminAdReachGrowthminAdsminAgeminBestSellerPriceminDateminDaysRunningminDescriptionLengthminDuplicatesminFacebookLikesminFbPageCreationDateminInstagramFollowersminLastSeenDateminMonthlyVisitsminPageAdsGrowthminPageAdsLaunchedminPageReachGrowthminProductsminProductsCountminRankDeltaminReachminReachPerPageminSpendminSpendPerPageminTrafficminTrafficGrowthminVideoDurationpageAdsLaunchedPeriodpageReachGrowthpartnerIdspartnerspixelsplatformplatformsrankDeltaWindowreachPerPagePeriodreachPeriodsexshopCreatedAftershopCreatedBeforeshopifyAppsshopifyStoresOnlyspendPerPagePeriodspendPeriodstatustechnologiesthemestrackedPagestrafficGrowthwebsiteIds
curl -X POST "https://api.sellwinners.com/v1/media/query" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"limit": 10, "mediaType": "video", "page": 1, "query": "skincare", "status": "active"}'

GET/v1/media/file/{key}

A media file (public, no key needed). Serves an image or video. These URLs appear in API responses and can be used directly in web pages. Add ?w=96 or ?w=480 for a smaller WebP copy of a JPEG, PNG, WebP or GIF image (never made larger, without the original's metadata); an animation, a smaller image or a video is sent as it is. Add ?w=full for the image at its own size as WebP, sent when it saves at least a tenth of the file (otherwise the original is sent).
参数说明
key必填 File key, as found in a media URL.
w 96 or 480: an image is sent at that width at most, as WebP, its aspect kept (96 for thumbnails, 480 for cards). full: at its own width and height, as WebP, when that is lighter (a record's own creative). Without it, the original file. 可选值:96, 480, full。
curl "https://api.sellwinners.com/v1/media/file/FILE_KEY" \
  -H "X-API-Key: YOUR_API_KEY"

广告主

广告主(Facebook 主页)及其动态。

GET/v1/advertisers

搜索广告主. searchType domain is the same as urlContains: URLs containing the text, so gymshark.com also finds pages linking to it. sex (men, women, unknown) is the audience of the page's ads; technologies takes a slug, a name or an id from /v1/facets/technologies. Growth ranges (adsGrowth, pageReachGrowth, trafficGrowth) are percentages over 30 days (adsGrowth also takes min14 and max14, over 14 days, and trafficGrowth min90 and max90, over 90 days; a rule's period may be last14d or last90d the same way). excludeAgeRanges leaves out age buckets of the page's ads (13-17 to 65+, as ageRanges takes them). shopCreatedAfter, shopCreatedBefore, creationCountries, excludeCreationCountries, marketCountries, mainMarketCountries, excludeMarketCountries, minProductsCount, maxProductsCount, and themeIds and shopifyAppIds (with their exclude names, ids from /v1/facets/*) filter the shop the page advertises. extra.domain is null when the page's website is not a shop (an app store, a social site, a link shortener). sortBy=reach ranks by the total reach since tracking began (extra.totalReach), newAds by the new ads of 14 days (extra.newAds14d) and followers by the Facebook likes and Instagram followers together; minReach and maxReach bound the total reach. Reach is EU and UK reach: advertising.reach30d, extra.reach14d, reach90d and totalReach are null for a page with no EU or UK ads and no reach (nullReasons eu_uk_only), or for a window the data source has not counted (not_measured); a page created inside a window has all its reach in it, and a row that reads no EU reach next to page details that read some has their reach, as its record does. The new-ads counts of a page created inside the window count every one of its ads, and where the data source has not computed the average live ads, those of a page created inside the window are the mean of its live ads read since its first day (extra.averagedFrom: the first day read), those of an older page null (extra.adsGrowth30d is null then). profile.instagramFollowers is null for a page with no Instagram account or none the data source knows. Shares are fractions: extra.euAdsShare is the share of the page's live ads shown in the EU or UK (0.0831 for 8.31%), extra.reachGrowth30d the growth of its EU reach over 30 days; extra.adCountries lists its live ads by target country ({countryCode, ads, share}) and extra.reachCountries its reach by country ({countryCode, impressions, share}), as its record has them. extra.newAds1d counts the ads it launched yesterday. mainLandingPages is empty on rows: the record has them (extra.mainLandingPages).
命名筛选 59额外查询参数
adCountriesadLanguageadsGrowthadsLaunchedPeriodadsTimePeriodageRangescategoryIdscountriescountryFilterModecpmcreationCountriesexcludeAgeRangesexcludeCreationCountriesexcludeMarketCountriesexcludeShopifyAppIdsexcludeThemeIdsmainCountriesmainMarketCountriesmarketCountriesmaxActiveAdsmaxAdsGrowthmaxAdsLaunchedmaxAgemaxFacebookLikesmaxFbPageCreationDatemaxInstagramFollowersmaxPageReachGrowthmaxProductsCountmaxReachmaxReachPerPagemaxSpendPerPagemaxTrafficmaxTrafficGrowthminActiveAdsminAdsGrowthminAdsLaunchedminAgeminFacebookLikesminFbPageCreationDateminInstagramFollowersminPageReachGrowthminProductsCountminReachminReachPerPageminSpendPerPageminTrafficminTrafficGrowthpageNichespageReachGrowthpartnerssexshopCreatedAftershopCreatedBeforeshopifyAppIdsshopifyLinkedtechnologiesthemeIdstrackedPagestrafficGrowth
参数说明
search Words to match: every field unless searchType narrows it (brand is the page name).
searchType What the search text is matched against: brand is the page name. Without it, the text is matched like all. 可选值:brand, adCopy, websiteCopy, urlContains, domain, all。
country 2-letter ISO country code.
sortBy Defaults to relevance when searching, otherwise newest. 可选值:relevance, newest, activeAds, newAds, reach, reach14d, growth30d, followers, euAdsShare。
order Sort direction (default desc). 可选值:desc, asc。
page Page number, starting at 1.
offset Results to skip. Use it instead of page.
limit Results per page, 1-100 (default 20).
curl "https://api.sellwinners.com/v1/advertisers?search=nike&country=US&limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/advertisers/query

按筛选条件搜索广告主. searchType domain is the same as urlContains: URLs containing the text, so gymshark.com also finds pages linking to it. sex (men, women, unknown) is the audience of the page's ads; technologies takes a slug, a name or an id from /v1/facets/technologies. Growth ranges (adsGrowth, pageReachGrowth, trafficGrowth) are percentages over 30 days (adsGrowth also takes min14 and max14, over 14 days, and trafficGrowth min90 and max90, over 90 days; a rule's period may be last14d or last90d the same way). excludeAgeRanges leaves out age buckets of the page's ads (13-17 to 65+, as ageRanges takes them). shopCreatedAfter, shopCreatedBefore, creationCountries, excludeCreationCountries, marketCountries, mainMarketCountries, excludeMarketCountries, minProductsCount, maxProductsCount, and themeIds and shopifyAppIds (with their exclude names, ids from /v1/facets/*) filter the shop the page advertises. extra.domain is null when the page's website is not a shop (an app store, a social site, a link shortener). sortBy=reach ranks by the total reach since tracking began (extra.totalReach), newAds by the new ads of 14 days (extra.newAds14d) and followers by the Facebook likes and Instagram followers together; minReach and maxReach bound the total reach. Reach is EU and UK reach: advertising.reach30d, extra.reach14d, reach90d and totalReach are null for a page with no EU or UK ads and no reach (nullReasons eu_uk_only), or for a window the data source has not counted (not_measured); a page created inside a window has all its reach in it, and a row that reads no EU reach next to page details that read some has their reach, as its record does. The new-ads counts of a page created inside the window count every one of its ads, and where the data source has not computed the average live ads, those of a page created inside the window are the mean of its live ads read since its first day (extra.averagedFrom: the first day read), those of an older page null (extra.adsGrowth30d is null then). profile.instagramFollowers is null for a page with no Instagram account or none the data source knows. Shares are fractions: extra.euAdsShare is the share of the page's live ads shown in the EU or UK (0.0831 for 8.31%), extra.reachGrowth30d the growth of its EU reach over 30 days; extra.adCountries lists its live ads by target country ({countryCode, ads, share}) and extra.reachCountries its reach by country ({countryCode, impressions, share}), as its record has them. extra.newAds1d counts the ads it launched yesterday. mainLandingPages is empty on rows: the record has them (extra.mainLandingPages).
命名筛选 59请求体顶层字段
adCountriesadLanguageadsGrowthadsLaunchedPeriodadsTimePeriodageRangescategoryIdscountriescountryFilterModecpmcreationCountriesexcludeAgeRangesexcludeCreationCountriesexcludeMarketCountriesexcludeShopifyAppIdsexcludeThemeIdsmainCountriesmainMarketCountriesmarketCountriesmaxActiveAdsmaxAdsGrowthmaxAdsLaunchedmaxAgemaxFacebookLikesmaxFbPageCreationDatemaxInstagramFollowersmaxPageReachGrowthmaxProductsCountmaxReachmaxReachPerPagemaxSpendPerPagemaxTrafficmaxTrafficGrowthminActiveAdsminAdsGrowthminAdsLaunchedminAgeminFacebookLikesminFbPageCreationDateminInstagramFollowersminPageReachGrowthminProductsCountminReachminReachPerPageminSpendPerPageminTrafficminTrafficGrowthpageNichespageReachGrowthpartnerssexshopCreatedAftershopCreatedBeforeshopifyAppIdsshopifyLinkedtechnologiesthemeIdstrackedPagestrafficGrowth
curl -X POST "https://api.sellwinners.com/v1/advertisers/query" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"limit": 10, "minActiveAds": 10, "offset": 0, "query": "nike"}'

GET/v1/advertisers/{advertiserId}

按 ID 获取单个广告主. Its reach is EU and UK reach, the advertiser search's own (the numbers advertiser lists show): advertising.reach30d, extra.reach14d and extra.totalReach (since tracking began); a page created inside a window has all its reach in it. A row's 0 next to page details that read EU reach is not a page with none: extra.totalReach is their reach so far. For a page with no EU or UK ads and no reach these and the estimates made from them are null, and nullReasons says why (eu_uk_only; not_measured for a window the data source has not counted). Its USD estimates are its reach at 9 USD per 1,000 people reached, with two decimals under 10 USD (1.26 for a reach of 140) and in whole dollars from 10 USD up. Its 14-day daily average, for a page created inside the 14 days, is its estimate so far over the whole days since it was created (one at least). extra.newAds7d, newAds14d and newAds30d count every ad of a page created inside the window. extra.avgActiveAds14d is the average of its live ads over 14 days: where the data source has not computed it, for a page created inside the 14 days the mean of its live ads read since its first day, from extra.averagedFrom.avgActiveAds14d (never before the day the page was created), else null (not_measured). advertising.countryDistribution is the page's live ads that target each country (ads) and their share of its live ads (an ad targets several, so the shares add up to more than 1), and extra.reachCountries the countries with reach, each with its share of it (one too small for 4 decimals unrounded, never 0); extra.reachScope says where most of that reach was seen: eu_uk, or outside_eu_uk for a page the data source reports the reach of from elsewhere too (its reach and the estimates made from it are then that reach, not EU reach). extra.history starts on the day the page was created and leaves out the readings the data source missed (a run of zeros of 14 days or fewer between two readings above 0; for the daily estimates, on days the page ran ads), and the new ads of 0 of the days it missed; extra.followersHistory leaves out a 0 between two readings above 0 or of such a day. The daily USD estimates of extra.history keep two decimals under 10 USD, read against the reach the page gained that day. extra.platforms.meta holds this page's own live (active) and total ads; extra.platforms.google and tiktok count the ads of the advertiser's website (all its pages), and extra.platforms.metaSite its Meta ads, each left out when the data source has no count. extra.bannerUrl, newAds1d (the new ads of yesterday), reach90d, newAds90d, avgActiveAds7d and avgActiveAds30d, linkedDomains, hasPartnershipAds and languages are those of the page's advertiser row, as advertiser lists show them. A page whose live ads are fewer than the live ads among its 24 newest ads (copies grouped) has a stale summary: advertising.activeAds and the new ads of yesterday, 7, 14, 30 and 90 days under what those ads show are raised to that floor, and extra.atLeast names the counters raised (none for a past day). For a page whose website is not a shop (an app store, a social or messaging site, a link shortener or a tracking redirect), extra.nonShopSite names that site and extra.platforms is left out (its counts are the site's), and linkedShops holds the shop most of its ads link to, from its landing pages (fromLandingPages true), or nothing. extra.mainLandingPages are the preview of its landing pages for a page the library has just seen. lastAds are its newest ads; for a page whose ads the ad search has not taken in yet, the latest ones its advertiser row lists (their id and media only), with meta.indexing true (also when it lists none yet); lastAds is empty, with meta.partial and a warning, when its newest ads could not be read. profile.instagramFollowers is null for a page with no Instagram account or none the data source knows. snapshotDate (a past day) gives the page's details as they were then (meta.snapshotDate).
参数说明
advertiserId必填 Facebook page id of an advertiser or ad.
snapshotDate A past day (YYYY-MM-DD): the page's details as they were then.
curl "https://api.sellwinners.com/v1/advertisers/ADVERTISER_ID" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/advertisers/{advertiserId}/history

单个广告主每日的在投广告和欧盟覆盖人数. The page's live ads and the EU reach it gained, one reading a day, over the days asked (days: 7-3650, default 90; all: every reading the data source has), from the day the page was created. reach is empty when the data source reports none: nullReasons.reach is eu_uk_only for a page with no EU or UK ads (reach is reported for those only), not_measured for a page whose reach is not counted yet. The readings of 0 of a page with no EU ad now that gained reach before the days asked are kept (it gained none). Readings the data source missed are left out: a run of zeros of 14 days or fewer between two readings above 0 (for reach, on days the page ran ads).
参数说明
advertiserId必填 Facebook page id of an advertiser or ad.
days How many days back, 7-3650 (default 90), or all for every reading.
curl "https://api.sellwinners.com/v1/advertisers/ADVERTISER_ID/history?days=90" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/advertisers/{advertiser_id}/ads

单个广告主的 Meta 广告. All of its ads, the copies of one ad grouped in one row (metrics.duplicates counts them), so pagination.total counts the unique ads. sortBy=longestRunning takes order=desc only; sortBy=adRank lists the best rank (1) first, whatever the order. For a page whose ads the ad search has not taken in yet (a page the library has just seen), the first page is the latest ads its advertiser row lists (their id and media only), with meta.indexing true and meta.liveAds its live ads; with none listed yet the first page is empty, meta.indexing true all the same (meta.liveAds the live ads its page details count, for a page with no advertiser row yet).
参数说明
advertiser_id必填 Facebook page id of an advertiser or ad.
sortBy Defaults to relevance when searching, otherwise newest. 可选值:relevance, newest, reach, reachGrowth7d, reachDelta7d, longestRunning, duplicates, spend, adRank, rankDelta7d, rankDelta14d, rankDelta30d, createdAt, relevanceScore, mostDuplicates, adOrder。
order Sort direction (default desc). 可选值:desc, asc。
page Page number, starting at 1.
offset Results to skip. Use it instead of page.
limit Results per page, 1-100 (default 20).
curl "https://api.sellwinners.com/v1/advertisers/ADVERTISER_ID/ads?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

邮件

品牌的营销邮件和新闻简报。

GET/v1/emails

搜索品牌邮件. Without a campaign type (type, campaignTypes), Newsletter and Marketing emails are listed. Campaign types, categories, promotion types and events are the data source's names, in any case. Market countries (country, countries, amongMarketCountries) are any of the shop's: emails have no main market. shopIds takes shop ids or domains. A sentBefore date means before that day. A row's extra.shopMonthlyVisits and shopTrafficGrowth30d are left out for a site the traffic data has not measured yet (0 visits with a growth of 0 or none: nullReasons not_measured); extra.shopProductsCountCapped marks the data source's products ceiling (25,001: 25,000 or more); extra.shopAvgActiveAds7d, shopAvgActiveAds14d, shopAvgActiveAds30d, shopTotalAds, shopMarketCountries and shopMainMarket are the shop's figures. Growth ranges are percentages over 30 days (adsGrowth also takes min7 and max7, over 7 days). GET /v1/emails/facets/{facet} lists the values of the languages, countries, creationCountries, promotionTypes, eventNames, categories and campaignTypes filters with their emails.
命名筛选 33额外查询参数
adsGrowthamongMarketCountriescampaignTypescategoriescategoryIdscountriescreationCountriesemailCategoryIdseventCategorieseventIdseventNamesexcludeLanguageslanguagesmaxActiveAdsmaxActiveAdsGrowthmaxBestSellerPricemaxMonthlyVisitsmaxProductsCountmaxTrafficGrowthminActiveAdsminActiveAdsGrowthminBestSellerPriceminMonthlyVisitsminProductsCountminTrafficGrowthpromotionTypeIdspromotionTypessentAftersentBeforeshopCreatedAftershopCreatedBeforeshopIdstrafficGrowth
参数说明
search Words in the subject, sender or content.
type Campaign type, in any case (default: Newsletter and Marketing). 可选值:Marketing, Newsletter, Welcome, Abandoned Cart。
country 2-letter ISO code of a country the shop sells to (any of its market countries).
sortBy Defaults to relevance when searching, otherwise newest. 可选值:relevance, newest, event, promotionType, activeAds, emails90d, avgEmailsPerWeek, oldest, shopEmailFrequency。
order Sort direction (default desc). 可选值:desc, asc。
page Page number, starting at 1.
offset Results to skip. Use it instead of page.
limit Results per page, 1-100 (default 25).
curl "https://api.sellwinners.com/v1/emails?search=black%20friday&limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/emails/query

按筛选条件搜索品牌邮件. Without a campaign type (type, campaignTypes), Newsletter and Marketing emails are listed. Campaign types, categories, promotion types and events are the data source's names, in any case. Market countries (country, countries, amongMarketCountries) are any of the shop's: emails have no main market. shopIds takes shop ids or domains. A sentBefore date means before that day. A row's extra.shopMonthlyVisits and shopTrafficGrowth30d are left out for a site the traffic data has not measured yet (0 visits with a growth of 0 or none: nullReasons not_measured); extra.shopProductsCountCapped marks the data source's products ceiling (25,001: 25,000 or more); extra.shopAvgActiveAds7d, shopAvgActiveAds14d, shopAvgActiveAds30d, shopTotalAds, shopMarketCountries and shopMainMarket are the shop's figures. Growth ranges are percentages over 30 days (adsGrowth also takes min7 and max7, over 7 days). GET /v1/emails/facets/{facet} lists the values of the languages, countries, creationCountries, promotionTypes, eventNames, categories and campaignTypes filters with their emails.
命名筛选 33请求体顶层字段
adsGrowthamongMarketCountriescampaignTypescategoriescategoryIdscountriescreationCountriesemailCategoryIdseventCategorieseventIdseventNamesexcludeLanguageslanguagesmaxActiveAdsmaxActiveAdsGrowthmaxBestSellerPricemaxMonthlyVisitsmaxProductsCountmaxTrafficGrowthminActiveAdsminActiveAdsGrowthminBestSellerPriceminMonthlyVisitsminProductsCountminTrafficGrowthpromotionTypeIdspromotionTypessentAftersentBeforeshopCreatedAftershopCreatedBeforeshopIdstrafficGrowth
curl -X POST "https://api.sellwinners.com/v1/emails/query" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"campaignTypes": ["Marketing"], "limit": 10, "page": 1, "query": "black friday", "sentAfter": "2025-11-01"}'

GET/v1/emails/{emailId}

按 ID 获取单封邮件. classification names the email's promotion type, category and event. The shop's monthly visits, live ads, products and 90-day figures are those the email lists show (shopEmails90d, shopAvgEmailsPerWeek), the same as the shop's email stats; marketing.activeAds is null for a 0 with no ad total (nullReasons not_measured), and marketing.avgActiveAds7d, avgActiveAds14d and avgActiveAds30d are the shop's average live ads the lists show. traffic.monthlyVisits and growth30d are null for a site the traffic data has not measured yet (0 visits with a growth of 0 or none: nullReasons not_measured). catalog.productsCountCapped marks the data source's products ceiling (25,001: 25,000 or more). shop.logoUrl is the shop's picture. extra.sender and content.preheader are those of the email's own row in the email lists (its details send neither): with no row for it, the sender is null with nullReasons not_reported. When the shop's figures could not be read they are null with nullReasons failed, meta.partial and a warning; so is the sender when the email's row could not be read.
参数说明
emailId必填 Email id from an email search.
curl "https://api.sellwinners.com/v1/emails/EMAIL_ID" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/emails/{emailId}/html

单封邮件的原始 HTML.
参数说明
emailId必填 Email id from an email search.
curl "https://api.sellwinners.com/v1/emails/EMAIL_ID/html" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shops/{shopId}/emails/stats

店铺的邮件发送统计. The figures count the shop's emails of every campaign type (Marketing, Newsletter, Welcome and Abandoned Cart). last90Days.emailsByDayOfWeek is keyed by the day's number as the data source counts the days: 0 is Sunday, 1 Monday, up to 6, Saturday. last90Days.totalEmails and avgEmailsPerWeek are the figures the email lists show (shopEmails90d, shopAvgEmailsPerWeek), null when no email of the shop is tracked (nullReasons none_found) or the figures could not be read (meta.partial); calendar.partial marks a month cut at 500 emails.
参数说明
shopId必填 Shop id or domain, such as allbirds.com.
month必填 Calendar month, as YYYY-MM.
curl "https://api.sellwinners.com/v1/shops/allbirds.com/emails/stats?month=2026-09" \
  -H "X-API-Key: YOUR_API_KEY"

商品

店铺商品及其价格、销量、评价、广告和欧盟覆盖人数。

GET/v1/products

搜索或浏览商品. Each product has its price in the store's currency (`pricing.price`, `pricing.currency`) and in US dollars (`pricing.priceUsd`), `pricing.basePrice`, `discountPercent`, `onSale` and `isSubscription`; its sales estimates in whole US dollars (`sales.estDailySales`, and `sales.estMonthlySales`, 30 times the day) and its units sold a day (`sales.unitsSoldDaily`; `unitsSoldMonthly`, 30 times the day); its reviews (`reviews.rating`, null with no review, and `reviews.count`) and best-seller rank (`bestSeller.rank`, its place among its shop's products, 1 the best, and `rankPercent`, that place as a percent of the shop's products: 100 times the rank over `shop.productsCount`, so a low figure is a better rank); its Meta ads (`advertising.activeAds`, `totalAds`, `adsLaunched30d`, `adShare` and `spendShare` (percents, 0 to 100, as the minAdShare and minSpendShare filters take them, unlike the fractions of the other share fields), `advertisersCount`, and its latest ads, `advertising.latestAds`, each with its `id`, `platform`, `mediaType`, `mediaUrl` and `thumbnailUrl`, and their pictures, `advertising.previewUrls`), its EU reach (`eu.reach14d`, `reach30d`) and its EU spend in US dollars (`eu.spend30d`, `spendDaily`); its weeks (`weeks`, oldest first, up to 26: each with its `from` and `to` days, `activeAds`, `adShare` (a percent), and the EU spend a day in US dollars and reach a day, `euSpendDaily` and `euReachDaily`); the countries it sells to (`sellingCountries`), its launch date (`publishedAt`, UTC) and its shop (`shop.id`, `domain`, `name`, `logoUrl`, `estMonthlySales`, `monthlyVisits`, `productsCount`). `nullReasons` says why a figure is null: not_measured, or not_available for EU figures the index does not give on a product. `searchType` matches the text against the product's name (productName), its description (productDescription), its shop's domain (shop) or its address (url); without it, the index's own match. Named filters: minPriceUsd and maxPriceUsd (the price in USD); minEstMonthlySales and maxEstMonthlySales (the sales estimate of a month in USD, 30 times the day), or minEstDailySales and maxEstDailySales (a day's, sent as 30 days of it); minUnitsSoldMonthly and maxUnitsSoldMonthly (units sold in a month), or minUnitsSoldDaily and maxUnitsSoldDaily (a day's, sent as 30 days of it); sellingCountries (country codes: a product that sells to any of them); minActiveAds and maxActiveAds; minAdsLaunched and maxAdsLaunched (Meta ads launched in the last 30 days); minAdShare and maxAdShare, minSpendShare and maxSpendShare (percents); minEuReach and maxEuReach (the EU reach over 30 days); hasPartnershipAds (true or false); minReviews and maxReviews (the number of reviews), minRating and maxRating (the review score, 0 to 5); publishedAfter and publishedBefore (the launch day, YYYY-MM-DD); promoTypes (percent-off); currencies (the store's currency codes); subscription (subscription or one-time); shopCountries (the shop's country codes); minShopProductsCount and maxShopProductsCount (the shop's products). `shop` (one shop's domain or id) lists that shop's products only, with no search text. Also: excludeSellingCountries and mainSellingCountries (country codes); shopVisitorCountries (the countries its shop's visitors come from); minShopMonthlyVisits and maxShopMonthlyVisits; minShopTrafficGrowth30d and maxShopTrafficGrowth30d (a percent, which may be negative); adsLaunchedPeriod (the window of minAdsLaunched and maxAdsLaunched: 7d, 14d, 30d, the default, or all); minEuAdSpend and maxEuAdSpend (US dollars over 30 days); shopCreatedAfter and shopCreatedBefore (YYYY-MM-DD); shopifyAppIds, themeIds and pixelIds (ids from the filter lists). Other names of the same filters: minPrice, maxPrice, minMonthlyRevenue, maxMonthlyRevenue, minMonthlyUnitsSold, maxMonthlyUnitsSold, minReviewCount, maxReviewCount, partnership, shopId.
命名筛选 60额外查询参数
adsLaunchedPeriodcurrenciesexcludeSellingCountrieshasPartnershipAdsmainSellingCountriesmaxActiveAdsmaxAdSharemaxAdsLaunchedmaxEstDailySalesmaxEstMonthlySalesmaxEuAdSpendmaxEuReachmaxMonthlyRevenuemaxMonthlyUnitsSoldmaxPricemaxPriceUsdmaxRatingmaxReviewCountmaxReviewsmaxShopMonthlyVisitsmaxShopProductsCountmaxShopTrafficGrowth30dmaxSpendSharemaxUnitsSoldDailymaxUnitsSoldMonthlyminActiveAdsminAdShareminAdsLaunchedminEstDailySalesminEstMonthlySalesminEuAdSpendminEuReachminMonthlyRevenueminMonthlyUnitsSoldminPriceminPriceUsdminRatingminReviewCountminReviewsminShopMonthlyVisitsminShopProductsCountminShopTrafficGrowth30dminSpendShareminUnitsSoldDailyminUnitsSoldMonthlypartnershippixelIdspromoTypespublishedAfterpublishedBeforesellingCountriesshopshopCountriesshopCreatedAftershopCreatedBeforeshopIdshopVisitorCountriesshopifyAppIdssubscriptionthemeIds
参数说明
search Words to match: the product's name unless searchType says otherwise.
searchType What the text is matched against (shop: the shop's domain; url: the product's address). Without it, the index's own match. 可选值:productName, productDescription, shop, url。
sortBy Defaults to relevance. newest ranks by the launch date (createdAt is the same), activeAds by live Meta ads, spend by EU ad spend over the last 30 days, estSales by the sales estimate, adPressure by the ad share, and bestSelling by the best seller rank in its shop (rank 1 first whatever the order). 可选值:relevance, newest, activeAds, spend, estSales, bestSelling, adPressure, createdAt。
order Sort direction (default desc). 可选值:desc, asc。
page Page number, starting at 1.
offset Results to skip. Use it instead of page.
limit Results per page, 1-100 (default 24).
curl "https://api.sellwinners.com/v1/products?search=serum&limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/products/query

按筛选条件搜索商品. Body: query (or search), searchType, sortBy, order, page or offset, limit, and the named filters at the top level or inside filters, as on GET /v1/products. Each product has its price in the store's currency (`pricing.price`, `pricing.currency`) and in US dollars (`pricing.priceUsd`), `pricing.basePrice`, `discountPercent`, `onSale` and `isSubscription`; its sales estimates in whole US dollars (`sales.estDailySales`, and `sales.estMonthlySales`, 30 times the day) and its units sold a day (`sales.unitsSoldDaily`; `unitsSoldMonthly`, 30 times the day); its reviews (`reviews.rating`, null with no review, and `reviews.count`) and best-seller rank (`bestSeller.rank`, its place among its shop's products, 1 the best, and `rankPercent`, that place as a percent of the shop's products: 100 times the rank over `shop.productsCount`, so a low figure is a better rank); its Meta ads (`advertising.activeAds`, `totalAds`, `adsLaunched30d`, `adShare` and `spendShare` (percents, 0 to 100, as the minAdShare and minSpendShare filters take them, unlike the fractions of the other share fields), `advertisersCount`, and its latest ads, `advertising.latestAds`, each with its `id`, `platform`, `mediaType`, `mediaUrl` and `thumbnailUrl`, and their pictures, `advertising.previewUrls`), its EU reach (`eu.reach14d`, `reach30d`) and its EU spend in US dollars (`eu.spend30d`, `spendDaily`); its weeks (`weeks`, oldest first, up to 26: each with its `from` and `to` days, `activeAds`, `adShare` (a percent), and the EU spend a day in US dollars and reach a day, `euSpendDaily` and `euReachDaily`); the countries it sells to (`sellingCountries`), its launch date (`publishedAt`, UTC) and its shop (`shop.id`, `domain`, `name`, `logoUrl`, `estMonthlySales`, `monthlyVisits`, `productsCount`). `nullReasons` says why a figure is null: not_measured, or not_available for EU figures the index does not give on a product. `searchType` matches the text against the product's name (productName), its description (productDescription), its shop's domain (shop) or its address (url); without it, the index's own match. Named filters: minPriceUsd and maxPriceUsd (the price in USD); minEstMonthlySales and maxEstMonthlySales (the sales estimate of a month in USD, 30 times the day), or minEstDailySales and maxEstDailySales (a day's, sent as 30 days of it); minUnitsSoldMonthly and maxUnitsSoldMonthly (units sold in a month), or minUnitsSoldDaily and maxUnitsSoldDaily (a day's, sent as 30 days of it); sellingCountries (country codes: a product that sells to any of them); minActiveAds and maxActiveAds; minAdsLaunched and maxAdsLaunched (Meta ads launched in the last 30 days); minAdShare and maxAdShare, minSpendShare and maxSpendShare (percents); minEuReach and maxEuReach (the EU reach over 30 days); hasPartnershipAds (true or false); minReviews and maxReviews (the number of reviews), minRating and maxRating (the review score, 0 to 5); publishedAfter and publishedBefore (the launch day, YYYY-MM-DD); promoTypes (percent-off); currencies (the store's currency codes); subscription (subscription or one-time); shopCountries (the shop's country codes); minShopProductsCount and maxShopProductsCount (the shop's products). `shop` (one shop's domain or id) lists that shop's products only, with no search text. Also: excludeSellingCountries and mainSellingCountries (country codes); shopVisitorCountries (the countries its shop's visitors come from); minShopMonthlyVisits and maxShopMonthlyVisits; minShopTrafficGrowth30d and maxShopTrafficGrowth30d (a percent, which may be negative); adsLaunchedPeriod (the window of minAdsLaunched and maxAdsLaunched: 7d, 14d, 30d, the default, or all); minEuAdSpend and maxEuAdSpend (US dollars over 30 days); shopCreatedAfter and shopCreatedBefore (YYYY-MM-DD); shopifyAppIds, themeIds and pixelIds (ids from the filter lists). Other names of the same filters: minPrice, maxPrice, minMonthlyRevenue, maxMonthlyRevenue, minMonthlyUnitsSold, maxMonthlyUnitsSold, minReviewCount, maxReviewCount, partnership, shopId.
命名筛选 60请求体顶层字段
adsLaunchedPeriodcurrenciesexcludeSellingCountrieshasPartnershipAdsmainSellingCountriesmaxActiveAdsmaxAdSharemaxAdsLaunchedmaxEstDailySalesmaxEstMonthlySalesmaxEuAdSpendmaxEuReachmaxMonthlyRevenuemaxMonthlyUnitsSoldmaxPricemaxPriceUsdmaxRatingmaxReviewCountmaxReviewsmaxShopMonthlyVisitsmaxShopProductsCountmaxShopTrafficGrowth30dmaxSpendSharemaxUnitsSoldDailymaxUnitsSoldMonthlyminActiveAdsminAdShareminAdsLaunchedminEstDailySalesminEstMonthlySalesminEuAdSpendminEuReachminMonthlyRevenueminMonthlyUnitsSoldminPriceminPriceUsdminRatingminReviewCountminReviewsminShopMonthlyVisitsminShopProductsCountminShopTrafficGrowth30dminSpendShareminUnitsSoldDailyminUnitsSoldMonthlypartnershippixelIdspromoTypespublishedAfterpublishedBeforesellingCountriesshopshopCountriesshopCreatedAftershopCreatedBeforeshopIdshopVisitorCountriesshopifyAppIdssubscriptionthemeIds
curl -X POST "https://api.sellwinners.com/v1/products/query" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"limit": 10, "minActiveAds": 10, "minPriceUsd": 20, "offset": 0, "query": "serum", "sortBy": "activeAds"}'

GET/v1/products/{productId}

获取商品. One product as a search returns it, with `detail`: its photos, options and variants from the store's own page. `productId` is a row's `ref`.
参数说明
productId必填 The product's `ref`, as a product search returns it.
curl "https://api.sellwinners.com/v1/products/SHOP_ID:PRODUCT_ID" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/products/lookup

通过页面地址查找商品. The product behind a Shopify product page (`url`), as GET /v1/products/{productId} answers it.
参数说明
url必填 A Shopify product page's address, https://<shop>/products/<handle>.
curl "https://api.sellwinners.com/v1/products/lookup?url=https%3A//example.com/products/blue-mug" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/products/{productId}/ads

列出商品的广告. The Meta ads that link to the product's page, newest first, in the format of /v1/ads. `status`: active or inactive.
参数说明
productId必填 The product's `ref`, as a product search returns it.
status active or inactive. 可选值:active, inactive。
page Page number, starting at 1.
limit Results per page (1-100, default 10).
curl "https://api.sellwinners.com/v1/products/SHOP_ID:PRODUCT_ID/ads" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/products/{productId}/share-links

创建(或返回)商品的公开链接. Anyone with the link can view the product's sheet on the website without an account, with no EU data.
参数说明
productId必填 The product's `ref`, as a product search returns it.
curl -X POST "https://api.sellwinners.com/v1/products/SHOP_ID:PRODUCT_ID/share-links" \
  -H "X-API-Key: YOUR_API_KEY"

DELETE/v1/products/{productId}/share-links

移除商品的公开链接.
参数说明
productId必填 The product's `ref`, as a product search returns it.
curl -X DELETE "https://api.sellwinners.com/v1/products/SHOP_ID:PRODUCT_ID/share-links" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shared/products/{token}

分享链接对应的商品(无需密钥). The same record the share page shows, as JSON.
参数说明
token必填 Token at the end of a share link.
curl "https://api.sellwinners.com/v1/shared/products/TOKEN" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/products/facets

商品搜索的筛选值. The same list as GET /v1/filters/products. Free of credits.
curl "https://api.sellwinners.com/v1/products/facets" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/products/image-search/history

您最近的以图搜索. Your own image searches, newest first: searchId (to read it again), kind (upload or url), label (the file's name or the URL's host and file), total (the matches it found), createdAt and queryImage (a small copy of the picture, a data URI). Only the searches of your account are listed.
参数说明
limit How many, newest first (1-20, default 10).
curl "https://api.sellwinners.com/v1/products/image-search/history?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/products/image-search/{searchId}

重新读取一次以图搜索的结果. Another page, sort, filter or results per shop of one of your image searches, without sending the picture again; a search of another account, or one that has expired, answers 404 not_found. Store products that look like the picture, each with its shop, the closest first: a product row as the product search answers it (GET /v1/products), with `similarity` (0.7 to 1, how close it is to the picture) and `matchOnly` (true for a match the product index has no record of: its title, picture, price, launch date and shop only, its figures null). `maxPerShop` keeps the closest 1, 3, 5, 10 or 20 matches of each shop (0, the default: all). Pages of 32 at most (`limit`), by `page` or `offset`. `meta.searchId` is the search's id: GET /v1/products/image-search/{searchId} reads its other pages, sorts, filters and results per shop without sending the picture again (the same matches: `meta.total` does not change with the sort). `meta.queryImage` is a small copy of the picture (a data URI), `meta.depthCapped` marks a list that ends before its total (narrow it with filters), `meta.similarityThreshold` the lowest similarity answered. The picture is written again before it is searched (as a JPEG without its metadata) and a URL is downloaded by us, never passed on. Errors: 400 invalid_image (not a PNG, JPG or WEBP file, or over 10 MB), 400 unsupported_url (not an http or https URL, or a private or local address), 422 unreadable_image (a file that does not decode, or a URL that does not download), 504 upstream_timeout. Each search is counted as one request, a replay too; answers are never cached. On Free, image search is ranked by relevance with no filters, as the plan's policy says.
参数说明
searchId必填 The searchId an image search answered (meta.searchId).
filters A JSON object of the product search's named filters.
sortBy Defaults to relevance. 可选值:relevance, estSales, activeAds, adPressure, newest, spend, spend14d。
order Sort direction (default desc). 可选值:desc, asc。
maxPerShop 0 (all), 1, 3, 5, 10 or 20.
page Page number, starting at 1.
offset Number of results to skip.
limit Results per page (1-32).
curl "https://api.sellwinners.com/v1/products/image-search/SEARCH_ID?sortBy=activeAds&page=2" \
  -H "X-API-Key: YOUR_API_KEY"

筛选项

搜索筛选条件可用的值和 ID。

GET/v1/facets/categories

类目(用于 categoryIds 筛选的 ID). The ids taken by every categoryIds filter. Each row has id, name, path, parentId and usageCount.
参数说明
search Only options whose name contains this text.
limit Options per page, 1-500 (default 100).
offset Options to skip.
curl "https://api.sellwinners.com/v1/facets/categories?limit=20" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/facets/shopify-apps

Shopify 应用(用于应用筛选的 ID).
参数说明
search Only options whose name contains this text.
limit Options per page, 1-500 (default 100).
offset Options to skip.
curl "https://api.sellwinners.com/v1/facets/shopify-apps?limit=20" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/facets/technologies

店面技术(用于 technologies 筛选的 slug).
参数说明
search Only options whose name contains this text.
limit Options per page, 1-500 (default 100).
offset Options to skip.
curl "https://api.sellwinners.com/v1/facets/technologies?limit=20" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/facets/pixels

追踪像素(用于像素筛选的 ID).
参数说明
search Only options whose name contains this text.
limit Options per page, 1-500 (default 100).
offset Options to skip.
curl "https://api.sellwinners.com/v1/facets/pixels?limit=20" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/facets/themes

Shopify 主题(用于主题筛选的 ID).
参数说明
search Only options whose name contains this text.
limit Options per page, 1-500 (default 100).
offset Options to skip.
curl "https://api.sellwinners.com/v1/facets/themes?limit=20" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/facets/email-classifications

邮件分类、促销类型和节日活动. The ids taken by emailCategoryIds, promotionTypeIds and eventIds, and the event categories taken by eventCategories, in email searches.
curl "https://api.sellwinners.com/v1/facets/email-classifications" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/google-ads/facets/networks

Google 广告网络.
curl "https://api.sellwinners.com/v1/google-ads/facets/networks" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/google-ads/facets/countries

Google 广告受众国家.
参数说明
search Only options whose name contains this text.
limit Options per page, 1-500 (default 100).
offset Options to skip.
curl "https://api.sellwinners.com/v1/google-ads/facets/countries?limit=20" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/google-ads/facets/formats

Google 广告格式. The values the formats filter of a Google search takes (text, image, video), each with the ads it counts (adsCount), most first. On paid plans, as Google ads are.
curl "https://api.sellwinners.com/v1/google-ads/facets/formats" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/google-ads/facets/statuses

Google 广告状态. The values the status filter of a Google search takes (active, inactive), each with the ads the data source counts for it (adsCount): an ad it still marks active that Google has not shown for more than 7 days counts as active here, though status=active leaves it out. On paid plans, as Google ads are.
curl "https://api.sellwinners.com/v1/google-ads/facets/statuses" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/google-ads/facets/categories

Google 广告主类目. Each row has id, name, path, parentId and advertiserUsageCount.
参数说明
search Only options whose name contains this text.
limit Options per page, 1-500 (default 100).
offset Options to skip.
curl "https://api.sellwinners.com/v1/google-ads/facets/categories?limit=20" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/tiktok/facets/categories

TikTok 类目. The names the categories filter of a TikTok search takes, as the data source spells them. Each row has value, label and postsCount (the posts the category counts), most first. On paid plans, as TikTok is.
参数说明
search Only options whose name contains this text.
limit Options per page, 1-500 (default 100).
offset Options to skip.
curl "https://api.sellwinners.com/v1/tiktok/facets/categories?limit=20" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/tiktok/facets/languages

TikTok 语言. The names the languages filter of a TikTok search takes (english). Each row has value, label and postsCount (the posts it counts), most first. On paid plans, as TikTok is.
参数说明
search Only options whose name contains this text.
limit Options per page, 1-500 (default 100).
offset Options to skip.
curl "https://api.sellwinners.com/v1/tiktok/facets/languages?limit=20" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/tiktok/facets/countries

TikTok 国家. The two-letter codes the countries filter of a TikTok search takes. Each row has value, label and postsCount (the posts it counts), most first. On paid plans, as TikTok is.
参数说明
search Only options whose name contains this text.
limit Options per page, 1-500 (default 100).
offset Options to skip.
curl "https://api.sellwinners.com/v1/tiktok/facets/countries?limit=20" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/tiktok/facets/content-types

TikTok 内容类型. The content types of TikTok posts (ad, organic: the type filter). Each row has value, label and postsCount (the posts it counts), most first. On paid plans, as TikTok is.
参数说明
search Only options whose name contains this text.
limit Options per page, 1-500 (default 100).
offset Options to skip.
curl "https://api.sellwinners.com/v1/tiktok/facets/content-types?limit=20" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/tiktok/facets/media-types

TikTok 媒体类型. The media types of TikTok posts (video, carousel: the mediaType filter). Each row has value, label and postsCount (the posts it counts), most first. On paid plans, as TikTok is.
参数说明
search Only options whose name contains this text.
limit Options per page, 1-500 (default 100).
offset Options to skip.
curl "https://api.sellwinners.com/v1/tiktok/facets/media-types?limit=20" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/emails/facets/{facet}

邮件筛选值. The values an email filter takes, each with the emails it counts (emails), most first: languages (the names the languages filters take), countries (the shop's market countries), creationCountries (the country the shop was created in), promotionTypes, eventNames, categories and campaignTypes (the data source's names). On paid plans, as emails are.
参数说明
facet必填 The list: languages, countries, creationCountries, promotionTypes, eventNames, categories or campaignTypes.
search Only options whose name contains this text.
limit Options per page, 1-500 (default 100).
offset Options to skip.
curl "https://api.sellwinners.com/v1/emails/facets/promotionTypes?limit=20" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/filters/shops

店铺搜索的筛选值. The values the shop search's raw filters take (countryCodes, visitorCountryCodes, activeAdsRanges, productRanges, shopifyApps, shopifyThemes), each {value, label, count}, read once an hour; meta.shopsTracked is the number of shops the data source tracks. On paid plans.
curl "https://api.sellwinners.com/v1/filters/shops" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/filters/advertisers

广告主搜索的筛选值. The values the advertiser search's audience filters take: ageRanges, sexes, languages and countryCodes, each {value, label, count} (the pages counted), most first. On paid plans, as advertisers are.
curl "https://api.sellwinners.com/v1/filters/advertisers" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/filters/products

商品搜索的筛选值. The values the product search's currencies filter takes, each with the count the index gives it.
curl "https://api.sellwinners.com/v1/filters/products" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/filters/ads

广告搜索的筛选值.
curl "https://api.sellwinners.com/v1/filters/ads" \
  -H "X-API-Key: YOUR_API_KEY"

看板

把广告、店铺、商品、邮件和广告主保存到看板并分享。

GET/v1/boards

列出看板.
参数说明
scope Defaults to workspace. 可选值:workspace, personal。
state Defaults to active. 可选值:active, archived。
kind A collection holds items, a folder holds boards. 可选值:collection, folder。
surface What the board is for. 可选值:ads, shops, landing, emails, products, advertisers, mixed。
parentBoardId Only boards inside this folder board.
rootOnly Only top-level boards. 可选值:true, false。
page Page number, starting at 1.
limit Results per page, 1-100 (default 25).
curl "https://api.sellwinners.com/v1/boards?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/boards

创建看板. Body: name, and optionally kind (collection or folder), surface (ads, shops, landing, emails, products, advertisers, mixed), description, visibility (private, workspace, public) and parentBoardId.
curl -X POST "https://api.sellwinners.com/v1/boards" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"kind": "collection", "name": "Skincare winners", "surface": "ads", "visibility": "workspace"}'

GET/v1/boards/{boardId}

获取看板.
参数说明
boardId必填 Board id.
curl "https://api.sellwinners.com/v1/boards/BOARD_ID" \
  -H "X-API-Key: YOUR_API_KEY"

PATCH/v1/boards/{boardId}

更新看板. Send at least one of name, description or visibility.
参数说明
boardId必填 Board id.
curl -X PATCH "https://api.sellwinners.com/v1/boards/BOARD_ID" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"description": "Ads worth a second look.", "name": "Skincare winners 2026"}'

DELETE/v1/boards/{boardId}

归档看板. Archives the board and everything under it. The restore endpoint brings it back.
参数说明
boardId必填 Board id.
curl -X DELETE "https://api.sellwinners.com/v1/boards/BOARD_ID" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/boards/{boardId}/restore

恢复已归档的看板.
参数说明
boardId必填 Board id.
curl -X POST "https://api.sellwinners.com/v1/boards/BOARD_ID/restore" \
  -H "X-API-Key: YOUR_API_KEY"

PATCH/v1/boards/{boardId}/parent

移动看板. parentBoardId is a folder board; null moves the board to the top level.
参数说明
boardId必填 Board id.
curl -X PATCH "https://api.sellwinners.com/v1/boards/BOARD_ID/parent" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"parentBoardId": "BOARD_ID"}'

GET/v1/boards/{boardId}/items

列出看板中的内容.
参数说明
boardId必填 Board id.
page Page number, starting at 1.
limit Results per page, 1-100 (default 25).
include item adds the saved copy of each record. 可选值:item。
curl "https://api.sellwinners.com/v1/boards/BOARD_ID/items?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/boards/{boardId}/items

向看板添加内容. sourceType is meta_ad, google_ad, tiktok, shop, email, advertiser or product (a product is saved as a search last showed it). Adding an item twice returns the existing one with created: false.
参数说明
boardId必填 Board id.
curl -X POST "https://api.sellwinners.com/v1/boards/BOARD_ID/items" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"sourceId": "AD_ID", "sourceType": "meta_ad"}'

POST/v1/boards/{boardId}/items/{itemId}/move

把内容移到另一个看板.
参数说明
boardId必填 Board id.
itemId必填 Item id.
curl -X POST "https://api.sellwinners.com/v1/boards/BOARD_ID/items/ITEM_ID/move" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"targetBoardId": "BOARD_ID"}'

DELETE/v1/boards/{boardId}/items/{itemId}

从看板移除内容.
参数说明
boardId必填 Board id.
itemId必填 Item id.
curl -X DELETE "https://api.sellwinners.com/v1/boards/BOARD_ID/items/ITEM_ID" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/boards/{boardId}/share-links

创建看板的公开链接. The answer carries a url: a web page anyone can open, without an API key. Each call creates a new link.
参数说明
boardId必填 Board id.
curl -X POST "https://api.sellwinners.com/v1/boards/BOARD_ID/share-links" \
  -H "X-API-Key: YOUR_API_KEY"

DELETE/v1/boards/{boardId}/share-links

移除看板的公开链接. Every link to the board stops working at once; the board itself stays.
参数说明
boardId必填 Board id.
curl -X DELETE "https://api.sellwinners.com/v1/boards/BOARD_ID/share-links" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shared/boards/{token}

通过分享链接获取看板(无需密钥). The same board the share page shows, as JSON.
参数说明
token必填 Token at the end of a share link.
curl "https://api.sellwinners.com/v1/shared/boards/TOKEN" \
  -H "X-API-Key: YOUR_API_KEY"

收藏

按文件夹收藏广告、店铺和邮件。

GET/v1/favorites/ads

列出收藏的广告.
参数说明
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
folderId Only favorites in this folder.
page Page number, starting at 1.
limit Results per page, 1-100 (default 25).
curl "https://api.sellwinners.com/v1/favorites/ads?scope=workspace&limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/favorites/ads

收藏广告. Body: scope, adId and optionally folderId and sourceType (meta_ad by default; google_ad or tiktok saves a Google ad or a TikTok post by its id). Each saved ad names its adId and sourceType. Saving the same ad twice returns the saved one with created: false.
curl -X POST "https://api.sellwinners.com/v1/favorites/ads" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"adId": "AD_ID", "scope": "workspace"}'

PATCH/v1/favorites/ads/saved/{favoriteId}/folder

移动已收藏的广告.
参数说明
favoriteId必填 id of a saved favorite, from the favorites list.
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
curl -X PATCH "https://api.sellwinners.com/v1/favorites/ads/saved/FAVORITE_ID/folder?scope=workspace" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"folderId": "FOLDER_ID"}'

DELETE/v1/favorites/ads/saved/{favoriteId}

删除已收藏的广告.
参数说明
favoriteId必填 id of a saved favorite, from the favorites list.
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
curl -X DELETE "https://api.sellwinners.com/v1/favorites/ads/saved/FAVORITE_ID?scope=workspace" \
  -H "X-API-Key: YOUR_API_KEY"

DELETE/v1/favorites/ads/{recordId}

按 adId 移除收藏的广告.
参数说明
recordId必填 The adId of the saved ad.
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
folderId Only remove it from this folder.
curl -X DELETE "https://api.sellwinners.com/v1/favorites/ads/RECORD_ID?scope=workspace" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/favorites/ads/folders

列出广告收藏夹.
参数说明
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
parentId Only folders inside this folder.
rootOnly Only top-level folders. 可选值:true, false。
page Page number, starting at 1.
limit Results per page, 1-100 (default 25).
curl "https://api.sellwinners.com/v1/favorites/ads/folders?scope=workspace&limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/favorites/ads/folders

创建广告收藏夹. Body: scope, name and optionally parentId.
curl -X POST "https://api.sellwinners.com/v1/favorites/ads/folders" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"name": "Winners", "scope": "workspace"}'

PATCH/v1/favorites/ads/folders/reorder

检查广告收藏夹的排序. Folders have no stored order: the list is checked and echoed back sorted by order. The answer carries reordered: true.
参数说明
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
curl -X PATCH "https://api.sellwinners.com/v1/favorites/ads/folders/reorder?scope=workspace" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"folders": [{"id": "FOLDER_ID", "order": 0}]}'

POST/v1/favorites/ads/folders/{folderId}/share

创建广告收藏夹的公开链接.
参数说明
folderId必填 Folder id.
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
curl -X POST "https://api.sellwinners.com/v1/favorites/ads/folders/FOLDER_ID/share?scope=workspace" \
  -H "X-API-Key: YOUR_API_KEY"

DELETE/v1/favorites/ads/folders/{folderId}/share

移除广告收藏夹的公开链接.
参数说明
folderId必填 Folder id.
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
curl -X DELETE "https://api.sellwinners.com/v1/favorites/ads/folders/FOLDER_ID/share?scope=workspace" \
  -H "X-API-Key: YOUR_API_KEY"

PATCH/v1/favorites/ads/folders/{folderId}/visibility

设置广告收藏夹的可见性. visibility is private or organization.
参数说明
folderId必填 Folder id.
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
curl -X PATCH "https://api.sellwinners.com/v1/favorites/ads/folders/FOLDER_ID/visibility?scope=workspace" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"visibility": "private"}'

PATCH/v1/favorites/ads/folders/{folderId}

重命名或移动广告收藏夹. Body: name, and parentId to move the folder (null moves it to the top level).
参数说明
folderId必填 Folder id.
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
curl -X PATCH "https://api.sellwinners.com/v1/favorites/ads/folders/FOLDER_ID?scope=workspace" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"name": "Top performers"}'

DELETE/v1/favorites/ads/folders/{folderId}

删除广告收藏夹. mode is delete_items, move_items_to_root or move_items_to_folder (with targetFolderId).
参数说明
folderId必填 Folder id.
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
curl -X DELETE "https://api.sellwinners.com/v1/favorites/ads/folders/FOLDER_ID?scope=workspace" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"mode": "move_items_to_root"}'

GET/v1/favorites/shops

列出收藏的店铺.
参数说明
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
folderId Only favorites in this folder.
page Page number, starting at 1.
limit Results per page, 1-100 (default 25).
curl "https://api.sellwinners.com/v1/favorites/shops?scope=workspace&limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/favorites/shops

收藏店铺. Body: scope, websiteId and optionally folderId. Saving the same shop twice returns the saved one with created: false.
curl -X POST "https://api.sellwinners.com/v1/favorites/shops" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"scope": "workspace", "websiteId": "SHOP_ID"}'

PATCH/v1/favorites/shops/saved/{favoriteId}/folder

移动已收藏的店铺.
参数说明
favoriteId必填 id of a saved favorite, from the favorites list.
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
curl -X PATCH "https://api.sellwinners.com/v1/favorites/shops/saved/FAVORITE_ID/folder?scope=workspace" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"folderId": "FOLDER_ID"}'

DELETE/v1/favorites/shops/saved/{favoriteId}

删除已收藏的店铺.
参数说明
favoriteId必填 id of a saved favorite, from the favorites list.
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
curl -X DELETE "https://api.sellwinners.com/v1/favorites/shops/saved/FAVORITE_ID?scope=workspace" \
  -H "X-API-Key: YOUR_API_KEY"

DELETE/v1/favorites/shops/{recordId}

按 websiteId 移除收藏的店铺.
参数说明
recordId必填 The websiteId of the saved shop.
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
folderId Only remove it from this folder.
curl -X DELETE "https://api.sellwinners.com/v1/favorites/shops/RECORD_ID?scope=workspace" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/favorites/shops/folders

列出店铺收藏夹.
参数说明
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
page Page number, starting at 1.
limit Results per page, 1-100 (default 25).
curl "https://api.sellwinners.com/v1/favorites/shops/folders?scope=workspace&limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/favorites/shops/folders

创建店铺收藏夹. Body: scope, name.
curl -X POST "https://api.sellwinners.com/v1/favorites/shops/folders" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"name": "Winners", "scope": "workspace"}'

PATCH/v1/favorites/shops/folders/reorder

检查店铺收藏夹的排序. Folders have no stored order: the list is checked and echoed back sorted by order. The answer carries reordered: true.
参数说明
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
curl -X PATCH "https://api.sellwinners.com/v1/favorites/shops/folders/reorder?scope=workspace" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"folders": [{"id": "FOLDER_ID", "order": 0}]}'

POST/v1/favorites/shops/folders/{folderId}/share

创建店铺收藏夹的公开链接.
参数说明
folderId必填 Folder id.
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
curl -X POST "https://api.sellwinners.com/v1/favorites/shops/folders/FOLDER_ID/share?scope=workspace" \
  -H "X-API-Key: YOUR_API_KEY"

DELETE/v1/favorites/shops/folders/{folderId}/share

移除店铺收藏夹的公开链接.
参数说明
folderId必填 Folder id.
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
curl -X DELETE "https://api.sellwinners.com/v1/favorites/shops/folders/FOLDER_ID/share?scope=workspace" \
  -H "X-API-Key: YOUR_API_KEY"

PATCH/v1/favorites/shops/folders/{folderId}/visibility

设置店铺收藏夹的可见性. visibility is private or organization.
参数说明
folderId必填 Folder id.
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
curl -X PATCH "https://api.sellwinners.com/v1/favorites/shops/folders/FOLDER_ID/visibility?scope=workspace" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"visibility": "private"}'

PATCH/v1/favorites/shops/folders/{folderId}

重命名或移动店铺收藏夹. Body: name.
参数说明
folderId必填 Folder id.
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
curl -X PATCH "https://api.sellwinners.com/v1/favorites/shops/folders/FOLDER_ID?scope=workspace" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"name": "Top performers"}'

DELETE/v1/favorites/shops/folders/{folderId}

删除店铺收藏夹. mode is delete_items, move_items_to_root or move_items_to_folder (with targetFolderId).
参数说明
folderId必填 Folder id.
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
curl -X DELETE "https://api.sellwinners.com/v1/favorites/shops/folders/FOLDER_ID?scope=workspace" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"mode": "move_items_to_root"}'

GET/v1/favorites/emails

列出收藏的邮件.
参数说明
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
folderId Only favorites in this folder.
page Page number, starting at 1.
limit Results per page, 1-100 (default 25).
curl "https://api.sellwinners.com/v1/favorites/emails?scope=workspace&limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/favorites/emails

收藏邮件. Body: scope, emailId and optionally folderId. Saving the same email twice returns the saved one with created: false.
curl -X POST "https://api.sellwinners.com/v1/favorites/emails" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"emailId": 123456, "scope": "workspace"}'

PATCH/v1/favorites/emails/saved/{favoriteId}/folder

移动已收藏的邮件.
参数说明
favoriteId必填 id of a saved favorite, from the favorites list.
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
curl -X PATCH "https://api.sellwinners.com/v1/favorites/emails/saved/FAVORITE_ID/folder?scope=workspace" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"folderId": "FOLDER_ID"}'

DELETE/v1/favorites/emails/saved/{favoriteId}

删除已收藏的邮件.
参数说明
favoriteId必填 id of a saved favorite, from the favorites list.
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
curl -X DELETE "https://api.sellwinners.com/v1/favorites/emails/saved/FAVORITE_ID?scope=workspace" \
  -H "X-API-Key: YOUR_API_KEY"

DELETE/v1/favorites/emails/{recordId}

按 emailId 移除收藏的邮件.
参数说明
recordId必填 The emailId of the saved email.
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
folderId Only remove it from this folder.
curl -X DELETE "https://api.sellwinners.com/v1/favorites/emails/RECORD_ID?scope=workspace" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/favorites/emails/folders

列出邮件收藏夹.
参数说明
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
parentId Only folders inside this folder.
rootOnly Only top-level folders. 可选值:true, false。
page Page number, starting at 1.
limit Results per page, 1-100 (default 25).
curl "https://api.sellwinners.com/v1/favorites/emails/folders?scope=workspace&limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/favorites/emails/folders

创建邮件收藏夹. Body: scope, name and optionally parentId.
curl -X POST "https://api.sellwinners.com/v1/favorites/emails/folders" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"name": "Winners", "scope": "workspace"}'

PATCH/v1/favorites/emails/folders/reorder

检查邮件收藏夹的排序. Folders have no stored order: the list is checked and echoed back sorted by order. The answer carries reordered: true.
参数说明
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
curl -X PATCH "https://api.sellwinners.com/v1/favorites/emails/folders/reorder?scope=workspace" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"folders": [{"id": "FOLDER_ID", "order": 0}]}'

POST/v1/favorites/emails/folders/{folderId}/share

创建邮件收藏夹的公开链接.
参数说明
folderId必填 Folder id.
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
curl -X POST "https://api.sellwinners.com/v1/favorites/emails/folders/FOLDER_ID/share?scope=workspace" \
  -H "X-API-Key: YOUR_API_KEY"

DELETE/v1/favorites/emails/folders/{folderId}/share

移除邮件收藏夹的公开链接.
参数说明
folderId必填 Folder id.
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
curl -X DELETE "https://api.sellwinners.com/v1/favorites/emails/folders/FOLDER_ID/share?scope=workspace" \
  -H "X-API-Key: YOUR_API_KEY"

PATCH/v1/favorites/emails/folders/{folderId}/visibility

设置邮件收藏夹的可见性. visibility is private or organization.
参数说明
folderId必填 Folder id.
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
curl -X PATCH "https://api.sellwinners.com/v1/favorites/emails/folders/FOLDER_ID/visibility?scope=workspace" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"visibility": "private"}'

PATCH/v1/favorites/emails/folders/{folderId}

重命名或移动邮件收藏夹. Body: name, and parentId to move the folder (null moves it to the top level).
参数说明
folderId必填 Folder id.
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
curl -X PATCH "https://api.sellwinners.com/v1/favorites/emails/folders/FOLDER_ID?scope=workspace" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"name": "Top performers"}'

DELETE/v1/favorites/emails/folders/{folderId}

删除邮件收藏夹. mode is delete_items, move_items_to_root or move_items_to_folder (with targetFolderId).
参数说明
folderId必填 Folder id.
scope必填 Which favorites: shared with the workspace or personal. 可选值:workspace, personal。
curl -X DELETE "https://api.sellwinners.com/v1/favorites/emails/folders/FOLDER_ID?scope=workspace" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"mode": "move_items_to_root"}'

已保存视图

您在网站各列表页上保存的搜索,按页面归类。

GET/v1/views

列出您的已保存视图. Each view has its name, its state (the page's query string, as the website writes it), request (the search it makes: search, searchType, sortBy, order and the named filters, as the search endpoints take them) and ui (the page's own choices: a date preset such as last30 is worked out from today on the page, while the filters hold the days it had when the view was saved), in the order you gave them. On the Free plan, listed where the plan includes reading or saving saved items. Our own data: the data source is never asked.
参数说明
context Only this list page's views. Defaults to every page. 可选值:shops, meta, tiktok, google, advertisers, emails, products。
curl "https://api.sellwinners.com/v1/views" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/views

保存视图. Body: context (shops, meta, tiktok, google, advertisers, emails, products), name (1 to 60 characters, one per name on a page) and state (the page's query string: search, searchType, sortBy, order, view, the named filters as f.<name> or f.<name>.<key>, and the page's choices as v.<id>; 16,000 characters at most). Every filter is checked as the page's search checks it. 50 views per page. On the Free plan, open where it includes saving to boards and favorites, and on a page whose search it has in full (Meta ads).
curl -X POST "https://api.sellwinners.com/v1/views" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"context": "shops", "name": "Big US shops", "state": "f.marketCountries=US\u0026f.minMonthlyVisits=100000\u0026sortBy=monthlyVisits"}'

PATCH/v1/views/{viewId}

重命名、移动或修改已保存视图. Send at least one of name, position (its place among the page's views, 0 the first) or state.
参数说明
viewId必填 id of a saved view, from the list of your views.
curl -X PATCH "https://api.sellwinners.com/v1/views/VIEW_ID" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"name": "Big US shops 2026", "position": 0}'

DELETE/v1/views/{viewId}

删除已保存视图. Open on every plan; the page's other views keep their order.
参数说明
viewId必填 id of a saved view, from the list of your views.
curl -X DELETE "https://api.sellwinners.com/v1/views/VIEW_ID" \
  -H "X-API-Key: YOUR_API_KEY"

品牌追踪

关注品牌,查看其广告、素材和落地页的报告。

GET/v1/brandtrackers

列出追踪的品牌. A counter the source could not give is null, with nullReasons (failed, not_measured; totalTraffic: not_measured, also for a site not measured yet, which reads 0, or no_shop for a page with no shop) and, when a read failed, meta.partial. Sorting puts unknown values last. totalTraffic is read again once a day. advertising.activeAds here is the page's daily count; one tracked brand with a shop reads its shop's newest count (the one its charts end on), so the two can differ. A 0 of advertising.newAdsLastDay beside launches in the last 7 days is checked against the shop's launches of yesterday: their count, or null (not_measured) when there is no reading of that day. At most 20 brands are checked a call, those of the page asked for (sorted by newAdsLastDay or with hasNewAdsSince of yesterday, the first 20 in tracked order, newest first); the others are null (not_measured).
参数说明
page Page number, starting at 1.
limit Results per page, 1-100 (default 20).
name Only brands whose name or domain contains this text, or with this page id.
hasNewAdsSince Only brands with new ads since this date, such as 2026-09-30.
sortBy 可选值:newAdsLastDay, newAdsLast7Days, newAdsLast30Days, activeAds, totalTraffic, name, createdAt。
folderIds Only these folders, comma-separated; none: the brands in no folder.
folderNames Only folders with these names, comma-separated.
curl "https://api.sellwinners.com/v1/brandtrackers?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/brandtrackers

追踪品牌. Body: exactly one of facebookPageId, websiteId, shopId or domain, and optionally folderId. Tracking a brand twice returns the existing tracker with created: false (a shop tracked before through another of its pages too). A shop is followed through its own Facebook page running the most ads (its main page on a tie; never a partner's Whitelisting page).
curl -X POST "https://api.sellwinners.com/v1/brandtrackers" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"domain": "allbirds.com"}'

GET/v1/brandtrackers/{brandtrackerId}

单个追踪的品牌. statistics.euData.reach30d and estimatedSpend30d cover the last 30 days (reach and estimatedSpend are the lifetime totals; a spend keeps two decimals under 10 USD and is in whole dollars from 10 USD up); a count the source does not send is null and nullReasons says why (eu_uk_only, not_measured, failed, no_shop). liveAdCount.activeCount and advertising.activeAds are one count, the one the brand's charts end on; pageProfile.runningAds is the page details' own count. advertising.newAdsLastDay is checked as on the list. statistics.urlCounts lists the landing pages of statistics.urlCount with their live ads ({url, ads, activeAds}); statistics.changes30d holds the changes over 30 days of its live ads, the ads it launched and its EU reach, each with its change as a fraction (activeAdsChange30d, activeAdsChange30dPct, launchedChange30d, launchedChange30dPct, reachChange30d, reachChange30dPct); statistics.firstAdSeenAt, longestRunningDays and medianRunningDays say how long its ads run, and statistics.targetCountries lists the countries its live ads target ({countryCode, ads, share}); these are null (or empty) for a brand with no shop.
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID" \
  -H "X-API-Key: YOUR_API_KEY"

DELETE/v1/brandtrackers/{brandtrackerId}

停止追踪品牌.
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
curl -X DELETE "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/overview

品牌概览视图. Graph, media mix, top landing pages, top ads and the newest ads of a brand in one answer. A part that could not be read is null, with meta.partial and meta.warnings; meta.dataFreshnessLagDays is the age in days of the newest ad, given when the brand launched ads after it (0 otherwise: a brand that stopped launching is not a lag).
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
euOnly Only ads shown in the EU and UK. 可选值:true, false。
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/overview" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/snapshots

品牌的快照日期. The days recorded for a brand, newest first. Built from a daily record that starts the day the brand is tracked.
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
page Page number, starting at 1.
limit Results per page, 1-365 (default 100).
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/snapshots?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/ads

品牌的广告. Newest first by default; then, with no filter (status and EU ads only included), meta.latestAdDate is the start of the brand's newest ad in the library and meta.dataFreshnessLagDays its age in days when the brand launched ads after it (the library can be a day or two behind the live counters), 0 otherwise. The first page of the ads of one ad text (adCopyHashes) has both too, since a text's count in ad-copies is of today's live ads; with status active, meta.stoppedCount is the number of its stopped ads.
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
page Page number, starting at 1.
limit Results per page, 1-100 (default 20).
sortBy Defaults to newest. 可选值:newest, longestRunning, reach, duplicates, relevance, reachDelta7d, currentRank, rankDelta7d, rankDelta14d, rankDelta30d, spend。
status Running or stopped ads. 可选值:active, inactive, all。
mediaType Creative type. 可选值:image, video, dco, carousel, dpa。
keywords Words in the ad copy.
createdAfter Launched on or after this date, such as 2026-09-01.
createdBefore Launched on or before this date.
minDaysRunning Running for at least this many days.
maxDaysRunning Running for at most this many days.
minDuplicates At least this many copies of the ad.
maxDuplicates At most this many copies of the ad.
adLanguage Language of the ad.
cta Call to action.
adCopyHashes Ad text ids from the ad-copies report, comma-separated.
adCountries Countries the ads run in, comma-separated.
mainCountries Main country of the ads, comma-separated.
partners true: only partnership ads. 可选值:true, false。
partnerIds Only ads with these partner pages (Facebook page ids), comma-separated.
euOnly Only ads shown in the EU and UK. 可选值:true, false。
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/ads?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/timeline

按投放顺序排列的品牌广告.
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
page Page number, starting at 1.
limit Results per page, 1-100 (default 20).
sortBy Defaults to newest. 可选值:newest, longestRunning, reach, duplicates, relevance, reachDelta7d, currentRank, rankDelta7d, rankDelta14d, rankDelta30d, spend。
status Running or stopped ads. 可选值:active, inactive, all。
mediaType Creative type. 可选值:image, video, dco, carousel, dpa。
keywords Words in the ad copy.
createdAfter Launched on or after this date, such as 2026-09-01.
createdBefore Launched on or before this date.
minDaysRunning Running for at least this many days.
maxDaysRunning Running for at most this many days.
minDuplicates At least this many copies of the ad.
maxDuplicates At most this many copies of the ad.
adLanguage Language of the ad.
cta Call to action.
adCopyHashes Ad text ids from the ad-copies report, comma-separated.
adCountries Countries the ads run in, comma-separated.
mainCountries Main country of the ads, comma-separated.
partners true: only partnership ads. 可选值:true, false。
partnerIds Only ads with these partner pages (Facebook page ids), comma-separated.
euOnly Only ads shown in the EU and UK. 可选值:true, false。
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/timeline?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/timeline/metadata

品牌时间线的数量和日期范围. totalIsExact is false when totalCount is a lower bound; totalCount is null when the source sends no total.
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
status Running or stopped ads. 可选值:active, inactive, all。
mediaType Creative type. 可选值:image, video, dco, carousel, dpa。
keywords Words in the ad copy.
createdAfter Launched on or after this date, such as 2026-09-01.
createdBefore Launched on or before this date.
minDaysRunning Running for at least this many days.
maxDaysRunning Running for at most this many days.
minDuplicates At least this many copies of the ad.
maxDuplicates At most this many copies of the ad.
adLanguage Language of the ad.
cta Call to action.
adCopyHashes Ad text ids from the ad-copies report, comma-separated.
adCountries Countries the ads run in, comma-separated.
mainCountries Main country of the ads, comma-separated.
partners true: only partnership ads. 可选值:true, false。
partnerIds Only ads with these partner pages (Facebook page ids), comma-separated.
euOnly Only ads shown in the EU and UK. 可选值:true, false。
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/timeline/metadata" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/partnership-ads

品牌的合作广告.
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
page Page number, starting at 1.
limit Results per page, 1-100 (default 20).
sortBy Defaults to newest. 可选值:newest, longestRunning, reach, duplicates, relevance, reachDelta7d, currentRank, rankDelta7d, rankDelta14d, rankDelta30d, spend。
status Running or stopped ads. 可选值:active, inactive, all。
mediaType Creative type. 可选值:image, video, dco, carousel, dpa。
keywords Words in the ad copy.
createdAfter Launched on or after this date, such as 2026-09-01.
createdBefore Launched on or before this date.
minDaysRunning Running for at least this many days.
maxDaysRunning Running for at most this many days.
minDuplicates At least this many copies of the ad.
maxDuplicates At most this many copies of the ad.
adLanguage Language of the ad.
cta Call to action.
adCopyHashes Ad text ids from the ad-copies report, comma-separated.
adCountries Countries the ads run in, comma-separated.
mainCountries Main country of the ads, comma-separated.
partners true: only partnership ads. 可选值:true, false。
partnerIds Only ads with these partner pages (Facebook page ids), comma-separated.
euOnly Only ads shown in the EU and UK. 可选值:true, false。
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/partnership-ads?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/partnership-ads/count

品牌的合作广告数量. isExact is false when count is a lower bound; count is null when the source sends no total.
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
status Running or stopped ads. 可选值:active, inactive, all。
mediaType Creative type. 可选值:image, video, dco, carousel, dpa。
keywords Words in the ad copy.
createdAfter Launched on or after this date, such as 2026-09-01.
createdBefore Launched on or before this date.
minDaysRunning Running for at least this many days.
maxDaysRunning Running for at most this many days.
minDuplicates At least this many copies of the ad.
maxDuplicates At most this many copies of the ad.
adLanguage Language of the ad.
cta Call to action.
adCopyHashes Ad text ids from the ad-copies report, comma-separated.
adCountries Countries the ads run in, comma-separated.
mainCountries Main country of the ads, comma-separated.
partners true: only partnership ads. 可选值:true, false。
partnerIds Only ads with these partner pages (Facebook page ids), comma-separated.
euOnly Only ads shown in the EU and UK. 可选值:true, false。
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/partnership-ads/count" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/top-ads

品牌广告排名. metrics.totalReach is the ad's EU reach: null for an ad shown outside the EU and the UK (nullReasons metrics.totalReach eu_uk_only) or an EU ad not counted yet (not_measured), and last in a reach sort.
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
page Page number, starting at 1.
limit Results per page, 1-50 (default 20).
sortBy Defaults to currentRank. 可选值:currentRank, rankDelta, rankDelta7d, rankDelta14d, rankDelta30d, reach, reachDelta7d, daysRunning, duplicates。
status Defaults to active. 可选值:active, inactive, all。
includeInactive Also rank stopped ads. 可选值:true, false。
euOnly Only ads shown in the EU and UK. 可选值:true, false。
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/top-ads?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/ad-rank

品牌排名上升的广告. Ads that gained rank over a window, with their rank history. Each row's ranks come from that history: metrics.currentRank is its reading of the day the ad library's rank was read (the rank Top ads shows; the library can be a day behind the history), else its newest reading, the trajectory ends on that day, metrics.previousRank is the reading of the day the window starts, metrics.rankDelta the previous rank minus the current one (positive: places gained) and metrics.improvementPct the fraction of the previous rank gained (0.875 is 87.5%). With no reading that day (an ad's rank history can start after a 14 or 30-day window does), previousRank is the rank of the oldest reading inside the window and metrics.since its day, and meta.windowNote says so; a figure that cannot be given is null with nullReasons not_measured. The ad library's first 50 ads (by its own count of rank gained, or by rank) are ranked again by these figures: an ad that gained less than minRankDelta, or ranks below maxCurrentRank, by them is left out (an ad whose rank history gives no gain, by the ad library's own count), pagination covers the ads kept, and meta.rankNote says what was read and left out (across brands too, for every brand read).
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
page Page number, starting at 1.
limit Results per page, 1-50 (default 20).
timeWindow Defaults to last7d. 可选值:last7d, last14d, last30d。
sortBy Defaults to rankDelta. 可选值:rankDelta, currentRank。
maxCurrentRank Only ads ranked at or above this position.
minRankDelta Positions gained, at least (default 1).
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/ad-rank?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/scaling-ads

品牌正在放量的广告. Same answer as /ad-rank.
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
page Page number, starting at 1.
limit Results per page, 1-50 (default 20).
timeWindow Defaults to last7d. 可选值:last7d, last14d, last30d。
sortBy Defaults to rankDelta. 可选值:rankDelta, currentRank。
maxCurrentRank Only ads ranked at or above this position.
minRankDelta Positions gained, at least (default 1).
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/scaling-ads?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/creatives

品牌的素材. mediaType is image, video, carousel (an ad of several images or videos, as in its ad record) or unknown.
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
timePeriod Which ads to read (default live). 可选值:live, last24h, last3d, last7d, last30d, last3m, last6m, last1y。
mediaType Creative type. 可选值:all, image, video。
page Page number, starting at 1.
limit Results per page, 1-50 (default 20).
sortBy Defaults to firstSeenAt. 可选值:firstSeenAt, daysRunning, duplicates。
order Sort direction (default desc). 可选值:desc, asc。
euOnly Only ads shown in the EU and UK. 可选值:true, false。
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/creatives?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/testing

品牌的素材测试. Ads grouped by the day they were launched, from the 400 newest ads. A batch is a winner when one of its ads is still running a week or more after launch. Its reach and days stats cover the ads whose value is known (null when none is, and then bestPerformerId is null too, with nullReasons stats.reach: eu_uk_only when every ad of the batch was shown outside the EU and the UK, not_measured when one of its ads is not counted yet, else no_eu_reach: none of its ads has an EU or UK reach reported); partial is true on the oldest batch when the 400-ad read stopped inside it.
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
page Page number, starting at 1.
limit Results per page, 1-50 (default 20).
status Running or stopped ads. 可选值:active, inactive, all。
mediaType Creative type. 可选值:image, video, dco, carousel, dpa。
keywords Words in the ad copy.
createdAfter Launched on or after this date, such as 2026-09-01.
createdBefore Launched on or before this date.
minDaysRunning Running for at least this many days.
maxDaysRunning Running for at most this many days.
minDuplicates At least this many copies of the ad.
maxDuplicates At most this many copies of the ad.
adLanguage Language of the ad.
cta Call to action.
adCopyHashes Ad text ids from the ad-copies report, comma-separated.
adCountries Countries the ads run in, comma-separated.
mainCountries Main country of the ads, comma-separated.
partners true: only partnership ads. 可选值:true, false。
partnerIds Only ads with these partner pages (Facebook page ids), comma-separated.
euOnly Only ads shown in the EU and UK. 可选值:true, false。
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/testing?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/hooks

品牌视频使用的开头钩子. totalImpressions is the EU and UK reach of the ads using it (people reached, not impressions: the old name, kept), and euReach the same figure under its name: both null when none of them has any counted (nullReasons no_eu_reach; not_measured with euOnly or when it is not sent), and last in its sort. firstUsedAt and lastUsedAt are the launch days of the first and the newest ad using it (a text still live has its newest launch there, not a day it stopped). pagination.total is the data source's count of the texts; a brand with more than 1,000 lists its first 1,000 (read 200 at a time), with meta.partial and a warning.
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
timePeriod Which ads to read (default live). 可选值:live, last24h, last3d, last7d, last30d, last3m, last6m, last1y。
page Page number, starting at 1.
limit Results per page, 1-50 (default 20).
sortBy Defaults to usageCount. 可选值:usageCount, longestRunning, totalImpressions, firstUsedAt, lastUsedAt。
order Sort direction (default desc). 可选值:desc, asc。
euOnly Only ads shown in the EU and UK. 可选值:true, false。
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/hooks?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/transcripts

品牌的视频脚本. totalImpressions is the EU and UK reach of the ads using it (people reached, not impressions: the old name, kept), and euReach the same figure under its name: both null when none of them has any counted (nullReasons no_eu_reach; not_measured with euOnly or when it is not sent), and last in its sort. firstUsedAt and lastUsedAt are the launch days of the first and the newest ad using it (a text still live has its newest launch there, not a day it stopped). pagination.total is the data source's count of the texts; a brand with more than 1,000 lists its first 1,000 (read 200 at a time), with meta.partial and a warning. Each transcript has its hook: the opening line the data source reads in it (null without one).
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
timePeriod Which ads to read (default live). 可选值:live, last24h, last3d, last7d, last30d, last3m, last6m, last1y。
page Page number, starting at 1.
limit Results per page, 1-50 (default 20).
sortBy Defaults to usageCount. 可选值:usageCount, longestRunning, totalImpressions, firstUsedAt, lastUsedAt。
order Sort direction (default desc). 可选值:desc, asc。
euOnly Only ads shown in the EU and UK. 可选值:true, false。
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/transcripts?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/headlines

品牌广告的标题. totalImpressions is the EU and UK reach of the ads using it (people reached, not impressions: the old name, kept), and euReach the same figure under its name: both null when none of them has any counted (nullReasons no_eu_reach; not_measured with euOnly or when it is not sent), and last in its sort. firstUsedAt and lastUsedAt are the launch days of the first and the newest ad using it (a text still live has its newest launch there, not a day it stopped). pagination.total is the data source's count of the texts; a brand with more than 1,000 lists its first 1,000 (read 200 at a time), with meta.partial and a warning. Headlines carry what hooks do: firstUsedAt, lastUsedAt, sampleAd and the reach of their ads.
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
timePeriod Which ads to read (default live). 可选值:live, last24h, last3d, last7d, last30d, last3m, last6m, last1y。
page Page number, starting at 1.
limit Results per page, 1-50 (default 20).
sortBy Defaults to usageCount. 可选值:usageCount, longestRunning, totalImpressions, firstUsedAt, lastUsedAt。
order Sort direction (default desc). 可选值:desc, asc。
euOnly Only ads shown in the EU and UK. 可选值:true, false。
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/headlines?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/ad-copies

品牌的广告文案. Ad texts and how many live ads use each; longestRunning is null when the age of its ads is unknown.
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
page Page number, starting at 1.
limit Results per page, 1-50 (default 20).
order Sort direction (default desc). 可选值:desc, asc。
euOnly Only ads shown in the EU and UK. 可选值:true, false。
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/ad-copies?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/landing-pages

品牌的落地页. Every Facebook page of the brand's shop counts. totalImpressions is the EU and UK reach of the ads using it (people reached, not impressions: the old name, kept), and euReach the same figure under its name: both null when none of them has any counted (nullReasons no_eu_reach; not_measured with euOnly or when it is not sent), and last in its sort. Each page has its live ads (activeAds), its first live day (activeSince), its status, shareOfAds (the share of the brand's live ads linking to it, a fraction), reachByCountry ({countryCode, reach}) and targetedCountries. On a past day (snapshotDate) the pages as they were then, the day in meta.snapshotDate.
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
page Page number, starting at 1.
limit Results per page, 1-50 (default 20).
sortBy Defaults to usageCount. 可选值:usageCount, longestRunning, totalImpressions。
order Sort direction (default desc). 可选值:desc, asc。
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/landing-pages?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/landing-pages/simple

按主页分组的品牌落地页. Query strings, fragments, trailing slashes and a leading www. are ignored when grouping.
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
page Page number, starting at 1.
limit Results per page, 1-50 (default 20).
sortBy Defaults to usageCount. 可选值:usageCount, activeAdsCount。
order Sort direction (default desc). 可选值:desc, asc。
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/landing-pages/simple?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/ad-copy-evolution

品牌广告文案的历史变化. Ads using each ad text, day by day. Built from a daily record that starts the day the brand is tracked. A series has a point for every recorded day of the range: 0 on a day the text was not used, null on a day that kept only its most used texts. A day whose live ads read under a tenth of the days on both sides of it (2 or 3 such days in a row too; the newest day stays as read), or that recorded far fewer texts than the days on both sides of it (or none, beside live ads), is left out (meta.periodNote says so); meta.recordedDays counts the days.
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
page Page number, starting at 1.
limit Results per page, 1-25 (default 10).
startDate First day, such as 2026-09-01.
endDate Last day.
adCopy Only this ad text.
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/ad-copy-evolution?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/headline-evolution

品牌标题的历史变化. Ads using each headline, day by day. Built from a daily record that starts the day the brand is tracked. A series has a point for every recorded day of the range: 0 on a day the text was not used, null on a day that kept only its most used texts. A day whose live ads read under a tenth of the days on both sides of it (2 or 3 such days in a row too; the newest day stays as read), or that recorded far fewer texts than the days on both sides of it (or none, beside live ads), is left out (meta.periodNote says so); meta.recordedDays counts the days.
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
page Page number, starting at 1.
limit Results per page, 1-25 (default 10).
startDate First day, such as 2026-09-01.
endDate Last day.
headline Only this headline.
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/headline-evolution?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/landing-page-evolution

品牌落地页的历史变化. Each page's readings by day. The days the data source read the brand's live ads wrong (under a tenth of the days on both sides of them) are left out of every page, and so is a page's own reading under a tenth of its readings on both sides; meta.periodNote counts them and, when the history is behind (meta.dataFreshnessLagDays), says up to which day it reaches.
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
page Page number, starting at 1.
limit Results per page, 1-25 (default 10).
startDate First day, such as 2026-09-01.
endDate Last day.
landingPage Only this landing page URL.
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/landing-page-evolution?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/partners

为品牌投放广告的合作方. Each partner page once. isOwnPage is true for a page of the brand's own shop (its main page, or an official page named like the brand: creators who run its partnership ads can be ranked official too) and for a page named as the brand. reach and estimatedSpend are null when the source has not measured them, with nullReasons not_measured in the 7 days after the partner's launchDate and no_eu_reach after (no EU or UK reach counted for its ads).
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
page Page number, starting at 1.
limit Results per page, 1-50 (default 20).
sortBy Defaults to activeAds. 可选值:activeAds, launchDate, reach, estimatedSpend。
order Sort direction (default desc). 可选值:desc, asc。
euOnly Only ads shown in the EU and UK. 可选值:true, false。
cpm Cost per 1,000 impressions used for the spend estimate (default 9).
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/partners?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/media-mix

品牌在投广告的格式构成.
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
euOnly Only ads shown in the EU and UK. 可选值:true, false。
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/media-mix" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/demography

品牌广告的受众. Audience in the EU and the UK: the people reached, by country, by age range and by gender (each breakdown has its own base). A count the source does not send is null; hasData is true when one count is above 0. A country whose count is under a ten-thousandth of the top country's is left out of countryDistribution and listed in otherCountries. On a past day (snapshotDate) the audience as it was then, the day in meta.snapshotDate.
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/demography" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/activity

追踪的品牌在某一渠道的最新内容. Each item in its source's search-row shape (Meta ads, TikTok posts, Google ads, emails), newest first, over 90 days at most. meta.partial is true when the data source read the window only in part, and meta.partialSources names the source then. The feed covers a few sample brands only: another tracked brand answers 404.
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
source Defaults to meta. 可选值:meta, tiktok, google, email。
since First day (YYYY-MM-DD; default 6 days before until: 7 days).
until Last day, included (YYYY-MM-DD; default today).
page Page number, starting at 1.
limit Results per page, 1-100 (default 24).
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/activity?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/activity/events

追踪的品牌的动态事件. Each event: type, date, occurredAt, itemId (the ad, post or email), title, imageUrl, url and details. meta.partial is true when the data source read the window only in part, and meta.partialSources names the sources the types asked for name (meta for new_meta_ads). The feed covers a few sample brands only: another tracked brand answers 404.
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
since First day (YYYY-MM-DD; default 6 days before until: 7 days).
until Last day, included (YYYY-MM-DD; default today).
types Event types, comma-separated (default new_meta_ads).
page Page number, starting at 1.
limit Results per page, 1-100 (default 24).
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/activity/events?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/activity/calendar

追踪的品牌在 Meta、TikTok、Google 和邮件上的日历. The items of each source (meta, tiktok, google, email) over 31 days at most, a preview each; with day, that day's items in their search-row shape; both read on while the data source has more, 10 calls at most (meta.isTruncated when more were left); times in UTC. meta.partial is true when the data source read some sources only in part, and meta.partialSources names them. The feed covers a few sample brands only: another tracked brand answers 404.
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
since First day (YYYY-MM-DD; default 6 days before until: 7 days).
until Last day, included (YYYY-MM-DD; default today).
day One day (YYYY-MM-DD): its items in full.
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/activity/calendar" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/activity/calendar/days

追踪的品牌每天在各渠道新投放的数量. days: the count of each day and source (meta, tiktok, google, email), over 31 days at most; previews: a preview of each item, its times in UTC. meta.partial is true when the data source read the window only in part. The feed covers a few sample brands only: another tracked brand answers 404.
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
since First day (YYYY-MM-DD; default 6 days before until: 7 days).
until Last day, included (YYYY-MM-DD; default today).
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/activity/calendar/days" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/time-series

新投放广告、在投广告和覆盖人数的趋势. Weekly and monthly points carry startDate, endDate and partial (a bucket the range holds only part of); a period starts on the first day of its first week or month. Live ads of a bucket are the median of its daily readings, leaving out a reading (or 2 or 3 in a row) under a tenth of the readings around it. Such a day, with days on both sides of it, is null in a daily series (a drop on the newest day stays as read: a brand can stop its ads), its launches too, and so are the launches of the day after it when they are nearly all its live ads (the ads read again); weeks and months leave those launches out, and leftOut lists the days (days, launchDays), also in the overview's graph. A value the source does not send is null; impressions is the EU and UK reach of the brand's ads (people reached; the old name, kept) and euReach the same figure; when the range has no EU reach at all, impressions, euReach and estimatedSpend are null and nullReasons.euImpressionsSpend says why (eu_uk_only, not_measured). estimatedSpend keeps two decimals under 10 USD (1.26) and is in whole dollars from 10 USD up.
参数说明
brandtrackerId必填 Tracker id, from the list of tracked brands.
granularity Defaults to daily. 可选值:daily, weekly, monthly。
period Use it instead of startDate / endDate. 可选值:today, yesterday, 1d, 7d, 14d, 30d, 90d, 365d。
startDate First day, such as 2026-09-01.
endDate Last day.
euOnly Only ads shown in the EU and UK. 可选值:true, false。
cpm Cost per 1,000 impressions used for the spend estimate.
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/time-series" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/workspace/top-ads

所有追踪品牌中的热门广告. Runs over your 100 most recent tracked brands (top-ads and scaling-ads also over those with no shop). Narrow it with brandtrackerIds or folderIds. meta.perBrandCap is the rows a brand gives at most; a brand whose report fails or that your plan leaves out is in meta.skippedBrands (reason failed, plan or unavailable), with meta.partial; when every brand fails the call fails. The shop reports (hooks, ad-copies, landing-pages, media-mix) count the brands with no shop in meta.brandsWithoutShop.
参数说明
brandtrackerIds Only these trackers, comma-separated.
folderIds Only trackers in these folders, comma-separated.
page Page number, starting at 1.
limit Results per page, 1-100 (default 20).
sortBy Defaults to currentRank. 可选值:currentRank, rankDelta, rankDelta7d, reach, reachDelta7d, daysRunning, duplicates。
includeInactive Also rank stopped ads. 可选值:true, false。
euOnly Only ads shown in the EU and UK. 可选值:true, false。
curl "https://api.sellwinners.com/v1/workspace/top-ads?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/workspace/scaling-ads

所有追踪品牌中正在放量的广告. Runs over your 100 most recent tracked brands (top-ads and scaling-ads also over those with no shop). Narrow it with brandtrackerIds or folderIds. meta.perBrandCap is the rows a brand gives at most; a brand whose report fails or that your plan leaves out is in meta.skippedBrands (reason failed, plan or unavailable), with meta.partial; when every brand fails the call fails. The shop reports (hooks, ad-copies, landing-pages, media-mix) count the brands with no shop in meta.brandsWithoutShop.
参数说明
brandtrackerIds Only these trackers, comma-separated.
folderIds Only trackers in these folders, comma-separated.
page Page number, starting at 1.
limit Results per page, 1-100 (default 20).
sortBy Defaults to rankDelta. 可选值:rankDelta, currentRank。
period Window of the rank change (default last7d). Where an ad's rank history starts inside it, metrics.since is the day previousRank and rankDelta count from, and meta.windowNote says so. Each brand's ranks come from its ads' rank histories, as in its own /ad-rank: its first 10 ads in the ad library's ranking, ranked again, those that gained less than asked left out, as meta.rankNote says for all the brands read. 可选值:last7d, last14d, last30d。
maxCurrentRank Only ads ranked at or above this position.
minRankDelta Positions gained, at least (default 1).
curl "https://api.sellwinners.com/v1/workspace/scaling-ads?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/workspace/hooks

所有追踪品牌的开头钩子. Runs over your 100 most recent tracked brands (top-ads and scaling-ads also over those with no shop). Narrow it with brandtrackerIds or folderIds. meta.perBrandCap is the rows a brand gives at most; a brand whose report fails or that your plan leaves out is in meta.skippedBrands (reason failed, plan or unavailable), with meta.partial; when every brand fails the call fails. The shop reports (hooks, ad-copies, landing-pages, media-mix) count the brands with no shop in meta.brandsWithoutShop.
参数说明
brandtrackerIds Only these trackers, comma-separated.
folderIds Only trackers in these folders, comma-separated.
page Page number, starting at 1.
limit Results per page, 1-100 (default 20).
sortBy Defaults to usageCount. 可选值:usageCount, longestRunning, totalImpressions, firstUsedAt, lastUsedAt。
order Sort direction (default desc). 可选值:desc, asc。
euOnly Only ads shown in the EU and UK. 可选值:true, false。
curl "https://api.sellwinners.com/v1/workspace/hooks?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/workspace/ad-copies

所有追踪品牌的广告文案. Runs over your 100 most recent tracked brands (top-ads and scaling-ads also over those with no shop). Narrow it with brandtrackerIds or folderIds. meta.perBrandCap is the rows a brand gives at most; a brand whose report fails or that your plan leaves out is in meta.skippedBrands (reason failed, plan or unavailable), with meta.partial; when every brand fails the call fails. The shop reports (hooks, ad-copies, landing-pages, media-mix) count the brands with no shop in meta.brandsWithoutShop.
参数说明
brandtrackerIds Only these trackers, comma-separated.
folderIds Only trackers in these folders, comma-separated.
page Page number, starting at 1.
limit Results per page, 1-100 (default 20).
sortBy Defaults to usageCount. 可选值:usageCount。
order Sort direction (default desc). 可选值:desc, asc。
euOnly Only ads shown in the EU and UK. 可选值:true, false。
curl "https://api.sellwinners.com/v1/workspace/ad-copies?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/workspace/landing-pages

所有追踪品牌的落地页. Runs over your 100 most recent tracked brands (top-ads and scaling-ads also over those with no shop). Narrow it with brandtrackerIds or folderIds. meta.perBrandCap is the rows a brand gives at most; a brand whose report fails or that your plan leaves out is in meta.skippedBrands (reason failed, plan or unavailable), with meta.partial; when every brand fails the call fails. The shop reports (hooks, ad-copies, landing-pages, media-mix) count the brands with no shop in meta.brandsWithoutShop.
参数说明
brandtrackerIds Only these trackers, comma-separated.
folderIds Only trackers in these folders, comma-separated.
page Page number, starting at 1.
limit Results per page, 1-100 (default 20).
sortBy Defaults to usageCount. 可选值:usageCount, longestRunning, totalImpressions。
order Sort direction (default desc). 可选值:desc, asc。
curl "https://api.sellwinners.com/v1/workspace/landing-pages?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/workspace/media-mix

所有追踪品牌的格式构成. Runs over your 100 most recent tracked brands (top-ads and scaling-ads also over those with no shop). Narrow it with brandtrackerIds or folderIds. meta.perBrandCap is the rows a brand gives at most; a brand whose report fails or that your plan leaves out is in meta.skippedBrands (reason failed, plan or unavailable), with meta.partial; when every brand fails the call fails. The shop reports (hooks, ad-copies, landing-pages, media-mix) count the brands with no shop in meta.brandsWithoutShop.
参数说明
brandtrackerIds Only these trackers, comma-separated.
folderIds Only trackers in these folders, comma-separated.
page Page number, starting at 1.
limit Results per page, 1-100 (default 20).
sortBy Defaults to activeAds. 可选值:activeAds, image, video, dco, other。
euOnly Only ads shown in the EU and UK. 可选值:true, false。
curl "https://api.sellwinners.com/v1/workspace/media-mix?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/folders

列出追踪文件夹.
curl "https://api.sellwinners.com/v1/brandtrackers/folders" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/workspace/folders

列出追踪文件夹. Same answer as /v1/brandtrackers/folders.
curl "https://api.sellwinners.com/v1/workspace/folders" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/brandtrackers/folders

创建追踪文件夹.
curl -X POST "https://api.sellwinners.com/v1/brandtrackers/folders" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"name": "Competitors"}'

PATCH/v1/brandtrackers/folders/{folderId}

重命名追踪文件夹.
参数说明
folderId必填 Folder id.
curl -X PATCH "https://api.sellwinners.com/v1/brandtrackers/folders/FOLDER_ID" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"name": "Direct competitors"}'

DELETE/v1/brandtrackers/folders/{folderId}

删除追踪文件夹. action is move-to-default (keeps the trackers) or delete-brandtrackers (removes them).
参数说明
folderId必填 Folder id.
curl -X DELETE "https://api.sellwinners.com/v1/brandtrackers/folders/FOLDER_ID" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"action": "move-to-default", "confirm": true}'

GET/v1/brandtrackers/folders/{folderId}/brandtrackers

文件夹中的追踪品牌.
参数说明
folderId必填 Folder id.
page Page number, starting at 1.
limit Results per page, 1-100 (default 20).
name Only brands whose name or domain contains this text, or with this page id.
hasNewAdsSince Only brands with new ads since this date, such as 2026-09-30.
sortBy 可选值:newAdsLastDay, newAdsLast7Days, newAdsLast30Days, activeAds, totalTraffic, name, createdAt。
curl "https://api.sellwinners.com/v1/brandtrackers/folders/FOLDER_ID/brandtrackers?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

账户

您的密钥、套餐和用量。这些调用不计入用量。

GET/v1/account

您的套餐、点数和本月用量.
curl "https://api.sellwinners.com/v1/account" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/usage

本月已用和剩余的点数.
curl "https://api.sellwinners.com/v1/usage" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/me

当前使用的 API 密钥及其工作区.
curl "https://api.sellwinners.com/v1/me" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/workspace

API 密钥所属的工作区.
curl "https://api.sellwinners.com/v1/workspace" \
  -H "X-API-Key: YOUR_API_KEY"

工作区

您的工作区、其成员和席位,以及发出和收到的邀请。这些调用不计入用量。

GET/v1/workspaces

列出您的工作区. Each with its id, name, slug, your role (owner, admin, member or readonly), its plan, its seats (limit, used, remaining, activeMembers, activeInvitations, included, extra: a pending invitation holds a seat) and isDefault (opened on sign-in). Your own workspace comes first.
curl "https://api.sellwinners.com/v1/workspaces" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/workspaces

创建工作区. Body: name (1 to 60 characters). It starts on the Free plan with you as its owner; you can own 10.
curl -X POST "https://api.sellwinners.com/v1/workspaces" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"name": "Growth team"}'

PUT/v1/workspaces/default

选择默认工作区. The website opens it when you sign in.
curl -X PUT "https://api.sellwinners.com/v1/workspaces/default" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"workspaceId": "ws_1000000001"}'

GET/v1/workspaces/{workspaceId}

您的某个工作区. A workspace you don't belong to answers 404.
参数说明
workspaceId必填 id of one of your workspaces (ws_...), from the list of your workspaces.
curl "https://api.sellwinners.com/v1/workspaces/WORKSPACE_ID" \
  -H "X-API-Key: YOUR_API_KEY"

PATCH/v1/workspaces/{workspaceId}

重命名工作区. Owners and admins only.
参数说明
workspaceId必填 id of one of your workspaces (ws_...), from the list of your workspaces.
curl -X PATCH "https://api.sellwinners.com/v1/workspaces/WORKSPACE_ID" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"name": "Growth team"}'

DELETE/v1/workspaces/{workspaceId}

移除工作区. The owner only. Refused while other members remain (409 workspace_has_members), while its subscription renews (409 subscription_renews) and for your last workspace (409 last_workspace).
参数说明
workspaceId必填 id of one of your workspaces (ws_...), from the list of your workspaces.
curl -X DELETE "https://api.sellwinners.com/v1/workspaces/WORKSPACE_ID" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/workspaces/{workspaceId}/members

列出工作区成员. Every member with their email and role, the owner first, and the seats. Every member can read it.
参数说明
workspaceId必填 id of one of your workspaces (ws_...), from the list of your workspaces.
curl "https://api.sellwinners.com/v1/workspaces/WORKSPACE_ID/members" \
  -H "X-API-Key: YOUR_API_KEY"

PATCH/v1/workspaces/{workspaceId}/members/{userId}

更改成员角色. The owner changes anyone but themself; an admin changes members and readonly members only. The owner role can't be changed.
参数说明
workspaceId必填 id of one of your workspaces (ws_...), from the list of your workspaces.
userId必填 A member's user id (user_...), from the workspace's members.
curl -X PATCH "https://api.sellwinners.com/v1/workspaces/WORKSPACE_ID/members/USER_ID" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"role": "readonly"}'

DELETE/v1/workspaces/{workspaceId}/members/{userId}

移除成员. They lose access at once; getting them back takes a new invitation.
参数说明
workspaceId必填 id of one of your workspaces (ws_...), from the list of your workspaces.
userId必填 A member's user id (user_...), from the workspace's members.
curl -X DELETE "https://api.sellwinners.com/v1/workspaces/WORKSPACE_ID/members/USER_ID" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/workspaces/{workspaceId}/invitations

列出待处理的邀请. Owners and admins only, newest first, each with its email, role, who sent it and when it expires.
参数说明
workspaceId必填 id of one of your workspaces (ws_...), from the list of your workspaces.
curl "https://api.sellwinners.com/v1/workspaces/WORKSPACE_ID/invitations" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/workspaces/{workspaceId}/invitations

邀请成员. role: member (the default), readonly, or admin (the owner only). It takes a seat until accepted, declined, revoked or expired (7 days). Refused: 409 already_member, invitation_exists or seat_limit_reached. emailSent false: send it again with resend.
参数说明
workspaceId必填 id of one of your workspaces (ws_...), from the list of your workspaces.
curl -X POST "https://api.sellwinners.com/v1/workspaces/WORKSPACE_ID/invitations" \
  -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"email": "[email protected]", "role": "member"}'

POST/v1/workspaces/{workspaceId}/invitations/{invitationId}/resend

重新发送邀请. A new link (the old one stops working), valid 7 days. At most once a minute.
参数说明
workspaceId必填 id of one of your workspaces (ws_...), from the list of your workspaces.
invitationId必填 id of an invitation (inv_...).
curl -X POST "https://api.sellwinners.com/v1/workspaces/WORKSPACE_ID/invitations/INVITATION_ID/resend" \
  -H "X-API-Key: YOUR_API_KEY"

DELETE/v1/workspaces/{workspaceId}/invitations/{invitationId}

撤销邀请. It stops working at once and its seat is free again.
参数说明
workspaceId必填 id of one of your workspaces (ws_...), from the list of your workspaces.
invitationId必填 id of an invitation (inv_...).
curl -X DELETE "https://api.sellwinners.com/v1/workspaces/WORKSPACE_ID/invitations/INVITATION_ID" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/workspace-invitations/pending

您收到的邀请. The open invitations sent to your account's email, with the workspace, the role and the expiry.
curl "https://api.sellwinners.com/v1/workspace-invitations/pending" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/workspace-invitations/{invitationId}

您收到的某个邀请. Its status: active, accepted, declined, revoked or expired.
参数说明
invitationId必填 id of an invitation (inv_...).
curl "https://api.sellwinners.com/v1/workspace-invitations/INVITATION_ID" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/workspace-invitations/{invitationId}/accept

接受邀请. Join with the role offered. 410 invitation_closed when it is no longer open (details.status says why).
参数说明
invitationId必填 id of an invitation (inv_...).
curl -X POST "https://api.sellwinners.com/v1/workspace-invitations/INVITATION_ID/accept" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/workspace-invitations/{invitationId}/decline

拒绝邀请. The seat it held is free again.
参数说明
invitationId必填 id of an invitation (inv_...).
curl -X POST "https://api.sellwinners.com/v1/workspace-invitations/INVITATION_ID/decline" \
  -H "X-API-Key: YOUR_API_KEY"

系统

服务状态。无需 API 密钥。

GET/v1

API 根路径.
curl "https://api.sellwinners.com/v1" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/health

服务状态(无需密钥).
curl "https://api.sellwinners.com/v1/health" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/system/freshness

数据的更新时间(无需密钥).
curl "https://api.sellwinners.com/v1/system/freshness" \
  -H "X-API-Key: YOUR_API_KEY"

MCP 服务器

我们托管的 MCP 服务器以工具形式向 AI 智能体提供同样的数据。使用与 REST API 相同的 API 密钥;与 API 一样,工具调用按返回的结果计费,其应答会在 meta.credits(used、remaining、source)中注明。它还提供三个资源:sellwinners://me、sellwinners://usage 和 sellwinners://openapi。

Free 套餐还包含 MCP 服务器:每月 150 点,每分钟 10 次请求,每次搜索返回前 10 条结果。在 Free 套餐中,工具列表只列出 Free 包含的工具;调用其他工具会返回以 [plan_not_eligible] 结尾的工具错误,且不计用量。在付费套餐中,调用套餐不包含的工具会返回以 [plan_not_eligible] 结尾的工具错误,且不计用量。

URL        https://mcp.sellwinners.com/mcp
Transport  streamable HTTP
Header     X-API-Key: YOUR_API_KEY

The list tools (search_shops, find_similar_shops, search_products, search_ads, search_google_ads_library, search_tiktok_library, search_advertisers, search_emails) answer compact rows by default, small enough for an assistant to read inline: each row keeps its ids, names and domains, its key figures and dates, its links, one picture, text cut to 200 characters and the last points of its histories, under the same field names as the full row, with the answer's pagination as it is. Pass detail="full" for every field of each row, or open one record with scan_ad, scan_advertiser, brief_competitor or shop_report.

客户端配置

No API key: these sign in with your SellWinners account.
Free 套餐还包含 MCP 服务器:每月 150 点,每分钟 10 次请求,每次搜索返回前 10 条结果。

1. In ChatGPT (an app or a connector in developer mode) or in
   Claude (Customize → Connectors → Add custom connector; on Team or
   Enterprise an Owner adds it and you select Connect),
   add this server URL:  https://mcp.sellwinners.com/mcp
2. Choose OAuth if asked. A SellWinners window opens:
   log in, then select Allow.
3. Ask: "Find the top video ads for running shoes this month".

Disconnect any time: Settings → MCP → Connected apps.

工具

发现 3
lookup把品牌名称、店铺域名或 Facebook 主页 ID 解析为可用于其他工具的 ID
3 个参数
qtexttypetextlimitnumber
lookup_filter_ids搜索工具的筛选条件所用的 ID
7 个参数
typetextquerytextscope_tracked_pageslistscope_domaintextstatustextlimitnumbersnapshot_datetext
list_saved_views您在网站列表页上保存的搜索,可直接用于搜索工具
1 个参数
contexttext
店铺 17
search_shops搜索或浏览 Shopify 店铺
48 个参数
querytextmatch_modetextcountrytextsort_bytextordertextpagenumberlimitnumberfiltersobjectdetailtextcreation_countrytextcreation_countrieslistexclude_creation_countrieslistcreation_date_fromtextcreation_date_totextmin_active_adsnumbermax_active_adsnumbermin_monthly_visitsnumbermax_monthly_visitsnumbermin_products_countnumbermax_products_countnumberads_time_periodtexttraffic_growthlistads_growthlistvisitor_countrytextmain_market_countrieslistmarket_countrieslistexclude_market_countrieslistniche_idnumberlanguageslistcurrencieslisttheme_idslistpixel_idslistexclude_pixel_idslistshopify_app_idslistexclude_shopify_app_idslistis_shopify_plustrue / falsemin_trustpilot_ratingnumbermax_trustpilot_ratingnumbermin_trustpilot_review_countnumbermax_trustpilot_review_countnumbermin_monthly_salesnumbermax_monthly_salesnumbermin_units_soldnumbermax_units_soldnumberhas_tiktoktrue / falseexclude_currencieslistsocial_networkslistshopify_plantext
find_similar_shops某家店铺的竞争对手(ID 或域名)
10 个参数
shoptextlimitnumbersort_bytextordertextoffsetnumberseasontextfiltersobjectmarkettextexclude_shopslistdetailtext
find_winning_products某个细分市场中正在热卖的商品
5 个参数
nichetextkeywordslistcountrytextmax_resultsnumberdetailtext
search_products按价格、销售额、销售件数、销售国家、广告、覆盖人数、评价、上架日期、货币或店铺国家搜索或浏览店铺商品
37 个参数
querytextsearch_intextsort_bytextordertextpagenumberlimitnumberfiltersobjectdetailtextshoptextshop_idtextmin_pricenumbermax_pricenumbermin_monthly_revenuenumbermax_monthly_revenuenumbermin_monthly_units_soldnumbermax_monthly_units_soldnumbermin_active_adsnumbermax_active_adsnumberads_launched_periodtextmin_ads_launchednumbermax_ads_launchednumbermin_ad_sharenumbermax_ad_sharenumbermin_eu_ad_spendnumbermax_eu_ad_spendnumbermin_ratingnumbermin_reviewsnumbersubscriptiontextpartnershiptrue / falseselling_countrieslistmain_selling_countrytextexclude_selling_countrieslistshop_countrieslistcurrencieslistmin_shop_monthly_visitsnumbermax_shop_monthly_visitsnumbershop_created_aftertext
search_products_by_image查找与某张图片(图片 URL 或文件)相似的店铺商品及其店铺
12 个参数
image_urltextimage_base64textsort_bytextordertextmax_per_shopnumberfiltersobjectpagenumberlimitnumbersearch_idtextdetailtextoffsetnumbergroup_brandstrue / false
search_shops_by_image查找销售图片所示商品的店铺,并附最相似的商品
7 个参数
image_urltextimage_base64textsearch_idtextlimitnumberoffsetnumbergroup_brandstrue / falseproducts_per_shopnumber
get_product单个商品的完整资料:图片、选项和变体
2 个参数
product_idtexturltext
get_product_ads链接到商品页面的 Meta 广告
5 个参数
product_idtextstatustextpagenumberlimitnumberdetailtext
analyze_product单个商品、其最新广告及信号解读
3 个参数
product_idtexturltexttop_adsnumber
product_launch_radar近期上市的商品,按销售额或广告压力排序
34 个参数
querytextdaysnumberrank_bytextlimitnumberfiltersobjectdetailtextshop_idtextmin_pricenumbermax_pricenumbermin_monthly_revenuenumbermax_monthly_revenuenumbermin_monthly_units_soldnumbermax_monthly_units_soldnumbermin_active_adsnumbermax_active_adsnumberads_launched_periodtextmin_ads_launchednumbermax_ads_launchednumbermin_ad_sharenumbermax_ad_sharenumbermin_eu_ad_spendnumbermax_eu_ad_spendnumbermin_ratingnumbermin_reviewsnumbersubscriptiontextpartnershiptrue / falseselling_countrieslistmain_selling_countrytextexclude_selling_countrieslistshop_countrieslistcurrencieslistmin_shop_monthly_visitsnumbermax_shop_monthly_visitsnumbershop_created_aftertext
create_product_share_link创建(或返回)单个商品的公开链接
2 个参数
product_idtextconfirmtrue / false
delete_product_share_link移除单个商品的公开链接
2 个参数
product_idtextconfirmtrue / false
brief_competitor单个竞争对手的简明简报(店铺 ID、域名或名称)
11 个参数
competitortextsectionslistmax_productsnumbermax_emailsnumbermax_adsnumbershoptextad_rank_windowtextad_rank_sorttextmax_current_ranknumbermin_rank_deltanumbersnapshot_datetext
shop_report店铺的单项报告:动态、Facebook 主页、Q4 旺季、某个落地页、广告排名或素材测试
19 个参数
shoptextreporttextyearnumberdate_fromtextdate_totexturltextadvertiser_idtextmodetextdaysnumberad_idslistdatetextas_oftextmedia_typetextstatustextkeywordslistsnapshot_datetextpagenumberlimitnumberdetailtext
compare_shops并排比较多家店铺的同一指标
3 个参数
shopslistmetrictextsnapshot_datetext
market_overview整个市场的每日数据,或 Q4 旺季期间的数据
5 个参数
kindtextyearnumberdate_fromtextdate_totextlimitnumber
detect_shopify_store店铺是否基于 Shopify,及其主题和加载的 Shopify 应用
1 个参数
urltext
广告与媒体 8
search_ads按文案、品牌或落地页中的词搜索 Meta(Facebook / Instagram)广告
97 个参数
querytextkeywordslistmedia_typetextcountrytextstatustextsort_bytextordertextpagenumberlimitnumberfiltersobjectdetailtextcategory_idslistad_countriesobjectmain_countrieslistmin_traffic_growth_percentnumbertraffic_growth_periodtexttraffic_growthlistads_growthlistpage_reach_growthlistad_reach_growthlistad_languagetextlanguagetextad_languageslistctalistshopify_app_idslistexclude_shopify_app_idslistpixel_idslistexclude_pixel_idslisttheme_idslistcreated_aftertextcreated_beforetextlast_seen_aftertextlast_seen_beforetextmin_days_runningnumbermax_days_runningnumbermin_duplicatesnumbermax_duplicatesnumbermax_ad_ordernumberad_rank_modetextad_rank_basistextmax_ad_rank_valuenumbergrowth_ranklistrank_delta_windowtextmin_rank_deltanumbermin_description_lengthnumbermax_description_lengthnumbermin_video_durationnumbermax_video_durationnumbermin_reachnumbermax_reachnumberreach_periodtextmin_agenumbermax_agenumbersextextpartnerstrue / falsemin_trafficnumbermax_trafficnumbermin_active_adsnumbermax_active_adsnumbermin_productsnumbermax_productsnumbermin_best_seller_pricenumbermax_best_seller_pricenumberads_time_periodtextshop_created_aftertextshop_created_beforetextshop_creation_countriesobjectmarketobjectshopify_plustextmin_spendnumbermax_spendnumbercpmnumberspend_periodtextmin_spend_per_pagenumbermax_spend_per_pagenumberspend_per_page_periodtextmin_facebook_likesnumbermax_facebook_likesnumbermin_instagram_followersnumbermax_instagram_followersnumbermin_reach_per_pagenumbermax_reach_per_pagenumberreach_per_page_periodtexttechnologieslisttracked_pageslistmax_ads_per_brandnumbertrend_signaltextactive_onlytrue / falseexclude_formatslistexclude_ad_languageslistage_rangeslistexclude_age_rangeslistexclude_theme_idslistmin_page_ads_launchednumbermax_page_ads_launchednumberpage_ads_launched_periodtextshopify_stores_onlytrue / false
scan_ad单条 Meta 广告(或单条 Google 广告、TikTok 帖子)的完整记录
1 个参数
ad_identifiertext
creative_inspiration_pack某个细分市场的创意灵感
5 个参数
nichetextkeywordslistfocustextmax_adsnumbertrend_signaltext
search_google_ads_library搜索 Google 广告
57 个参数
querytextkeywordsliststatustextcountrytextsort_bytextordertextpagenumberlimitnumberfiltersobjectdetailtextpublished_aftertextpublished_beforetextfirst_seen_aftertextfirst_seen_beforetextmin_days_runningnumbermax_days_runningnumberplatformtextplatformslistaudience_countrytextaudience_countrieslistexclude_audience_countrieslistformattextformatslistwebsite_idtextwebsite_idslisteu_onlytrue / falsemin_reachnumbermax_reachnumbermin_advertiser_reachnumbermax_advertiser_reachnumberremarketingtrue / falseinterest_targetingtrue / falsemain_market_countrieslistexclude_theme_idslistmin_trafficnumbermax_trafficnumbermin_productsnumbermax_productsnumbermin_best_seller_pricenumbermax_best_seller_pricenumbershop_creation_aftertextshop_creation_beforetextshop_creation_countrieslistexclude_shop_creation_countrieslistmarket_countrieslistexclude_market_countrieslistniche_idslistpixelslistexclude_pixelslistshopify_appslistexclude_shopify_appslistthemeslisttraffic_growthlistsnapshot_datetexthide_non_eu_uk_adstrue / falsehide_low_reach_adstrue / falsehide_low_impression_adstrue / false
search_tiktok_library搜索 TikTok 广告和自然帖子
66 个参数
querytextkeywordslisttypetextcountrytextdomaintexthandletextsort_bytextordertextpagenumberlimitnumberfiltersobjectdetailtextsearch_intextsearch_areatextitem_typetextstatustextmedia_typetextmedia_typeslistlanguagetextlanguageslistcountrieslistcategorieslisthashtagslisttiktok_page_idtexttiktok_page_idslistwebsite_idtexthas_shop_linkedtextpublished_aftertextpublished_beforetextupdated_aftertextupdated_beforetextmin_days_runningnumbermax_days_runningnumbermin_viewsnumbermax_viewsnumbermin_followersnumbermin_profile_viewsnumbermax_followersnumbermax_profile_viewsnumberprofile_created_aftertextprofile_created_beforetextmin_profile_ads_sharenumbermax_profile_ads_sharenumbermin_profile_postsnumbermax_profile_postsnumbermarket_countrieslistmain_market_countrieslistexclude_market_countrieslistshop_creation_countrieslistexclude_shop_creation_countrieslistmin_trafficnumbermax_trafficnumbermin_productsnumbermax_productsnumbermin_best_seller_pricenumbermax_best_seller_pricenumbershop_creation_aftertextshop_creation_beforetextshopify_appslistexclude_shopify_appslistthemeslistexclude_theme_idslistpixelslistexclude_pixelslistis_pinnedtrue / falsetrend_signaltext
create_ad_share_link创建(或返回)单条广告的公开链接
2 个参数
ad_idtextconfirmtrue / false
delete_ad_share_link移除单条广告的公开链接
2 个参数
ad_idtextconfirmtrue / false
write_ad_hooks为商品广告写三条简短的开场文案(开头钩子),适用于 Meta、TikTok 或两者
7 个参数
nichetextproducttextangletextplatformtextlanguagetextregeneratetextidempotency_keytext
广告主与邮件 5
search_advertisers搜索广告主(Facebook 主页)
26 个参数
querytextkeywordslistsearch_intextcountrytextsort_bytextordertextpagenumberlimitnumberfiltersobjectdetailtextcategory_idslisttimeframetextexclude_age_rangeslistmarket_countrieslistmain_market_countrieslistexclude_market_countrieslistshop_creation_countrieslistexclude_shop_creation_countrieslistmin_productsnumbermax_productsnumbershop_creation_aftertextshop_creation_beforetextshopify_appslistexclude_shopify_appslistthemeslistexclude_theme_idslist
scan_advertiser单个广告主的记录,或其每日的在投广告和覆盖人数
4 个参数
advertiser_idtextviewtextdaysnumbersnapshot_datetext
search_emails按标题、发件人或内容中的词搜索品牌营销邮件
11 个参数
querytextshoptextcampaign_typetextsort_bytextordertextpagenumberlimitnumberfiltersobjectdetailtexttimeframetextintenttext
get_email_html单封邮件的原始 HTML(请先用 search_emails 找到 ID)
4 个参数
email_idtextinclude_htmltrue / falseshoptexthtml_partnumber
analyze_shop_emails某家店铺的邮件策略
2 个参数
shoptextmax_emailsnumber
追踪的品牌 14
list_tracked_brands您追踪的品牌及其在投广告计数
6 个参数
pagenumberlimitnumberfolder_idslistnametextsort_bytextfolder_idnumber
add_to_brandtracker开始追踪品牌
5 个参数
facebook_page_idtextwebsite_idtextshop_idtextdomaintextfolder_idnumber
delete_from_brandtracker停止追踪品牌
3 个参数
brandtracker_idtextconfirmtrue / falseworkspace_link_idnumber
list_brandtracker_folders您的追踪文件夹
create_brandtracker_folder创建追踪文件夹
1 个参数
nametext
rename_brandtracker_folder重命名追踪文件夹
2 个参数
folder_idnumbernametext
delete_brandtracker_folder删除追踪文件夹
3 个参数
folder_idnumberactiontextconfirmtrue / false
move_tracked_brands把追踪的品牌移入文件夹(folder_id=null 表示移出所有文件夹)
3 个参数
brandtracker_idslistfolder_idnumberworkspace_link_idslist
get_brand_activity追踪的品牌在 Meta、TikTok、Google 和邮件上的动作
11 个参数
brandtracker_idtextbrandtextviewtextsourcetextsincetextuntiltextdaytexttypeslistpagenumberlimitnumberdetailtext
analyze_tracked_brand深入分析单个追踪的品牌
4 个参数
brandtracker_idtextbrandtextsnapshot_datetextdetailtext
analyze_brand_changes追踪的品牌在一段时间内的变化(1d、7d、14d、30d;选 1d 时排名上升按 7d 计算,选 14d 时开头钩子按 30d 计算,素材测试取最新一次)
6 个参数
brandtracker_idtextbrandtextperiodtextfocustextsnapshot_datetextdetailtext
get_brandtracker_scaling_ads追踪的品牌中排名上升最多的广告,附排名历史
32 个参数
brandtracker_idtextbrandtextad_rank_windowtextad_rank_sorttextmax_current_ranknumbermin_rank_deltanumberpagenumberlimitnumberdetailtextfacebook_page_idtextall_facebook_pagestrue / falseordertextgrowth_ranklistquerytextkeywordslistmedia_typetextstatustextcreated_aftertextcreated_beforetextmin_days_runningnumbermax_days_runningnumbermin_duplicatesnumbermax_duplicatesnumberad_languagetextad_languageslistad_countriesobjectmain_countrieslistctalistad_copy_hasheslistpartnerstrue / falsepartner_idslisthide_low_impressionstrue / false
get_brandtracker_transcripts追踪的品牌的视频脚本,按文本分组
9 个参数
brandtracker_idtextbrandtexttime_periodtextpagenumberlimitnumbereu_onlytrue / falseordertextsort_bytextsnapshot_datetext
daily_radar所有追踪品牌的每日摘要
4 个参数
folder_idslistfocustextevent_typeslistfolder_idnumber
看板 14
list_boards您的看板
8 个参数
scopetextstatetextkindtextsurfacetextparent_board_idtextroot_onlytrue / falsepagenumberlimitnumber
get_board单个看板
1 个参数
board_idtext
create_board创建看板
6 个参数
nametextkindtextsurfacetextdescriptiontextvisibilitytextparent_board_idtext
update_board重命名看板,或修改其描述或可见性
4 个参数
board_idtextnametextdescriptiontextvisibilitytext
move_board把看板移到某个文件夹看板下(parent_board_id=null 表示移到顶层)
2 个参数
board_idtextparent_board_idtext
archive_board归档看板及其下所有内容(用 restore_board 恢复)
2 个参数
board_idtextconfirmtrue / false
restore_board恢复已归档的看板
1 个参数
board_idtext
list_board_items看板中保存的内容
3 个参数
board_idtextpagenumberlimitnumber
find_saved_items在所有看板和收藏中搜索您保存的全部内容
13 个参数
querytextsource_typeslistboard_idtextscopetextstatetextsaved_fromtextsaved_totextsort_bytextordertextpagenumberlimitnumberinclude_itemstrue / falsedetailtext
add_board_item把内容保存到收藏看板
5 个参数
board_idtextsource_typetextsource_idtextsource_indextextpositionnumber
move_board_item把已保存的内容移到另一个看板
4 个参数
board_idtextitem_idtexttarget_board_idtextpositionnumber
remove_board_item从看板移除已保存的内容
3 个参数
board_idtextitem_idtextconfirmtrue / false
create_board_share_link创建看板的公开链接
2 个参数
board_idtextconfirmtrue / false
delete_board_share_link移除看板的公开链接
2 个参数
board_idtextconfirmtrue / false
收藏 10
list_favorites您保存的广告、店铺或邮件
6 个参数
kindtextscopetextfolder_idtextpagenumberlimitnumberdetailtext
add_favorite_item保存广告、店铺或邮件
4 个参数
kindtextitem_idtextscopetextfolder_idtext
move_favorite_item把收藏的内容移到文件夹(folder_id=null 表示移出所有文件夹)
4 个参数
kindtextfavorite_idtextscopetextfolder_idtext
remove_favorite_item按收藏本身的 ID(favorite_id)或所保存记录的 ID(item_id)移除收藏的内容
5 个参数
kindtextscopetextfavorite_idtextitem_idtextconfirmtrue / false
create_favorite_folder创建收藏夹
4 个参数
kindtextnametextscopetextparent_idtext
update_favorite_folder重命名或移动收藏夹(move=true 并指定 parent_id,null 表示顶层)
6 个参数
kindtextfolder_idtextscopetextnametextparent_idtextmovetrue / false
delete_favorite_folder删除收藏夹
6 个参数
kindtextfolder_idtextmodetextscopetexttarget_folder_idtextconfirmtrue / false
set_favorite_folder_visibility将收藏夹设为私密或共享
4 个参数
kindtextfolder_idtextvisibilitytextscopetext
create_favorite_folder_share_link创建收藏夹的公开链接
4 个参数
kindtextfolder_idtextscopetextconfirmtrue / false
delete_favorite_folder_share_link移除收藏夹的公开链接
4 个参数
kindtextfolder_idtextscopetextconfirmtrue / false
账户 2
usage_get您的套餐、点数及剩余数量
check_credits您本月剩余的点数(与 usage_get 的结果相同)