Pada halaman ini

Dokumentasi API data e-dagang

API SellWinners memberi anda maklumat risikan e-dagang dan pengiklanan melalui HTTPS dengan respons JSON: kedai Shopify beserta produk dan trafiknya; produk kedai beserta harga, anggaran jualan, ulasan dan iklannya; iklan Meta, Google dan TikTok; pengiklan; dan e-mel yang dihantar jenama. Setiap endpoint juga tersedia kepada ejen AI melalui pelayan MCP terhos kami. Halaman ini membincangkan pengesahan, format respons, penomboran, pengisihan dan penapis, had kadar dan kredit, ralat dan URL media, kemudian setiap endpoint beserta parameter dan contoh permintaan, dan alat pelayan MCP.

URL asas
https://api.sellwinners.com
Cuba secara langsung

Hantar permintaan sebenar daripada Playground pada pelan berbayar, atau jana klien daripada spesifikasi OpenAPI:

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

Mula pantas

  1. Cipta akaun, sahkan e-mel anda dan pilih pelan berbayar: API dan pelayan MCP bermula di situ.
  2. Buka Kunci API dan cipta kunci. Salin segera: ia hanya dipaparkan sekali.
  3. Buat permintaan pertama anda:
curl "https://api.sellwinners.com/v1/lookup?q=allbirds.com" \
  -H "X-API-Key: YOUR_API_KEY"

Pengesahan

Hantar kunci API anda pada setiap permintaan dalam pengepala X-API-Key, atau sebagai token bearer:

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

Kunci bermula dengan ak_live_. Rahsiakannya: jangan letakkannya dalam kod bahagian hadapan atau repositori awam. Anda boleh mencipta beberapa kunci (satu bagi setiap apl atau persekitaran) dan membatalkan mana-mana kunci daripada papan pemuka anda; kunci yang dibatalkan berhenti berfungsi serta-merta.

Respons

Setiap respons ialah JSON. Ia membawa requestId dan hasilnya di bawah data: senarai untuk carian dan penyenaraian, satu objek untuk satu rekod. Senarai menambah objek pagination, dan sesetengah jawapan menambah 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 }
}

Rekod ialah objek bersarang: sesuatu iklan mempunyai media, advertiser, content, metrics, audience, rank dan flags, dan kedai, pengiklan, iklan Google, item TikTok dan e-mel dikumpulkan dengan cara yang sama. Nilai yang tidak diketahui ialah null. Medan lain yang tiada tempat tetap disimpan di bawah extra. Contoh di atas dipendekkan.

Dalam sesuatu iklan, content.title ialah tajuk dan content.callToAction ialah teks yang boleh dibaca seperti "Shop now". metrics.estimatedSpend ialah anggaran perbelanjaan daripada sumber data apabila ada (satu iklan daripada /v1/ads/{adId} membacanya), jika tidak capaian x 9 / 1000 (9 USD bagi setiap 1,000 orang yang dicapai); anggaran perbelanjaan mengekalkan dua tempat perpuluhan di bawah 10 USD dan dalam dolar bulat bermula 10 USD ke atas. rank.rankDelta ialah kedudukan semasa tolak kedudukan sebelumnya, jadi nilai negatif bermaksud iklan itu naik, dan rank.improvementPct ialah pecahan (0.25 ialah suku).

Laporan kedudukan penjejak jenama (/ad-rank, /scaling-ads, /v1/workspace/scaling-ads dan alat MCP get_brandtracker_scaling_ads) menambah metrics mereka sendiri: di situ metrics.rankDelta ialah kedudukan sebelumnya tolak kedudukan semasa (positif: tempat yang diperoleh) dan metrics.improvementPct ialah pecahan kedudukan sebelumnya yang diperoleh, seperti dalam sesuatu iklan (0.875 ialah 87.5%). Pada satu iklan, metrics.reachDelta1d, reachDelta7d dan reachDelta30d diisi daripada sejarah capaiannya. Kedai menamakan kategori mereka: catalog.mainCategory dalam senarai, serta catalog.categories pada satu kedai.

Dalam iklan Google, media.type dan media.format ialah text, image atau video, dan media.url ialah imej iklan itu: bagi iklan video, imej kecilnya (tiada fail video). transparencyUrl ialah iklan itu pada Ads Transparency Center Google, tempat iklan video dimainkan; ia ialah null apabila iklan itu tiada id Google. network ialah search, youtube, shopping, maps atau other, begitu juga nilai extra.networks.

Diubah pada 19 Oktober 2026:

  • media.format iklan Google dahulunya kod format dan kini ialah text, image atau video, media.type boleh jadi text atau video, dan extra.networks menggunakan nama huruf kecil network.
  • media.url Google tidak pernah merupakan fail video, walaupun media.type ialah video.
  • Dalam penapis formats Google, image kini bermaksud iklan imej (sebelum ini ia bermaksud iklan teks), jadi gunakan text untuk iklan teks. Kod terdahulu static_image, html5_iframe dan responsive_display, serta nama pendeknya, masih diterima.

status iklan Google ialah active hanya semasa Google memaparkan iklan itu: iklan yang tidak dipaparkan Google lebih daripada 7 hari ialah unknown. daysRunning mengira hari dari firstSeenAt hingga lastSeenAt, kedua-duanya termasuk; extra.servedDays ialah kiraan sumber data itu sendiri, yang berterusan selepas iklan berhenti. Penapis sepadan dengan apa yang ditunjukkan oleh setiap iklan: status=active mengekalkan iklan yang dipaparkan Google dalam 7 hari lepas dan status=inactive iklan yang ditandakan sumber data sebagai berhenti, jadi iklan unknown tidak berada di bawah mana-mana; minDaysRunning dan maxDaysRunning mengekalkan iklan yang nilai daysRunning berada dalam julat. Senarai sedemikian mempunyai pagination.total null, dan apabila hanya sedikit daripada iklan yang dibaca sepadan, ia berakhir lebih awal, dengan meta.partial dan amaran.

Tanpa teks carian, sortBy=relevance menyenaraikan yang terbaharu; sortBy=reach hanya menerima order=desc. Dengan status=active, sortBy=reach menyenaraikan sedikit iklan: dalam susunan capaian, iklan pertama kebanyakannya iklan yang telah dihentikan Google, jadi isih mengikut terbaharu untuk iklan yang sedang dipaparkan Google (amarannya menyatakan perkara ini). Iklan Google tidak menerima sortBy=longestRunning: sumber data menyusunnya mengikut hari yang berterusan selepas iklan berhenti, jadi ia menyenaraikan iklan yang tidak lagi dipaparkan Google, dan ia menjawab 400 dengan sebab itu.

extra.startIsFloor menandakan iklan yang mula dilihat pada 31 Mei 2018, hari pertama data iklan Google, jadi ia mungkin lebih lama. audience.countries menyenaraikan setiap negara audiens, dengan percentage hanya bagi iklan yang dipaparkan di satu negara; remarketing dan interest ialah null apabila tidak diketahui.

Google melaporkan capaian bagi sesetengah iklan yang dipaparkan di EU sahaja, selalunya hanya sebagai 10,000,000, had atas skalanya (10 juta atau lebih): kebanyakan iklan tidak mempunyainya, dan nullReasons menyatakan sebab reach.value ialah null (not_reported: iklan yang dipaparkan di EU yang tidak dilaporkan capaiannya oleh Google; eu_only: iklan yang dipaparkan di tempat lain), kecuali capaian yang ditinggalkan oleh pelan. extra.networks ialah senarai platform iklan daripada sumber data, yang mungkin tidak menamakan network. extra.shop.google memegang jumlah Google bagi laman web pengiklan; bagi laman yang bukan kedai (kedai apl, laman sosial, pemendek pautan) advertiser.domain dan websiteId ialah null.

Diubah pada 20 Oktober 2026:

  • Domain (GET /v1/shops/{domain}, carian id, domain TikTok, ringkasan pesaing) ialah laman dengan domain tepat itu, termasuk di luar indeks kedai; domain yang tidak dicapai sumber data dijawab 404.
  • GET /v1/lookup menyusun hasil dengan yang terbaik dahulu: laman milik sesuatu domain, halaman Facebook miliknya (halaman utama dahulu), kemudian halaman yang dinamakan seperti domain itu; bagi nama, laman milik jenama dan halamannya sendiri (halaman utama dahulu), kemudian kedai dan halaman yang ditemui melalui nama itu.
  • Apabila laman jenama ditemui, kedai atau halaman yang mempunyai nama itu hanya di dalam sesuatu perkataan dikecualikan dan laman dengan nama itu dianggap tepat hanya apabila ia menjalankan iklan; jika tidak, padanan nama dianggap tepat hanya jika ada trafik atau iklan. Halaman rasmi bernama lain yang tiada iklan aktif datang selepas halaman yang ditemui melalui nama.
  • Pada baris kedai, signals.activeAdsSource menyatakan dari mana activeAds diperoleh: page (iklan aktif halaman utamanya, dibaca sekarang, pada baris kedai itu sendiri) atau index (kiraan indeks kedai, yang mungkin lebih lama).
  • Carian domain kedai (searchType=domain) menyenaraikan laman yang tepat dahulu, dengan extra.exactDomainMatch (dan extra.inShopIndex false apabila indeks kedai tidak memasukkannya).
  • Bagi laman yang bukan kedai (kedai apl, laman sosial atau pemesejan, pemendek pautan atau ubah hala penjejakan), extra.domain pada baris pengiklan ialah null, rekod pengiklan menamakannya dalam extra.nonShopSite, meninggalkan extra.platforms dan mengambil linkedShops daripada halaman pendaratannya (fromLandingPages), dan iklan tidak mempunyai shops.
  • Tarikh dan masa yang dihantar sumber data tanpa zon ialah UTC dan kini dihantar dengan +00:00.
  • Dalam statistik e-mel, emailsByDayOfWeek dikunci mengikut nombor hari: 0 ialah Ahad, 6 Sabtu.
  • Baris carian id boleh membawa nullReasons, dan rekod kedai boleh membawa meta.partial apabila angka senaraiannya tidak dapat dibaca.

Turut diubah pada 20 Oktober 2026 (TikTok):

  • publishedAt bagi item TikTok ialah UTC. Ia lewat 1 atau 2 jam, jadi siaran yang dibuat pada jam terakhir hari UTC menunjukkan hari berikutnya dan daysRunning kurang satu hari.
  • Penapis sepadan dengannya: publishedAfter dan publishedBefore ialah UTC (tarikh sahaja ialah permulaan harinya, dan publishedBefore menyenaraikan siaran sebelumnya), minDaysRunning dan maxDaysRunning mengira dari hari UTC, seperti daysRunning, dan sortBy=longestRunning bermula pada 31 Ogos 2016, 22:00 UTC.

Turut diubah pada 20 Oktober 2026 (iklan Google):

  • GET /v1/google-ads, POST /v1/google-ads/query dan alat MCP tidak menerima sortBy=longestRunning (atau daysRunning) dan menjawab 400 beserta sebabnya: sumber data menyusunnya mengikut hari yang berterusan selepas iklan berhenti, jadi ia menyenaraikan iklan yang tidak lagi dipaparkan Google.
  • Carian Free yang hasil pertamanya menjadi sedikit selepas ditapis dengan status=active menjawab dengan meta.partial dan amaran yang menyatakan berapa banyak iklan yang dibaca disenaraikannya.
  • Dalam extra.shop, laman web tanpa data trafik tidak mempunyai monthlyVisits (sebelum ini 0), trafficGrowth30d hanya disertakan bersama lawatan melebihi 0, dan extra.shop.google tidak memuatkan totalReach atau weeklyReach bernilai 0 (tidak pernah dilaporkan) dan, apabila tiada iklan dikira, kiraan 0 itu.
  • Iklan Google yang disimpan ke papan juga dibaca dengan cara yang sama.

Turut diubah pada 20 Oktober 2026 (kedai):

  • Dalam GET /v1/shops/{shopId}, advertising.summary.reach30d ialah capaian EU 30 hari lepas, dijumlahkan mengikut tarikh (sebelum ini jumlah sejak penjejakan bermula, kini totalReach), spend30d ialah capaian itu x 9 / 1000, extra.estimatedSpendUsd ialah perbelanjaan sejak penjejakan bermula dan extra.adsLaunched30d menjumlahkan iklan yang dilancarkan dalam 30 hari lepas; semuanya null bagi kedai tanpa capaian EU atau UK.
  • Rekod kedai, kedai dalam senarai dan statistik e-mel mempunyai nullReasons, iaitu laluan medan yang dipetakan kepada sebab ia null: not_shopify (jualan dan produk dianggarkan untuk kedai Shopify sahaja), no_estimate, not_measured, eu_uk_only, not_linked (tiada profil TikTok), not_on_tp, no_reviews, none_found.
  • Anggaran jualan sifar di samping unit terjual ialah null, dalam rekod, senarai dan sejarah jualan, yang period=week memberikan satu titik bagi setiap minggu.
  • traffic.growth30d ialah pecahan (-0.1543 ialah -15.4%), dan traffic.history bermula pada bulan pertama yang ada lawatan.
  • catalog.mainCategory datang daripada id kategori (yang paling khusus dalam cabang utama), bersama catalog.categoryLeaves dan productsCountCapped (25,001 ialah had atas sumber data: 25,000 atau lebih).
  • Halaman Trustpilot tanpa ulasan mempunyai penilaian null.
  • tiktok.matchedBy ialah socials atau handle apabila angka TikTok datang daripada profil sosial kedai atau daripada profil yang ditemui melalui nama penggunanya (padanan, bukan pautan daripada sumber data).
  • advertising.mainPageActiveAds ialah iklan aktif halaman utama (bacaan gambaran keseluruhan iklannya, seperti yang ditunjukkan oleh Halaman utama dalam linkedAdvertisers; kiraan yang ditunjukkan senarai kedai hanya muncul apabila bacaan itu tiada) dan linkedAdvertisers[].rank ialah kedudukan halaman itu.
  • Kedai serupa tidak termasuk kedai itu sendiri dan laman webnya sendiri, dan setiap halaman diisi daripada senarai yang lebih ke bawah (offset dan limit mengira senarai tanpa kedai-kedai itu).
  • Produk yang diisih mengikut populariti meletakkan produk terlaris kedai di hadapan (meta.order).
  • E-mel dan statistik e-mel sesebuah kedai mengira setiap jenis kempen, dan angka 90 harinya null apabila tidak diketahui.
  • Isihan jualan menyenaraikan satu baris bagi setiap kedai Shopify (extra.sharedSalesWith), dan sortBy=estMonthlySales&order=asc tidak memuatkan kedai tanpa anggaran.

Turut diubah pada 20 Oktober 2026 (angka kedai):

  • Isihan jualan GET /v1/shops terus dibaca melepasi domain yang digabungkannya menjadi satu baris bagi setiap kedai Shopify (sebelum ini ia berhenti selepas beberapa baris pertama), turut menggabungkan domain sesebuah kedai yang lebih jauh ke bawah dalam senarai, dan pagination.total ialah null sehingga senarai dibaca hingga ke hujung; sortBy=estMonthlySales&order=asc bermula pada anggaran 100 USD (minMonthlySales 100).
  • Anggaran jualan di bawah 0.50 USD bagi setiap unit terjual ialah null (no_estimate), dalam rekod, senarai dan sejarah jualan.
  • traffic.monthlyVisits ialah null bagi laman web yang belum diukur dan traffic.growth30d apabila bulan sebelumnya tiada lawatan (not_measured); growth30d sesuatu rangkaian sosial datang daripada sejarah pengikutnya apabila sumber data memberikan 0 atau tiada, dan 0 pengikut ialah null (not_measured).
  • Kedai dalam senarai menyatakan sebab catalog.productsCount dan sales.unitsSold ialah null.
  • extra.storeWide menandakan domain dengan 0 lawatan yang membawa jualan kedainya (0 yang telah diukur, atau domain lain milik kedai itu, yang dinamakan dalam extra.sharedSalesWith, memiliki lawatan itu; pelan Free tidak menyertakan nama itu dalam rekod kedai).
  • advertising.mainPageActiveAds ialah iklan aktif halaman utama seperti yang dibaca oleh gambaran keseluruhan iklannya (kiraan yang ditunjukkan senarai kedai hanya muncul apabila bacaan itu tiada).
  • Kedai serupa juga tidak termasuk kedai jenama milik kedai itu, dan extra.similarIndexed ialah false bagi kedai yang tiada dalam indeks kesamaan.
  • catalog.mainCategory mengekalkan label asal sumber data hanya apabila ia ialah nama sesuatu kategori.
  • Fail media yang dipautkan oleh sesuatu jawapan tetapi sudah tiada pada sumber data membalas 200 dengan badan kosong dan X-Media-Missing: true.

Turut diubah pada 20 Oktober 2026 (pengiklan dan iklan Meta):

  • Capaian pengiklan ialah capaian EU dan UK, mengikut tempoh carian pengiklan sendiri: advertising.reach30d, extra.reach14d, reach90d dan totalReach ialah null bagi halaman tanpa iklan EU atau UK dan tanpa capaian, atau bagi tempoh yang belum dikira oleh sumber data, dan nullReasons menyatakan sebabnya (eu_uk_only, not_measured); halaman yang dicipta dalam sesuatu tempoh mempunyai seluruh capaiannya dalam tempoh itu (sebelum ini 0).
  • Dalam GET /v1/advertisers/{advertiserId}, capaian ialah yang ditunjukkan senarai pengiklan (sebelum ini dibaca 30 bacaan ke belakang, dan bacaan ada yang melangkau hari), anggaran perbelanjaan ialah null bersama capaian itu, extra.avgSpendUsd14d ialah purata perbelanjaan harian selama 14 hari, extra.avgActiveAds14d ialah purata 14 hari iklan aktifnya (sebelum ini iklan baharunya selama 14 hari), dan jika sumber data belum mengiranya, bagi halaman yang dicipta dalam tempoh 14 hari itu ia dikira daripada iklan aktif yang dibaca sejak hari pertamanya (extra.averagedFrom), jika tidak null, dan kiraan iklan baharu bagi halaman yang dicipta dalam tempoh itu mengira setiap satu iklannya.
  • advertising.countryDistribution ialah bahagian iklan aktifnya yang menyasarkan setiap negara (satu iklan boleh menyasarkan beberapa negara), extra.reachCountries memuatkan bahagian setiap negara daripada capaian EU, extra.platforms.meta memuatkan iklan milik halaman itu sendiri (sebelum ini milik halaman utama kedai), kiraan TikTok atau Google tanpa angka tidak disertakan, extra.mainLandingPages menggunakan pratonton halaman pendaratan halaman baharu sebagai ganti, dan lastAds bagi halaman yang iklannya belum diambil oleh carian iklan ialah iklan terkini yang disenaraikan baris pengiklannya, bersama meta.indexing, seperti pada GET /v1/advertisers/{advertiser_id}/ads (bersama meta.liveAds).
  • Baharu: GET /v1/advertisers/{advertiserId}/history, iklan aktif halaman itu dan capaian EU yang diperolehnya, hari demi hari.
  • Bilangan pengikut Instagram 0 ialah null (sumber data menulis 0 bagi halaman yang tiada akaun yang diketahuinya).
  • metrics.reach dan perbelanjaan sesuatu iklan Meta ialah null bagi iklan yang tidak dipaparkan di EU atau UK (eu_uk_only; sebelum ini 0 atau null) dan bagi iklan EU yang capaiannya belum dikira (not_measured; sebelum ini 0), dengan baris media menyatakan sebabnya dalam nullReasons.reach, media.type ialah carousel bagi iklan yang mempunyai lebih daripada satu imej atau video, dan extra.startIsFloor menandakan iklan yang bermula pada 1 Januari 2018, hari pertama bagi tarikh iklan Meta pada sumber data.
  • sortBy=adRank menyenaraikan kedudukan terbaik (1) dahulu, walau apa pun susunannya.
  • Satu iklan (GET /v1/ads/{adId}) mengambil capaian terkini yang dilaporkan sumber data beserta perbelanjaannya, mengira perubahan capaiannya mengikut tarikh selagi sejarah capaiannya terkini (jika tidak, ia null), menyenaraikan imej dan videonya seperti baris carian, mengisi advertiser.reach30d dan pageAnalytics.instagramFollowersHistory, menambah pageAnalytics.reachHistory (siri yang sama dengan impressionsHistory), dan menamakan kedai yang rekod itu berikan melalui id sahaja (traffic kedai itu ialah null dengan nullReasons shops.traffic apabila laman web itu belum diukur); audience.gender, ageMin, ageMax dan metrics.aggregatedReach sentiasa null, kerana sumber data tidak melaporkannya bagi satu iklan.
  • Dalam carian pengiklan, sortBy=reach menyusun mengikut jumlah capaian sejak penjejakan bermula dan newAds mengikut iklan baharu 14 hari.
  • Sasaran iklan Meta menentukan sebab capaiannya null: eu_uk_only hanya bagi iklan yang tidak menyasarkan mana-mana negara EU atau UK; iklan yang menyasarkan salah satu daripadanya, atau yang sasarannya belum diketahui, ialah not_measured dalam 7 hari pertamanya dan not_reported selepas itu (sebelum ini eu_uk_only), dalam senarai iklan, baris media dan satu iklan.
  • Satu iklan membaca sejarah capaian dan perbelanjaannya sebagai satu siri, satu bacaan sehari (perubahannya juga), dan mengambil bacaan serta perbelanjaan terakhir siri itu apabila capaian rekod lebih daripada dua kali ganda nilainya dan siri itu berlanjutan hingga hari terakhir iklan; media iklan itu menggunakan fail pertama yang disenaraikan sebagai ganti, dan advertiser.totalReach menggunakan capaian EU daripada butiran halaman.
  • Rekod pengiklan yang barisnya tidak mempunyai bacaan capaian tetapi butiran halamannya ada, menggunakan capaian butiran itu (extra.totalReach, perbelanjaannya, dan advertising.reach30d yang dikira daripadanya), bahagian dalam extra.reachCountries tidak pernah dibundarkan kepada 0, extra.averagedFrom tidak pernah mendahului hari halaman itu dicipta, dan sejarah hariannya (extra.history, GET /v1/advertisers/{advertiserId}/history) tidak memuatkan bacaan yang terlepas oleh sumber data (urutan sifar sepanjang 14 hari atau kurang antara bacaan melebihi 0).
  • Satu iklan yang mengambil bacaan siri menyimpan capaian rekod dalam extra.recordReach (angka yang ditunjukkan senarai iklan); dalam carian pengiklan, baris yang tidak mempunyai bacaan capaian EU tetapi butiran halamannya ada, menggunakan capaian butiran itu, seperti yang dilakukan rekodnya; dan GET /v1/advertisers/{advertiserId}/history kini mengekalkan bacaan 0 bagi halaman yang kini tiada iklan EU tetapi pernah memperoleh capaian sebelum hari yang diminta (dalam hari itu ia tidak memperoleh capaian; sebelum ini bacaan itu ditinggalkan sebagai not_measured).
  • Pada pelan Free, iklan yang capaiannya tidak diketahui menyatakan sebabnya seperti pada pelan berbayar; hanya capaian yang tidak termasuk dalam pelan itu yang tiada sebab.

Turut diubah pada 20 Oktober 2026 (anggaran perbelanjaan):

  • Anggaran perbelanjaan di bawah 10 USD mengekalkan dua tempat perpuluhan: capaian 140 pada 9 USD bagi setiap 1,000 orang yang dicapai ialah 1.26 (sebelum ini 1), dan purata harian mengekalkan sennya sendiri; dari 10 USD ke atas, anggaran perbelanjaan ialah dalam dolar penuh (capaian 2,000 ialah 18).
  • Ini terpakai untuk extra.estimatedSpendUsd dan extra.avgSpendUsd14d pada rekod pengiklan, advertising.summary.spend30d dan extra.estimatedSpendUsd pada kedai, metrics.estimatedSpend pada iklan Meta, serta statistics.euData.estimatedSpend30d dan estimatedSpend bagi setiap titik /time-series pada penjejak jenama (kedua-duanya sebelum ini mempunyai dua tempat perpuluhan pada sebarang jumlah), dalam API dan alat MCP. Jika angka sumber data sendiri ialah anggaran itu dalam dolar penuh, ia mengekalkan sennya dengan cara yang sama.

Turut diubah pada 20 Oktober 2026 (capaian pengiklan dan sejarah harian):

  • GET /v1/advertisers/{advertiserId} menambah extra.reachScope: outside_eu_uk bagi halaman yang kebanyakan capaiannya mengikut negara dilihat di luar EU dan UK (sumber data turut melaporkan capaian sesetengah iklan yang dipaparkan di tempat lain; capaiannya dan anggaran yang dibuat daripadanya ketika itu ialah capaian tersebut, bukan capaian EU), jika tidak eu_uk. extra.avgSpendUsd14d bagi halaman yang dicipta dalam tempoh 14 hari itu ialah perbelanjaannya sepanjang hari penuh sejak ia dicipta (sekurang-kurangnya satu hari; sebelum ini ia dikira daripada capaian 14 harinya merentasi 14 hari jika baris pengiklan mempunyainya).
  • extra.history pada rekod pengiklan dan GET /v1/advertisers/{advertiserId}/history bermula pada hari halaman itu dicipta; extra.history.newAds tidak memuatkan nilai 0 pada hari yang terlepas oleh sumber data, extra.followersHistory serta suka dan pengikut pageAnalytics sesuatu iklan tidak memuatkan nilai 0 di antara dua bacaan melebihi 0 atau pada hari sedemikian, dan anggaran perbelanjaan harian mengekalkan dua tempat perpuluhan di bawah 10 USD.
  • Halaman yang iklan aktifnya belum terdapat dalam sebarang senarai mempunyai meta.indexing pada rekodnya, dan halaman pertama GET /v1/advertisers/{advertiser_id}/ads yang kosong dengan meta.indexing dan meta.liveAds.
  • Satu iklan (GET /v1/ads/{adId}): extra.spendHistory bermula pada hari iklan itu bermula, setiap spendUsd dengan dua tempat perpuluhan di bawah 10 USD; advertiser.totalReach tidak pernah lebih rendah daripada bacaan terakhir pageAnalytics.reachHistory (extra.pageRecordReach ketika itu memuatkan jumlah rekod, iaitu yang ditunjukkan senarai pengiklan); extra.recordSpend ialah perbelanjaan bagi extra.recordReach; extra.reachScope dan extra.pageReachScope menyatakan di mana kebanyakan capaian iklan itu dan halamannya dilihat.

Turut diubah pada 20 Oktober 2026 (penjejak jenama):

  • Dalam GET /v1/brandtrackers dan GET /v1/brandtrackers/{id}, nilai 0 pada advertising.newAdsLastDay yang disertai pelancaran dalam 7 hari lepas disemak berdasarkan pelancaran kedai semalam: bilangannya, atau null (not_measured) jika tiada bacaan hari itu; satu senarai menyemak paling banyak 20 jenama bagi setiap panggilan, iaitu jenama pada halaman yang diminta.
  • Dalam /top-ads dan /v1/workspace/top-ads, metrics.totalReach ialah capaian EU iklan itu: null bagi iklan yang dipaparkan di luar EU dan UK (eu_uk_only) atau iklan EU yang belum dikira (not_measured), bersama nullReasons, dan diletakkan paling akhir dalam isihan capaian (sebelum ini 0).
  • /testing mengira statistik capaiannya daripada iklan yang capaiannya diketahui, dengan nullReasons stats.reach bagi kumpulan yang tiada satu pun.
  • Dalam /hooks, /transcripts, /landing-pages serta hook dan halaman pendaratan ruang kerja, totalImpressions bernilai 0 ialah null dengan sebab baharu no_eu_reach (tiada capaian EU atau UK dikira untuk iklannya; not_measured dengan euOnly), diletakkan paling akhir dalam isihannya.
  • Dalam /ad-rank, /scaling-ads dan /v1/workspace/scaling-ads, apabila sejarah kedudukan sesuatu iklan bermula di dalam tempoh 14 atau 30 hari, metrics.previousRank dan rankDelta dikira daripada bacaan paling lama di situ: metrics.since ialah hari itu dan meta.windowNote menyatakannya, dan angka yang tidak dapat diberikan ialah null dengan nullReasons.
  • Dalam /partners, isOwnPage ialah true bagi halaman utama kedai, halaman rasminya yang dinamakan seperti jenama dan halaman yang dinamakan sebagai jenama itu (pencipta kandungan juga boleh dikira rasmi), dan capaian atau perbelanjaan null mempunyai nullReasons.
  • Halaman pertama /ads dengan adCopyHashes mempunyai meta.latestAdDate dan dataFreshnessLagDays, dan dengan status=active mempunyai meta.stoppedCount.
  • /demography ialah audiens di EU dan UK, dan negara yang kurang daripada satu per sepuluh ribu daripada negara teratas berpindah daripada countryDistribution ke otherCountries.
  • /ad-copy-evolution dan /headline-evolution mempunyai satu titik bagi setiap hari yang direkodkan (0 apabila teks itu tidak digunakan, null pada hari yang dipotong pada teks yang disimpannya), menyusun teks mengikut hari terbaharu dan tidak memuatkan hari yang dibaca salah oleh sumber data (iklan aktif kurang daripada sepersepuluh hari di sekelilingnya, satu hari atau 2 atau 3 hari berturut-turut, atau teks yang jauh lebih sedikit daripada hari di kedua-dua belah), seperti yang dinyatakan oleh meta.periodNote; meta.recordedDays mengira hari-hari itu. Iklan aktif /time-series mingguan dan bulanan juga tidak memuatkan 2 atau 3 bacaan sedemikian berturut-turut.

Turut diubah pada 20 Oktober 2026 (laporan penjejak jenama, carian id dan capaian Google):

  • Dalam /ad-rank, /scaling-ads dan /v1/workspace/scaling-ads, setiap kedudukan pada sesuatu baris datang daripada sejarah kedudukan iklan: metrics.currentRank ialah bacaannya pada hari kedudukan pustaka iklan dibaca (kedudukan yang ditunjukkan /top-ads; pustaka itu boleh ketinggalan sehari daripada sejarah), jika tidak bacaan terbaharunya, trajectory berakhir pada hari itu, dan jika tiada bacaan pada hari tempoh bermula, bacaan paling lama dalam tempoh itu yang dikira (perubahan sumber data sendiri sepanjang tempoh itu tidak lagi digunakan).
  • 50 iklan pertama pustaka iklan (10 setiap jenama merentas jenama) disusun semula mengikut angka ini: iklan yang naik kurang daripada minRankDelta, atau berada di bawah maxCurrentRank, mengikut angka itu tidak dimuatkan (iklan yang sejarah kedudukannya tidak menunjukkan kenaikan, mengikut kiraan pustaka iklan sendiri), pagination meliputi iklan yang dikekalkan dan meta.rankNote menyatakan apa yang dibaca dan tidak dimuatkan, merentas jenama juga.
  • /time-series harian (dan graph pada gambaran keseluruhan) ialah null pada hari yang iklan aktifnya dibaca salah oleh sumber data (kurang daripada sepersepuluh hari di kedua-dua belah; hari terbaharu kekal seperti yang dibaca, dalam evolusi teks juga), begitu juga pelancarannya, dan begitu juga pelancaran pada hari selepasnya apabila hampir semuanya ialah iklan aktif hari itu; minggu dan bulan tidak memuatkan pelancaran tersebut, dan leftOut menyenaraikan hari-hari itu. /landing-page-evolution tidak memuatkan hari-hari itu pada setiap halaman, dan bacaan sesuatu halaman sendiri yang kurang daripada sepersepuluh bacaan di kedua-dua belah, seperti yang dinyatakan oleh meta.periodNote halaman itu, bersama hari yang dicapai sejarah apabila ia ketinggalan.
  • Kumpulan /testing tanpa capaian yang dikira mempunyai nullReasons stats.reach no_eu_reach kecuali jika salah satu iklannya belum dikira (not_measured) atau semuanya dipaparkan di luar EU dan UK (eu_uk_only); capaian dan perbelanjaan yang tiada pada baris /partners ialah not_measured hanya dalam 7 hari selepas launchDate baris itu, dan no_eu_reach selepas itu.
  • /creatives menamakan iklan yang mempunyai beberapa imej atau video sebagai carousel (sebelum ini unknown).
  • Dalam GET /v1/lookup, signals.monthlyVisits sesebuah kedai ialah null bagi laman web yang belum diukur (nullReasons not_measured; sebelum ini 0), iklan aktif pada baris kedai yang tepat (dengan setiap type, shop juga) ialah iklan halaman utamanya seperti yang dibaca oleh gambaran keseluruhan iklannya, iaitu mainPageActiveAds kedai itu, dan baris halaman milik kedai itu dibaca dengan cara yang sama; signals.monthlyVisits sesuatu jenama yang dijejak (dan totalTraffic jenama itu dalam GET /v1/brandtrackers) ialah null bagi laman web yang belum diukur dan menyatakan sebab ia tiada (not_measured, atau no_shop bagi halaman tanpa kedai), dan pada pelan Free, capaian halaman yang tiada dalam mana-mana pelan mengekalkan sebabnya (eu_uk_only, not_measured), dalam senarai pengiklan juga.
  • reach.value yang null pada iklan Google mempunyai nullReasons (not_reported, eu_only), kecuali bagi capaian yang tidak termasuk dalam pelan itu.
  • Dalam GET /v1/shops/{shopId}, advertising.mainPageActiveAds ialah iklan aktif halaman utama seperti yang dibaca oleh gambaran keseluruhan iklannya, iaitu kiraan yang ditunjukkan Halaman utama dalam linkedAdvertisers (sebelum ini ia kiraan indeks kedai, yang boleh lewat sehari).

Turut diubah pada 20 Oktober 2026 (TikTok dan e-mel):

  • metrics.engagementRate pada baris TikTok ialah (suka + komen + perkongsian + simpanan) / tontonan sebagai pecahan (0.0513 ialah 5.13%; carian sebelum ini menghantar peratusan dan GET /v1/tiktok/library/{itemId} metrik lain), dan daysRunning ialah bilangan hari sejak siaran diterbitkan, dalam kedua-duanya.
  • metrics.rank ialah kedudukan siaran itu dalam kalangan siaran penciptanya (1 ialah yang terbaik).
  • profile.followers ialah null apabila sumber data belum mengiranya (sebelum ini ia menghantar 0), content.category ialah null bagi kategori menyeluruh All, dan content.hashtags ialah tag siaran itu, sekali sahaja setiap satu, dieja seperti dalam penerangannya dan tanpa tanda baca selepasnya (bagi rekod, ia senarai tag daripada sumber data, bagi baris carian, ia tag daripada penerangan).
  • Rekod TikTok menambah profile.adsCount, organicCount dan avgPostsPerWeek90d, mengisi profile.pageCreation, dan mempunyai links null bagi baris sumber data yang tiada TikTok di sebaliknya (id kurang daripada 15 digit, atau diterbitkan sebelum 31 Ogos 2016, 22:00 UTC).
  • sortBy=longestRunning bermula pada TikTok pertama (31 Ogos 2016, 22:00 UTC).
  • Rekod e-mel menamakan jenis promosi, kategori dan acaranya, dan lawatan bulanan, iklan aktif, produk serta angka 90 hari kedainya ialah yang ditunjukkan senarai e-mel, begitu juga angka last90Days dalam statistik e-mel.
  • Baris e-mel tidak memuatkan extra.shopActiveAds bagi nilai 0 tanpa jumlah iklan (nullReasons baris itu menyatakan not_measured), dan shop.marketing.activeAds pada rekod e-mel ketika itu ialah null; apabila angka kedai tidak dapat dibaca, rekod mempunyai meta.partial, amaran dan nullReasons failed bagi angka itu.
  • Dalam alat MCP analyze_shop_emails, dominant menyusun jenis kempen, kategori, jenis promosi dan acara masing-masing secara berasingan dan tidak memuatkan No Promotion dan No Event.

Diubah pada 21 Oktober 2026:

  • metrics.views pada item TikTok, serta likes dan saves yang bernilai 0 bersamanya, ialah null dengan nullReasons not_measured (begitu juga engagementRate) apabila sumber data menghantar 0 tontonan bersama suka, komen, perkongsian atau simpanan melebihi 0, dalam carian dan dalam GET /v1/tiktok/library/{itemId}; sortBy=views atau likes dengan order=asc menyenaraikan siaran yang tontonannya dikira (minViews 1).
  • Carian iklan Meta dengan websiteIds menyenaraikan iklan milik kedai itu sendiri: setiap iklan halaman utama kedai dan halaman rasminya yang dinamakan sepertinya, serta iklan halaman lainnya (pencipta kandungan, penerbit dan rakan kongsi yang menjalankan iklannya) yang memaut ke kedai itu atau ke laman web pada domainnya; sehingga senarai dibaca hingga ke hujung, pagination.total carian itu ialah iklan halaman milik kedai yang dicari, iaitu anggaran (pagination.totalEstimated true), atau null apabila carian tidak menamakan sebarang halaman miliknya.
  • Apabila sortBy=longestRunning digunakan, setiap kelompok iklan yang dibaca daripada sumber data disusun mengikut daysRunning.
  • Dalam GET /v1/shops/{shopId}, advertising.activeAds mengira iklan aktif halaman milik kedai itu (linkedAdvertisers[].isOwnPage), dan dalam /products kedai itu, produk terlaris yang diberi kedudukan mempunyai tajuk, harga dan imej daripada catalog.bestSellers (harga produk terlaris boleh jadi harga terendah antara variannya).
  • traffic.monthlyVisits sesebuah kedai (dan growth30d) ialah null dengan not_measured apabila ia bernilai 0 sejak sejarahnya jatuh kepada 0 sementara anggaran jualan melebihi 0 dan ada unit terjual, dalam rekod, kedai dalam senarai, kedai serupa dan carian id; domain sedemikian masih extra.storeWide.
  • Dalam GET /v1/ads/{adId}, advertiser.totalReach ialah bacaan terakhir pageAnalytics.reachHistory selagi bacaan itu berumur paling lama 2 hari (extra.pageRecordReach ketika itu memuatkan jumlah rekod), extra.advertiserTotalAds diisi daripada angka senarai halaman itu (not_measured jika tiada), pertambahan capaian 7 hari dan 30 hari bagi iklan yang bermula dalam tempoh itu ialah seluruh capaiannya, dan pertambahan yang lebih rendah daripada tempoh yang lebih pendek ialah null (not_measured).
  • statistics.ctaCount pada penjejak jenama menamakan setiap seruan tindakan seperti yang dilakukan content.callToAction ("Shop now").

Turut diubah pada 21 Oktober 2026 (kedai):

  • Dalam GET /v1/shops/{shopId}, advertising.history ialah iklan aktif halaman utama mengikut hari pada setiap pelan (pada pelan Free ia mengira iklan setiap halaman), dan dokumentasi menyatakan bahawa capaian dan perbelanjaan advertising.summary, extra.adsLaunched30d, extra.totalAds dan extra.estimatedSpendUsd meliputi setiap halaman kedai, manakala advertising.activeAds mengira halaman miliknya sendiri.
  • catalog.productsCount sesebuah kedai yang bernilai 0 tanpa sebarang produk disenaraikan, di samping lawatan, anggaran jualan atau unit terjual, ialah null dengan not_measured, dalam rekod, kedai dalam senarai dan meta.productsCount bagi GET /v1/shops/{shopId}/products; sortBy=productsCount tidak memuatkan kedai tersebut, dan dengan order=asc menghantar minProductsCount 1 kecuali minimum produk diberikan.
  • Carian iklan Meta bagi sesebuah kedai yang disempitkan kepada halaman yang bukan miliknya (trackedPages) dan berakhir awal menyatakan sebabnya dalam meta.warnings, tanpa meminta supaya ia disempitkan lagi.
  • GET /v1/filters/shops menyatakan dalam meta.warnings apabila sumber data tidak menyenaraikan sebarang nilai, dan menamakan senarai yang memberikannya.

Turut diubah pada 21 Oktober 2026 (penomboran, e-mel dan senarai iklan):

  • Penomboran carian pengiklan tidak lagi gagal apabila sumber data tidak mahu menyambungnya (sebelum ini ia membalas 503, dan cuba semula tidak membantu): 100 hasil pertamanya dibaca dalam satu panggilan, dan halaman yang sampai ke penghujung apa yang boleh dibaca membalas hasMore false, dengan meta.partial true dan amaran yang menyatakan setakat mana carian itu dibaca.
  • Halaman yang bermula melepasi total tepat sesuatu carian adalah kosong, dengan hasMore false.
  • Carian TikTok yang diisih mengikut views atau likes dengan order=asc bermula pada TikTok pertama (31 Ogos 2016, 22:00 UTC), seperti longestRunning, dan metrics.views (dan engagementRate) pada item TikTok ialah null dengan not_measured apabila tontonannya kurang daripada suka.
  • content.bodyPreview dan bodyLength pada e-mel, serta content.body pada rekod, ialah null dengan not_measured apabila sumber data menghantar teks ganti bagi isi e-mel yang belum dibacanya.
  • Tarikh dan masa yang diberikan sumber data dalam UTC ditulis dengan satu cara dalam senarai dan rekod, dengan +00:00 dan tanpa sifar di hujung pada pecahan saat (2026-09-30T00:20:11.507+00:00; masa papan, kegemaran, penjejak jenama dan pautan kongsi anda sendiri dicipta atau diubah berakhir dengan Z, seperti sebelum ini), dan baris e-mel membawa id kategori, jenis promosi dan acara, seperti rekod e-mel.
  • Setiap senarai berhalaman membalas pagination.hasMore, dan GET /v1/google-ads/facets/countries membalas objek pagination.
  • Badan permintaan yang bukan JSON sah dibalas dengan 400 validation_failed bersama mesej "The request body is not valid JSON." dan details.position, aksara tempat ia terputus.
  • Dalam senarai iklan Meta, capaian pada sesuatu baris ialah bacaan indeks iklan, yang boleh ketinggalan sehari daripada rekod iklan, dan pertambahan capaiannya null di samping capaian yang diketahui apabila sumber data tidak menyenaraikan sebarang pertambahan (not_measured), kecuali bagi tempoh iklan itu bermula, yang dalamnya ia memperoleh seluruh capaian yang dibaca barisnya; dalam GET /v1/ads/{adId}, pertambahan yang null di samping capaian yang diketahui juga mempunyai not_measured.

Diubah pada 22 Oktober 2026 (pelan Free):

  • API dan pelayan MCP dipindahkan ke pelan berbayar: kunci akaun pada pelan Free membalas 403 plan_not_eligible pada setiap endpoint kecuali GET /v1/account, bersama details.upgradeUrl, dan tiada apa yang dikira. Tiada kunci boleh dibuat pada pelan Free.
  • Pelan Free telah berubah sejak itu: Pelan Free menyatakan apa yang disertakannya kini.
  • Kunci yang dibuat pada pelan berbayar dikekalkan, dan ia berfungsi semula sebaik sahaja akaun kembali ke pelan berbayar. Pautan kongsi yang dibuat oleh akaun pada pelan Free dijeda dengan cara yang sama.

Turut diubah pada 22 Oktober 2026 (laporan dan rekod kedai):

  • Dalam GET /v1/shops/{shopId}/ad-ranking/series, rankDelta ialah kedudukan akhir tolak kedudukan awal (negatif apabila iklan naik, seperti pada setiap iklan; sebelum ini ia bilangan tempat yang diperoleh) dan improvementPercent kini improvementPct, iaitu pecahan; setiap baris /ad-ranking membawa dua angka yang sama bagi tempoh kedudukan itu dalam rank.
  • Dalam /activity/calendar jenama yang dijejak, satu hari kalendar dan /activity/calendar/days, meta.partial ialah true atau false, meta.partialSources menamakan sumber yang dibaca sebahagian sahaja (pada /calendar dan satu hari), dan masa pratonton ialah UTC, termasuk siaran TikTok.
  • Dalam GET /v1/shops/{shopId}/landing-pages/detail, activeAds menggunakan iklan halaman itu sebagai ganti, shareOfAds ialah linkedAdsTotal daripada shopActiveAds, snapshots mengira hari halaman itu ditangkap, lifetimeAds dan impressions telah dibuang (impresi itu ialah capaian yang sama), capaian 0 ialah null dengan nullReasons.reach no_eu_reach, dan linkedAds mempunyai medan baris carian iklan.
  • /feed kedai menyenaraikan iklan Meta miliknya sendiri, seperti carian iklannya.
  • GET /v1/market/q4-overview menerima sebarang from dan to dalam musim itu.
  • Dalam /q4-season, winners menyenaraikan kunci setiap jualan bersama kreatifnya, dan url halaman pendaratan membawa skemanya.
  • Pengesan Shopify membaca kedai pada domainnya tanpa www..
  • GET /v1/advertisers/{advertiserId} serta halaman pendaratan, audiens dan campuran media jenama yang dijejak menggemakan hari lampau dalam meta.snapshotDate.
  • Apabila statistik iklan Meta sesebuah kedai tidak dapat dibaca pada ketika itu, GET /v1/shops/{shopId} membalas meta.partial true dengan amaran: capaiannya, anggaran perbelanjaan yang dibuat daripadanya serta campuran media dan formatnya ialah null dengan nullReasons failed, iklannya mengikut negara dikira seperti yang diberikan barisnya dalam carian, dan jawapan itu tidak disimpan, jadi panggilan seterusnya membacanya semula (taklimat pesaing membawa meta.partial dan amaran yang sama).
  • Halaman pendaratan pada domain milik kedai itu, atau subdomainnya, ialah toShop true dalam /v1/shops/{shopId}/advertisers dan /advertisers/{advertiserId}/landing-pages; apabila domain kedai tidak menyertakan domain itu, meta.domains menyenaraikannya dahulu daripada halaman pendaratan pada halamannya (fromLandingPages true, had bawah), dan shopAds sesuatu halaman tidak pernah kurang daripada iklan aktif halaman pendaratannya pada kedai itu (shopAdsAtLeast true apabila dinaikkan).
  • Dalam GET /v1/tiktok/library/{itemId}, profile.latestPosts[].mediaUrl ialah video siaran itu, atau null dengan nullReasons not_reported (sebelum ini imej muka depan).
  • Carian pengiklan membaca 100 hasil pertamanya dan menyatakan ia berakhir pada halaman yang sampai ke hasil ke-100 (hasMore false dan amaran itu), bukan pada halaman kosong selepasnya.
  • Carian TikTok yang diisih mengikut views atau likes dengan order=asc kini tidak memuatkan siaran yang tontonannya tidak dikira (tontonan kurang daripada suka), dan pagination.total carian itu ialah anggaran (totalEstimated) sehingga senarai dibaca hingga ke hujung; setiap susunan lain menyenaraikannya, dengan tontonan null.

Turut diubah pada 22 Oktober 2026 (item tersimpan dan hook iklan):

  • Baharu: GET /v1/boards/search mencari apa yang anda simpan, merentas setiap papan dan kegemaran anda, mengikut perkataan yang ditunjukkan setiap salinan tersimpan (setiap perkataan mesti muncul, dalam sebarang susunan; huruf besar dan kecil serta aksen diabaikan), id-nya atau nama papannya, dan menerima sourceType, boardId, savedFrom dan savedTo; ia hanya membaca item tersimpan anda, tidak pernah sumber data (MCP find_saved_items).
  • Baharu: POST /v1/tools/ad-hooks menulis tiga ayat pembuka pendek untuk iklan produk anda, dan GET /v1/tools/ad-hooks memberikan kuota anda: tiada had bulanan pada pelan berbayar, dan had seminit (429 dengan Retry-After); membaca kuota tidak dikira (MCP write_ad_hooks).
  • Pelayan MCP mempunyai 64 alat.

Turut diubah pada 23 Oktober 2026 (paparan tersimpan dan penapis kedai):

  • Baharu: GET /v1/views menyenaraikan carian yang anda simpan pada halaman senarai di laman web, masing-masing dengan carian yang dihasilkannya (request: carian, searchType, sortBy, order dan penapis bernama, seperti yang diterima endpoint carian); POST /v1/views menyimpan satu, PATCH /v1/views/{viewId} menamakan semula, memindahkan atau mengubahnya dan DELETE /v1/views/{viewId} mengalih keluarnya. Ia hanya membaca dan menulis paparan anda sendiri, tidak pernah sumber data (MCP list_saved_views).
  • Carian kedai menerima excludeCurrencies (kod mata wang seperti EUR), socialNetworks (instagram atau tiktok: kedai dengan mana-mana daripadanya) dan shopifyPlan (headless). trafficGrowth juga membaca 90 hari (min90, max90) dan adsGrowth 7 hari (min7, max7), atau period sesuatu peraturan (last90d, last7d); min dan max kekal 30 hari terakhir.
  • Pelayan MCP mempunyai 65 alat.

Turut diubah pada 23 Oktober 2026 (pautan produk):

  • Dalam GET /v1/shops/{shopId}, setiap item catalog.bestSellers membawa handle dan productUrl, iaitu halaman produk pada laman web milik kedai: alamat yang diberikan sumber data apabila ia berada pada domain kedai (atau subdomainnya) atau domain myshopify-nya, jika tidak https://<domain>/products/<handle> apabila handle-nya diketahui, jika tidak null.
  • Dalam GET /v1/shops/{shopId}/products, productUrl mengikut peraturan yang sama, jadi alamat pada laman web lain tidak lagi diberikan, dan handle ialah null apabila ia bukan satu bahagian tunggal sesuatu alamat.

Turut diubah pada 23 Oktober 2026 (baris kedai, kedai serupa dan produk):

  • createdAt sesebuah kedai (rekod kedai, baris kedai dan kedai serupa) hanyalah tarikh penciptaan kedai Shopify. Bagi laman web bukan Shopify, sumber data memberikan hari ia mula menjejak laman web itu, bukan tarikh penciptaannya: createdAt kini null (nullReasons tracking_date) dan hari itu ialah trackedSince yang baharu. Tarikh pada atau sebelum 1 Januari 2000 ialah nilai ganti sumber data dan ialah null (not_reported).
  • catalog.bestSellers pada baris kedai membawa handle, productUrl (mengikut peraturan rekod kedai) dan rank (1 ialah produk terlaris), dan baris membawa profile.isHeadless dan catalog.myShopifyDomain, seperti rekod kedai.
  • googleAds.reach.value pada baris kedai ialah null: baris kedai tidak membawa capaian Google, yang terdapat pada rekod kedai (extra.googleAds.reach).
  • Kedai serupa (GET /v1/shops/{shopId}/similar, similarShops pada rekod) mengekalkan extra mereka (logo, Trustpilot, sejarah jualan). Senarai kedai serupa yang dihentikan sumber data sebelum penghujungnya membalas meta.partial dan amaran pada halaman yang sampai ke titik itu.
  • Dalam GET /v1/shops/{shopId}/products, createdAt dan publishedAt ialah jam kedai itu sendiri yang dihantar sebagai UTC (awal 8 jam bagi kedai pada waktu Pasifik AS). Kini ia UTC, dengan updatedAt yang baharu, berdasarkan ofset kedai daripada UTC (meta.shopUtcOffset, seperti -08:00). Apabila tiada ofset dapat dibaca, ketiga-tiganya null (local_time) dan createdAtLocal, publishedAtLocal dan updatedAtLocal memberikan jam kedai, tanpa zon.
  • Produk yang disenaraikan hanya dalam produk terlaris pada butiran kedai mempunyai publishedAt dan updatedAt null (not_reported): nilai sumber data ialah salinan masa penciptaannya.
  • Setiap produk menyatakan senarai yang memuatkannya (lists: bestSellers, newest) dan tempatnya antara yang terlaris (listPosition, 1 hingga 100).

Turut diubah pada 23 Oktober 2026 (rekod kedai):

  • Dalam GET /v1/shops/{shopId}, extra.googleAds.reach.value sentiasa null: kini ia ialah capaian EU Google kedai itu, dengan lowerBound dan upperBound, dan extra.googleAds menambah reachHistory, history (iklan Google kedai itu yang ditandakan aktif mengikut minggu), updatedAt dan latestAds.
  • growth30d sesuatu rangkaian sosial kini ialah perubahan 30 hari pada gambaran keseluruhan pengikut (sebelum ini tempoh lain bagi sesetengah halaman Facebook: 0.3636 sedangkan perubahannya 0.2898). GET /v1/shops/{shopId}/socials memberikannya sebagai growth30d juga.
  • Profil X kedai ialah socials.x. socials.twitter dinamakan semula kepada socials.x dan kekal, objek yang sama, selama satu keluaran. Setiap rangkaian mempunyai url, dan socials.others menyenaraikan pautan lain kedai itu.
  • tiktok.profileMetrics.percentAds ialah peratusan (0 hingga 100); adsShare yang baharu ialah nilai yang sama sebagai pecahan. tiktok menambah avatarUrl, history, postsChange30d, postsChange30dPct dan latestAds, dan tiktok.activity.avgActiveAds7d serta avgActiveAds30d, yang sebelum ini null, memberikan purata iklan TikTok kedai itu mengikut hari.
  • Baharu pada pelan berbayar: advertising.summary.firstAdSeenAt, longestRunningDays, medianRunningDays, landingPagesCount dan perubahan 30 hari bagi iklan aktif, iklan yang dilancarkan dan capaian EU (activeAdsChange30d, launchedChange30d, reachChange30d, masing-masing juga sebagai pecahan, …Pct), dan advertising.runningDaysMix, reachCountries, reachHistory, topLandingPages, adsByAgeRange dan adsByGender. Pada setiap pelan: advertising.allPagesHistory dan advertising.topCountries[].ads.
  • Baharu: catalog.bestSellers[].rank, sales.hasSubscription, technology.apps[].appStoreUrl dan categories, profile.isHeadless, extra.updatedAt, serta createdAt dan trackedSince bagi tarikh kedai di atas.
  • GET /v1/shops/{shopId}/advertisers menambah logoUrl dan moreLandingPages bagi setiap halaman, profileUrl jika gambaran keseluruhan iklan tiada, serta landingPagesCount dan moreLandingPages bagi setiap domain.

Turut diubah pada 23 Oktober 2026 (produk):

  • Baharu: GET /v1/products dan POST /v1/products/query mencari dan melayari produk kedai, masing-masing dengan harga, anggaran jualan, unit terjual, ulasan, kedudukan produk terlaris, iklan Meta, capaian dan perbelanjaan EU, negara jualan, tarikh pelancaran dan kedai, diisih mengikut relevance, newest (tarikh pelancaran), activeAds atau spend (perbelanjaan iklan EU dalam 30 hari lepas) (MCP search_products). searchType memadankan teks dengan nama produk atau domain kedainya, dan penapis bernama menghadkan harga dalam USD, iklan aktif, bahagian iklan, bilangan ulasan dan hari pelancaran, serta menerima mata wang dan langganan; GET /v1/filters/products menyenaraikan mata wang yang diterimanya.
  • shop (domain atau id satu kedai) hanya menyenaraikan produk kedai itu, tanpa teks carian di sebelahnya, pada carian produk dan dalam search_products. Papan menyimpan produk (sourceType product) seperti yang ditunjukkan carian kali terakhir, dan carian semua yang disimpan menemuinya melalui tajuk dan kedainya.
  • Pelayan MCP mempunyai 73 alat.

Turut diubah pada 23 Oktober 2026 (penapis produk):

  • Carian produk menerima lebih banyak penapis bernama: anggaran jualan sebulan atau sehari (minEstMonthlySales, minEstDailySales dan nilai maksimumnya; had sehari ialah 30 hari daripada nilai itu), unit terjual sebulan atau sehari (minUnitsSoldMonthly, minUnitsSoldDaily), sellingCountries (produk yang dijual ke mana-mana daripadanya), shopCountries, skor ulasan (minRating, maxRating), minAdsLaunched (iklan Meta yang dilancarkan dalam 30 hari lepas), minSpendShare, minEuReach (capaian EU dalam 30 hari), hasPartnershipAds, promoTypes (percent-off) dan minShopProductsCount, masing-masing dengan nilai maksimumnya jika ada; GET /v1/filters/products turut menyenaraikan negara kedai.
  • sortBy menerima estSales (anggaran jualan), adPressure (bahagian iklan) dan bestSelling (kedudukan produk terlaris dalam kedainya, kedudukan 1 dahulu), dan searchType menerima productDescription dan url.
  • Setiap produk mempunyai iklan terkininya (advertising.latestAds, dengan gambarnya dalam advertising.previewUrls) dan minggunya (weeks: iklan aktif, bahagian iklan, perbelanjaan dan capaian EU sehari), dan bestSeller.rankPercent ialah kedudukannya sebagai peratusan produk kedai (lebih rendah lebih baik).

Diubah pada 24 Oktober 2026 (parameter, bacaan yang gagal dan halaman yang jauh):

  • Parameter pertanyaan yang tidak dibaca oleh sesuatu endpoint ditolak dengan 400 validation_failed, yang mesejnya menamakannya dan menyenaraikan parameter yang diterima endpoint itu, sedangkan sebelum ini ia diabaikan tanpa sebarang makluman (nama yang tersalah eja, atau penapis yang dihantar ke endpoint yang tiada penapis itu, dijawab seolah-olah tidak pernah dihantar). Carian menolak penapis bernama yang tidak dikenali seperti sebelum ini. Parameter biasa (country, mediaType, active, type) yang menetapkan penapis yang turut ditetapkan oleh penapis bernama, kepada nilai lain, juga ditolak.
  • Penjejak jenama: /ads dan /timeline/metadata menolak snapshotDate yang lalu (kedua-duanya membaca pustaka iklan seperti sekarang), /partnership-ads menolak sortBy yang tidak dikenali, /v1/workspace/scaling-ads menolak period yang tidak dikenali, dan senarai penjejak menolak hasNewAdsSince lebih daripada 30 hari ke belakang (pembilang iklan baharu meliputi 30 hari). /v1/workspace/hooks, /ad-copies dan /landing-pages membaca baris setiap jenama dalam sortBy dan order yang diminta sebelum menggabungkannya. Laporan merentas jenama di laman web menghantar euOnly hanya kepada laporan yang membacanya.
  • Kedai serupa menolak displayInTrending dalam filters (senarai itu tiada bendera indeks kedai) dan membaca had pertumbuhannya sebagai peratusan, seperti carian kedai; offset melebihi apa yang boleh dibaca satu permintaan (600 kedai selepas yang sudah dibaca) ditolak dengan 400 yang menyatakan sejauh mana ia boleh pergi, dan halaman tempat bacaan terhenti mempunyai meta.partial dengan amaran. Pustaka TikTok sesebuah kedai menolak penapis profil dan laman web (skop kedai itu sendiri menggantikannya).
  • Bahagian jawapan yang tidak dapat dibaca sumber data kali ini menetapkan meta.partial dengan amaran (dan jawapan itu tidak disimpan dalam cache), bukan ruang kosong yang tidak dimaklumkan atau senarai kosong; jawapan sumber data yang bukan JSON ialah 503 upstream_error, dan kedai tersimpan, penjejak baharu atau senarai pilihan e-mel yang bacaannya gagal membalas ralat itu, bukan not_found. Halaman yang lebih dalam daripada satu bacaan senarai yang tidak memuatkan sesetengah baris mempunyai meta.partial dan hasMore true, dan teks iklan, rakan kongsi dan ujian kreatif sesuatu jenama menyatakannya dengan meta.partial apabila satu bacaan tidak meliputi jenama itu.
  • GET /v1/google-ads/facets/networks menerima search, limit dan offset, seperti senarai pilihan yang lain. metric bagi /v1/shops/compare adalah wajib (rujukan menyatakan ia tidak wajib).
  • MCP: alat menolak argumen yang tidak dibaca oleh jenis yang dipilihnya (shop_report, lookup_filter_ids, market_overview, scan_advertiser) dan argumen yang bercanggah (trend_signal dengan sort_by, active_only dengan status, argumen bernama dengan filters); creative_inspiration_pack menyusun iklan semua kata kunci bersama-sama.

Turut diubah pada 24 Oktober 2026 (cari mengikut imej):

  • Baharu: POST /v1/products/image-search mencari produk kedai yang menyerupai sesuatu gambar, masing-masing dengan kedainya, yang paling hampir dahulu. Hantar gambar sebagai multipart/form-data: fail PNG, JPG atau WEBP yang tidak melebihi 10 MB (image), atau URL imej terus (imageUrl), yang kami muat turun sendiri. Setiap baris ialah baris produk seperti yang dibalas carian produk, dengan similarity (0.7 hingga 1) dan matchOnly (padanan yang tiada rekodnya dalam indeks produk: hanya tajuk, gambar, harga, tarikh pelancaran dan kedainya).
  • Carian ini menerima penapis bernama carian produk, sortBy (relevance, estSales, activeAds, adPressure, newest, spend, spend14d) dan maxPerShop (1, 3, 5, 10 atau 20 padanan terdekat bagi setiap kedai), dalam halaman sehingga 32. GET /v1/products/image-search/{searchId} membaca halaman lain, isihan, penapis dan hasil setiap kedai tanpa menghantar gambar sekali lagi, dan GET /v1/products/image-search/history menyenaraikan carian imej terbaharu anda sendiri.
  • Gambar ditulis semula sebelum dicari, sebagai JPEG tanpa metadatanya (EXIF, lokasi, komen), dan URL imej tidak pernah keluar daripada pelayan kami. Ralat baharu: 400 invalid_image, 400 unsupported_url dan 422 unreadable_image.
  • Pada pelan Free, carian imej disusun mengikut perkaitan, tanpa penapis. Pelayan MCP mempunyai 67 alat: search_products_by_image ialah yang baharu.

Diubah pada 25 Oktober 2026 (kredit):

  • API dan pelayan MCP diukur dalam kredit dan bukan permintaan: 1 kredit = 1 hasil yang dikembalikan: butiran satu jenama, satu iklan, atau satu baris senarai. Hasil kosong adalah percuma. Satu panggilan berharga seberapa banyak hasil yang dipulangkannya, dan peruntukan bulanan pelan ialah dalam kredit.
  • Jawapan yang diukur menghantar X-Usage-Cost, X-Credits-Used, X-Credits-Remaining dan X-Credits-Source; GET /v1/usage melaporkan kredit tambah nilai di bawah credits.topup.balance.
  • 402 insufficient_credits muncul apabila kredit bulan itu dan kredit tambah nilai kedua-duanya telah habis digunakan, dengan details.upgradeUrl dan details.topUpUrl.
  • Had kadar dikongsi oleh seluruh ruang kerja.

Pautan kongsi (shareUrl) membuka halaman web pada https://sellwinners.com yang boleh dilihat oleh sesiapa sahaja. Rekod yang sama tersedia sebagai JSON daripada /v1/shared/ads/{token} dan /v1/shared/boards/{token}. Pautan yang pemiliknya berada pada pelan Free membalas 403 forbidden sehingga pemilik kembali ke pelan berbayar.

Endpoint identiti /v1/me, /v1/usage dan /v1/workspace mengembalikan objeknya pada peringkat teratas, di sebelah requestId. Endpoint sistem /v1, /v1/health dan /v1/system/freshness tidak membawa requestId, dan /v1 serta /v1/health membalas objek biasa tanpa data. ID permintaan juga dihantar dalam pengepala X-Request-Id. Nyatakannya apabila anda menghubungi sokongan.

Papan, kegemaran dan penjejak jenama juga mempunyai endpoint POST, PATCH dan DELETE. Ia menerima badan JSON, yang dihantar dengan Content-Type: application/json.

Penomboran halaman

Endpoint senarai menerima limit (sehingga 100 pada carian; senarai facet menerima sehingga 500 dan /snapshots sesuatu jenama sehingga 365) dan sama ada page (1, 2, 3…) atau offset. Apabila kedua-duanya dihantar, offset yang digunakan. Saiz halaman lalai disenaraikan bersama setiap endpoint. Senarai iklan, iklan Google, TikTok, e-mel dan media membalas dengan:

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

Senarai kedai, produk dan pengiklan, serta iklan satu pengiklan, membalas dengan:

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

Untuk mendapatkan halaman seterusnya, ulang permintaan yang sama dengan page tambah satu, atau dengan offset tambah limit. Dalam badan POST …/query, hantar "page" atau "offset" sebagai medan. hasMore ialah false pada halaman terakhir. Apabila sumber data tidak mahu menyambung carian melepasi sesuatu titik, halaman yang sampai ke titik itu membalas hasMore false dengan meta.partial true dan amaran yang menyatakan berapa banyak hasil boleh dibaca. Penomboran sampai ke 5,000 hasil pertama sesuatu carian (carian pengiklan, 100 yang pertama). Sempitkan carian dengan penapis atau tukar isihan untuk melihat hasil lain.

Senarai iklan Google mengembalikan total yang tepat, kecuali senarai yang disempitkan oleh peraturan status atau hari berjalan (lihat carian iklan Google). "totalEstimated": true menandakan total (dan totalPages miliknya) yang merupakan anggaran sehingga senarai dibaca hingga ke hujung, seperti pada kedai serupa sesebuah kedai dan carian iklan Meta bagi sesebuah kedai (websiteIds).

Papan, kegemaran dan laporan penjejak jenama menerima page dan limit serta membalas dengan page, limit, total, totalPages dan hasMore. Senarai facet, /products sesebuah kedai dan kedai serupa /similar bagi kedai itu menerima limit dan offset serta membalas dengan limit, offset, total dan hasMore.

Isihan & penapis

Endpoint carian menerima sortBy dan order (desc secara lalai). Apabila anda menghantar istilah carian, hasil diisih mengikut relevance melainkan anda memilih isihan lain; tanpa istilah carian, lalainya ialah newest (kedai dan produk: relevance, media: reach). Carian iklan Google dan TikTok sentiasa disusun mengikut perkaitan; di situ, sortBy terpakai apabila anda melayari tanpa istilah carian.

Setiap jenis data mempunyai endpoint POST …/query yang menerima badan JSON dengan query, filters, sortBy, order, limit dan page (atau offset) untuk penapisan lanjutan. Gunakan endpoint facet untuk melihat nilai dan id yang diterima penapis.

Penapis boleh dihantar mengikut nama: sebagai parameter pertanyaan tambahan pada carian GET (?status=active&minDaysRunning=30&mainCountries=US,GB) atau sebagai medan peringkat teratas badan POST …/query ({"status": "active", "minDaysRunning": 30}). Setiap endpoint di bawah menyenaraikan nama yang diterimanya. Pada endpoint carian, nama penapis yang tidak disokong oleh endpoint itu mengembalikan 400 validation_failed yang menyenaraikan nama yang disokong, jadi salah taip tidak akan mengembalikan hasil tanpa penapis secara senyap; laporan penjejak jenama mengabaikan nama yang tidak dikenali. Senarai menerima nilai yang dipisahkan koma atau tatasusunan JSON, tarikh menggunakan 2026-01-31, dan objek filters mentah masih berfungsi bersama penapis bernama.

Penapis pertumbuhan (trafficGrowth, adsGrowth, pageReachGrowth, adReachGrowth) menerima peraturan yang ditulis sebagai {"comparison": "greater" | "lower", "value": 50} atau {"operator": "gte" | "lte", "value": 50}. Nilai ialah peratusan dalam 30 hari terakhir; tempoh lain tidak tersedia. minRankDelta ialah bilangan kedudukan minimum yang dinaiki sesuatu iklan sepanjang rankDeltaWindow (7d melainkan anda menghantar 14d atau 30d). hideSavedAds tidak memuatkan iklan yang telah anda simpan. Id kategori bagi setiap penapis categoryIds datang daripada /v1/facets/categories.

Had kadar & kredit

PelanKredit / bulanHad kadar
Starter5,00060 / minit
Pro15,000120 / minit
Business20,000300 / minit

1 kredit = 1 hasil yang dikembalikan: butiran satu jenama, satu iklan, atau satu baris senarai. Hasil kosong adalah percuma. Setiap pelan menyertakan kredit untuk sebulan, diperbaharui pada 00:00 UTC pada hari pertama bulan. Satu panggilan berharga seberapa banyak hasil yang dipulangkannya, jadi limit yang lebih kecil lebih murah, dan panggilan alat MCP juga berharga seberapa banyak hasil yang dipulangkannya, seperti API. Kredit dan had kadar adalah bagi setiap ruang kerja: semua orang di dalamnya, semua kuncinya, API dan pelayan MCP berkongsi satu kumpulan kredit dan satu had kadar. Pada pelan berbayar, pemilik ruang kerja boleh membeli kredit tambah nilai pada halaman pengebilan (€1 membeli 120, bermula daripada €10): ia digunakan selepas kredit bulan itu, dibawa ke hadapan dan tidak pernah tamat tempoh.

PanggilanKredit
Carian atau senarai1 bagi setiap hasil yang dipulangkan
Satu rekod (kedai, iklan, e-mel)1
Hasil kosong0
Satu perubahan (simpan, pindah, kongsi, padam)1 (item yang sudah ada pada papan: 0)
Carian mengikut imej4 bagi setiap hasil yang dipulangkan
Sejarah jualan sesebuah kedai4
Carian id, nilai penapis (facet), GET /v1/account dan GET /v1/usage0
Ralat atau penolakan0

Setiap jawapan yang diukur menyertakan:

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

Apabila melebihi had kadar seminit, anda mendapat 429 rate_limited dengan pengepala Retry-After (dalam saat). Apabila kredit bulan itu dan kredit tambah nilai kedua-duanya telah habis digunakan, anda mendapat 402 insufficient_credits, dengan details.upgradeUrl dan details.topUpUrl, sehingga kredit bulanan diperbaharui. Semak kredit anda pada bila-bila masa dengan GET /v1/account atau GET /v1/usage. Panggilan ini tidak mengenakan sebarang kos, tetap menghantar X-Usage-Cost: 0, X-Credits-Used: 0 dan X-Credits-Remaining, dan berfungsi walaupun kredit telah habis.

Had ini terpakai untuk API dan pelayan MCP, pada pelan berbayar dan pada pelan Free. Apl web di laman web tidak diukur: ia tanpa had pada pelan berbayar, dalam lingkungan penggunaan saksama.

Pelan Free

Pelan Free menyertakan apl web dan pelayan MCP (150 kredit sebulan), tanpa API. Akaun Free boleh membuat kunci untuk pelayan MCP (ejen AI) dalam papan pemukanya, dalam lingkungan 150 kredit sebulan dan 10 permintaan seminit; REST API terdapat pada pelan berbayar: dengan kunci Free, ia membalas 403 plan_not_eligible, dengan details.feature, details.requiredPlan dan details.upgradeUrl, pada setiap endpoint kecuali GET /v1/account, dan tiada apa yang dikira. Kunci yang dibuat pada pelan berbayar dijeda pada pelan Free, dan ia berfungsi semula sebaik sahaja akaun kembali ke pelan berbayar. Pada pelan Free, carian membalas hasil pertamanya dan alat atau endpoint yang datanya tidak termasuk dalam Free membalas dengan mesej pelan berbayar. Perbandingan pelan menunjukkan apa yang termasuk dalam Free. Jenama demo terbuka sepenuhnya di laman web.

Ralat

Ralat menggunakan kod status HTTP standard dan badan JSON:

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

code stabil dan selamat untuk dijadikan asas logik anda, message ditulis untuk manusia, dan details membawa data tambahan apabila ada (medan yang ditolak bagi 400; kredit bulanan, tarikh pembaharuannya, upgradeUrl dan topUpUrl bagi 402).

StatuscodeMaksud
400validation_failedParameter, penapis atau medan badan tidak sah. message menerangkan yang mana satu.
400invalid_image / unsupported_urlGambar carian imej bukan fail PNG, JPG atau WEBP yang tidak melebihi 10 MB, atau URL-nya bukan alamat http atau https yang awam.
401missing_api_key / invalid_api_keyTiada kunci dihantar, atau kunci itu salah atau telah dibatalkan.
402insufficient_creditsKredit bulan itu dan kredit tambah nilai telah habis. Kredit bulanan diperbaharui pada hari pertama setiap bulan; anda boleh membeli kredit tambah nilai atau menaik taraf pelan anda (details.topUpUrl, details.upgradeUrl).
403plan_not_eligiblePelan anda tidak termasuk ini. Pada pelan Free, itu ialah setiap permintaan kecuali GET /v1/account. details menamakan feature, requiredPlan dan upgradeUrl.
403workspace_public_api_suspendedAkaun telah dinyahaktifkan. Hubungi sokongan.
403forbiddenKunci ini tidak boleh melakukan ini.
404not_foundSumber atau id tidak wujud.
409conflictPerubahan itu bercanggah dengan apa yang sudah disimpan, seperti item yang sudah ada pada papan sasaran.
422unreadable_imageGambar carian imej tidak dapat dibaca, atau URL-nya tidak dapat dimuat turun. Cuba fail atau URL lain.
429rate_limitedTerlalu banyak permintaan seminit ini. Tunggu selama Retry-After saat.
500internal_errorBerlaku masalah di pihak kami. Selamat untuk dicuba semula.
503upstream_error / service_unavailable / service_busyMasalah sementara di pihak kami. Selamat untuk dicuba semula dengan jeda yang semakin panjang (Retry-After).
503upstream_timeoutCarian mengambil masa terlalu lama. Sempitkannya dengan penapis yang lebih sedikit atau lebih ketat, atau cuba semula. (502 dan 504 sebelum 27 Oktober 2026.)

URL media

Imej dan video dalam respons disajikan daripada CDN kami di https://api.sellwinners.com/v1/media/file/…. URL ini tidak memerlukan kunci API dan tidak menggunakan kredit, jadi anda boleh menyematkannya terus dalam teg <img> dan <video>. Fail yang sudah tiada pada sumber data dihantar sebagai null selama sehari, dan fail yang tiada membalas 404 kosong dengan jenis medianya. Imej produk dan ikon apl yang dihoskan pada CDN Shopify turut disajikan daripada CDN kami. Untuk memaparkan imej dalam saiz kecil, tambah ?w=96 (imej kecil) atau ?w=480 (kad): imej JPEG, PNG, WebP atau GIF kemudian dihantar sebagai WebP pada lebar itu paling besar, tidak pernah dibesarkan; animasi, imej yang lebih kecil atau video dihantar seperti sedia ada. Untuk senarai kreatif yang rata dan sedia dipaparkan, gunakan /v1/media.

Untuk memaparkan imej pada saiznya sendiri tetapi lebih ringan, tambah ?w=full: imej JPEG, PNG, WebP atau GIF kemudian dihantar sebagai WebP pada lebar dan tinggi asalnya, dengan kualiti yang kelihatan sama, apabila itu menjimatkan sekurang-kurangnya satu persepuluh daripada fail; jika tidak, dan bagi animasi atau video, fail asal dihantar seperti sedia ada. Tanpa w, fail asal dihantar.

Penemuan

Tukar nama, domain atau id halaman kepada id yang diterima oleh endpoint lain.

GET/v1/lookup

Cari jenama, pengiklan atau kedai. 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).
ParameterPenerangan
qwajib Brand name, domain (allbirds.com) or Facebook page id.
type What to look for (default auto: all of them). Salah satu daripada: 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

Halaman Facebook sesebuah kedai, atau kedai bagi sesebuah halaman. 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.
ParameterPenerangan
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"

Kedai

Cari kedai Shopify dan dapatkan produk, trafik, jualan, akaun sosial dan iklan.

GET/v1/shops

Cari atau semak imbas kedai (sedang menaik jika kosong). 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).
Penapis bernama 52parameter pertanyaan tambahan
adsGrowthadsTimePeriodcategoryIdscountriescreatedAftercreatedBeforecreationCountriescurrenciesdisplayInTrendingexcludeCreationCountriesexcludeCurrenciesexcludeLanguagesexcludeMarketCountriesexcludePixelIdsexcludeShopifyAppIdshasProductshasTikTokisShopifyPluslanguagesmainMarketCountriesmarketCountriesmaxActiveAdsmaxActiveAdsGrowthmaxAdvertisersCountmaxBestSellerPricemaxEstimatedRevenuemaxMonthlySalesmaxMonthlyVisitsmaxProductsCountmaxTrafficGrowthmaxTrustpilotRatingmaxTrustpilotReviewCountmaxUnitsSoldminActiveAdsminActiveAdsGrowthminAdvertisersCountminBestSellerPriceminEstimatedRevenueminMonthlySalesminMonthlyVisitsminProductsCountminTrafficGrowthminTrustpilotRatingminTrustpilotReviewCountminUnitsSoldpixelIdsshopifyAppIdsshopifyPlansocialNetworksthemeIdstrafficGrowthvisitorCountries
ParameterPenerangan
search Shop name, domain or keyword.
searchType What the search text is matched against (default name). all is the same as name. Salah satu daripada: 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. Salah satu daripada: relevance, newest, monthlyVisits, activeAds, productsCount, growth30d, advertiserCount, spend, estSales, unitsSold, createdAt, estMonthlySales.
order Sort direction (default desc). Salah satu daripada: 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

Cari kedai dengan penapis lanjutan. 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).
Penapis bernama 52medan badan peringkat teratas
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}

Satu kedai mengikut id atau domain. 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.
ParameterPenerangan
shopIdwajib 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

Produk kedai. 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).
ParameterPenerangan
shopIdwajib 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). Salah satu daripada: popularity, price, createdAt.
order Sort direction: asc by default for popularity (best sellers first), desc for price and createdAt. Salah satu daripada: 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

Kedai serupa dengan id atau domain kedai. 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.
ParameterPenerangan
shopIdwajib Shop id or domain, such as allbirds.com.
sortBy Defaults to relevance. Salah satu daripada: relevance, monthlyVisits, activeAds, growth30d, productsCount, createdAt.
order Sort direction (default desc). Salah satu daripada: 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

Halaman pengiklan yang dipaut pada kedai. 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.
ParameterPenerangan
shopIdwajib 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

Sejarah pengikut sosial.
ParameterPenerangan
shopIdwajib Shop id or domain, such as allbirds.com.
period One point per day, week or month. Salah satu daripada: 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

Sejarah anggaran jualan. 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.
ParameterPenerangan
shopIdwajib Shop id or domain, such as allbirds.com.
period One point per day, week or month. Salah satu daripada: 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

Akaun sosial dan pengikut sesebuah kedai.
ParameterPenerangan
shop_idwajib 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

Gambaran keseluruhan TikTok kedai.
ParameterPenerangan
shop_idwajib 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

Apl Shopify yang digunakan sesebuah kedai.
ParameterPenerangan
shop_idwajib 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

Piksel penjejakan pada kedai.
ParameterPenerangan
shop_idwajib 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

Kedai lain daripada jenama yang sama.
ParameterPenerangan
shop_idwajib 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

Campuran format iklan sesebuah kedai.
ParameterPenerangan
shop_idwajib 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

E-mel yang dihantar oleh kedai. The shop's emails of every campaign type (Marketing, Newsletter, Welcome and Abandoned Cart), newest first.
ParameterPenerangan
shop_idwajib 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

Satu angka bagi beberapa kedai secara bersebelahan. 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.
ParameterPenerangan
shopIdswajib 1 to 10 shop ids or domains, comma-separated.
metricwajib The figure compared. Salah satu daripada: 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

Apl Shopify yang digunakan sesebuah kedai, mengikut alamatnya. 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).
ParameterPenerangan
urlwajib 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

Sama ada kedai berjalan di Shopify, dan temanya. isShopify, theme and isHeadless (a storefront built apart from Shopify's themes). Any store, tracked or not, read at its domain without www. (url).
ParameterPenerangan
urlwajib 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

Iklan dan e-mel terkini sesebuah kedai. 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.
ParameterPenerangan
shopIdwajib 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

Musim Q4 sesebuah kedai, hari demi hari. 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).
ParameterPenerangan
shopIdwajib 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. Salah satu daripada: 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

Halaman pendaratan musim Q4 sesebuah kedai. The season's landing pages by the date each appeared: url, ads, screenshotUrl, isBlackFriday and blackFridayStartedAt. meta.total counts them all.
ParameterPenerangan
shopIdwajib 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. Salah satu daripada: 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

Kreatif musim Q4 sesebuah kedai. The season's creatives by the date each was launched: adId, hook, thumbnailUrl, mediaType, reach and isActive. meta.total counts them all.
ParameterPenerangan
shopIdwajib 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. Salah satu daripada: 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

Cangkuk, transkrip, tajuk atau teks iklan kedai. 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).
ParameterPenerangan
shopIdwajib Shop id or domain, such as allbirds.com.
kindwajib The texts to list. Salah satu daripada: 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. Salah satu daripada: usageCount, longestRunning, totalImpressions, firstUsedAt, lastUsedAt.
order Descending by default. Salah satu daripada: desc, asc.
timePeriod The ads counted (default live); not with ad-copy. Salah satu daripada: 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

Halaman pendaratan kedai. 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.
ParameterPenerangan
shopIdwajib 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

Satu halaman pendaratan bagi iklan sesebuah kedai. 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.
ParameterPenerangan
shopIdwajib Shop id or domain, such as allbirds.com.
urlwajib 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

Halaman pendaratan bagi satu halaman Facebook sesebuah kedai. 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).
ParameterPenerangan
shopIdwajib Shop id or domain, such as allbirds.com.
advertiserIdwajib 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

Iklan Meta sesebuah kedai disusun mengikut kedudukan dalam satu tempoh. 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.
ParameterPenerangan
shopIdwajib Shop id or domain, such as allbirds.com.
mode best-rank (default): the best rank each reached; rank-delta: the places each gained. Salah satu daripada: best-rank, rank-delta.
days The window, up to yesterday (default 7). Salah satu daripada: 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

Iklan Meta kedai mengikut kedudukan, dengan penapis. 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.
ParameterPenerangan
shopIdwajib 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

Kedudukan harian beberapa iklan sesebuah kedai. 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).
ParameterPenerangan
shopIdwajib Shop id or domain, such as allbirds.com.
adIdswajib Up to 24 ad ids, comma-separated.
days The window, up to yesterday (default 7). Salah satu daripada: 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

Ujian kreatif sesebuah kedai, hari demi hari. 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.
ParameterPenerangan
shopIdwajib Shop id or domain, such as allbirds.com.
mediaType Defaults to all. Salah satu daripada: all, image, video.
status Salah satu daripada: all, active, inactive.
keywords Words in the ads, comma-separated.
keywordMode Salah satu daripada: 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}

Iklan bagi satu ujian kreatif sesebuah kedai. 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.
ParameterPenerangan
shopIdwajib Shop id or domain, such as allbirds.com.
datewajib A day, as YYYY-MM-DD.
mediaType Defaults to all. Salah satu daripada: all, image, video.
status Salah satu daripada: all, active, inactive.
keywords Words in the ads, comma-separated.
keywordMode Salah satu daripada: 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"

Pasaran

Jumlah harian seluruh pasaran, serta musim Q4.

GET/v1/market/overview

Seluruh pasaran, hari demi hari. 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.
ParameterPenerangan
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

Seluruh pasaran sepanjang musim Q4, hari demi hari. 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.
ParameterPenerangan
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"

Iklan Meta

Kreatif iklan Facebook dan Instagram dengan media, capaian dan kedudukan.

GET/v1/ads

Cari iklan 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).
Penapis bernama 114parameter pertanyaan tambahan
adCopyHashesadCountriesadLanguageadRankBasisadRankModeadReachGrowthadsGrowthadsTimePeriodageRangescategoryIdscountriescpmcreatedAftercreatedBeforecreationCountryctaexcludeAdLanguagesexcludeAgeRangesexcludeFormatsexcludePixelsexcludeShopifyAppsexcludeThemesformatsgrowthRankhideDecliningRankAdshideLowReachhideNonEuUkAdshideSavedAdslandingPageslastSeenAfterlastSeenBeforelinkedDomainmainCountriesmarketmaxAdOrdermaxAdRankValuemaxAdReachGrowthmaxAdsmaxAdsPerBrandmaxAgemaxBestSellerPricemaxDatemaxDaysRunningmaxDescriptionLengthmaxDuplicatesmaxFacebookLikesmaxFbPageCreationDatemaxInstagramFollowersmaxLastSeenDatemaxMonthlyVisitsmaxPageAdsGrowthmaxPageAdsLaunchedmaxPageReachGrowthmaxProductsmaxProductsCountmaxReachmaxReachPerPagemaxSpendmaxSpendPerPagemaxTrafficmaxTrafficGrowthmaxVideoDurationmediaTypemediaTypesminAdOrderminAdReachGrowthminAdsminAgeminBestSellerPriceminDateminDaysRunningminDescriptionLengthminDuplicatesminFacebookLikesminFbPageCreationDateminInstagramFollowersminLastSeenDateminMonthlyVisitsminPageAdsGrowthminPageAdsLaunchedminPageReachGrowthminProductsminProductsCountminRankDeltaminReachminReachPerPageminSpendminSpendPerPageminTrafficminTrafficGrowthminVideoDurationpageAdsLaunchedPeriodpageReachGrowthpartnerIdspartnerspixelsplatformplatformsrankDeltaWindowreachPerPagePeriodreachPeriodsexshopCreatedAftershopCreatedBeforeshopifyAppsshopifyStoresOnlyspendPerPagePeriodspendPeriodstatustechnologiesthemestrackedPagestrafficGrowthwebsiteIds
ParameterPenerangan
search Words in the ad copy, brand or landing page.
mediaType Creative type. Salah satu daripada: image, video, dco, carousel, dpa.
country 2-letter ISO country code.
active Running (true) or stopped (false) ads. Salah satu daripada: true, false.
sortBy Defaults to relevance when searching, otherwise newest. Salah satu daripada: relevance, newest, reach, reachGrowth7d, reachDelta7d, longestRunning, duplicates, spend, adRank, rankDelta7d, rankDelta14d, rankDelta30d, createdAt, relevanceScore, mostDuplicates, adOrder.
order Sort direction (default desc). Salah satu daripada: 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

Cari iklan Meta dengan penapis lanjutan. 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).
Penapis bernama 114medan badan peringkat teratas
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}

Satu iklan Meta mengikut id. 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).
ParameterPenerangan
adIdwajib 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

Capaian harian satu iklan.
ParameterPenerangan
adIdwajib 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 muat turun kreatif satu iklan.
ParameterPenerangan
adIdwajib 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

Halaman pendaratan yang digunakan oleh iklan sesebuah kedai atau halaman. 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.
ParameterPenerangan
scopeDomain A shop domain.
scopeTrackedPages Up to 20 Facebook page ids, comma-separated.
status Pages with running ads, without, or all (default all). Salah satu daripada: 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

Teks iklan kedai. 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.
ParameterPenerangan
scopeDomainwajib 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

Rakan kongsi iklan kedai. 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.
ParameterPenerangan
scopeDomainwajib 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

Buat (atau kembalikan) pautan awam ke sesebuah iklan. The answer carries a shareUrl: a web page anyone can open, without an API key.
ParameterPenerangan
adIdwajib 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

Alih keluar pautan awam ke sesebuah iklan.
ParameterPenerangan
adIdwajib 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}

Iklan di sebalik pautan kongsi (tanpa kunci). The same record the share page shows, as JSON.
ParameterPenerangan
tokenwajib 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

Tulis hook iklan untuk produk. 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

Kuota hook iklan anda bulan ini. 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 Ads

Kreatif iklan Google.

GET/v1/google-ads

Cari iklan 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.
Penapis bernama 41parameter pertanyaan tambahan
audienceCountriescategoryIdscountriescreationCountriesexcludeCountryCodesexcludeCreationCountriesexcludeMarketCountriesexcludePixelIdsexcludeShopifyAppIdsexcludeThemeIdsformatshideNonEuUkAdsinterestTargetingmainMarketCountriesmarketCountriesmaxAdvertiserReachmaxBestSellerPricemaxDaysRunningmaxProductsCountmaxReachmaxTrafficmaxTrafficGrowthminAdvertiserReachminBestSellerPriceminDaysRunningminProductsCountminReachminTrafficminTrafficGrowthnetworkspixelIdspublishedAfterpublishedBeforeremarketingshopCreatedAftershopCreatedBeforeshopifyAppIdsstatusthemeIdstrafficGrowthwebsiteIds
ParameterPenerangan
search
country 2-letter ISO country code.
sortBy Defaults to relevance when searching, otherwise newest. Salah satu daripada: relevance, newest, reach.
order Sort direction (default desc). Salah satu daripada: 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

Cari iklan Google dengan penapis. 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.
Penapis bernama 41medan badan peringkat teratas
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}

Satu iklan Google mengikut id. 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.
ParameterPenerangan
adIdwajib 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

Iklan dan siaran organik TikTok.

GET/v1/tiktok/library

Cari iklan dan siaran 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.
Penapis bernama 58parameter pertanyaan tambahan
categoriescategoryIdscountriescreationCountriesdomainexcludeCreationCountriesexcludeHashtagsexcludeMarketCountriesexcludePixelIdsexcludeShopifyAppIdsexcludeThemeIdshandlehasShopLinkedhashtagsisPinnedlanguagesmainMarketCountriesmarketCountriesmaxBestSellerPricemaxDaysRunningmaxDurationmaxFollowersmaxProductsCountmaxProfileAdsSharemaxProfilePostsmaxProfileViewsmaxTrafficmaxTrafficGrowthmaxViewsmediaTypemediaTypesminBestSellerPriceminDaysRunningminDurationminFollowersminProductsCountminProfileAdsShareminProfilePostsminProfileViewsminTrafficminTrafficGrowthminViewspixelIdsprofileCreatedAfterprofileCreatedBeforepublishedAfterpublishedBeforeshopCreatedAftershopCreatedBeforeshopifyAppIdsthemeIdstiktokPageIdtiktokPageIdstrafficGrowthtypeupdatedAfterupdatedBeforewebsiteId
ParameterPenerangan
search
country 2-letter ISO country code.
sortBy Defaults to relevance when searching, otherwise newest. Salah satu daripada: relevance, newest, views, likes, rank, longestRunning, daysRunning.
order Sort direction (default desc). Salah satu daripada: 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

Cari iklan dan siaran TikTok dengan penapis. 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.
Penapis bernama 58medan badan peringkat teratas
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}

Satu item TikTok mengikut id. 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).
ParameterPenerangan
itemIdwajib 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

Item TikTok bagi satu kedai. 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.
Penapis bernama 58parameter pertanyaan tambahan
categoriescategoryIdscountriescreationCountriesdomainexcludeCreationCountriesexcludeHashtagsexcludeMarketCountriesexcludePixelIdsexcludeShopifyAppIdsexcludeThemeIdshandlehasShopLinkedhashtagsisPinnedlanguagesmainMarketCountriesmarketCountriesmaxBestSellerPricemaxDaysRunningmaxDurationmaxFollowersmaxProductsCountmaxProfileAdsSharemaxProfilePostsmaxProfileViewsmaxTrafficmaxTrafficGrowthmaxViewsmediaTypemediaTypesminBestSellerPriceminDaysRunningminDurationminFollowersminProductsCountminProfileAdsShareminProfilePostsminProfileViewsminTrafficminTrafficGrowthminViewspixelIdsprofileCreatedAfterprofileCreatedBeforepublishedAfterpublishedBeforeshopCreatedAftershopCreatedBeforeshopifyAppIdsthemeIdstiktokPageIdtiktokPageIdstrafficGrowthtypeupdatedAfterupdatedBeforewebsiteId
ParameterPenerangan
shop_idwajib Shop id or domain, such as allbirds.com.
search
sortBy Defaults to relevance when searching, otherwise newest. Salah satu daripada: relevance, newest, views, likes, rank, longestRunning, daysRunning.
order Sort direction (default desc). Salah satu daripada: 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"

Media

Kreatif sedia dipaparkan: URL imej dan video pada CDN kami.

GET/v1/media

Kreatif iklan sebagai media sedia dipaparkan. 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).
Penapis bernama 114parameter pertanyaan tambahan
adCopyHashesadCountriesadLanguageadRankBasisadRankModeadReachGrowthadsGrowthadsTimePeriodageRangescategoryIdscountriescpmcreatedAftercreatedBeforecreationCountryctaexcludeAdLanguagesexcludeAgeRangesexcludeFormatsexcludePixelsexcludeShopifyAppsexcludeThemesformatsgrowthRankhideDecliningRankAdshideLowReachhideNonEuUkAdshideSavedAdslandingPageslastSeenAfterlastSeenBeforelinkedDomainmainCountriesmarketmaxAdOrdermaxAdRankValuemaxAdReachGrowthmaxAdsmaxAdsPerBrandmaxAgemaxBestSellerPricemaxDatemaxDaysRunningmaxDescriptionLengthmaxDuplicatesmaxFacebookLikesmaxFbPageCreationDatemaxInstagramFollowersmaxLastSeenDatemaxMonthlyVisitsmaxPageAdsGrowthmaxPageAdsLaunchedmaxPageReachGrowthmaxProductsmaxProductsCountmaxReachmaxReachPerPagemaxSpendmaxSpendPerPagemaxTrafficmaxTrafficGrowthmaxVideoDurationmediaTypemediaTypesminAdOrderminAdReachGrowthminAdsminAgeminBestSellerPriceminDateminDaysRunningminDescriptionLengthminDuplicatesminFacebookLikesminFbPageCreationDateminInstagramFollowersminLastSeenDateminMonthlyVisitsminPageAdsGrowthminPageAdsLaunchedminPageReachGrowthminProductsminProductsCountminRankDeltaminReachminReachPerPageminSpendminSpendPerPageminTrafficminTrafficGrowthminVideoDurationpageAdsLaunchedPeriodpageReachGrowthpartnerIdspartnerspixelsplatformplatformsrankDeltaWindowreachPerPagePeriodreachPeriodsexshopCreatedAftershopCreatedBeforeshopifyAppsshopifyStoresOnlyspendPerPagePeriodspendPeriodstatustechnologiesthemestrackedPagestrafficGrowthwebsiteIds
ParameterPenerangan
search
mediaType Creative type. Salah satu daripada: image, video, dco, carousel, dpa.
country 2-letter ISO country code.
sortBy Defaults to relevance when searching, otherwise reach. Salah satu daripada: relevance, newest, reach, reachGrowth7d, reachDelta7d, longestRunning, duplicates, spend, adRank, rankDelta7d, rankDelta14d, rankDelta30d, createdAt, relevanceScore, mostDuplicates, adOrder.
order Sort direction (default desc). Salah satu daripada: 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

Media sedia dipaparkan dengan penapis lanjutan. 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.
Penapis bernama 114medan badan peringkat teratas
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).
ParameterPenerangan
keywajib 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. Salah satu daripada: 96, 480, full.
curl "https://api.sellwinners.com/v1/media/file/FILE_KEY" \
  -H "X-API-Key: YOUR_API_KEY"

Pengiklan

Pengiklan (halaman Facebook) dan aktiviti mereka.

GET/v1/advertisers

Cari pengiklan. 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).
Penapis bernama 59parameter pertanyaan tambahan
adCountriesadLanguageadsGrowthadsLaunchedPeriodadsTimePeriodageRangescategoryIdscountriescountryFilterModecpmcreationCountriesexcludeAgeRangesexcludeCreationCountriesexcludeMarketCountriesexcludeShopifyAppIdsexcludeThemeIdsmainCountriesmainMarketCountriesmarketCountriesmaxActiveAdsmaxAdsGrowthmaxAdsLaunchedmaxAgemaxFacebookLikesmaxFbPageCreationDatemaxInstagramFollowersmaxPageReachGrowthmaxProductsCountmaxReachmaxReachPerPagemaxSpendPerPagemaxTrafficmaxTrafficGrowthminActiveAdsminAdsGrowthminAdsLaunchedminAgeminFacebookLikesminFbPageCreationDateminInstagramFollowersminPageReachGrowthminProductsCountminReachminReachPerPageminSpendPerPageminTrafficminTrafficGrowthpageNichespageReachGrowthpartnerssexshopCreatedAftershopCreatedBeforeshopifyAppIdsshopifyLinkedtechnologiesthemeIdstrackedPagestrafficGrowth
ParameterPenerangan
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. Salah satu daripada: brand, adCopy, websiteCopy, urlContains, domain, all.
country 2-letter ISO country code.
sortBy Defaults to relevance when searching, otherwise newest. Salah satu daripada: relevance, newest, activeAds, newAds, reach, reach14d, growth30d, followers, euAdsShare.
order Sort direction (default desc). Salah satu daripada: 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

Cari pengiklan dengan penapis. 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).
Penapis bernama 59medan badan peringkat teratas
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}

Satu pengiklan mengikut 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).
ParameterPenerangan
advertiserIdwajib 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

Iklan aktif harian dan capaian EU bagi satu pengiklan. 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).
ParameterPenerangan
advertiserIdwajib 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

Iklan Meta bagi satu pengiklan. 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).
ParameterPenerangan
advertiser_idwajib Facebook page id of an advertiser or ad.
sortBy Defaults to relevance when searching, otherwise newest. Salah satu daripada: relevance, newest, reach, reachGrowth7d, reachDelta7d, longestRunning, duplicates, spend, adRank, rankDelta7d, rankDelta14d, rankDelta30d, createdAt, relevanceScore, mostDuplicates, adOrder.
order Sort direction (default desc). Salah satu daripada: 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"

E-mel

E-mel pemasaran dan surat berita jenama.

GET/v1/emails

Cari e-mel jenama. 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.
Penapis bernama 33parameter pertanyaan tambahan
adsGrowthamongMarketCountriescampaignTypescategoriescategoryIdscountriescreationCountriesemailCategoryIdseventCategorieseventIdseventNamesexcludeLanguageslanguagesmaxActiveAdsmaxActiveAdsGrowthmaxBestSellerPricemaxMonthlyVisitsmaxProductsCountmaxTrafficGrowthminActiveAdsminActiveAdsGrowthminBestSellerPriceminMonthlyVisitsminProductsCountminTrafficGrowthpromotionTypeIdspromotionTypessentAftersentBeforeshopCreatedAftershopCreatedBeforeshopIdstrafficGrowth
ParameterPenerangan
search Words in the subject, sender or content.
type Campaign type, in any case (default: Newsletter and Marketing). Salah satu daripada: 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. Salah satu daripada: relevance, newest, event, promotionType, activeAds, emails90d, avgEmailsPerWeek, oldest, shopEmailFrequency.
order Sort direction (default desc). Salah satu daripada: 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

Cari e-mel jenama dengan penapis. 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.
Penapis bernama 33medan badan peringkat teratas
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}

Satu e-mel mengikut 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.
ParameterPenerangan
emailIdwajib 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 mentah bagi satu e-mel.
ParameterPenerangan
emailIdwajib 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

Statistik penghantaran e-mel sesebuah kedai. 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.
ParameterPenerangan
shopIdwajib Shop id or domain, such as allbirds.com.
monthwajib 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"

Produk

Produk kedai bersama harga, jualan, ulasan, iklan dan capaian EU.

GET/v1/products

Cari atau semak imbas produk. 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.
Penapis bernama 60parameter pertanyaan tambahan
adsLaunchedPeriodcurrenciesexcludeSellingCountrieshasPartnershipAdsmainSellingCountriesmaxActiveAdsmaxAdSharemaxAdsLaunchedmaxEstDailySalesmaxEstMonthlySalesmaxEuAdSpendmaxEuReachmaxMonthlyRevenuemaxMonthlyUnitsSoldmaxPricemaxPriceUsdmaxRatingmaxReviewCountmaxReviewsmaxShopMonthlyVisitsmaxShopProductsCountmaxShopTrafficGrowth30dmaxSpendSharemaxUnitsSoldDailymaxUnitsSoldMonthlyminActiveAdsminAdShareminAdsLaunchedminEstDailySalesminEstMonthlySalesminEuAdSpendminEuReachminMonthlyRevenueminMonthlyUnitsSoldminPriceminPriceUsdminRatingminReviewCountminReviewsminShopMonthlyVisitsminShopProductsCountminShopTrafficGrowth30dminSpendShareminUnitsSoldDailyminUnitsSoldMonthlypartnershippixelIdspromoTypespublishedAfterpublishedBeforesellingCountriesshopshopCountriesshopCreatedAftershopCreatedBeforeshopIdshopVisitorCountriesshopifyAppIdssubscriptionthemeIds
ParameterPenerangan
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. Salah satu daripada: 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). Salah satu daripada: relevance, newest, activeAds, spend, estSales, bestSelling, adPressure, createdAt.
order Sort direction (default desc). Salah satu daripada: 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

Cari produk dengan penapis. 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.
Penapis bernama 60medan badan peringkat teratas
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}

Dapatkan produk. 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`.
ParameterPenerangan
productIdwajib 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

Cari produk melalui alamat halamannya. The product behind a Shopify product page (`url`), as GET /v1/products/{productId} answers it.
ParameterPenerangan
urlwajib 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

Senaraikan iklan produk. The Meta ads that link to the product's page, newest first, in the format of /v1/ads. `status`: active or inactive.
ParameterPenerangan
productIdwajib The product's `ref`, as a product search returns it.
status active or inactive. Salah satu daripada: 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

Cipta (atau pulangkan) pautan awam ke produk. Anyone with the link can view the product's sheet on the website without an account, with no EU data.
ParameterPenerangan
productIdwajib 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

Alih keluar pautan awam ke produk.
ParameterPenerangan
productIdwajib 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}

Produk di sebalik pautan kongsi (tiada kunci diperlukan). The same record the share page shows, as JSON.
ParameterPenerangan
tokenwajib 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

Nilai penapis untuk carian produk. 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

Carian imej terbaharu anda. 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.
ParameterPenerangan
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}

Baca semula carian imej. 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.
ParameterPenerangan
searchIdwajib The searchId an image search answered (meta.searchId).
filters A JSON object of the product search's named filters.
sortBy Defaults to relevance. Salah satu daripada: relevance, estSales, activeAds, adPressure, newest, spend, spend14d.
order Sort direction (default desc). Salah satu daripada: 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"

Faset

Nilai dan id yang diterima oleh penapis carian.

GET/v1/facets/categories

Kategori (id untuk penapis categoryIds). The ids taken by every categoryIds filter. Each row has id, name, path, parentId and usageCount.
ParameterPenerangan
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

Apl Shopify (id untuk penapis apl).
ParameterPenerangan
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

Teknologi paparan kedai (slug untuk penapis technologies).
ParameterPenerangan
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

Piksel penjejakan (id untuk penapis piksel).
ParameterPenerangan
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

Tema Shopify (id untuk penapis tema).
ParameterPenerangan
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

Kategori e-mel, jenis promosi dan acara. 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

Rangkaian iklan Google.
curl "https://api.sellwinners.com/v1/google-ads/facets/networks" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/google-ads/facets/countries

Negara audiens iklan Google.
ParameterPenerangan
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

Format iklan 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

Status iklan 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

Kategori pengiklan Google. Each row has id, name, path, parentId and advertiserUsageCount.
ParameterPenerangan
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

Kategori 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.
ParameterPenerangan
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

Bahasa 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.
ParameterPenerangan
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

Negara 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.
ParameterPenerangan
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

Jenis kandungan 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.
ParameterPenerangan
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

Jenis media 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.
ParameterPenerangan
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}

Nilai penapis e-mel. 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.
ParameterPenerangan
facetwajib 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

Nilai penapis untuk carian kedai. 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

Nilai penapis untuk carian pengiklan. 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

Nilai penapis untuk carian produk. 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

Nilai penapis untuk carian iklan.
curl "https://api.sellwinners.com/v1/filters/ads" \
  -H "X-API-Key: YOUR_API_KEY"

Papan

Simpan iklan, kedai, produk, e-mel dan pengiklan pada papan, dan kongsikannya.

GET/v1/boards

Senaraikan papan.
ParameterPenerangan
scope Defaults to workspace. Salah satu daripada: workspace, personal.
state Defaults to active. Salah satu daripada: active, archived.
kind A collection holds items, a folder holds boards. Salah satu daripada: collection, folder.
surface What the board is for. Salah satu daripada: ads, shops, landing, emails, products, advertisers, mixed.
parentBoardId Only boards inside this folder board.
rootOnly Only top-level boards. Salah satu daripada: 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

Buat papan. 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}

Dapatkan satu papan.
ParameterPenerangan
boardIdwajib Board id.
curl "https://api.sellwinners.com/v1/boards/BOARD_ID" \
  -H "X-API-Key: YOUR_API_KEY"

PATCH/v1/boards/{boardId}

Kemas kini papan. Send at least one of name, description or visibility.
ParameterPenerangan
boardIdwajib 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}

Arkibkan papan. Archives the board and everything under it. The restore endpoint brings it back.
ParameterPenerangan
boardIdwajib 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

Pulihkan papan yang diarkibkan.
ParameterPenerangan
boardIdwajib 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

Pindahkan papan. parentBoardId is a folder board; null moves the board to the top level.
ParameterPenerangan
boardIdwajib 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

Senaraikan item dalam papan.
ParameterPenerangan
boardIdwajib 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. Salah satu daripada: 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

Tambah item pada papan. 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.
ParameterPenerangan
boardIdwajib 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

Pindahkan item ke papan lain.
ParameterPenerangan
boardIdwajib Board id.
itemIdwajib 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}

Alih keluar item daripada papan.
ParameterPenerangan
boardIdwajib Board id.
itemIdwajib 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

Buat pautan awam ke papan. The answer carries a url: a web page anyone can open, without an API key. Each call creates a new link.
ParameterPenerangan
boardIdwajib 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

Alih keluar pautan awam ke papan. Every link to the board stops working at once; the board itself stays.
ParameterPenerangan
boardIdwajib 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}

Papan di sebalik pautan kongsi (tanpa kunci). The same board the share page shows, as JSON.
ParameterPenerangan
tokenwajib Token at the end of a share link.
curl "https://api.sellwinners.com/v1/shared/boards/TOKEN" \
  -H "X-API-Key: YOUR_API_KEY"

Kegemaran

Iklan, kedai dan e-mel kegemaran, dalam folder.

GET/v1/favorites/ads

Senaraikan iklan kegemaran.
ParameterPenerangan
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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

Simpan iklan kegemaran. 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

Pindahkan iklan kegemaran yang disimpan.
ParameterPenerangan
favoriteIdwajib id of a saved favorite, from the favorites list.
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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}

Padam iklan kegemaran yang disimpan.
ParameterPenerangan
favoriteIdwajib id of a saved favorite, from the favorites list.
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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}

Alih keluar iklan kegemaran mengikut adId.
ParameterPenerangan
recordIdwajib The adId of the saved ad.
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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

Senaraikan folder iklan kegemaran.
ParameterPenerangan
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: workspace, personal.
parentId Only folders inside this folder.
rootOnly Only top-level folders. Salah satu daripada: 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

Buat folder iklan kegemaran. 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

Semak susunan folder iklan kegemaran. Folders have no stored order: the list is checked and echoed back sorted by order. The answer carries reordered: true.
ParameterPenerangan
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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

Buat pautan awam ke folder iklan kegemaran.
ParameterPenerangan
folderIdwajib Folder id.
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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

Alih keluar pautan awam ke folder iklan kegemaran.
ParameterPenerangan
folderIdwajib Folder id.
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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

Tetapkan keterlihatan folder iklan kegemaran. visibility is private or organization.
ParameterPenerangan
folderIdwajib Folder id.
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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}

Namakan semula atau pindahkan folder iklan kegemaran. Body: name, and parentId to move the folder (null moves it to the top level).
ParameterPenerangan
folderIdwajib Folder id.
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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}

Padam folder iklan kegemaran. mode is delete_items, move_items_to_root or move_items_to_folder (with targetFolderId).
ParameterPenerangan
folderIdwajib Folder id.
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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

Senaraikan kedai kegemaran.
ParameterPenerangan
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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

Simpan kedai kegemaran. 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

Pindahkan kedai kegemaran yang disimpan.
ParameterPenerangan
favoriteIdwajib id of a saved favorite, from the favorites list.
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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}

Padam kedai kegemaran yang disimpan.
ParameterPenerangan
favoriteIdwajib id of a saved favorite, from the favorites list.
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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}

Alih keluar kedai kegemaran mengikut websiteId.
ParameterPenerangan
recordIdwajib The websiteId of the saved shop.
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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

Senaraikan folder kedai kegemaran.
ParameterPenerangan
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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

Buat folder kedai kegemaran. 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

Semak susunan folder kedai kegemaran. Folders have no stored order: the list is checked and echoed back sorted by order. The answer carries reordered: true.
ParameterPenerangan
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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

Buat pautan awam ke folder kedai kegemaran.
ParameterPenerangan
folderIdwajib Folder id.
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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

Alih keluar pautan awam ke folder kedai kegemaran.
ParameterPenerangan
folderIdwajib Folder id.
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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

Tetapkan keterlihatan folder kedai kegemaran. visibility is private or organization.
ParameterPenerangan
folderIdwajib Folder id.
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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}

Namakan semula atau pindahkan folder kedai kegemaran. Body: name.
ParameterPenerangan
folderIdwajib Folder id.
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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}

Padam folder kedai kegemaran. mode is delete_items, move_items_to_root or move_items_to_folder (with targetFolderId).
ParameterPenerangan
folderIdwajib Folder id.
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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

Senaraikan e-mel kegemaran.
ParameterPenerangan
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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

Simpan e-mel kegemaran. 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

Pindahkan e-mel kegemaran yang disimpan.
ParameterPenerangan
favoriteIdwajib id of a saved favorite, from the favorites list.
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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}

Padam e-mel kegemaran yang disimpan.
ParameterPenerangan
favoriteIdwajib id of a saved favorite, from the favorites list.
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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}

Alih keluar e-mel kegemaran mengikut emailId.
ParameterPenerangan
recordIdwajib The emailId of the saved email.
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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

Senaraikan folder e-mel kegemaran.
ParameterPenerangan
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: workspace, personal.
parentId Only folders inside this folder.
rootOnly Only top-level folders. Salah satu daripada: 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

Buat folder e-mel kegemaran. 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

Semak susunan folder e-mel kegemaran. Folders have no stored order: the list is checked and echoed back sorted by order. The answer carries reordered: true.
ParameterPenerangan
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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

Buat pautan awam ke folder e-mel kegemaran.
ParameterPenerangan
folderIdwajib Folder id.
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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

Alih keluar pautan awam ke folder e-mel kegemaran.
ParameterPenerangan
folderIdwajib Folder id.
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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

Tetapkan keterlihatan folder e-mel kegemaran. visibility is private or organization.
ParameterPenerangan
folderIdwajib Folder id.
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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}

Namakan semula atau pindahkan folder e-mel kegemaran. Body: name, and parentId to move the folder (null moves it to the top level).
ParameterPenerangan
folderIdwajib Folder id.
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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}

Padam folder e-mel kegemaran. mode is delete_items, move_items_to_root or move_items_to_folder (with targetFolderId).
ParameterPenerangan
folderIdwajib Folder id.
scopewajib Which favorites: shared with the workspace or personal. Salah satu daripada: 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"}'

Paparan tersimpan

Carian yang anda simpan pada halaman senarai laman web, mengikut halaman.

GET/v1/views

Senaraikan paparan tersimpan anda. 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.
ParameterPenerangan
context Only this list page's views. Defaults to every page. Salah satu daripada: shops, meta, tiktok, google, advertisers, emails, products.
curl "https://api.sellwinners.com/v1/views" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/views

Simpan paparan. 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}

Namakan semula, pindahkan atau ubah paparan tersimpan. Send at least one of name, position (its place among the page's views, 0 the first) or state.
ParameterPenerangan
viewIdwajib 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}

Padam paparan tersimpan. Open on every plan; the page's other views keep their order.
ParameterPenerangan
viewIdwajib 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"

Penjejak jenama

Jejaki jenama dan baca laporan tentang iklan, kreatif dan halaman pendaratan mereka.

GET/v1/brandtrackers

Senaraikan jenama yang dijejak. 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).
ParameterPenerangan
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 Salah satu daripada: 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

Jejak jenama. 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}

Satu jenama yang dijejak. 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.
ParameterPenerangan
brandtrackerIdwajib 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}

Berhenti menjejak jenama.
ParameterPenerangan
brandtrackerIdwajib 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

Paparan papan pemuka bagi sesuatu jenama. 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).
ParameterPenerangan
brandtrackerIdwajib Tracker id, from the list of tracked brands.
euOnly Only ads shown in the EU and UK. Salah satu daripada: true, false.
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/overview" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/snapshots

Tarikh syot kilat sesuatu jenama. The days recorded for a brand, newest first. Built from a daily record that starts the day the brand is tracked.
ParameterPenerangan
brandtrackerIdwajib 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

Iklan sesuatu jenama. 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.
ParameterPenerangan
brandtrackerIdwajib 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. Salah satu daripada: newest, longestRunning, reach, duplicates, relevance, reachDelta7d, currentRank, rankDelta7d, rankDelta14d, rankDelta30d, spend.
status Running or stopped ads. Salah satu daripada: active, inactive, all.
mediaType Creative type. Salah satu daripada: 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. Salah satu daripada: true, false.
partnerIds Only ads with these partner pages (Facebook page ids), comma-separated.
euOnly Only ads shown in the EU and UK. Salah satu daripada: 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

Iklan sesuatu jenama mengikut urutan pelancaran.
ParameterPenerangan
brandtrackerIdwajib 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. Salah satu daripada: newest, longestRunning, reach, duplicates, relevance, reachDelta7d, currentRank, rankDelta7d, rankDelta14d, rankDelta30d, spend.
status Running or stopped ads. Salah satu daripada: active, inactive, all.
mediaType Creative type. Salah satu daripada: 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. Salah satu daripada: true, false.
partnerIds Only ads with these partner pages (Facebook page ids), comma-separated.
euOnly Only ads shown in the EU and UK. Salah satu daripada: 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

Bilangan dan julat tarikh garis masa sesuatu jenama. totalIsExact is false when totalCount is a lower bound; totalCount is null when the source sends no total.
ParameterPenerangan
brandtrackerIdwajib Tracker id, from the list of tracked brands.
status Running or stopped ads. Salah satu daripada: active, inactive, all.
mediaType Creative type. Salah satu daripada: 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. Salah satu daripada: true, false.
partnerIds Only ads with these partner pages (Facebook page ids), comma-separated.
euOnly Only ads shown in the EU and UK. Salah satu daripada: 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

Iklan perkongsian sesuatu jenama.
ParameterPenerangan
brandtrackerIdwajib 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. Salah satu daripada: newest, longestRunning, reach, duplicates, relevance, reachDelta7d, currentRank, rankDelta7d, rankDelta14d, rankDelta30d, spend.
status Running or stopped ads. Salah satu daripada: active, inactive, all.
mediaType Creative type. Salah satu daripada: 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. Salah satu daripada: true, false.
partnerIds Only ads with these partner pages (Facebook page ids), comma-separated.
euOnly Only ads shown in the EU and UK. Salah satu daripada: 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

Bilangan iklan perkongsian sesuatu jenama. isExact is false when count is a lower bound; count is null when the source sends no total.
ParameterPenerangan
brandtrackerIdwajib Tracker id, from the list of tracked brands.
status Running or stopped ads. Salah satu daripada: active, inactive, all.
mediaType Creative type. Salah satu daripada: 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. Salah satu daripada: true, false.
partnerIds Only ads with these partner pages (Facebook page ids), comma-separated.
euOnly Only ads shown in the EU and UK. Salah satu daripada: 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

Iklan sesuatu jenama, mengikut kedudukan. 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.
ParameterPenerangan
brandtrackerIdwajib 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. Salah satu daripada: currentRank, rankDelta, rankDelta7d, rankDelta14d, rankDelta30d, reach, reachDelta7d, daysRunning, duplicates.
status Defaults to active. Salah satu daripada: active, inactive, all.
includeInactive Also rank stopped ads. Salah satu daripada: true, false.
euOnly Only ads shown in the EU and UK. Salah satu daripada: 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

Iklan sesuatu jenama yang naik kedudukan. 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).
ParameterPenerangan
brandtrackerIdwajib 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. Salah satu daripada: last7d, last14d, last30d.
sortBy Defaults to rankDelta. Salah satu daripada: 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

Iklan sesuatu jenama yang sedang diskalakan. Same answer as /ad-rank.
ParameterPenerangan
brandtrackerIdwajib 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. Salah satu daripada: last7d, last14d, last30d.
sortBy Defaults to rankDelta. Salah satu daripada: 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

Kreatif sesuatu jenama. mediaType is image, video, carousel (an ad of several images or videos, as in its ad record) or unknown.
ParameterPenerangan
brandtrackerIdwajib Tracker id, from the list of tracked brands.
timePeriod Which ads to read (default live). Salah satu daripada: live, last24h, last3d, last7d, last30d, last3m, last6m, last1y.
mediaType Creative type. Salah satu daripada: all, image, video.
page Page number, starting at 1.
limit Results per page, 1-50 (default 20).
sortBy Defaults to firstSeenAt. Salah satu daripada: firstSeenAt, daysRunning, duplicates.
order Sort direction (default desc). Salah satu daripada: desc, asc.
euOnly Only ads shown in the EU and UK. Salah satu daripada: 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

Ujian kreatif sesuatu jenama. 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.
ParameterPenerangan
brandtrackerIdwajib 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. Salah satu daripada: active, inactive, all.
mediaType Creative type. Salah satu daripada: 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. Salah satu daripada: true, false.
partnerIds Only ads with these partner pages (Facebook page ids), comma-separated.
euOnly Only ads shown in the EU and UK. Salah satu daripada: 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

Hook yang digunakan sesuatu jenama untuk membuka videonya. 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.
ParameterPenerangan
brandtrackerIdwajib Tracker id, from the list of tracked brands.
timePeriod Which ads to read (default live). Salah satu daripada: 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. Salah satu daripada: usageCount, longestRunning, totalImpressions, firstUsedAt, lastUsedAt.
order Sort direction (default desc). Salah satu daripada: desc, asc.
euOnly Only ads shown in the EU and UK. Salah satu daripada: 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

Skrip video sesuatu jenama. 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).
ParameterPenerangan
brandtrackerIdwajib Tracker id, from the list of tracked brands.
timePeriod Which ads to read (default live). Salah satu daripada: 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. Salah satu daripada: usageCount, longestRunning, totalImpressions, firstUsedAt, lastUsedAt.
order Sort direction (default desc). Salah satu daripada: desc, asc.
euOnly Only ads shown in the EU and UK. Salah satu daripada: 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

Tajuk utama iklan sesuatu jenama. 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.
ParameterPenerangan
brandtrackerIdwajib Tracker id, from the list of tracked brands.
timePeriod Which ads to read (default live). Salah satu daripada: 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. Salah satu daripada: usageCount, longestRunning, totalImpressions, firstUsedAt, lastUsedAt.
order Sort direction (default desc). Salah satu daripada: desc, asc.
euOnly Only ads shown in the EU and UK. Salah satu daripada: 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

Teks iklan sesuatu jenama. Ad texts and how many live ads use each; longestRunning is null when the age of its ads is unknown.
ParameterPenerangan
brandtrackerIdwajib 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). Salah satu daripada: desc, asc.
euOnly Only ads shown in the EU and UK. Salah satu daripada: 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

Halaman pendaratan sesuatu jenama. 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.
ParameterPenerangan
brandtrackerIdwajib 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. Salah satu daripada: usageCount, longestRunning, totalImpressions.
order Sort direction (default desc). Salah satu daripada: 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

Halaman pendaratan sesuatu jenama, dikumpulkan mengikut halaman. Query strings, fragments, trailing slashes and a leading www. are ignored when grouping.
ParameterPenerangan
brandtrackerIdwajib 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. Salah satu daripada: usageCount, activeAdsCount.
order Sort direction (default desc). Salah satu daripada: 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

Teks iklan sesuatu jenama dari semasa ke semasa. 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.
ParameterPenerangan
brandtrackerIdwajib 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

Tajuk utama sesuatu jenama dari semasa ke semasa. 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.
ParameterPenerangan
brandtrackerIdwajib 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

Halaman pendaratan sesuatu jenama dari semasa ke semasa. 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.
ParameterPenerangan
brandtrackerIdwajib 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

Rakan kongsi yang menjalankan iklan untuk sesuatu jenama. 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).
ParameterPenerangan
brandtrackerIdwajib 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. Salah satu daripada: activeAds, launchDate, reach, estimatedSpend.
order Sort direction (default desc). Salah satu daripada: desc, asc.
euOnly Only ads shown in the EU and UK. Salah satu daripada: 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

Campuran format iklan aktif sesuatu jenama.
ParameterPenerangan
brandtrackerIdwajib Tracker id, from the list of tracked brands.
euOnly Only ads shown in the EU and UK. Salah satu daripada: 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

Audiens iklan sesuatu jenama. 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.
ParameterPenerangan
brandtrackerIdwajib 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

Item terbaharu jenama yang dijejak daripada satu sumber. 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.
ParameterPenerangan
brandtrackerIdwajib Tracker id, from the list of tracked brands.
source Defaults to meta. Salah satu daripada: 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

Peristiwa jenama yang dijejak. 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.
ParameterPenerangan
brandtrackerIdwajib 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

Kalendar jenama yang dijejak merentasi Meta, TikTok, Google dan e-mel. 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.
ParameterPenerangan
brandtrackerIdwajib 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

Jumlah yang dilancarkan jenama yang dijejak setiap hari, mengikut sumber. 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.
ParameterPenerangan
brandtrackerIdwajib 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

Iklan dilancarkan, iklan aktif dan capaian dari semasa ke semasa. 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.
ParameterPenerangan
brandtrackerIdwajib Tracker id, from the list of tracked brands.
granularity Defaults to daily. Salah satu daripada: daily, weekly, monthly.
period Use it instead of startDate / endDate. Salah satu daripada: 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. Salah satu daripada: 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

Iklan teratas merentasi jenama yang dijejak. 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.
ParameterPenerangan
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. Salah satu daripada: currentRank, rankDelta, rankDelta7d, reach, reachDelta7d, daysRunning, duplicates.
includeInactive Also rank stopped ads. Salah satu daripada: true, false.
euOnly Only ads shown in the EU and UK. Salah satu daripada: 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

Iklan yang sedang diskalakan merentasi jenama yang dijejak. 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.
ParameterPenerangan
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. Salah satu daripada: 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. Salah satu daripada: 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

Hook merentasi jenama yang dijejak. 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.
ParameterPenerangan
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. Salah satu daripada: usageCount, longestRunning, totalImpressions, firstUsedAt, lastUsedAt.
order Sort direction (default desc). Salah satu daripada: desc, asc.
euOnly Only ads shown in the EU and UK. Salah satu daripada: true, false.
curl "https://api.sellwinners.com/v1/workspace/hooks?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/workspace/ad-copies

Teks iklan merentasi jenama yang dijejak. 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.
ParameterPenerangan
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. Salah satu daripada: usageCount.
order Sort direction (default desc). Salah satu daripada: desc, asc.
euOnly Only ads shown in the EU and UK. Salah satu daripada: 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

Halaman pendaratan merentasi jenama yang dijejak. 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.
ParameterPenerangan
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. Salah satu daripada: usageCount, longestRunning, totalImpressions.
order Sort direction (default desc). Salah satu daripada: 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

Campuran format merentasi jenama yang dijejak. 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.
ParameterPenerangan
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. Salah satu daripada: activeAds, image, video, dco, other.
euOnly Only ads shown in the EU and UK. Salah satu daripada: true, false.
curl "https://api.sellwinners.com/v1/workspace/media-mix?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/folders

Senaraikan folder penjejak.
curl "https://api.sellwinners.com/v1/brandtrackers/folders" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/workspace/folders

Senaraikan folder penjejak. 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

Buat folder penjejak.
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}

Namakan semula folder penjejak.
ParameterPenerangan
folderIdwajib 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}

Padam folder penjejak. action is move-to-default (keeps the trackers) or delete-brandtrackers (removes them).
ParameterPenerangan
folderIdwajib 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

Penjejak dalam folder.
ParameterPenerangan
folderIdwajib 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 Salah satu daripada: 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"

Akaun

Kunci, pelan dan penggunaan anda. Panggilan ini tidak pernah dikira.

GET/v1/account

Pelan, kredit dan penggunaan anda bulan ini.
curl "https://api.sellwinners.com/v1/account" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/usage

Kredit yang digunakan dan berbaki bulan ini.
curl "https://api.sellwinners.com/v1/usage" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/me

Kunci API yang digunakan dan ruang kerjanya.
curl "https://api.sellwinners.com/v1/me" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/workspace

Ruang kerja di sebalik kunci API.
curl "https://api.sellwinners.com/v1/workspace" \
  -H "X-API-Key: YOUR_API_KEY"

Ruang kerja

Ruang kerja anda, ahli dan kerusi mereka, serta jemputan yang dihantar dan diterima. Panggilan ini tidak pernah dikira.

GET/v1/workspaces

Senaraikan ruang kerja anda. 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

Cipta ruang kerja. 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

Pilih ruang kerja lalai anda. 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}

Salah satu ruang kerja anda. A workspace you don't belong to answers 404.
ParameterPenerangan
workspaceIdwajib 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}

Namakan semula ruang kerja. Owners and admins only.
ParameterPenerangan
workspaceIdwajib 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}

Alih keluar ruang kerja. 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).
ParameterPenerangan
workspaceIdwajib 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

Senaraikan ahli ruang kerja. Every member with their email and role, the owner first, and the seats. Every member can read it.
ParameterPenerangan
workspaceIdwajib 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}

Tukar peranan ahli. The owner changes anyone but themself; an admin changes members and readonly members only. The owner role can't be changed.
ParameterPenerangan
workspaceIdwajib id of one of your workspaces (ws_...), from the list of your workspaces.
userIdwajib 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}

Alih keluar ahli. They lose access at once; getting them back takes a new invitation.
ParameterPenerangan
workspaceIdwajib id of one of your workspaces (ws_...), from the list of your workspaces.
userIdwajib 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

Senaraikan jemputan yang belum dijawab. Owners and admins only, newest first, each with its email, role, who sent it and when it expires.
ParameterPenerangan
workspaceIdwajib 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

Jemput seseorang. 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.
ParameterPenerangan
workspaceIdwajib 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

Hantar semula jemputan. A new link (the old one stops working), valid 7 days. At most once a minute.
ParameterPenerangan
workspaceIdwajib id of one of your workspaces (ws_...), from the list of your workspaces.
invitationIdwajib 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}

Batalkan jemputan. It stops working at once and its seat is free again.
ParameterPenerangan
workspaceIdwajib id of one of your workspaces (ws_...), from the list of your workspaces.
invitationIdwajib 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

Jemputan yang anda terima. 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}

Satu jemputan yang anda terima. Its status: active, accepted, declined, revoked or expired.
ParameterPenerangan
invitationIdwajib 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

Terima jemputan. Join with the role offered. 410 invitation_closed when it is no longer open (details.status says why).
ParameterPenerangan
invitationIdwajib 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

Tolak jemputan. The seat it held is free again.
ParameterPenerangan
invitationIdwajib 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"

Sistem

Status perkhidmatan. Kunci API tidak diperlukan.

GET/v1

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

GET/v1/health

Status perkhidmatan (kunci tidak diperlukan).
curl "https://api.sellwinners.com/v1/health" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/system/freshness

Setakat mana data ini terkini (kunci tidak diperlukan).
curl "https://api.sellwinners.com/v1/system/freshness" \
  -H "X-API-Key: YOUR_API_KEY"

Pelayan MCP

Pelayan MCP yang kami hoskan mendedahkan data yang sama sebagai alat untuk ejen AI. Gunakan kunci API yang sama dengan REST API; panggilan alat berharga seberapa banyak hasil yang dipulangkannya, seperti API, dan jawapannya menyatakan hal itu dalam meta.credits (used, remaining, source). Ia juga mendedahkan tiga sumber: sellwinners://me, sellwinners://usage dan sellwinners://openapi.

Pelan Free turut menyertakan pelayan MCP: 150 kredit sebulan, 10 permintaan seminit, 10 hasil pertama bagi setiap carian. Pada pelan Free, senarai alat menamakan alat yang termasuk dalam Free; alat lain membalas ralat alat yang berakhir dengan [plan_not_eligible], yang tidak dikira. Pada pelan berbayar, panggilan alat yang tidak termasuk dalam pelan itu mengembalikan ralat alat yang berakhir dengan [plan_not_eligible], yang tidak dikira.

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.

Persediaan klien

No API key: these sign in with your SellWinners account.
Pelan Free turut menyertakan pelayan MCP: 150 kredit sebulan, 10
permintaan seminit, 10 hasil pertama bagi setiap carian.

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.

Alat

Penemuan 3
lookupPadankan nama jenama, domain kedai atau id halaman Facebook kepada id yang boleh digunakan dengan alat lain
3 argumen
qtexttypetextlimitnumber
lookup_filter_idsId untuk penapis alat carian
7 argumen
typetextquerytextscope_tracked_pageslistscope_domaintextstatustextlimitnumbersnapshot_datetext
list_saved_viewsCarian yang anda simpan pada halaman senarai laman web, sedia untuk alat carian
1 argumen
contexttext
Kedai 17
search_shopsCari atau semak imbas kedai Shopify
48 argumen
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_shopsPesaing sesebuah kedai (id atau domain)
10 argumen
shoptextlimitnumbersort_bytextordertextoffsetnumberseasontextfiltersobjectmarkettextexclude_shopslistdetailtext
find_winning_productsProduk yang sedang laris dalam sesuatu niche
5 argumen
nichetextkeywordslistcountrytextmax_resultsnumberdetailtext
search_productsCari atau semak imbas produk kedai mengikut harga, jualan, unit terjual, negara jualan, iklan, capaian, ulasan, tarikh pelancaran, mata wang atau negara kedai
37 argumen
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_imageCari produk kedai yang menyerupai gambar (URL imej atau fail), bersama kedai mereka
12 argumen
image_urltextimage_base64textsort_bytextordertextmax_per_shopnumberfiltersobjectpagenumberlimitnumbersearch_idtextdetailtextoffsetnumbergroup_brandstrue / false
search_shops_by_imageCari kedai yang menjual apa yang ditunjukkan gambar, dengan produk paling hampir
7 argumen
image_urltextimage_base64textsearch_idtextlimitnumberoffsetnumbergroup_brandstrue / falseproducts_per_shopnumber
get_productSatu produk dengan helaian penuh: foto, pilihan dan varian
2 argumen
product_idtexturltext
get_product_adsIklan Meta yang memaut ke halaman produk
5 argumen
product_idtextstatustextpagenumberlimitnumberdetailtext
analyze_productSatu produk, iklan terbarunya dan bacaan isyaratnya
3 argumen
product_idtexturltexttop_adsnumber
product_launch_radarProduk yang baru dilancarkan, disusun mengikut jualan atau tekanan iklan
34 argumen
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_linkCipta (atau pulangkan) pautan awam satu produk
2 argumen
product_idtextconfirmtrue / false
delete_product_share_linkAlih keluar pautan awam satu produk
2 argumen
product_idtextconfirmtrue / false
brief_competitorTaklimat ringkas tentang satu pesaing (id kedai, domain atau nama)
11 argumen
competitortextsectionslistmax_productsnumbermax_emailsnumbermax_adsnumbershoptextad_rank_windowtextad_rank_sorttextmax_current_ranknumbermin_rank_deltanumbersnapshot_datetext
shop_reportSatu laporan tentang sesebuah kedai: suapannya, halaman Facebook, musim Q4, halaman pendaratan, kedudukan iklan atau ujian kreatifnya
19 argumen
shoptextreporttextyearnumberdate_fromtextdate_totexturltextadvertiser_idtextmodetextdaysnumberad_idslistdatetextas_oftextmedia_typetextstatustextkeywordslistsnapshot_datetextpagenumberlimitnumberdetailtext
compare_shopsSatu angka bagi beberapa kedai secara bersebelahan
3 argumen
shopslistmetrictextsnapshot_datetext
market_overviewSeluruh pasaran, hari demi hari, atau sepanjang musim Q4
5 argumen
kindtextyearnumberdate_fromtextdate_totextlimitnumber
detect_shopify_storeSama ada kedai berjalan di Shopify, temanya dan apl Shopify yang dimuatkannya
1 argumen
urltext
Iklan dan media 8
search_adsCari iklan Meta (Facebook / Instagram) mengikut perkataan dalam teks iklan, jenama atau halaman pendaratan
97 argumen
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_adRekod penuh satu iklan Meta (atau satu iklan Google atau siaran TikTok)
1 argumen
ad_identifiertext
creative_inspiration_packInspirasi kreatif untuk sesuatu niche
5 argumen
nichetextkeywordslistfocustextmax_adsnumbertrend_signaltext
search_google_ads_libraryCari iklan Google
57 argumen
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_libraryCari iklan TikTok dan siaran organik
66 argumen
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_linkBuat (atau kembalikan) pautan awam ke satu iklan
2 argumen
ad_idtextconfirmtrue / false
delete_ad_share_linkAlih keluar pautan awam ke satu iklan
2 argumen
ad_idtextconfirmtrue / false
write_ad_hooksTulis tiga ayat pembuka ringkas (hook) untuk iklan sesuatu produk, untuk Meta, TikTok atau kedua-duanya
7 argumen
nichetextproducttextangletextplatformtextlanguagetextregeneratetextidempotency_keytext
Pengiklan dan e-mel 5
search_advertisersCari pengiklan (halaman Facebook)
26 argumen
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_advertiserRekod satu pengiklan, atau iklan aktif dan capaiannya hari demi hari
4 argumen
advertiser_idtextviewtextdaysnumbersnapshot_datetext
search_emailsCari e-mel pemasaran jenama mengikut perkataan dalam subjek, penghantar atau kandungan
11 argumen
querytextshoptextcampaign_typetextsort_bytextordertextpagenumberlimitnumberfiltersobjectdetailtexttimeframetextintenttext
get_email_htmlHTML mentah satu e-mel (gunakan search_emails dahulu untuk mencari id)
4 argumen
email_idtextinclude_htmltrue / falseshoptexthtml_partnumber
analyze_shop_emailsStrategi e-mel sesebuah kedai
2 argumen
shoptextmax_emailsnumber
Jenama yang dijejak 14
list_tracked_brandsJenama yang anda jejak, bersama kaunter iklan aktifnya
6 argumen
pagenumberlimitnumberfolder_idslistnametextsort_bytextfolder_idnumber
add_to_brandtrackerMula menjejak jenama
5 argumen
facebook_page_idtextwebsite_idtextshop_idtextdomaintextfolder_idnumber
delete_from_brandtrackerBerhenti menjejak jenama
3 argumen
brandtracker_idtextconfirmtrue / falseworkspace_link_idnumber
list_brandtracker_foldersFolder penjejak anda
create_brandtracker_folderBuat folder penjejak
1 argumen
nametext
rename_brandtracker_folderNamakan semula folder penjejak
2 argumen
folder_idnumbernametext
delete_brandtracker_folderPadam folder penjejak
3 argumen
folder_idnumberactiontextconfirmtrue / false
move_tracked_brandsPindahkan jenama yang dijejak ke dalam folder (folder_id=null mengeluarkannya daripada sebarang folder)
3 argumen
brandtracker_idslistfolder_idnumberworkspace_link_idslist
get_brand_activityApa yang dilakukan oleh jenama yang dijejak merentasi Meta, TikTok, Google dan e-mel
11 argumen
brandtracker_idtextbrandtextviewtextsourcetextsincetextuntiltextdaytexttypeslistpagenumberlimitnumberdetailtext
analyze_tracked_brandPandangan mendalam tentang satu jenama yang dijejak
4 argumen
brandtracker_idtextbrandtextsnapshot_datetextdetailtext
analyze_brand_changesApa yang berubah bagi jenama yang dijejak dalam satu tempoh (1d, 7d, 14d, 30d; kedudukan yang naik dibaca dalam 7d untuk 1d, hook dalam 30d untuk 14d, ujian kreatif ialah yang terkini)
6 argumen
brandtracker_idtextbrandtextperiodtextfocustextsnapshot_datetextdetailtext
get_brandtracker_scaling_adsIklan jenama yang dijejak yang paling banyak naik kedudukan, bersama sejarah kedudukannya
32 argumen
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_transcriptsSkrip video jenama yang dijejak, dikumpulkan mengikut teks
9 argumen
brandtracker_idtextbrandtexttime_periodtextpagenumberlimitnumbereu_onlytrue / falseordertextsort_bytextsnapshot_datetext
daily_radarRumusan harian merentasi jenama yang anda jejak
4 argumen
folder_idslistfocustextevent_typeslistfolder_idnumber
Papan 14
list_boardsPapan anda
8 argumen
scopetextstatetextkindtextsurfacetextparent_board_idtextroot_onlytrue / falsepagenumberlimitnumber
get_boardSatu papan
1 argumen
board_idtext
create_boardBuat papan
6 argumen
nametextkindtextsurfacetextdescriptiontextvisibilitytextparent_board_idtext
update_boardNamakan semula papan, ubah penerangan atau keterlihatannya
4 argumen
board_idtextnametextdescriptiontextvisibilitytext
move_boardPindahkan papan ke bawah papan folder (parent_board_id=null memindahkannya ke peringkat teratas)
2 argumen
board_idtextparent_board_idtext
archive_boardArkibkan papan dan segala-galanya di bawahnya (restore_board mengembalikannya)
2 argumen
board_idtextconfirmtrue / false
restore_boardPulihkan papan yang diarkibkan
1 argumen
board_idtext
list_board_itemsItem yang disimpan pada papan
3 argumen
board_idtextpagenumberlimitnumber
find_saved_itemsCari segala yang anda simpan, pada setiap papan dan dalam kegemaran anda
13 argumen
querytextsource_typeslistboard_idtextscopetextstatetextsaved_fromtextsaved_totextsort_bytextordertextpagenumberlimitnumberinclude_itemstrue / falsedetailtext
add_board_itemSimpan item pada papan koleksi
5 argumen
board_idtextsource_typetextsource_idtextsource_indextextpositionnumber
move_board_itemPindahkan item yang disimpan ke papan lain
4 argumen
board_idtextitem_idtexttarget_board_idtextpositionnumber
remove_board_itemAlih keluar item yang disimpan daripada papan
3 argumen
board_idtextitem_idtextconfirmtrue / false
create_board_share_linkBuat pautan awam ke papan
2 argumen
board_idtextconfirmtrue / false
delete_board_share_linkAlih keluar pautan awam ke papan
2 argumen
board_idtextconfirmtrue / false
Kegemaran 10
list_favoritesIklan, kedai atau e-mel yang anda simpan
6 argumen
kindtextscopetextfolder_idtextpagenumberlimitnumberdetailtext
add_favorite_itemSimpan iklan, kedai atau e-mel
4 argumen
kindtextitem_idtextscopetextfolder_idtext
move_favorite_itemPindahkan kegemaran yang disimpan ke folder (folder_id=null mengeluarkannya daripada sebarang folder)
4 argumen
kindtextfavorite_idtextscopetextfolder_idtext
remove_favorite_itemAlih keluar kegemaran yang disimpan, mengikut id sendiri (favorite_id) atau id rekod yang disimpan (item_id)
5 argumen
kindtextscopetextfavorite_idtextitem_idtextconfirmtrue / false
create_favorite_folderBuat folder kegemaran
4 argumen
kindtextnametextscopetextparent_idtext
update_favorite_folderNamakan semula folder kegemaran, atau pindahkannya (move=true dengan parent_id, null untuk peringkat teratas)
6 argumen
kindtextfolder_idtextscopetextnametextparent_idtextmovetrue / false
delete_favorite_folderPadam folder kegemaran
6 argumen
kindtextfolder_idtextmodetextscopetexttarget_folder_idtextconfirmtrue / false
set_favorite_folder_visibilityJadikan folder kegemaran peribadi atau dikongsi
4 argumen
kindtextfolder_idtextvisibilitytextscopetext
create_favorite_folder_share_linkBuat pautan awam ke folder kegemaran
4 argumen
kindtextfolder_idtextscopetextconfirmtrue / false
delete_favorite_folder_share_linkAlih keluar pautan awam ke folder kegemaran
4 argumen
kindtextfolder_idtextscopetextconfirmtrue / false
Akaun 2
usage_getPelan anda, kreditnya dan berapa yang berbaki
check_creditsBerapa kredit yang anda ada lagi bulan ini (jawapan sama seperti usage_get)