Auf dieser Seite

API-Dokumentation für E-Commerce-Daten

Die API von SellWinners liefert Ihnen Daten zu E-Commerce und Werbung über HTTPS mit JSON-Antworten: Shopify-Shops mit ihren Produkten und ihrem Traffic; Shop-Produkte mit Preis, Umsatzschätzungen, Bewertungen und Anzeigen; Meta-, Google- und TikTok-Anzeigen; Werbetreibende; und die E-Mails, die Marken versenden. Jeder Endpunkt steht KI-Agenten auch über unseren gehosteten MCP-Server zur Verfügung. Diese Seite behandelt die Authentifizierung, das Antwortformat, Paginierung, Sortierung und Filter, Ratenlimits und Credits, Fehler und Medien-URLs, dann jeden Endpunkt mit seinen Parametern und einer Beispielanfrage sowie die Tools des MCP-Servers.

Basis-URL
https://api.sellwinners.com
Live ausprobieren

Senden Sie in kostenpflichtigen Tarifen echte Anfragen aus dem Playground, oder erzeugen Sie einen Client aus der OpenAPI-Spezifikation:

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

Schnellstart

  1. Erstellen Sie ein Konto, bestätigen Sie Ihre E-Mail-Adresse und wählen Sie einen kostenpflichtigen Tarif: Damit stehen Ihnen die API und der MCP-Server offen.
  2. Öffnen Sie API-Schlüssel und erstellen Sie einen Schlüssel. Kopieren Sie ihn sofort: Er wird nur einmal angezeigt.
  3. Senden Sie Ihre erste Anfrage:
curl "https://api.sellwinners.com/v1/lookup?q=allbirds.com" \
  -H "X-API-Key: YOUR_API_KEY"

Authentifizierung

Senden Sie Ihren API-Schlüssel bei jeder Anfrage im Header X-API-Key oder als Bearer-Token:

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

Schlüssel beginnen mit ak_live_. Halten Sie sie geheim: Verwenden Sie sie nicht in Frontend-Code oder öffentlichen Repositorys. Sie können mehrere Schlüssel erstellen (einen pro App oder Umgebung) und jeden Schlüssel in Ihrem Dashboard widerrufen; ein widerrufener Schlüssel funktioniert sofort nicht mehr.

Antworten

Jede Antwort ist JSON. Sie enthält eine requestId und das Ergebnis unter data: eine Liste bei Suchen und Auflistungen, ein Objekt bei einem einzelnen Datensatz. Listen enthalten zusätzlich ein Objekt pagination, und manche Antworten enthalten zusätzlich 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 }
}

Datensätze sind verschachtelte Objekte: Eine Anzeige hat media, advertiser, content, metrics, audience, rank und flags, und Shops, Werbetreibende, Google-Anzeigen, TikTok-Elemente und E-Mails sind genauso gruppiert. Ein unbekannter Wert ist null. Weitere Felder ohne festen Platz stehen unter extra. Das Beispiel oben ist gekürzt.

In einer Anzeige ist content.title die Überschrift und content.callToAction ein lesbarer Text wie »Shop now«. metrics.estimatedSpend ist die Ausgabenschätzung der Quelle, wenn es eine gibt (eine einzelne Anzeige von /v1/ads/{adId} liest sie), andernfalls Reichweite x 9 / 1000 (9 USD pro 1.000 erreichte Personen); eine Ausgabenschätzung hat unter 10 USD zwei Dezimalstellen und ist ab 10 USD in ganzen Dollar angegeben. rank.rankDelta ist der aktuelle Rang minus der vorherige, ein negativer Wert bedeutet also, dass die Anzeige aufgestiegen ist, und rank.improvementPct ist ein Bruchteil (0,25 ist ein Viertel).

Die Rangberichte des Marken-Trackers (/ad-rank, /scaling-ads, /v1/workspace/scaling-ads und das MCP-Tool get_brandtracker_scaling_ads) fügen eigene metrics hinzu: Dort ist metrics.rankDelta der vorherige Rang minus der aktuelle (positiv: gewonnene Plätze) und metrics.improvementPct der Anteil des vorherigen Rangs, der gewonnen wurde, wie bei einer Anzeige (0,875 entspricht 87,5 %). Bei einer einzelnen Anzeige werden metrics.reachDelta1d, reachDelta7d und reachDelta30d aus ihrem Reichweitenverlauf befüllt. Shops nennen ihre Kategorien: catalog.mainCategory in Auflistungen, dazu catalog.categories bei einem einzelnen Shop.

In einer Google-Anzeige sind media.type und media.format jeweils text, image oder video, und media.url ist das Bild der Anzeige: bei einer Videoanzeige ihr Vorschaubild (es gibt keine Videodatei). transparencyUrl ist die Anzeige im Ads Transparency Center von Google, wo eine Videoanzeige abgespielt wird; der Wert ist null, wenn die Anzeige keine Google-IDs hat. network ist search, youtube, shopping, maps oder other, und dasselbe gilt für die Werte von extra.networks.

Geändert am 19. Oktober 2026:

  • Das media.format einer Google-Anzeige war ein Formatcode und ist jetzt text, image oder video, ihr media.type kann text oder video sein, und extra.networks verwendet die kleingeschriebenen Namen von network.
  • Bei Google ist media.url nie eine Videodatei, auch wenn media.type den Wert video hat.
  • Im Google-Filter formats bedeutet image jetzt Bildanzeigen (früher bedeutete es Textanzeigen), verwenden Sie also text für Textanzeigen. Die früheren Codes static_image, html5_iframe und responsive_display sowie ihre Kurznamen werden weiterhin akzeptiert.

Der status einer Google-Anzeige ist nur active, solange Google die Anzeige zeigt: Eine Anzeige, die Google seit mehr als 7 Tagen nicht gezeigt hat, ist unknown. daysRunning zählt die Tage von firstSeenAt bis lastSeenAt, beide eingeschlossen; extra.servedDays ist die eigene Zählung der Datenquelle, die weiterläuft, nachdem eine Anzeige gestoppt wurde. Die Filter stimmen mit dem überein, was jede Anzeige zeigt: status=active behält die Anzeigen, die Google in den letzten 7 Tagen gezeigt hat, und status=inactive die Anzeigen, die die Datenquelle als gestoppt markiert, sodass eine Anzeige mit unknown unter keinen der beiden fällt; minDaysRunning und maxDaysRunning behalten die Anzeigen, deren daysRunning im Bereich liegt. Eine solche Liste hat pagination.total null, und wenn nur wenige der gelesenen Anzeigen passen, endet sie früh, mit meta.partial und einer Warnung.

Ohne Suchtext listet sortBy=relevance die neuesten auf; sortBy=reach nimmt nur order=desc an. Mit status=active listet sortBy=reach wenige Anzeigen auf: In der Reihenfolge nach Reichweite sind die ersten Anzeigen meist solche, die Google nicht mehr zeigt, sortieren Sie also nach den neuesten, um die Anzeigen zu erhalten, die Google jetzt zeigt (die Warnung sagt das auch). Google-Anzeigen nehmen kein sortBy=longestRunning an: Die Datenquelle ordnet es nach Tagen, die weiterlaufen, nachdem eine Anzeige gestoppt wurde, daher listete es Anzeigen auf, die Google nicht mehr zeigt, und es antwortet mit 400 und diesem Grund.

extra.startIsFloor markiert eine Anzeige, die zuerst am 31. Mai 2018 gesehen wurde, dem ersten Tag der Google-Anzeigendaten, sie kann also älter sein. audience.countries listet jedes Zielgruppenland auf, mit einem percentage nur bei einer Anzeige, die in einem einzigen Land gezeigt wurde; remarketing und interest sind null, wenn sie unbekannt sind.

Google meldet eine Reichweite nur für einige der in der EU gezeigten Anzeigen, oft nur als 10.000.000, das obere Ende seiner Skala (10 Millionen oder mehr): Die meisten Anzeigen haben keine, und nullReasons sagt, warum reach.value den Wert null hat (not_reported: eine in der EU gezeigte Anzeige, für die Google keine meldet; eu_only: eine anderswo gezeigte Anzeige), außer bei einer Reichweite, die der Tarif nicht enthält. extra.networks ist die Liste der Plattformen der Anzeige laut Datenquelle, die network nicht unbedingt nennt. extra.shop.google enthält die Google-Summen der Website des Werbetreibenden; bei einer Website, die kein Shop ist (ein App-Store, ein soziales Netzwerk, ein Linkverkürzer), sind advertiser.domain und websiteId null.

Geändert am 20. Oktober 2026:

  • Eine Domain (GET /v1/shops/{domain}, der Lookup, eine TikTok-domain, das Wettbewerber-Briefing) ist die Website mit genau dieser Domain, auch außerhalb des Shop-Index; eine Domain, die die Datenquelle nicht erreicht, liefert 404.
  • GET /v1/lookup ordnet die Ergebnisse vom besten an: die eigene Website einer Domain, ihre eigenen Facebook-Seiten (Hauptseite zuerst), dann die Seiten mit ähnlichem Namen; bei einem Namen die eigene Website der Marke und ihre eigenen Seiten (Hauptseite zuerst), dann die Shops und Seiten, die über den Namen gefunden wurden.
  • Wenn die Website der Marke gefunden ist, wird ein Shop oder eine Seite, die den Namen nur innerhalb eines Wortes enthält, ausgelassen, und eine Website dieses Namens ist nur dann ein exakter Treffer, wenn sie Anzeigen schaltet; andernfalls ist ein Namenstreffer nur mit Traffic oder Anzeigen exakt. Offizielle Seiten mit einem anderen Namen ohne laufende Anzeige kommen nach den über den Namen gefundenen Seiten.
  • signals.activeAdsSource einer Shop-Zeile sagt, woher ihre activeAds stammen: page (die laufenden Anzeigen ihrer Hauptseite, jetzt gelesen, in der eigenen Zeile des Shops) oder index (die Zählung des Shop-Index, die älter sein kann).
  • Eine Shop-Suche nach Domain (searchType=domain) listet die exakte Website zuerst auf, mit extra.exactDomainMatch (und extra.inShopIndex false, wenn der Shop-Index sie nicht enthält).
  • Bei einer Website, die kein Shop ist (ein App-Store, ein soziales Netzwerk oder Messaging-Dienst, ein Linkverkürzer oder eine Tracking-Weiterleitung), ist extra.domain einer Werbetreibenden-Zeile null, ein Werbetreibenden-Datensatz nennt sie in extra.nonShopSite, lässt extra.platforms weg und bezieht linkedShops aus seinen Landingpages (fromLandingPages), und eine Anzeige hat keine shops.
  • Datums- und Zeitangaben, die die Datenquelle ohne Zeitzone sendet, sind UTC und werden jetzt mit +00:00 gesendet.
  • In den E-Mail-Statistiken ist emailsByDayOfWeek nach der Nummer des Tages geschlüsselt: 0 ist Sonntag, 6 Samstag.
  • Lookup-Zeilen können nullReasons enthalten, und ein Shop-Datensatz meta.partial, wenn seine Werte aus der Auflistung nicht gelesen werden konnten.

Ebenfalls geändert am 20. Oktober 2026 (TikTok):

  • Das publishedAt eines TikTok-Elements ist UTC. Es lag 1 oder 2 Stunden zu spät, sodass ein Post aus den letzten Stunden eines UTC-Tages beim nächsten Tag erschien und ein daysRunning einen Tag zu kurz war.
  • Die Filter stimmen damit überein: publishedAfter und publishedBefore sind UTC (ein Datum allein ist der Beginn seines Tages, und publishedBefore listet die Posts davor auf), minDaysRunning und maxDaysRunning zählen ab dem UTC-Tag, wie daysRunning, und sortBy=longestRunning beginnt am 31. August 2016, 22:00 UTC.

Ebenfalls geändert am 20. Oktober 2026 (Google-Anzeigen):

  • GET /v1/google-ads, POST /v1/google-ads/query und das MCP-Tool nehmen kein sortBy=longestRunning (und kein daysRunning) an und antworten mit 400 und dem Grund: Die Datenquelle ordnet es nach Tagen, die weiterlaufen, nachdem eine Anzeige gestoppt wurde, daher listete es Anzeigen auf, die Google nicht mehr zeigt.
  • Eine Free-Suche, deren erste Ergebnisse durch status=active knapp ausfallen, antwortet mit meta.partial und einer Warnung, die sagt, wie viele der gelesenen Anzeigen sie auflistet.
  • In extra.shop hat eine Website ohne Traffic-Daten kein monthlyVisits (es war 0), ein trafficGrowth30d kommt nur neben Besuchen über 0, und extra.shop.google lässt ein totalReach oder weeklyReach von 0 weg (nie gemeldet) und, wenn es keine Anzeige zählt, die Zählungen von 0.
  • Eine in einem Board gespeicherte Google-Anzeige liest sich genauso.

Ebenfalls geändert am 20. Oktober 2026 (Shops):

  • In GET /v1/shops/{shopId} ist advertising.summary.reach30d die EU-Reichweite der letzten 30 Tage, nach Datum summiert (es war die Summe seit Beginn der Erfassung, jetzt totalReach), spend30d ist diese Reichweite x 9 / 1000, extra.estimatedSpendUsd sind die Ausgaben seit Beginn der Erfassung, und extra.adsLaunched30d summiert die in den letzten 30 Tagen gestarteten Anzeigen; alle sind null bei einem Shop ohne Reichweite in der EU oder im Vereinigten Königreich.
  • Shop-Datensätze, aufgelistete Shops und E-Mail-Statistiken enthalten nullReasons, eine Zuordnung jedes Feldpfads zu dem Grund, warum er null ist: not_shopify (Umsatz und Produkte werden nur für Shopify-Shops geschätzt), no_estimate, not_measured, eu_uk_only, not_linked (kein TikTok-Profil), not_on_tp, no_reviews, none_found.
  • Eine Umsatzschätzung von 0 neben verkauften Einheiten ist null, in Datensätzen, Auflistungen und im Umsatzverlauf, dessen period=week einen Punkt pro Woche hat.
  • traffic.growth30d ist ein Bruchteil (-0,1543 entspricht -15,4 %), und traffic.history beginnt beim ersten Monat mit Besuchen.
  • catalog.mainCategory stammt aus den Kategorie-IDs (die spezifischste des Hauptzweigs), mit catalog.categoryLeaves und productsCountCapped (25.001 ist die Obergrenze der Datenquelle: 25.000 oder mehr).
  • Bei einer Trustpilot-Seite ohne Bewertung ist die Bewertungsnote null.
  • tiktok.matchedBy ist socials oder handle, wenn die TikTok-Zahlen aus den Social-Media-Profilen des Shops stammen oder aus einem Profil, das über seinen Handle gefunden wurde (ein Treffer, keine Verknüpfung der Datenquelle).
  • advertising.mainPageActiveAds sind die laufenden Anzeigen der Hauptseite (der Wert aus ihrer Anzeigenübersicht, wie ihn ihre Hauptseite in linkedAdvertisers zeigt; die Zählung der Shop-Listen nur, wenn es keinen gibt) und linkedAdvertisers[].rank der Rang der Seite.
  • Ähnliche Shops lassen den Shop selbst und seine eigenen Websites weg, und jede Seite wird von weiter unten in der Liste aufgefüllt (offset und limit zählen die Liste ohne sie).
  • Nach Beliebtheit sortierte Produkte stellen die Bestseller des Shops an den Anfang (meta.order).
  • Die E-Mails und E-Mail-Statistiken eines Shops zählen jeden Kampagnentyp, und ihre 90-Tage-Werte sind null, wenn sie unbekannt sind.
  • Eine Sortierung nach Umsatz listet eine Zeile pro Shopify-Shop auf (extra.sharedSalesWith), und sortBy=estMonthlySales&order=asc lässt die Shops ohne Schätzung weg.

Ebenfalls geändert am 20. Oktober 2026 (Shop-Zahlen):

  • Eine Sortierung nach Umsatz in GET /v1/shops liest über die Domains hinaus weiter, die sie zu einer Zeile pro Shopify-Shop zusammenführt (sie hörte nach den ersten Zeilen auf), führt die Domains eines Shops auch weiter unten in der Liste zusammen, und ihr pagination.total ist null, bis die Liste bis zum Ende gelesen ist; sortBy=estMonthlySales&order=asc beginnt bei einer Schätzung von 100 USD (minMonthlySales 100).
  • Eine Umsatzschätzung unter 0,50 USD pro verkaufter Einheit ist null (no_estimate), in Datensätzen, Auflistungen und im Umsatzverlauf.
  • traffic.monthlyVisits ist null bei einer noch nicht gemessenen Website und traffic.growth30d, wenn der Vormonat keine Besuche hatte (not_measured); das growth30d eines sozialen Netzwerks stammt aus seinem Follower-Verlauf, wenn die Datenquelle 0 oder nichts liefert, und 0 Follower sind null (not_measured).
  • Aufgelistete Shops sagen, warum catalog.productsCount und sales.unitsSold null sind.
  • extra.storeWide markiert eine Domain mit 0 Besuchen, die den Umsatz ihres Shops trägt (eine gemessene 0, oder eine andere Domain des Shops, genannt in extra.sharedSalesWith, hat die Besuche; Free lässt den Namen in einem Shop-Datensatz weg).
  • advertising.mainPageActiveAds sind die laufenden Anzeigen der Hauptseite, wie ihre Anzeigenübersicht sie liest (die Zählung der Shop-Listen nur, wenn es keine gibt).
  • Ähnliche Shops lassen auch die Marken-Shops des Shops weg, und extra.similarIndexed ist false bei einem Shop, den der Ähnlichkeitsindex nicht enthält.
  • catalog.mainCategory behält die eigene Bezeichnung der Datenquelle nur, wenn sie der Name einer Kategorie ist.
  • Eine Mediendatei, die eine Antwort verlinkt hat und die die Datenquelle nicht mehr hat, antwortet mit 200, einem leeren Body und X-Media-Missing: true.

Ebenfalls geändert am 20. Oktober 2026 (Werbetreibende und Meta-Anzeigen):

  • Die Reichweite eines Werbetreibenden ist die Reichweite in der EU und im Vereinigten Königreich, in den eigenen Zeitfenstern der Werbetreibenden-Suche: advertising.reach30d, extra.reach14d, reach90d und totalReach sind null bei einer Seite ohne Anzeigen in der EU oder im Vereinigten Königreich und ohne Reichweite oder bei einem Zeitfenster, das die Datenquelle nicht gezählt hat, und nullReasons sagt, warum (eu_uk_only, not_measured); eine innerhalb eines Zeitfensters erstellte Seite hat ihre gesamte Reichweite darin (sie waren 0).
  • In GET /v1/advertisers/{advertiserId} ist die Reichweite diejenige, die Werbetreibenden-Listen zeigen (sie wurde 30 Messungen zurück gelesen, und Messungen überspringen Tage), die Ausgabenschätzungen sind null, wenn sie es ist, extra.avgSpendUsd14d sind die durchschnittlichen täglichen Ausgaben über 14 Tage, extra.avgActiveAds14d ist der 14-Tage-Durchschnitt ihrer laufenden Anzeigen (es waren ihre neuen Anzeigen über 14 Tage), wo die Datenquelle ihn nicht berechnet hat, bei einer innerhalb der 14 Tage erstellten Seite aus ihren seit ihrem ersten Tag gelesenen laufenden Anzeigen (extra.averagedFrom), sonst null, und die Zählungen neuer Anzeigen einer innerhalb des Zeitfensters erstellten Seite zählen jede ihrer Anzeigen.
  • advertising.countryDistribution ist der Anteil ihrer laufenden Anzeigen, die auf jedes Land zielen (eine Anzeige zielt auf mehrere), extra.reachCountries enthält den Anteil jedes Landes an der EU-Reichweite, extra.platforms.meta enthält die eigenen Anzeigen der Seite (es enthielt die der Hauptseite des Shops), eine TikTok- oder Google-Zählung ohne Wert wird weggelassen, extra.mainLandingPages greift auf die Vorschau der Landingpages einer neuen Seite zurück, und die lastAds einer Seite, deren Anzeigen die Anzeigensuche noch nicht aufgenommen hat, sind die neuesten, die ihre Werbetreibenden-Zeile auflistet, mit meta.indexing, wie bei GET /v1/advertisers/{advertiser_id}/ads (mit meta.liveAds).
  • Neu: GET /v1/advertisers/{advertiserId}/history, die laufenden Anzeigen der Seite und die gewonnene EU-Reichweite, Tag für Tag.
  • Eine Instagram-Follower-Zahl von 0 ist null (die Datenquelle schreibt 0 für eine Seite ohne ein ihr bekanntes Konto).
  • metrics.reach und die Ausgaben einer Meta-Anzeige sind null bei einer Anzeige, die nicht in der EU oder im Vereinigten Königreich gezeigt wurde (eu_uk_only; sie waren 0 oder null), und bei einer EU-Anzeige, deren Reichweite noch nicht gezählt ist (not_measured; sie war 0), wobei Medienzeilen den Grund in nullReasons.reach nennen, media.type ist carousel bei einer Anzeige mit mehr als einem Bild oder Video, und extra.startIsFloor markiert eine Anzeige, die am 1. Januar 2018 gestartet ist, dem ersten Tag der Meta-Anzeigendaten der Datenquelle.
  • sortBy=adRank listet den besten Rang (1) zuerst auf, unabhängig von der Reihenfolge.
  • Eine einzelne Anzeige (GET /v1/ads/{adId}) übernimmt die neueste von der Datenquelle gemeldete Reichweite und die Ausgaben dazu, zählt ihre Reichweitendeltas nach Datum, solange ihr Reichweitenverlauf aktuell ist (sonst sind sie null), listet ihre Bilder und Videos wie ihre Suchzeile auf, befüllt advertiser.reach30d und pageAnalytics.instagramFollowersHistory, fügt pageAnalytics.reachHistory hinzu (dieselbe Reihe wie impressionsHistory) und benennt einen Shop, den der Datensatz nur über seine ID angibt (sein traffic ist null mit nullReasons shops.traffic, wenn die Website nicht gemessen wird); ihre audience.gender, ageMin, ageMax und metrics.aggregatedReach sind immer null, da die Datenquelle sie für eine einzelne Anzeige nicht meldet.
  • In einer Werbetreibenden-Suche ordnet sortBy=reach nach der Gesamtreichweite seit Beginn der Erfassung und newAds nach den neuen Anzeigen über 14 Tage.
  • Das Targeting einer Meta-Anzeige sagt, warum ihre Reichweite null ist: eu_uk_only nur bei einer Anzeige, die auf kein Land der EU und nicht auf das Vereinigte Königreich zielt; eine, die auf eines davon zielt oder deren Targeting noch nicht bekannt ist, ist in ihren ersten 7 Tagen not_measured und danach not_reported (sie waren eu_uk_only), in Anzeigenlisten, Medienzeilen und bei einer einzelnen Anzeige.
  • Eine einzelne Anzeige liest ihre Reichweiten- und Ausgabenverläufe als eine Reihe, eine Messung pro Tag (ihre Deltas ebenso), und übernimmt die letzte Messung dieser Reihe und deren Ausgaben, wenn die Reichweite des Datensatzes mehr als doppelt so hoch ist und die Reihe bis zum letzten Tag der Anzeige reicht; ihr media greift auf ihre erste aufgeführte Datei zurück und advertiser.totalReach auf die EU-Reichweite aus den Seitendetails.
  • Ein Werbetreibenden-Datensatz, dessen Zeile keine Reichweite liest, während die Seitendetails eine lesen, erhält deren Reichweite (extra.totalReach, die Ausgaben dazu, darauf gezählt advertising.reach30d), seine Anteile in extra.reachCountries werden nie auf 0 gerundet, extra.averagedFrom liegt nie vor dem Tag, an dem die Seite erstellt wurde, und sein Tagesverlauf (extra.history, GET /v1/advertisers/{advertiserId}/history) lässt die Messungen weg, die die Datenquelle verpasst hat (eine Folge von Nullen über 14 Tage oder weniger zwischen Messungen über 0).
  • Eine einzelne Anzeige, die die Messung ihrer Reihe übernimmt, behält die Reichweite des Datensatzes in extra.recordReach (den Wert, den Anzeigenlisten zeigen); in einer Werbetreibenden-Suche erhält eine Zeile, die keine EU-Reichweite liest, während die Seitendetails eine lesen, deren Reichweite, wie ihr Datensatz; und GET /v1/advertisers/{advertiserId}/history behält die Messungen von 0 einer Seite, die jetzt keine EU-Anzeige hat und vor den abgefragten Tagen Reichweite gewonnen hat (sie hat keine gewonnen; sie wurden als not_measured weggelassen).
  • In Free nennt eine Anzeige mit unbekannter Reichweite den Grund wie in kostenpflichtigen Tarifen; nur eine Reichweite, die der Tarif nicht enthält, hat keinen Grund.

Ebenfalls geändert am 20. Oktober 2026 (Ausgabenschätzungen):

  • Geschätzte Ausgaben unter 10 USD behalten zwei Dezimalstellen: Eine Reichweite von 140 bei 9 USD pro 1.000 erreichte Personen ergibt 1,26 (es war 1), und ein Tagesdurchschnitt behält seine eigenen Cent; ab 10 USD ist eine Ausgabenschätzung in ganzen Dollar angegeben (eine Reichweite von 2.000 ergibt 18).
  • Das gilt für extra.estimatedSpendUsd und extra.avgSpendUsd14d des Werbetreibenden-Datensatzes, advertising.summary.spend30d und extra.estimatedSpendUsd eines Shops, metrics.estimatedSpend einer Meta-Anzeige sowie statistics.euData.estimatedSpend30d eines Marken-Trackers und das estimatedSpend jedes Punkts von /time-series (beide hatten bei jedem Betrag zwei Dezimalstellen), in der API wie in den MCP-Tools. Wo der eigene Wert der Datenquelle diese Schätzung in ganzen Dollar ist, behält er seine Cent auf dieselbe Weise.

Ebenfalls geändert am 20. Oktober 2026 (Reichweite von Werbetreibenden und Tagesverlauf):

  • GET /v1/advertisers/{advertiserId} ergänzt extra.reachScope: outside_eu_uk bei einer Seite, deren Reichweite nach Land größtenteils außerhalb der EU und des Vereinigten Königreichs gesehen wurde (die Datenquelle meldet auch die Reichweite einiger anderswo gezeigter Anzeigen; ihre Reichweite und die daraus abgeleiteten Schätzungen sind dann diese Reichweite, keine EU-Reichweite), sonst eu_uk. Ihr extra.avgSpendUsd14d ist bei einer innerhalb der 14 Tage erstellten Seite ihre Ausgabe über die vollen Tage seit ihrer Erstellung (mindestens einer; es war ihre 14-Tage-Reichweite über 14 Tage, wo die Werbetreibenden-Zeile eine hatte).
  • extra.history des Werbetreibenden-Datensatzes und GET /v1/advertisers/{advertiserId}/history beginnen an dem Tag, an dem die Seite erstellt wurde; extra.history.newAds lässt seine 0 an den Tagen weg, die die Datenquelle verpasst hat, extra.followersHistory und die Likes und Follower in pageAnalytics einer Anzeige lassen eine 0 zwischen zwei Messungen über 0 oder an einem solchen Tag weg, und die täglichen Ausgabenschätzungen behalten unter 10 USD zwei Dezimalstellen.
  • Eine Seite, deren laufende Anzeigen noch keine Liste enthält, hat meta.indexing in ihrem Datensatz und eine leere erste Seite von GET /v1/advertisers/{advertiser_id}/ads mit meta.indexing und meta.liveAds.
  • Eine einzelne Anzeige (GET /v1/ads/{adId}): extra.spendHistory beginnt an dem Tag, an dem die Anzeige gestartet ist, jedes spendUsd mit zwei Dezimalstellen unter 10 USD; advertiser.totalReach liegt nie unter der letzten Messung von pageAnalytics.reachHistory (extra.pageRecordReach enthält dann die Summe des Datensatzes, die Werbetreibenden-Listen zeigen); extra.recordSpend sind die Ausgaben zu extra.recordReach; extra.reachScope und extra.pageReachScope sagen, wo der Großteil der Reichweite der Anzeige und ihrer Seite gesehen wurde.

Ebenfalls geändert am 20. Oktober 2026 (Marken-Tracker):

  • In GET /v1/brandtrackers und GET /v1/brandtrackers/{id} wird eine 0 bei advertising.newAdsLastDay neben Starts in den letzten 7 Tagen mit den Starts des Shops von gestern abgeglichen: deren Anzahl, oder null (not_measured) ohne Messung dieses Tages; eine Auflistung prüft höchstens 20 Marken pro Aufruf, die der abgefragten Seite.
  • In /top-ads und /v1/workspace/top-ads ist metrics.totalReach die EU-Reichweite der Anzeige: null bei einer außerhalb der EU und des Vereinigten Königreichs gezeigten Anzeige (eu_uk_only) oder einer noch nicht gezählten EU-Anzeige (not_measured), mit nullReasons, und zuletzt in einer Sortierung nach Reichweite (es war 0).
  • /testing zählt seine Reichweitenstatistiken über die Anzeigen, deren Reichweite bekannt ist, mit nullReasons stats.reach bei einem Batch ohne solche Anzeigen.
  • In /hooks, /transcripts, /landing-pages und den Hooks und Landingpages des Arbeitsbereichs ist ein totalImpressions von 0 null, mit dem neuen Grund no_eu_reach (keine EU- oder UK-Reichweite für seine Anzeigen gezählt; not_measured mit euOnly), zuletzt in seiner Sortierung.
  • In /ad-rank, /scaling-ads und /v1/workspace/scaling-ads zählen metrics.previousRank und rankDelta, wenn der Rangverlauf einer Anzeige innerhalb eines Zeitfensters von 14 oder 30 Tagen beginnt, ab ihrer ältesten Messung dort: metrics.since ist dieser Tag, und meta.windowNote sagt es, und ein Wert, der nicht angegeben werden kann, ist null mit nullReasons.
  • In /partners ist isOwnPage true für die Hauptseite des Shops, seine offiziellen Seiten mit dem Namen der Marke und eine Seite, die wie die Marke heißt (auch Creator können als offiziell eingestuft werden), und eine Reichweite oder Ausgabe mit dem Wert null hat nullReasons.
  • Die erste Seite von /ads mit adCopyHashes hat meta.latestAdDate und dataFreshnessLagDays, und mit status=active auch meta.stoppedCount.
  • /demography ist die Zielgruppe in der EU und im Vereinigten Königreich, und ein Land unter einem Zehntausendstel des stärksten wandert von countryDistribution zu otherCountries.
  • /ad-copy-evolution und /headline-evolution haben einen Punkt für jeden erfassten Tag (0, wenn der Text nicht verwendet wurde, null an einem Tag, der bei den behaltenen Texten abgeschnitten ist), ordnen Texte nach dem neuesten Tag und lassen die Tage weg, die die Datenquelle falsch gelesen hat (laufende Anzeigen unter einem Zehntel der umliegenden Tage, ein Tag oder 2 oder 3 in Folge, oder weit weniger Texte als die Tage auf beiden Seiten), wie meta.periodNote sagt; meta.recordedDays zählt die Tage. Wöchentliche und monatliche laufende Anzeigen in /time-series lassen ebenfalls 2 oder 3 solcher Messungen in Folge weg.

Ebenfalls geändert am 20. Oktober 2026 (Berichte des Marken-Trackers, Lookup und Google-Reichweite):

  • In /ad-rank, /scaling-ads und /v1/workspace/scaling-ads stammt jeder Rang einer Zeile aus dem Rangverlauf der Anzeige: metrics.currentRank ist ihre Messung von dem Tag, an dem der Rang der Anzeigenbibliothek gelesen wurde (der Rang, den /top-ads zeigt; die Bibliothek kann einen Tag hinter dem Verlauf liegen), sonst ihre neueste Messung, die trajectory endet an diesem Tag, und ohne Messung an dem Tag, an dem das Zeitfenster beginnt, zählt die älteste Messung darin (die eigene Veränderung der Datenquelle über das Zeitfenster wird nicht mehr verwendet).
  • Die ersten 50 Anzeigen der Anzeigenbibliothek (10 pro Marke über Marken hinweg) werden nach diesen Werten neu eingestuft: Eine Anzeige, die danach weniger als minRankDelta gewonnen hat oder unterhalb von maxCurrentRank liegt, wird weggelassen (eine Anzeige, deren Rangverlauf keinen Gewinn ergibt, nach der eigenen Zählung der Anzeigenbibliothek), pagination umfasst die behaltenen Anzeigen, und meta.rankNote sagt, was gelesen und weggelassen wurde, auch über Marken hinweg.
  • Eine tägliche /time-series (und der graph der Übersicht) ist null an einem Tag, dessen laufende Anzeigen die Datenquelle falsch gelesen hat (unter einem Zehntel der Tage auf beiden Seiten; der neueste Tag bleibt wie gelesen, auch in den Textverläufen), seine Starts ebenso, und das gilt auch für die Starts des Folgetags, wenn sie fast alle seine laufenden Anzeigen sind; Wochen und Monate lassen diese Starts weg, und leftOut listet die Tage auf. /landing-page-evolution lässt diese Tage bei jeder Seite weg, ebenso die eigene Messung einer Seite unter einem Zehntel der Messungen auf beiden Seiten, wie ihr meta.periodNote sagt, mit dem Tag, den der Verlauf erreicht, wenn er im Rückstand ist.
  • Ein /testing-Batch ohne gezählte Reichweite hat nullReasons stats.reach no_eu_reach, außer eine seiner Anzeigen ist noch nicht gezählt (not_measured) oder alle wurden außerhalb der EU und des Vereinigten Königreichs gezeigt (eu_uk_only); fehlende Reichweite und Ausgaben einer /partners-Zeile sind nur in den 7 Tagen nach ihrem launchDate not_measured, danach no_eu_reach.
  • /creatives bezeichnet eine Anzeige mit mehreren Bildern oder Videos als carousel (es war unknown).
  • In GET /v1/lookup ist signals.monthlyVisits eines Shops null bei einer noch nicht gemessenen Website (nullReasons not_measured; es war 0), die laufenden Anzeigen der exakten Shop-Zeile (mit jedem type, auch shop) sind die ihrer Hauptseite, wie ihre Anzeigenübersicht sie liest, ihr mainPageActiveAds, und die Zeilen der eigenen Seiten des Shops lesen ihre auf dieselbe Weise, das signals.monthlyVisits einer verfolgten Marke (und ihr totalTraffic in GET /v1/brandtrackers) ist null bei einer noch nicht gemessenen Website und sagt, warum es fehlt (not_measured, oder no_shop bei einer Seite ohne Shop), und in Free behält die Reichweite einer Seite, die kein Tarif hat, ihren Grund (eu_uk_only, not_measured), auch in Werbetreibenden-Listen.
  • Ist reach.value einer Google-Anzeige null, gibt es nullReasons (not_reported, eu_only), außer bei einer Reichweite, die der Tarif nicht enthält.
  • In GET /v1/shops/{shopId} sind advertising.mainPageActiveAds die laufenden Anzeigen der Hauptseite, wie ihre Anzeigenübersicht sie liest, die Zählung, die ihre Hauptseite in linkedAdvertisers zeigt (es war die Zählung des Shop-Index, die einen Tag älter sein kann).

Ebenfalls geändert am 20. Oktober 2026 (TikTok und E-Mails):

  • Das metrics.engagementRate einer TikTok-Zeile ist (Likes + Kommentare + Shares + Speicherungen) / Aufrufe als Bruchteil (0,0513 entspricht 5,13 %; Suchen lieferten einen Prozentwert und GET /v1/tiktok/library/{itemId} eine andere Kennzahl), und daysRunning sind die Tage seit der Veröffentlichung des Posts, in beiden.
  • metrics.rank ist der Rang des Posts unter den Posts seines Creators (1 ist der beste).
  • profile.followers ist null, wenn die Datenquelle sie nicht gezählt hat (sie lieferte 0), content.category ist null bei ihrer Sammelkategorie All, und content.hashtags sind die Tags des Posts, jeder nur einmal, geschrieben wie in seiner Beschreibung und ohne die Satzzeichen dahinter (die eines Datensatzes sind die Liste der Datenquelle, die einer Suchzeile die aus der Beschreibung).
  • Ein TikTok-Datensatz ergänzt profile.adsCount, organicCount und avgPostsPerWeek90d, befüllt profile.pageCreation und hat links null bei einer Zeile der Datenquelle, hinter der kein TikTok steht (eine ID mit weniger als 15 Ziffern oder veröffentlicht vor dem 31. August 2016, 22:00 UTC).
  • sortBy=longestRunning beginnt bei den ersten TikToks (31. August 2016, 22:00 UTC).
  • Ein E-Mail-Datensatz nennt seinen Aktionstyp, seine Kategorie und sein Ereignis, und die monatlichen Besuche, laufenden Anzeigen, Produkte und 90-Tage-Werte seines Shops sind die, die die E-Mail-Listen zeigen, ebenso die last90Days-Werte der E-Mail-Statistiken.
  • Eine E-Mail-Zeile lässt extra.shopActiveAds bei einer 0 ohne Anzeigensumme weg (ihre nullReasons sagen not_measured), und das shop.marketing.activeAds eines E-Mail-Datensatzes ist dann null; wenn die Werte des Shops nicht gelesen werden konnten, hat der Datensatz meta.partial, eine Warnung und nullReasons failed für sie.
  • Im MCP-Tool analyze_shop_emails ordnet dominant Kampagnentypen, Kategorien, Aktionstypen und Ereignisse jeweils für sich und lässt No Promotion und No Event weg.

Geändert am 21. Oktober 2026:

  • metrics.views eines TikTok-Elements sowie seine likes und saves, die daneben 0 lauten, sind null mit nullReasons not_measured (ebenso engagementRate), wenn die Datenquelle 0 Aufrufe neben Likes, Kommentaren, Shares oder Speicherungen über 0 geliefert hat, in Suchen und in GET /v1/tiktok/library/{itemId}; sortBy=views oder likes mit order=asc listet die Posts mit gezählten Aufrufen auf (minViews 1).
  • Eine Meta-Anzeigensuche mit websiteIds listet die eigenen Anzeigen der Shops auf: jede Anzeige der Hauptseite eines Shops und seiner offiziellen Seiten mit ähnlichem Namen sowie die Anzeigen seiner anderen Seiten (Creator, Publisher und Partner, die seine Anzeigen geschaltet haben), die auf den Shop oder eine Website unter seiner Domain verlinken; bis die Liste bis zum Ende gelesen ist, ist pagination.total der Suche dann die Zahl der Anzeigen der durchsuchten eigenen Seiten des Shops, eine Schätzung (pagination.totalEstimated true), oder null, wenn die Suche keine seiner eigenen Seiten nennt.
  • Mit sortBy=longestRunning wird jeder von der Datenquelle gelesene Batch von Anzeigen nach daysRunning geordnet.
  • In GET /v1/shops/{shopId} zählt advertising.activeAds die laufenden Anzeigen der eigenen Seiten des Shops (linkedAdvertisers[].isOwnPage), und in seinen /products hat ein eingestufter Bestseller Titel, Preis und Bild aus catalog.bestSellers (der Preis eines Bestsellers kann der niedrigste seiner Varianten sein).
  • traffic.monthlyVisits (und growth30d) eines Shops ist null mit not_measured, wenn es 0 lautet, weil sein Verlauf neben einer Umsatzschätzung über 0 und verkauften Einheiten auf 0 gefallen ist, in Datensätzen, aufgelisteten und ähnlichen Shops und im Lookup; eine solche Domain ist weiterhin extra.storeWide.
  • In GET /v1/ads/{adId} ist advertiser.totalReach die letzte Messung von pageAnalytics.reachHistory, solange diese Messung höchstens 2 Tage alt ist (extra.pageRecordReach enthält dann die Summe des Datensatzes), extra.advertiserTotalAds wird aus den aufgelisteten Werten der Seite befüllt (not_measured ohne einen solchen Wert), die Reichweitengewinne über 7 und 30 Tage einer innerhalb des Zeitfensters gestarteten Anzeige sind ihre gesamte Reichweite, und ein Gewinn unter dem über weniger Tage ist null (not_measured).
  • statistics.ctaCount eines Marken-Trackers benennt jeden Call-to-Action so wie content.callToAction (»Shop now«).

Ebenfalls geändert am 21. Oktober 2026 (Shops):

  • In GET /v1/shops/{shopId} ist advertising.history in jedem Tarif die Zahl der laufenden Anzeigen der Hauptseite pro Tag (in Free zählte es die aller Seiten), und die Dokumentation sagt, dass Reichweite und Ausgaben in advertising.summary, extra.adsLaunched30d, extra.totalAds und extra.estimatedSpendUsd alle Seiten des Shops abdecken, während advertising.activeAds seine eigenen Seiten zählt.
  • Ein catalog.productsCount von 0 ohne aufgelistetes Produkt neben Besuchen, einer Umsatzschätzung oder verkauften Einheiten ist null mit not_measured, in Datensätzen, aufgelisteten Shops und in meta.productsCount von GET /v1/shops/{shopId}/products; sortBy=productsCount lässt diese Shops weg und sendet mit order=asc minProductsCount 1, sofern kein Mindestwert für Produkte angegeben ist.
  • Eine Meta-Anzeigensuche eines Shops, die auf Seiten eingegrenzt ist, die nicht seine eigenen sind (trackedPages), und früh endet, nennt den Grund in meta.warnings, ohne zum Eingrenzen aufzufordern.
  • GET /v1/filters/shops meldet in meta.warnings, wenn die Datenquelle keine Werte auflistet, und nennt die Listen, die sie liefern.

Ebenfalls geändert am 21. Oktober 2026 (Paginierung, E-Mails und Anzeigenlisten):

  • Das Blättern in einer Werbetreibenden-Suche schlägt nicht mehr fehl, wenn die Datenquelle sie nicht fortsetzt (es antwortete mit 503, und ein erneuter Versuch half nicht): Die ersten 100 Ergebnisse werden in einem Aufruf gelesen, und die Seite, die das Ende des Lesbaren erreicht, antwortet mit hasMore false, mit meta.partial true und einer Warnung, die sagt, wie weit die Suche liest.
  • Eine Seite, die hinter dem exakten total einer Suche beginnt, ist leer, mit hasMore false.
  • Eine TikTok-Suche, sortiert nach views oder likes mit order=asc, beginnt bei den ersten TikToks (31. August 2016, 22:00 UTC), wie longestRunning, und metrics.views (und engagementRate) eines TikTok-Elements ist null mit not_measured, wenn es weniger Aufrufe als Likes angibt.
  • content.bodyPreview und bodyLength einer E-Mail sowie content.body eines Datensatzes sind null mit not_measured, wo die Datenquelle ihren Platzhalter für einen nicht gelesenen Text gesendet hat.
  • Datums- und Zeitangaben, die die Datenquelle in UTC liefert, werden in Listen und Datensätzen gleich geschrieben, mit +00:00 und ohne nachgestellte Nullen im Sekundenbruchteil (2026-09-30T00:20:11.507+00:00; die Zeitpunkte, zu denen Ihre eigenen Boards, Favoriten, Marken-Tracker und Freigabelinks erstellt oder geändert wurden, enden wie bisher auf Z), und E-Mail-Zeilen enthalten die IDs ihrer Kategorie, ihres Aktionstyps und ihres Ereignisses, wie der Datensatz der E-Mail.
  • Jede paginierte Liste liefert pagination.hasMore, und GET /v1/google-ads/facets/countries liefert ein Objekt pagination.
  • Ein Anfragetext, der kein gültiges JSON ist, liefert 400 validation_failed mit der Meldung »The request body is not valid JSON.« und details.position, dem Zeichen, an dem er abbricht.
  • In Meta-Anzeigenlisten ist die Reichweite einer Zeile die Messung des Anzeigenindex, die einen Tag hinter dem Datensatz der Anzeige liegen kann, und ihre Reichweitengewinne sind neben einer bekannten Reichweite null, wenn die Datenquelle keine auflistet (not_measured), außer über ein Zeitfenster, in dem die Anzeige gestartet ist, wo sie die gesamte Reichweite gewonnen hat, die ihre Zeile angibt; in GET /v1/ads/{adId} hat ein Gewinn, der neben einer bekannten Reichweite null ist, ebenfalls not_measured.

Geändert am 22. Oktober 2026 (der Tarif Free):

  • Die API und der MCP-Server wurden in die kostenpflichtigen Tarife verlegt: Ein Schlüssel eines Kontos im Tarif Free lieferte bei jedem Endpunkt außer GET /v1/account 403 plan_not_eligible, mit details.upgradeUrl, und nichts wurde gezählt. Im Tarif Free konnte kein Schlüssel erstellt werden.
  • Der Tarif Free hat sich seitdem geändert: Der Tarif Free sagt, was er jetzt umfasst.
  • Ein in einem kostenpflichtigen Tarif erstellter Schlüssel bleibt erhalten und funktioniert wieder, sobald das Konto wieder in einem kostenpflichtigen Tarif ist. Freigabelinks, die ein Konto im Tarif Free erstellt hat, werden auf dieselbe Weise pausiert.

Ebenfalls geändert am 22. Oktober 2026 (Shop-Berichte und -Datensätze):

  • In GET /v1/shops/{shopId}/ad-ranking/series ist rankDelta der Endrang minus der Startrang (negativ, wenn die Anzeige aufgestiegen ist, wie bei jeder Anzeige; es waren die gewonnenen Plätze), und improvementPercent heißt jetzt improvementPct, ein Bruchteil; jede Zeile von /ad-ranking enthält dieselben beiden Werte über das Zeitfenster des Rankings in rank.
  • In /activity/calendar einer verfolgten Marke, einem Kalendertag und /activity/calendar/days ist meta.partial true oder false, meta.partialSources nennt die teilweise gelesenen Quellen (bei /calendar und einem Tag), und Vorschauzeiten sind UTC, auch die eines TikTok-Posts.
  • In GET /v1/shops/{shopId}/landing-pages/detail greift activeAds auf die Anzeigen der Seite zurück, shareOfAds ist linkedAdsTotal von shopActiveAds, snapshots zählt die Tage, an denen die Seite erfasst wurde, lifetimeAds und impressions entfallen (die Impressionen waren noch einmal die Reichweite), eine Reichweite von 0 ist null mit nullReasons.reach no_eu_reach, und linkedAds haben die Felder der Zeilen einer Anzeigensuche.
  • Der /feed eines Shops listet seine eigenen Meta-Anzeigen auf, wie seine Anzeigensuchen.
  • GET /v1/market/q4-overview nimmt beliebige Werte für from und to innerhalb der Saison an.
  • In /q4-season listet winners den Schlüssel jedes Sales mit seinen Creatives auf, und Landingpage-URLs enthalten ihr Schema.
  • Die Shopify-Detektoren lesen einen Shop unter seiner Domain ohne www..
  • GET /v1/advertisers/{advertiserId} sowie die Landingpages, die Zielgruppe und der Medienmix einer verfolgten Marke geben einen vergangenen Tag in meta.snapshotDate zurück.
  • Wenn die Meta-Anzeigenstatistiken eines Shops in diesem Moment nicht gelesen werden können, antwortet GET /v1/shops/{shopId} mit meta.partial true und einer Warnung: Seine Reichweite, die daraus abgeleiteten Ausgabenschätzungen und sein Medien- und Formatmix sind null mit nullReasons failed, seine Anzeigen nach Land werden so gezählt, wie seine Suchzeile sie angibt, und die Antwort wird nicht gespeichert, sodass der nächste Aufruf sie erneut liest (das Wettbewerber-Briefing enthält dasselbe meta.partial und dieselben Warnungen).
  • Eine Landingpage auf der eigenen Domain des Shops oder einer Subdomain davon ist toShop true in /v1/shops/{shopId}/advertisers und /advertisers/{advertiserId}/landing-pages; wenn die Domains des Shops diese Domain auslassen, listet meta.domains sie aus den Landingpages seiner Seiten zuerst auf (fromLandingPages true, eine Untergrenze), und das shopAds einer Seite liegt nie unter den laufenden Anzeigen ihrer Landingpages auf dem Shop (shopAdsAtLeast true, wenn angehoben).
  • In GET /v1/tiktok/library/{itemId} ist profile.latestPosts[].mediaUrl das Video des Posts oder null mit nullReasons not_reported (es war das Titelbild).
  • Eine Werbetreibenden-Suche liest ihre ersten 100 Ergebnisse und meldet ihr Ende auf der Seite, die das 100. erreicht (hasMore false und die Warnung), nicht auf der leeren Seite danach.
  • Eine TikTok-Suche, sortiert nach views oder likes mit order=asc, lässt jetzt die Posts weg, deren Aufrufe nicht gezählt sind (weniger Aufrufe als Likes), und ihr pagination.total ist eine Schätzung (totalEstimated), bis die Liste bis zum Ende gelesen ist; jede andere Reihenfolge listet sie auf, mit Aufrufen null.

Ebenfalls geändert am 22. Oktober 2026 (gespeicherte Elemente und Anzeigen-Hooks):

  • Neu: GET /v1/boards/search findet, was Sie gespeichert haben, über alle Boards und Ihre Favoriten hinweg, anhand der Wörter dessen, was jede gespeicherte Kopie zeigt (jedes Wort muss vorkommen, in beliebiger Reihenfolge; Groß- und Kleinschreibung sowie Akzente werden ignoriert), ihrer ID oder des Namens ihres Boards, und nimmt sourceType, boardId, savedFrom und savedTo an; es liest nur Ihre gespeicherten Elemente, nie die Datenquelle (MCP find_saved_items).
  • Neu: POST /v1/tools/ad-hooks schreibt drei kurze Einstiegszeilen für eine Anzeige Ihres Produkts, und GET /v1/tools/ad-hooks gibt Ihr Kontingent an: kein Monatslimit in kostenpflichtigen Tarifen und ein Limit pro Minute (429 mit Retry-After); das Abfragen des Kontingents wird nicht gezählt (MCP write_ad_hooks).
  • Der MCP-Server hat 64 Tools.

Ebenfalls geändert am 23. Oktober 2026 (gespeicherte Ansichten und Shop-Filter):

  • Neu: GET /v1/views listet die Suchen auf, die Sie auf den Listenseiten der Website gespeichert haben, jeweils mit der Suche, die sie ausführt (request: Suche, searchType, sortBy, order und benannte Filter, so wie die Such-Endpunkte sie annehmen); POST /v1/views speichert eine, PATCH /v1/views/{viewId} benennt sie um, verschiebt oder ändert sie, und DELETE /v1/views/{viewId} entfernt sie. Sie lesen und schreiben nur Ihre eigenen Ansichten, nie die Datenquelle (MCP list_saved_views).
  • Shop-Suchen nehmen excludeCurrencies (Währungscodes wie EUR), socialNetworks (instagram oder tiktok: ein Shop mit einem davon) und shopifyPlan (headless) an. trafficGrowth liest auch 90 Tage (min90, max90) und adsGrowth 7 Tage (min7, max7), oder den period einer Regel (last90d, last7d); min und max bleiben die letzten 30 Tage.
  • Der MCP-Server hat 65 Tools.

Ebenfalls geändert am 23. Oktober 2026 (Produktlinks):

  • In GET /v1/shops/{shopId} enthält jeder Eintrag von catalog.bestSellers handle und productUrl, die Seite des Produkts auf der eigenen Website des Shops: die Adresse, die die Datenquelle angibt, wenn sie auf der Domain des Shops (oder einer Subdomain davon) oder seiner myshopify-Domain liegt, sonst https://<domain>/products/<handle>, wenn sein Handle bekannt ist, sonst null.
  • In GET /v1/shops/{shopId}/products folgt productUrl derselben Regel, sodass eine Adresse auf einer anderen Website nicht mehr angegeben wird, und handle ist null, wenn es kein einzelner Teil einer Adresse ist.

Ebenfalls geändert am 23. Oktober 2026 (Shop-Zeilen, ähnliche Shops und Produkte):

  • Das createdAt eines Shops (Shop-Datensatz, Shop-Zeilen und ähnliche Shops) ist nur bei einem Shopify-Shop das Erstellungsdatum. Bei einer Website außerhalb von Shopify gibt die Datenquelle den Tag an, an dem sie mit der Erfassung der Website begann, nicht deren Erstellung: createdAt ist jetzt null (nullReasons tracking_date), und dieser Tag ist das neue trackedSince. Ein Datum am oder vor dem 1. Januar 2000 ist der Platzhalter der Datenquelle und ist null (not_reported).
  • Die catalog.bestSellers von Shop-Zeilen enthalten handle, productUrl (nach der Regel des Shop-Datensatzes) und rank (1 ist der Bestseller), und Zeilen enthalten profile.isHeadless und catalog.myShopifyDomain, wie der Shop-Datensatz.
  • Das googleAds.reach.value einer Shop-Zeile ist null: Shop-Zeilen enthalten keine Google-Reichweite, die steht im Shop-Datensatz (extra.googleAds.reach).
  • Ähnliche Shops (GET /v1/shops/{shopId}/similar, die similarShops des Datensatzes) behalten ihr extra (Logo, Trustpilot, Umsatzverlauf). Eine Ähnlichkeitsliste, die die Datenquelle vor ihrem Ende abbricht, liefert meta.partial und eine Warnung auf der Seite, die diesen Punkt erreicht.
  • In GET /v1/shops/{shopId}/products waren createdAt und publishedAt die eigene Uhrzeit des Shops, als UTC gesendet (8 Stunden zu früh bei einem Shop in der US-Pazifikzeit). Sie sind jetzt UTC, zusammen mit dem neuen updatedAt, berechnet aus dem Versatz des Shops gegenüber UTC (meta.shopUtcOffset, etwa -08:00). Wenn kein Versatz gelesen werden kann, sind die drei null (local_time), und createdAtLocal, publishedAtLocal und updatedAtLocal geben die Uhrzeit des Shops an, ohne Zeitzone.
  • Ein Produkt, das nur unter den Bestsellern in den Shop-Details aufgeführt ist, hat publishedAt und updatedAt null (not_reported): Die Werte der Datenquelle waren Kopien seiner Erstellungszeit.
  • Jedes Produkt sagt, in welchen Listen es steht (lists: bestSellers, newest), und seinen Platz unter den meistverkauften (listPosition, 1 bis 100).

Ebenfalls geändert am 23. Oktober 2026 (Shop-Datensätze):

  • In GET /v1/shops/{shopId} war extra.googleAds.reach.value immer null: Es ist jetzt die Google-EU-Reichweite des Shops, mit lowerBound und upperBound, und extra.googleAds ergänzt reachHistory, history (seine als aktiv markierten Google-Anzeigen pro Woche), updatedAt und latestAds.
  • Das growth30d eines sozialen Netzwerks ist jetzt die 30-Tage-Veränderung der Follower-Übersicht (bei einigen Facebook-Seiten war es ein anderes Zeitfenster: 0,3636, wo die Veränderung 0,2898 betrug). GET /v1/shops/{shopId}/socials gibt sie ebenfalls als growth30d an.
  • Das X-Profil des Shops ist socials.x. socials.twitter wird in socials.x umbenannt und bleibt als dasselbe Objekt noch für ein Release erhalten. Jedes Netzwerk hat url, und socials.others listet die anderen Links des Shops auf.
  • tiktok.profileMetrics.percentAds ist ein Prozentwert (0 bis 100); das neue adsShare ist derselbe Wert als Bruchteil. tiktok ergänzt avatarUrl, history, postsChange30d, postsChange30dPct und latestAds, und tiktok.activity.avgActiveAds7d und avgActiveAds30d, zuvor null, mitteln seine TikTok-Anzeigen pro Tag.
  • Neu in kostenpflichtigen Tarifen: advertising.summary.firstAdSeenAt, longestRunningDays, medianRunningDays, landingPagesCount und die 30-Tage-Veränderungen der laufenden Anzeigen, gestarteten Anzeigen und EU-Reichweite (activeAdsChange30d, launchedChange30d, reachChange30d, jeweils auch als Bruchteil, …Pct) sowie advertising.runningDaysMix, reachCountries, reachHistory, topLandingPages, adsByAgeRange und adsByGender. In jedem Tarif: advertising.allPagesHistory und advertising.topCountries[].ads.
  • Neu: catalog.bestSellers[].rank, sales.hasSubscription, technology.apps[].appStoreUrl und categories, profile.isHeadless, extra.updatedAt sowie createdAt und trackedSince der oben beschriebenen Shop-Datumsangaben.
  • GET /v1/shops/{shopId}/advertisers ergänzt logoUrl und moreLandingPages jeder Seite, eine profileUrl, wo die Anzeigenübersicht keine hat, sowie landingPagesCount und moreLandingPages jeder Domain.

Ebenfalls geändert am 23. Oktober 2026 (Produkte):

  • Neu: GET /v1/products und POST /v1/products/query durchsuchen und durchstöbern Shop-Produkte, jeweils mit Preis, Umsatzschätzungen, verkauften Einheiten, Bewertungen, Bestseller-Rang, Meta-Anzeigen, EU-Reichweite und -Ausgaben, Verkaufsländern, Startdatum und Shop, sortiert nach relevance, newest (Startdatum), activeAds oder spend (EU-Werbeausgaben der letzten 30 Tage) (MCP search_products). searchType gleicht den Text mit dem Namen des Produkts oder der Domain seines Shops ab, und die benannten Filter begrenzen den Preis in USD, die aktiven Anzeigen, den Anzeigenanteil, die Anzahl der Bewertungen und den Starttag und nehmen Währungen und Abonnement an; GET /v1/filters/products listet die Währungen auf, die sie annehmen.
  • shop (die Domain oder ID eines Shops) listet nur die Produkte dieses Shops auf, ohne Suchtext daneben, in der Produktsuche und in search_products. Boards speichern Produkte (sourceType product) so, wie eine Suche sie zuletzt gezeigt hat, und die Suche über alles Gespeicherte findet sie über ihren Titel und Shop.
  • Der MCP-Server hat 73 Tools.

Ebenfalls geändert am 23. Oktober 2026 (Produktfilter):

  • Die Produktsuche nimmt weitere benannte Filter an: die Umsatzschätzung eines Monats oder eines Tages (minEstMonthlySales, minEstDailySales und ihre Höchstwerte; eine Tagesgrenze wird als 30 Tage davon gerechnet), verkaufte Einheiten pro Monat oder Tag (minUnitsSoldMonthly, minUnitsSoldDaily), sellingCountries (ein Produkt, das in eines davon verkauft), shopCountries, die Bewertungsnote (minRating, maxRating), minAdsLaunched (in den letzten 30 Tagen gestartete Meta-Anzeigen), minSpendShare, minEuReach (die EU-Reichweite über 30 Tage), hasPartnershipAds, promoTypes (Prozentrabatt) und minShopProductsCount, jeweils mit seinem Höchstwert, wo es einen gibt; GET /v1/filters/products listet auch die Länder der Shops auf.
  • sortBy nimmt estSales (die Umsatzschätzung), adPressure (den Anzeigenanteil) und bestSelling (den Bestseller-Rang in seinem Shop, Rang 1 zuerst) an, und searchType nimmt productDescription und url an.
  • Jedes Produkt hat seine neuesten Anzeigen (advertising.latestAds, mit ihren Bildern in advertising.previewUrls) und seine Wochen (weeks: laufende Anzeigen, Anzeigenanteil, EU-Ausgaben und Reichweite pro Tag), und bestSeller.rankPercent ist sein Rang als Prozentsatz der Produkte des Shops (niedrig ist besser).

Geändert am 24. Oktober 2026 (Parameter, fehlgeschlagene Lesevorgänge und tiefe Seiten):

  • Ein Query-Parameter, den eine Route nicht liest, wird mit 400 validation_failed abgelehnt, dessen Meldung ihn nennt und die Parameter auflistet, die die Route annimmt, während er früher stillschweigend verworfen wurde (ein falsch geschriebener Name oder ein Filter, der an eine Route ohne Filter gesendet wurde, wurde beantwortet, als wäre er nie gesendet worden). Suchen lehnen einen unbekannten benannten Filter wie bisher ab. Ein einfacher Parameter (country, mediaType, active, type), der einen Filter, den auch ein benannter Filter setzt, auf einen anderen Wert setzt, wird ebenfalls abgelehnt.
  • Marken-Tracker: /ads und /timeline/metadata lehnen ein vergangenes snapshotDate ab (sie lesen die Anzeigenbibliothek so, wie sie jetzt ist), /partnership-ads ein unbekanntes sortBy, /v1/workspace/scaling-ads einen unbekannten period, und die Tracker-Liste ein hasNewAdsSince, das mehr als 30 Tage zurückliegt (die Zähler für neue Anzeigen umfassen 30 Tage). /v1/workspace/hooks, /ad-copies und /landing-pages lesen die Zeilen jeder Marke in der angefragten Sortierung (sortBy) und Reihenfolge (order), bevor sie sie zusammenführen. Die markenübergreifenden Berichte der Website senden euOnly nur an die Berichte, die es lesen.
  • Ähnliche Shops lehnen displayInTrending in filters ab (die Liste hat kein Shop-Index-Flag) und lesen ihre Wachstumsgrenzen als Prozentwerte, wie eine Shop-Suche; ein offset jenseits dessen, was eine Anfrage lesen kann (600 Shops über die bereits gelesenen hinaus), wird mit einem 400 abgelehnt, das sagt, wie tief es gehen kann, und eine Seite, in der der Lesevorgang endete, hat meta.partial mit einer Warnung. Die TikTok-Bibliothek eines Shops lehnt Profil- und Website-Filter ab (der eigene Bereich des Shops tritt an ihre Stelle).
  • Ein Teil einer Antwort, den die Datenquelle diesmal nicht lesen konnte, setzt meta.partial mit einer Warnung (und die Antwort wird nicht zwischengespeichert), nie eine stille Lücke oder eine leere Liste; eine Antwort der Datenquelle, die kein JSON ist, ist ein 503 upstream_error, und ein gespeicherter Shop, ein neuer Tracker oder eine E-Mail-Optionsliste, deren Lesen fehlschlägt, liefert den Fehler, nie not_found. Eine Seite, die tiefer liegt, als ein Lesevorgang einer Liste reicht, die Zeilen auslässt, hat meta.partial und hasMore true, und die Anzeigentexte, Partner und Creative-Tests einer Marke melden mit meta.partial, wenn ein Lesevorgang die Marke nicht abdeckt.
  • GET /v1/google-ads/facets/networks nimmt search, limit und offset an, wie die anderen Optionslisten. metric von /v1/shops/compare ist erforderlich (die Referenz nannte es optional).
  • MCP: Ein Tool lehnt ein Argument ab, das seine gewählte Art nicht liest (shop_report, lookup_filter_ids, market_overview, scan_advertiser), sowie Argumente, die sich widersprechen (trend_signal mit sort_by, active_only mit status, ein benanntes Argument mit filters); creative_inspiration_pack ordnet die Anzeigen aller Keywords gemeinsam.

Ebenfalls geändert am 24. Oktober 2026 (Bildersuche):

  • Neu: POST /v1/products/image-search findet die Shop-Produkte, die einem Bild ähneln, jeweils mit ihrem Shop, die ähnlichsten zuerst. Senden Sie das Bild als multipart/form-data: eine PNG-, JPG- oder WEBP-Datei von höchstens 10 MB (image) oder eine direkte Bild-URL (imageUrl), die wir selbst herunterladen. Jede Zeile ist eine Produktzeile, wie die Produktsuche sie liefert, mit similarity (0,7 bis 1) und matchOnly (ein Treffer, zu dem der Produktindex keinen Datensatz hat: nur Titel, Bild, Preis, Startdatum und Shop).
  • Die Suche nimmt die benannten Filter der Produktsuche an, sortBy (relevance, estSales, activeAds, adPressure, newest, spend, spend14d) und maxPerShop (die 1, 3, 5, 10 oder 20 ähnlichsten Treffer jedes Shops), in Seiten von bis zu 32. GET /v1/products/image-search/{searchId} liest ihre weiteren Seiten, Sortierungen, Filter und Ergebnisse pro Shop, ohne das Bild erneut zu senden, und GET /v1/products/image-search/history listet Ihre eigenen letzten Bildersuchen auf.
  • Das Bild wird vor der Suche neu geschrieben, als JPEG ohne seine Metadaten (EXIF, Standort, Kommentare), und eine Bild-URL verlässt nie unsere Server. Neue Fehler: 400 invalid_image, 400 unsupported_url und 422 unreadable_image.
  • Im Tarif Free wird die Bildersuche nach Relevanz geordnet, ohne Filter. Der MCP-Server hat 67 Tools: search_products_by_image ist neu.

Geändert am 25. Oktober 2026 (Credits):

  • Die API und der MCP-Server werden in Credits statt in Anfragen abgerechnet: 1 Credit = 1 zurückgegebenes Ergebnis: die Details einer Marke, eine Anzeige oder eine Zeile einer Liste. Ein leeres Ergebnis ist kostenlos. Ein Aufruf kostet so viele Credits, wie er Ergebnisse liefert, und das monatliche Kontingent der Tarife wird in Credits angegeben.
  • Abgerechnete Antworten senden X-Usage-Cost, X-Credits-Used, X-Credits-Remaining und X-Credits-Source; GET /v1/usage meldet die aufgeladenen Credits unter credits.topup.balance.
  • 402 insufficient_credits kommt, sobald sowohl die Credits des Monats als auch die aufgeladenen Credits aufgebraucht sind, mit details.upgradeUrl und details.topUpUrl.
  • Das Ratenlimit gilt gemeinsam für den ganzen Arbeitsbereich.

Freigabelinks (shareUrl) öffnen eine Webseite auf https://sellwinners.com, die jeder ansehen kann. Derselbe Datensatz ist als JSON über /v1/shared/ads/{token} und /v1/shared/boards/{token} verfügbar. Ein Link, dessen Inhaber im Tarif Free ist, liefert 403 forbidden, bis der Inhaber wieder in einem kostenpflichtigen Tarif ist.

Die Identitäts-Endpunkte /v1/me, /v1/usage und /v1/workspace liefern ihre Objekte auf oberster Ebene, neben requestId. Die System-Endpunkte /v1, /v1/health und /v1/system/freshness enthalten keine requestId, und /v1 und /v1/health liefern ein einfaches Objekt ohne data. Die Request-ID wird auch im Header X-Request-Id gesendet. Geben Sie sie an, wenn Sie den Support kontaktieren.

Boards, Favoriten und Marken-Tracker haben auch Endpunkte für POST, PATCH und DELETE. Sie nehmen einen JSON-Body an, gesendet mit Content-Type: application/json.

Paginierung

Listen-Endpunkte nehmen limit an (bis zu 100 bei Suchen; Facetten-Listen nehmen bis zu 500 und die /snapshots einer Marke bis zu 365) sowie entweder page (1, 2, 3 …) oder offset. Wenn beide gesendet werden, wird offset verwendet. Die Standard-Seitengröße steht bei jedem Endpunkt. Listen von Anzeigen, Google-Anzeigen, TikTok, E-Mails und Medien antworten mit:

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

Listen von Shops, Produkten und Werbetreibenden sowie die Anzeigen eines Werbetreibenden antworten mit:

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

Für die nächste Seite wiederholen Sie dieselbe Anfrage mit page plus eins oder mit offset plus limit. In einem Body von POST …/query senden Sie "page" oder "offset" als Felder. hasMore ist auf der letzten Seite false. Wenn die Datenquelle eine Suche ab einem bestimmten Punkt nicht fortsetzt, antwortet die Seite, die ihn erreicht, mit hasMore false, mit meta.partial true und einer Warnung, die sagt, wie viele Ergebnisse gelesen werden können. Die Paginierung reicht bis zu den ersten 5.000 Ergebnissen einer Suche (bei einer Werbetreibenden-Suche bis zu den ersten 100). Grenzen Sie die Suche mit Filtern ein oder ändern Sie die Sortierung, um andere Ergebnisse zu sehen.

Listen von Google-Anzeigen liefern ein exaktes total, außer bei einer Liste, die die Regel für Status oder Tage aktiv eingrenzt (siehe die Suche nach Google-Anzeigen). Ein "totalEstimated": true markiert ein total (und sein totalPages), das eine Schätzung ist, bis die Liste bis zum Ende gelesen ist, wie bei den ähnlichen Shops eines Shops und einer Meta-Anzeigensuche eines Shops (websiteIds).

Boards, Favoriten und Berichte des Marken-Trackers nehmen page und limit an und antworten mit page, limit, total, totalPages und hasMore. Facetten-Listen, die /products eines Shops und seine /similar-Shops nehmen limit und offset an und antworten mit limit, offset, total und hasMore.

Sortierung & Filter

Such-Endpunkte akzeptieren sortBy und order (standardmäßig desc). Wenn Sie einen Suchbegriff angeben, werden die Ergebnisse nach relevance sortiert, sofern Sie keine andere Sortierung wählen; ohne Suchbegriff ist der Standard newest (Shops und Produkte: relevance, Medien: reach). Suchen nach Google- und TikTok-Anzeigen werden immer nach Relevanz geordnet; dort gilt sortBy, wenn Sie ohne Suchbegriff stöbern.

Jeder Datenbestand hat einen Endpunkt POST …/query, der für erweitertes Filtern einen JSON-Body mit query, filters, sortBy, order, limit und page (oder offset) annimmt. Nutzen Sie die Facetten-Endpunkte, um die Werte und IDs zu sehen, die die Filter annehmen.

Filter können nach Name gesendet werden: als zusätzliche Query-Parameter bei einer GET-Suche (?status=active&minDaysRunning=30&mainCountries=US,GB) oder als Felder auf oberster Ebene eines Bodys von POST …/query ({"status": "active", "minDaysRunning": 30}). Jeder Endpunkt unten listet die Namen auf, die er annimmt. Bei den Such-Endpunkten liefert ein Filtername, den der Endpunkt nicht unterstützt, ein 400 validation_failed, das die unterstützten auflistet, sodass ein Tippfehler nie stillschweigend ungefilterte Ergebnisse liefert; die Berichte des Marken-Trackers ignorieren Namen, die sie nicht kennen. Listen nehmen kommagetrennte Werte oder ein JSON-Array an, Datumsangaben verwenden 2026-01-31, und das rohe Objekt filters funktioniert weiterhin neben benannten Filtern.

Wachstumsfilter (trafficGrowth, adsGrowth, pageReachGrowth, adReachGrowth) nehmen Regeln an, die als {"comparison": "greater" | "lower", "value": 50} oder {"operator": "gte" | "lte", "value": 50} geschrieben werden. Die Werte sind Prozentsätze über die letzten 30 Tage; andere Zeiträume sind nicht verfügbar. minRankDelta ist die Mindestzahl an Positionen, die eine Anzeige über rankDeltaWindow gewonnen hat (7d, sofern Sie nicht 14d oder 30d senden). hideSavedAds lässt die Anzeigen weg, die Sie bereits gespeichert haben. Kategorie-IDs für jeden Filter categoryIds stammen aus /v1/facets/categories.

Ratenlimits & Credits

TarifCredits / MonatRatenlimit
Starter5.00060 / Minute
Pro15.000120 / Minute
Business20.000300 / Minute

1 Credit = 1 zurückgegebenes Ergebnis: die Details einer Marke, eine Anzeige oder eine Zeile einer Liste. Ein leeres Ergebnis ist kostenlos. Jeder Tarif enthält Credits für den Monat, die am 1. um 00:00 UTC erneuert werden. Ein Aufruf kostet so viele Credits, wie er Ergebnisse liefert, ein kleineres limit kostet also weniger, und ein MCP-Tool-Aufruf kostet wie die API so viele Credits, wie er Ergebnisse liefert. Credits und das Ratenlimit gelten pro Arbeitsbereich: Alle Mitglieder, alle seine Schlüssel, die API und der MCP-Server teilen sich ein Credit-Kontingent und ein Ratenlimit. In einem kostenpflichtigen Tarif kann der Inhaber des Arbeitsbereichs auf der Abrechnungsseite Credits aufladen (für €1 erhalten Sie 120, ab €10): Aufgeladene Credits werden nach den Credits des Monats verbraucht, in den Folgemonat übertragen und verfallen nie.

AufrufCredits
Eine Suche oder eine Liste1 pro geliefertem Ergebnis
Ein Datensatz (ein Shop, eine Anzeige, eine E-Mail)1
Ein leeres Ergebnis0
Eine Änderung (speichern, verschieben, teilen, löschen)1 (ein Element, das schon im Board ist: 0)
Eine Bildersuche4 pro geliefertem Ergebnis
Der Umsatzverlauf eines Shops4
Lookups, Filterwerte (Facetten), GET /v1/account und GET /v1/usage0
Ein Fehler oder eine Ablehnung0

Jede abgerechnete Antwort enthält:

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

Über dem Ratenlimit pro Minute erhalten Sie 429 rate_limited mit einem Header Retry-After (in Sekunden). Wenn sowohl die Credits des Monats als auch die aufgeladenen Credits aufgebraucht sind, erhalten Sie 402 insufficient_credits, mit details.upgradeUrl und details.topUpUrl, bis die monatlichen Credits erneuert werden. Prüfen Sie Ihre Credits jederzeit mit GET /v1/account oder GET /v1/usage. Diese Aufrufe kosten nichts, senden trotzdem X-Usage-Cost: 0, X-Credits-Used: 0 und X-Credits-Remaining und funktionieren auch, wenn die Credits aufgebraucht sind.

Diese Limits gelten für die API und den MCP-Server, in kostenpflichtigen Tarifen und in Free. Die Web-App auf der Website wird nicht abgerechnet: In kostenpflichtigen Tarifen ist sie im Rahmen der fairen Nutzung unbegrenzt.

Der Tarif Free

Der Tarif Free umfasst die Web-App und den MCP-Server (150 Credits pro Monat), ohne die API. Ein Free-Konto erstellt in seinem Dashboard einen Schlüssel für den MCP-Server (KI-Agenten), im Rahmen von 150 Credits pro Monat und 10 Anfragen pro Minute; die REST-API gibt es in kostenpflichtigen Tarifen: Mit einem Free-Schlüssel liefert sie 403 plan_not_eligible, mit details.feature, details.requiredPlan und details.upgradeUrl, bei jedem Endpunkt außer GET /v1/account, und nichts wird gezählt. Ein in einem kostenpflichtigen Tarif erstellter Schlüssel wird in Free pausiert und funktioniert wieder, sobald das Konto wieder in einem kostenpflichtigen Tarif ist. In Free liefert eine Suche ihre ersten Ergebnisse, und ein Tool oder Endpunkt, dessen Daten Free nicht umfasst, antwortet mit der Meldung der kostenpflichtigen Tarife. Der Tarifvergleich zeigt, was Free umfasst. Die Demo-Marken sind auf der Website vollständig zugänglich.

Fehler

Fehler verwenden standardmäßige HTTP-Statuscodes und einen JSON-Body:

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

code ist stabil und eignet sich für Verzweigungen in Ihrem Code, message ist für Menschen geschrieben, und details enthält zusätzliche Daten, wenn es welche gibt (die abgelehnten Felder eines 400; die monatlichen Credits, ihr Erneuerungsdatum, upgradeUrl und topUpUrl eines 402).

StatuscodeBedeutung
400validation_failedEin Parameter, Filter oder Body-Feld ist ungültig. message erklärt, welches.
400invalid_image / unsupported_urlDas Bild einer Bildersuche ist keine PNG-, JPG- oder WEBP-Datei von höchstens 10 MB, oder seine URL ist keine öffentliche http- oder https-Adresse.
401missing_api_key / invalid_api_keyEs wurde kein Schlüssel gesendet, oder der Schlüssel ist falsch oder widerrufen.
402insufficient_creditsDie Credits des Monats und die aufgeladenen Credits sind aufgebraucht. Die monatlichen Credits werden am 1. des Monats erneuert; Sie können Credits aufladen oder Ihren Tarif upgraden (details.topUpUrl, details.upgradeUrl).
403plan_not_eligibleIhr Tarif umfasst dies nicht. Im Tarif Free gilt das für jede Anfrage außer GET /v1/account. details nennt das feature, den requiredPlan und eine upgradeUrl.
403workspace_public_api_suspendedDas Konto wurde deaktiviert. Kontaktieren Sie den Support.
403forbiddenDieser Schlüssel darf das nicht.
404not_foundDie Ressource oder ID existiert nicht.
409conflictDie Änderung kollidiert mit bereits Gespeichertem, etwa einem Element, das schon im Ziel-Board ist.
422unreadable_imageDas Bild einer Bildersuche konnte nicht gelesen oder seine URL nicht heruntergeladen werden. Versuchen Sie eine andere Datei oder URL.
429rate_limitedZu viele Anfragen in dieser Minute. Warten Sie Retry-After Sekunden.
500internal_errorAuf unserer Seite ist etwas schiefgelaufen. Ein erneuter Versuch ist sicher.
503upstream_error / service_unavailable / service_busyEin vorübergehendes Problem auf unserer Seite. Ein erneuter Versuch mit Backoff (Retry-After) ist sicher.
503upstream_timeoutDie Suche hat zu lange gedauert. Grenzen Sie sie mit weniger oder engeren Filtern ein, oder versuchen Sie es erneut. (502 und 504 vor dem 27. Oktober 2026.)

Medien-URLs

Bilder und Videos in Antworten werden über unser CDN unter https://api.sellwinners.com/v1/media/file/… ausgeliefert. Diese URLs brauchen keinen API-Schlüssel und verbrauchen keine Credits, sodass Sie sie direkt in <img>- und <video>-Tags einbetten können. Eine Datei, die die Datenquelle nicht mehr hat, wird einen Tag lang als null gesendet, und eine fehlende Datei liefert ein leeres 404 ihres Medientyps. Produktbilder und App-Symbole, die im CDN von Shopify liegen, werden ebenfalls über unser CDN ausgeliefert. Um ein Bild klein anzuzeigen, fügen Sie ?w=96 (Vorschaubilder) oder ?w=480 (Karten) hinzu: Ein JPEG-, PNG-, WebP- oder GIF-Bild wird dann als WebP mit höchstens dieser Breite gesendet, nie vergrößert; eine Animation, ein kleineres Bild oder ein Video kommt unverändert. Für eine flache, anzeigefertige Liste von Creatives nutzen Sie /v1/media.

Um ein Bild in Originalgröße, aber leichter anzuzeigen, fügen Sie ?w=full hinzu: Ein JPEG-, PNG-, WebP- oder GIF-Bild wird dann als WebP in seiner eigenen Breite und Höhe gesendet, in einer Qualität, die gleich aussieht, sofern das mindestens ein Zehntel der Datei spart; sonst, und bei einer Animation oder einem Video, kommt das Original unverändert. Ohne w wird die Originaldatei gesendet.

Nachschlagen

Einen Namen, eine Domain oder eine Seiten-ID in die IDs umwandeln, die die anderen Endpunkte erwarten.

GET/v1/lookup

Eine Marke, einen Werbetreibenden oder einen Shop finden. 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).
ParameterBeschreibung
qerforderlich Brand name, domain (allbirds.com) or Facebook page id.
type What to look for (default auto: all of them). Mögliche Werte: auto, brandtracker, advertiser, shop.
limit Results, 1-10 (default 10).
curl "https://api.sellwinners.com/v1/lookup?q=allbirds.com&limit=5" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/lookup/facebook-shop

Facebook-Seiten eines Shops oder der Shop einer Seite. 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.
ParameterBeschreibung
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"

Shops

Shopify-Shops finden und ihre Produkte, ihren Traffic, Umsatz, ihre Social-Media-Konten und Anzeigen abrufen.

GET/v1/shops

Shops suchen oder durchstöbern (ohne Suchbegriff die Trend-Shops). Searches keep to the shop index, not every website the data source tracks. A domain search (searchType=domain) lists the site with exactly that domain first, with extra.exactDomainMatch true, also when the shop index leaves it out (extra.inShopIndex is false then); not with other filters or another sort. languages takes two-letter codes (fr; names such as french are converted); themeIds, pixelIds and shopifyAppIds take ids from /v1/facets/themes, /pixels and /shopify-apps, not names. Growth ranges are percentages over 30 days (trafficGrowth also takes min90 and max90, over 90 days, and adsGrowth min7 and max7, over 7 days; a rule's period may be last90d or last7d the same way); excludeCurrencies takes currency codes such as EUR, socialNetworks instagram or tiktok (a shop with any of them) and shopifyPlan headless. A listed shop's advertising.activeAds are its main page's live ads as the shop index counts them, which can be a day or more behind its shop record (GET /v1/shops/{shopId} reads them now). A shop row's createdAt is a Shopify store's creation date: a site off Shopify has the day the data source began tracking it in trackedSince instead (createdAt null, nullReasons tracking_date), and a date on or before 2000-01-01, the data source's placeholder, is null (not_reported). Its catalog.bestSellers carry handle, productUrl (its page on the shop's own site, as on the shop record) and rank (1 is the best seller); profile.isHeadless and catalog.myShopifyDomain are as on the shop record. A row's googleAds.reach.value is null: the Google EU reach is on the shop record only (extra.googleAds.reach). A sales sort (estMonthlySales, unitsSold) lists one row per Shopify store: the domains of one myshopify domain read together share the store's sales, so they are one row, the most visited, naming the others in extra.sharedSalesWith (a store's domains further down the list are left out too), and its pagination.total is null until the list is read to its end; sortBy=estMonthlySales with order=asc leaves out the shops with no sales estimate or one under 100 USD (minMonthlySales 100) unless a sales bound is given, and those whose estimate is null; sortBy=growth30d leaves out the shops with no traffic growth or no visits in the latest month (with order=asc, minMonthlyVisits 1 unless a visits minimum is given); sortBy=productsCount leaves out the shops whose count is raised to the best sellers they list (catalog.productsCountAtLeast: the data source ranks by its own count) and those whose count is null (with order=asc, minProductsCount 1 unless a products minimum is given); these have a null pagination.total until the list is read to its end. A sales estimate of 0 next to units sold is null (no_estimate), and so is one too low for its units sold at the shop's own prices: under a hundredth of the median price of its listed best sellers a unit sold (0.50 USD for a shop that lists none), or under a tenth of that price a unit sold while worth under five of its median-priced products: too_low, the data source's floor, not a figure; extra.storeWide marks a domain with 0 visits that carries its Shopify store's sales (a measured 0 or one since its history went to 0, its visits null then, or its store's other domains are named); nullReasons says why an estimate is null (no_estimate, too_low, or not_shopify: sales are estimated for Shopify stores only), and why monthlyVisits (not_measured: a site the data source has not measured yet, or one at 0 since its history went to 0 next to a sales estimate and units sold, its growth30d null too), growth30d (not_measured: no visits the month before; -1, every visit lost, when the latest month has none after a month with visits), unitsSold or productsCount is null (productsCount not_measured also for a count of 0 with no product listed next to visits, a sales estimate or units sold: a count the data source has not made). catalog.productsCountCapped marks the data source's products ceiling (25,001: 25,000 or more), and catalog.productsCountAtLeast a count raised to the best sellers the row lists (the data source's count is behind them).
Benannte Filter 52zusätzliche Query-Parameter
adsGrowthadsTimePeriodcategoryIdscountriescreatedAftercreatedBeforecreationCountriescurrenciesdisplayInTrendingexcludeCreationCountriesexcludeCurrenciesexcludeLanguagesexcludeMarketCountriesexcludePixelIdsexcludeShopifyAppIdshasProductshasTikTokisShopifyPluslanguagesmainMarketCountriesmarketCountriesmaxActiveAdsmaxActiveAdsGrowthmaxAdvertisersCountmaxBestSellerPricemaxEstimatedRevenuemaxMonthlySalesmaxMonthlyVisitsmaxProductsCountmaxTrafficGrowthmaxTrustpilotRatingmaxTrustpilotReviewCountmaxUnitsSoldminActiveAdsminActiveAdsGrowthminAdvertisersCountminBestSellerPriceminEstimatedRevenueminMonthlySalesminMonthlyVisitsminProductsCountminTrafficGrowthminTrustpilotRatingminTrustpilotReviewCountminUnitsSoldpixelIdsshopifyAppIdsshopifyPlansocialNetworksthemeIdstrafficGrowthvisitorCountries
ParameterBeschreibung
search Shop name, domain or keyword.
searchType What the search text is matched against (default name). all is the same as name. Mögliche Werte: 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. Mögliche Werte: relevance, newest, monthlyVisits, activeAds, productsCount, growth30d, advertiserCount, spend, estSales, unitsSold, createdAt, estMonthlySales.
order Sort direction (default desc). Mögliche Werte: 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

Shops mit erweiterten Filtern suchen. 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).
Benannte Filter 52Felder auf oberster Ebene des Bodys
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}

Ein Shop nach ID oder 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.
ParameterBeschreibung
shopIderforderlich 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

Shop-Produkte. 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).
ParameterBeschreibung
shopIderforderlich 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). Mögliche Werte: popularity, price, createdAt.
order Sort direction: asc by default for popularity (best sellers first), desc for price and createdAt. Mögliche Werte: 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

Shops, die einer Shop-ID oder Domain ähneln. 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.
ParameterBeschreibung
shopIderforderlich Shop id or domain, such as allbirds.com.
sortBy Defaults to relevance. Mögliche Werte: relevance, monthlyVisits, activeAds, growth30d, productsCount, createdAt.
order Sort direction (default desc). Mögliche Werte: 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

Mit einem Shop verknüpfte Werbetreibenden-Seiten. 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.
ParameterBeschreibung
shopIderforderlich 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

Verlauf der Social-Media-Follower.
ParameterBeschreibung
shopIderforderlich Shop id or domain, such as allbirds.com.
period One point per day, week or month. Mögliche Werte: 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

Verlauf des geschätzten Umsatzes. 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.
ParameterBeschreibung
shopIderforderlich Shop id or domain, such as allbirds.com.
period One point per day, week or month. Mögliche Werte: 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

Social-Media-Konten und Follower eines Shops.
ParameterBeschreibung
shop_iderforderlich Shop id or domain, such as allbirds.com.
curl "https://api.sellwinners.com/v1/shops/SHOP_ID/socials" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shops/{shop_id}/tiktok

TikTok-Übersicht eines Shops.
ParameterBeschreibung
shop_iderforderlich Shop id or domain, such as allbirds.com.
curl "https://api.sellwinners.com/v1/shops/SHOP_ID/tiktok" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/shops/{shop_id}/apps

Shopify-Apps, die ein Shop nutzt.
ParameterBeschreibung
shop_iderforderlich 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

Tracking-Pixel eines Shops.
ParameterBeschreibung
shop_iderforderlich 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

Weitere Shops derselben Marke.
ParameterBeschreibung
shop_iderforderlich 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

Anzeigenformat-Mix eines Shops.
ParameterBeschreibung
shop_iderforderlich 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

Von einem Shop gesendete E-Mails. The shop's emails of every campaign type (Marketing, Newsletter, Welcome and Abandoned Cart), newest first.
ParameterBeschreibung
shop_iderforderlich 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

Eine Kennzahl mehrerer Shops im direkten Vergleich. 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.
ParameterBeschreibung
shopIdserforderlich 1 to 10 shop ids or domains, comma-separated.
metricerforderlich The figure compared. Mögliche Werte: googleLiveAds, tiktokPosts, metaReach.
snapshotDate A past day (YYYY-MM-DD) instead of today.
curl "https://api.sellwinners.com/v1/shops/compare?shopIds=allbirds.com%2Con.com" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/tools/shopify-apps

Shopify-Apps, die ein Shop nutzt, anhand seiner Adresse. 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).
ParameterBeschreibung
urlerforderlich 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

Ob ein Shop auf Shopify läuft, und sein Theme. isShopify, theme and isHeadless (a storefront built apart from Shopify's themes). Any store, tracked or not, read at its domain without www. (url).
ParameterBeschreibung
urlerforderlich 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

Die neuesten Anzeigen und E-Mails eines Shops. 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.
ParameterBeschreibung
shopIderforderlich 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

Die Q4-Saison eines Shops, Tag für Tag. 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).
ParameterBeschreibung
shopIderforderlich 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. Mögliche Werte: 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

Landingpages der Q4-Saison eines Shops. The season's landing pages by the date each appeared: url, ads, screenshotUrl, isBlackFriday and blackFridayStartedAt. meta.total counts them all.
ParameterBeschreibung
shopIderforderlich 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. Mögliche Werte: 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

Creatives der Q4-Saison eines Shops. The season's creatives by the date each was launched: adId, hook, thumbnailUrl, mediaType, reach and isActive. meta.total counts them all.
ParameterBeschreibung
shopIderforderlich 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. Mögliche Werte: 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

Hooks, Transkripte, Überschriften oder Anzeigentexte eines Shops. 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).
ParameterBeschreibung
shopIderforderlich Shop id or domain, such as allbirds.com.
kinderforderlich The texts to list. Mögliche Werte: 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. Mögliche Werte: usageCount, longestRunning, totalImpressions, firstUsedAt, lastUsedAt.
order Descending by default. Mögliche Werte: desc, asc.
timePeriod The ads counted (default live); not with ad-copy. Mögliche Werte: 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

Landingpages eines Shops. 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.
ParameterBeschreibung
shopIderforderlich 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

Eine Landingpage aus den Anzeigen eines Shops. 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.
ParameterBeschreibung
shopIderforderlich Shop id or domain, such as allbirds.com.
urlerforderlich 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

Landingpages einer der Facebook-Seiten eines Shops. 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).
ParameterBeschreibung
shopIderforderlich Shop id or domain, such as allbirds.com.
advertiserIderforderlich 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

Die Meta-Anzeigen eines Shops, gerankt über einen Zeitraum. 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.
ParameterBeschreibung
shopIderforderlich Shop id or domain, such as allbirds.com.
mode best-rank (default): the best rank each reached; rank-delta: the places each gained. Mögliche Werte: best-rank, rank-delta.
days The window, up to yesterday (default 7). Mögliche Werte: 7, 14, 30.
advertiserIds Only these Facebook pages of the shop, comma-separated.
page Page number, starting at 1.
limit Results per page, 1-100 (default 24).
curl "https://api.sellwinners.com/v1/shops/allbirds.com/ad-ranking?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

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

Meta-Anzeigen eines Shops nach Rang, mit Filtern. 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.
ParameterBeschreibung
shopIderforderlich 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

Der tägliche Rang einiger Anzeigen eines Shops. 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).
ParameterBeschreibung
shopIderforderlich Shop id or domain, such as allbirds.com.
adIdserforderlich Up to 24 ad ids, comma-separated.
days The window, up to yesterday (default 7). Mögliche Werte: 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

Die Creative-Tests eines Shops, Tag für Tag. 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.
ParameterBeschreibung
shopIderforderlich Shop id or domain, such as allbirds.com.
mediaType Defaults to all. Mögliche Werte: all, image, video.
status Mögliche Werte: all, active, inactive.
keywords Words in the ads, comma-separated.
keywordMode Mögliche Werte: 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}

Die Anzeigen eines der Creative-Tests eines Shops. 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.
ParameterBeschreibung
shopIderforderlich Shop id or domain, such as allbirds.com.
dateerforderlich A day, as YYYY-MM-DD.
mediaType Defaults to all. Mögliche Werte: all, image, video.
status Mögliche Werte: all, active, inactive.
keywords Words in the ads, comma-separated.
keywordMode Mögliche Werte: 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"

Markt

Die Tagessummen des gesamten Markts und seine Q4-Saison.

GET/v1/market/overview

Der gesamte Markt, Tag für Tag. 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.
ParameterBeschreibung
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

Der gesamte Markt über eine Q4-Saison, Tag für Tag. 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.
ParameterBeschreibung
year The season's year (default the latest begun).
from First day (default November 1).
to Last day (default December 4).
curl "https://api.sellwinners.com/v1/market/q4-overview" \
  -H "X-API-Key: YOUR_API_KEY"

Meta-Anzeigen

Anzeigen-Creatives von Facebook und Instagram mit Medien, Reichweite und Rang.

GET/v1/ads

Meta-Anzeigen durchsuchen. 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).
Benannte Filter 114zusätzliche Query-Parameter
adCopyHashesadCountriesadLanguageadRankBasisadRankModeadReachGrowthadsGrowthadsTimePeriodageRangescategoryIdscountriescpmcreatedAftercreatedBeforecreationCountryctaexcludeAdLanguagesexcludeAgeRangesexcludeFormatsexcludePixelsexcludeShopifyAppsexcludeThemesformatsgrowthRankhideDecliningRankAdshideLowReachhideNonEuUkAdshideSavedAdslandingPageslastSeenAfterlastSeenBeforelinkedDomainmainCountriesmarketmaxAdOrdermaxAdRankValuemaxAdReachGrowthmaxAdsmaxAdsPerBrandmaxAgemaxBestSellerPricemaxDatemaxDaysRunningmaxDescriptionLengthmaxDuplicatesmaxFacebookLikesmaxFbPageCreationDatemaxInstagramFollowersmaxLastSeenDatemaxMonthlyVisitsmaxPageAdsGrowthmaxPageAdsLaunchedmaxPageReachGrowthmaxProductsmaxProductsCountmaxReachmaxReachPerPagemaxSpendmaxSpendPerPagemaxTrafficmaxTrafficGrowthmaxVideoDurationmediaTypemediaTypesminAdOrderminAdReachGrowthminAdsminAgeminBestSellerPriceminDateminDaysRunningminDescriptionLengthminDuplicatesminFacebookLikesminFbPageCreationDateminInstagramFollowersminLastSeenDateminMonthlyVisitsminPageAdsGrowthminPageAdsLaunchedminPageReachGrowthminProductsminProductsCountminRankDeltaminReachminReachPerPageminSpendminSpendPerPageminTrafficminTrafficGrowthminVideoDurationpageAdsLaunchedPeriodpageReachGrowthpartnerIdspartnerspixelsplatformplatformsrankDeltaWindowreachPerPagePeriodreachPeriodsexshopCreatedAftershopCreatedBeforeshopifyAppsshopifyStoresOnlyspendPerPagePeriodspendPeriodstatustechnologiesthemestrackedPagestrafficGrowthwebsiteIds
ParameterBeschreibung
search Words in the ad copy, brand or landing page.
mediaType Creative type. Mögliche Werte: image, video, dco, carousel, dpa.
country 2-letter ISO country code.
active Running (true) or stopped (false) ads. Mögliche Werte: true, false.
sortBy Defaults to relevance when searching, otherwise newest. Mögliche Werte: relevance, newest, reach, reachGrowth7d, reachDelta7d, longestRunning, duplicates, spend, adRank, rankDelta7d, rankDelta14d, rankDelta30d, createdAt, relevanceScore, mostDuplicates, adOrder.
order Sort direction (default desc). Mögliche Werte: desc, asc.
page Page number, starting at 1.
offset Results to skip. Use it instead of page.
limit Results per page, 1-100 (default 25).
curl "https://api.sellwinners.com/v1/ads?search=skincare&country=US&limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/ads/query

Meta-Anzeigen mit erweiterten Filtern durchsuchen. 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).
Benannte Filter 114Felder auf oberster Ebene des Bodys
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}

Eine Meta-Anzeige nach 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).
ParameterBeschreibung
adIderforderlich 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

Tägliche Reichweite einer Anzeige.
ParameterBeschreibung
adIderforderlich 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

Download-URL des Creatives einer Anzeige.
ParameterBeschreibung
adIderforderlich 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

Landingpages, die die Anzeigen eines Shops oder von Seiten verwenden. 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.
ParameterBeschreibung
scopeDomain A shop domain.
scopeTrackedPages Up to 20 Facebook page ids, comma-separated.
status Pages with running ads, without, or all (default all). Mögliche Werte: 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

Texte der Anzeigen eines Shops. 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.
ParameterBeschreibung
scopeDomainerforderlich 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

Partner der Anzeigen eines Shops. 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.
ParameterBeschreibung
scopeDomainerforderlich 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

Einen öffentlichen Link zu einer Anzeige erstellen (oder zurückgeben). The answer carries a shareUrl: a web page anyone can open, without an API key.
ParameterBeschreibung
adIderforderlich 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

Den öffentlichen Link zu einer Anzeige entfernen.
ParameterBeschreibung
adIderforderlich 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}

Eine Anzeige hinter einem Freigabelink (kein Schlüssel nötig). The same record the share page shows, as JSON.
ParameterBeschreibung
tokenerforderlich 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

Anzeigen-Hooks für ein Produkt schreiben. 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

Ihr Kontingent an Anzeigen-Hooks in diesem Monat. 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

Anzeigen-Creatives von Google.

GET/v1/google-ads

Google-Anzeigen suchen. 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.
Benannte Filter 41zusätzliche Query-Parameter
audienceCountriescategoryIdscountriescreationCountriesexcludeCountryCodesexcludeCreationCountriesexcludeMarketCountriesexcludePixelIdsexcludeShopifyAppIdsexcludeThemeIdsformatshideNonEuUkAdsinterestTargetingmainMarketCountriesmarketCountriesmaxAdvertiserReachmaxBestSellerPricemaxDaysRunningmaxProductsCountmaxReachmaxTrafficmaxTrafficGrowthminAdvertiserReachminBestSellerPriceminDaysRunningminProductsCountminReachminTrafficminTrafficGrowthnetworkspixelIdspublishedAfterpublishedBeforeremarketingshopCreatedAftershopCreatedBeforeshopifyAppIdsstatusthemeIdstrafficGrowthwebsiteIds
ParameterBeschreibung
search
country 2-letter ISO country code.
sortBy Defaults to relevance when searching, otherwise newest. Mögliche Werte: relevance, newest, reach.
order Sort direction (default desc). Mögliche Werte: desc, asc.
page Page number, starting at 1.
offset Results to skip. Use it instead of page.
limit Results per page, 1-100 (default 25).
curl "https://api.sellwinners.com/v1/google-ads?search=running%20shoes&country=US&limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/google-ads/query

Google-Anzeigen mit Filtern durchsuchen. 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.
Benannte Filter 41Felder auf oberster Ebene des Bodys
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}

Eine Google-Anzeige nach 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.
ParameterBeschreibung
adIderforderlich Google ad id from a Google ad search (google_CR...).
curl "https://api.sellwinners.com/v1/google-ads/AD_ID" \
  -H "X-API-Key: YOUR_API_KEY"

TikTok

TikTok-Anzeigen und organische Beiträge.

GET/v1/tiktok/library

TikTok-Anzeigen und -Posts suchen. 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.
Benannte Filter 58zusätzliche Query-Parameter
categoriescategoryIdscountriescreationCountriesdomainexcludeCreationCountriesexcludeHashtagsexcludeMarketCountriesexcludePixelIdsexcludeShopifyAppIdsexcludeThemeIdshandlehasShopLinkedhashtagsisPinnedlanguagesmainMarketCountriesmarketCountriesmaxBestSellerPricemaxDaysRunningmaxDurationmaxFollowersmaxProductsCountmaxProfileAdsSharemaxProfilePostsmaxProfileViewsmaxTrafficmaxTrafficGrowthmaxViewsmediaTypemediaTypesminBestSellerPriceminDaysRunningminDurationminFollowersminProductsCountminProfileAdsShareminProfilePostsminProfileViewsminTrafficminTrafficGrowthminViewspixelIdsprofileCreatedAfterprofileCreatedBeforepublishedAfterpublishedBeforeshopCreatedAftershopCreatedBeforeshopifyAppIdsthemeIdstiktokPageIdtiktokPageIdstrafficGrowthtypeupdatedAfterupdatedBeforewebsiteId
ParameterBeschreibung
search
country 2-letter ISO country code.
sortBy Defaults to relevance when searching, otherwise newest. Mögliche Werte: relevance, newest, views, likes, rank, longestRunning, daysRunning.
order Sort direction (default desc). Mögliche Werte: desc, asc.
page Page number, starting at 1.
offset Results to skip. Use it instead of page.
limit Results per page, 1-100 (default 25).
curl "https://api.sellwinners.com/v1/tiktok/library?search=fitness&country=US&limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/tiktok/library/query

TikTok-Anzeigen und -Beiträge mit Filtern durchsuchen. 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.
Benannte Filter 58Felder auf oberster Ebene des Bodys
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}

Ein TikTok-Element nach 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).
ParameterBeschreibung
itemIderforderlich Item id from a TikTok search.
curl "https://api.sellwinners.com/v1/tiktok/library/ITEM_ID" \
  -H "X-API-Key: YOUR_API_KEY"

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

TikTok-Elemente eines Shops. 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.
Benannte Filter 58zusätzliche Query-Parameter
categoriescategoryIdscountriescreationCountriesdomainexcludeCreationCountriesexcludeHashtagsexcludeMarketCountriesexcludePixelIdsexcludeShopifyAppIdsexcludeThemeIdshandlehasShopLinkedhashtagsisPinnedlanguagesmainMarketCountriesmarketCountriesmaxBestSellerPricemaxDaysRunningmaxDurationmaxFollowersmaxProductsCountmaxProfileAdsSharemaxProfilePostsmaxProfileViewsmaxTrafficmaxTrafficGrowthmaxViewsmediaTypemediaTypesminBestSellerPriceminDaysRunningminDurationminFollowersminProductsCountminProfileAdsShareminProfilePostsminProfileViewsminTrafficminTrafficGrowthminViewspixelIdsprofileCreatedAfterprofileCreatedBeforepublishedAfterpublishedBeforeshopCreatedAftershopCreatedBeforeshopifyAppIdsthemeIdstiktokPageIdtiktokPageIdstrafficGrowthtypeupdatedAfterupdatedBeforewebsiteId
ParameterBeschreibung
shop_iderforderlich Shop id or domain, such as allbirds.com.
search
sortBy Defaults to relevance when searching, otherwise newest. Mögliche Werte: relevance, newest, views, likes, rank, longestRunning, daysRunning.
order Sort direction (default desc). Mögliche Werte: 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"

Medien

Darstellungsfertige Creatives: Bild- und Video-URLs in unserem CDN.

GET/v1/media

Anzeigen-Creatives als darstellungsfertige Medien. 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).
Benannte Filter 114zusätzliche Query-Parameter
adCopyHashesadCountriesadLanguageadRankBasisadRankModeadReachGrowthadsGrowthadsTimePeriodageRangescategoryIdscountriescpmcreatedAftercreatedBeforecreationCountryctaexcludeAdLanguagesexcludeAgeRangesexcludeFormatsexcludePixelsexcludeShopifyAppsexcludeThemesformatsgrowthRankhideDecliningRankAdshideLowReachhideNonEuUkAdshideSavedAdslandingPageslastSeenAfterlastSeenBeforelinkedDomainmainCountriesmarketmaxAdOrdermaxAdRankValuemaxAdReachGrowthmaxAdsmaxAdsPerBrandmaxAgemaxBestSellerPricemaxDatemaxDaysRunningmaxDescriptionLengthmaxDuplicatesmaxFacebookLikesmaxFbPageCreationDatemaxInstagramFollowersmaxLastSeenDatemaxMonthlyVisitsmaxPageAdsGrowthmaxPageAdsLaunchedmaxPageReachGrowthmaxProductsmaxProductsCountmaxReachmaxReachPerPagemaxSpendmaxSpendPerPagemaxTrafficmaxTrafficGrowthmaxVideoDurationmediaTypemediaTypesminAdOrderminAdReachGrowthminAdsminAgeminBestSellerPriceminDateminDaysRunningminDescriptionLengthminDuplicatesminFacebookLikesminFbPageCreationDateminInstagramFollowersminLastSeenDateminMonthlyVisitsminPageAdsGrowthminPageAdsLaunchedminPageReachGrowthminProductsminProductsCountminRankDeltaminReachminReachPerPageminSpendminSpendPerPageminTrafficminTrafficGrowthminVideoDurationpageAdsLaunchedPeriodpageReachGrowthpartnerIdspartnerspixelsplatformplatformsrankDeltaWindowreachPerPagePeriodreachPeriodsexshopCreatedAftershopCreatedBeforeshopifyAppsshopifyStoresOnlyspendPerPagePeriodspendPeriodstatustechnologiesthemestrackedPagestrafficGrowthwebsiteIds
ParameterBeschreibung
search
mediaType Creative type. Mögliche Werte: image, video, dco, carousel, dpa.
country 2-letter ISO country code.
sortBy Defaults to relevance when searching, otherwise reach. Mögliche Werte: relevance, newest, reach, reachGrowth7d, reachDelta7d, longestRunning, duplicates, spend, adRank, rankDelta7d, rankDelta14d, rankDelta30d, createdAt, relevanceScore, mostDuplicates, adOrder.
order Sort direction (default desc). Mögliche Werte: 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

Darstellungsfertige Medien mit erweiterten Filtern. 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.
Benannte Filter 114Felder auf oberster Ebene des Bodys
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).
ParameterBeschreibung
keyerforderlich 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. Mögliche Werte: 96, 480, full.
curl "https://api.sellwinners.com/v1/media/file/FILE_KEY" \
  -H "X-API-Key: YOUR_API_KEY"

Werbetreibende

Werbetreibende (Facebook-Seiten) und ihre Aktivität.

GET/v1/advertisers

Werbetreibende suchen. 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).
Benannte Filter 59zusätzliche Query-Parameter
adCountriesadLanguageadsGrowthadsLaunchedPeriodadsTimePeriodageRangescategoryIdscountriescountryFilterModecpmcreationCountriesexcludeAgeRangesexcludeCreationCountriesexcludeMarketCountriesexcludeShopifyAppIdsexcludeThemeIdsmainCountriesmainMarketCountriesmarketCountriesmaxActiveAdsmaxAdsGrowthmaxAdsLaunchedmaxAgemaxFacebookLikesmaxFbPageCreationDatemaxInstagramFollowersmaxPageReachGrowthmaxProductsCountmaxReachmaxReachPerPagemaxSpendPerPagemaxTrafficmaxTrafficGrowthminActiveAdsminAdsGrowthminAdsLaunchedminAgeminFacebookLikesminFbPageCreationDateminInstagramFollowersminPageReachGrowthminProductsCountminReachminReachPerPageminSpendPerPageminTrafficminTrafficGrowthpageNichespageReachGrowthpartnerssexshopCreatedAftershopCreatedBeforeshopifyAppIdsshopifyLinkedtechnologiesthemeIdstrackedPagestrafficGrowth
ParameterBeschreibung
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. Mögliche Werte: brand, adCopy, websiteCopy, urlContains, domain, all.
country 2-letter ISO country code.
sortBy Defaults to relevance when searching, otherwise newest. Mögliche Werte: relevance, newest, activeAds, newAds, reach, reach14d, growth30d, followers, euAdsShare.
order Sort direction (default desc). Mögliche Werte: 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

Werbetreibende mit Filtern durchsuchen. 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).
Benannte Filter 59Felder auf oberster Ebene des Bodys
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}

Ein Werbetreibender nach 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).
ParameterBeschreibung
advertiserIderforderlich 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

Tägliche aktive Anzeigen und EU-Reichweite eines Werbetreibenden. 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).
ParameterBeschreibung
advertiserIderforderlich Facebook page id of an advertiser or ad.
days How many days back, 7-3650 (default 90), or all for every reading.
curl "https://api.sellwinners.com/v1/advertisers/ADVERTISER_ID/history?days=90" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/advertisers/{advertiser_id}/ads

Meta-Anzeigen eines Werbetreibenden. 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).
ParameterBeschreibung
advertiser_iderforderlich Facebook page id of an advertiser or ad.
sortBy Defaults to relevance when searching, otherwise newest. Mögliche Werte: relevance, newest, reach, reachGrowth7d, reachDelta7d, longestRunning, duplicates, spend, adRank, rankDelta7d, rankDelta14d, rankDelta30d, createdAt, relevanceScore, mostDuplicates, adOrder.
order Sort direction (default desc). Mögliche Werte: 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-Mails

Marketing- und Newsletter-E-Mails von Marken.

GET/v1/emails

Marken-E-Mails durchsuchen. 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.
Benannte Filter 33zusätzliche Query-Parameter
adsGrowthamongMarketCountriescampaignTypescategoriescategoryIdscountriescreationCountriesemailCategoryIdseventCategorieseventIdseventNamesexcludeLanguageslanguagesmaxActiveAdsmaxActiveAdsGrowthmaxBestSellerPricemaxMonthlyVisitsmaxProductsCountmaxTrafficGrowthminActiveAdsminActiveAdsGrowthminBestSellerPriceminMonthlyVisitsminProductsCountminTrafficGrowthpromotionTypeIdspromotionTypessentAftersentBeforeshopCreatedAftershopCreatedBeforeshopIdstrafficGrowth
ParameterBeschreibung
search Words in the subject, sender or content.
type Campaign type, in any case (default: Newsletter and Marketing). Mögliche Werte: 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. Mögliche Werte: relevance, newest, event, promotionType, activeAds, emails90d, avgEmailsPerWeek, oldest, shopEmailFrequency.
order Sort direction (default desc). Mögliche Werte: 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

Marken-E-Mails mit Filtern durchsuchen. 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.
Benannte Filter 33Felder auf oberster Ebene des Bodys
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}

Eine E-Mail nach 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.
ParameterBeschreibung
emailIderforderlich 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

Roh-HTML einer E-Mail.
ParameterBeschreibung
emailIderforderlich 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

E-Mail-Versandstatistiken eines Shops. 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.
ParameterBeschreibung
shopIderforderlich Shop id or domain, such as allbirds.com.
montherforderlich 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"

Produkte

Shop-Produkte mit Preis, Umsatz, Bewertungen, Anzeigen und EU-Reichweite.

GET/v1/products

Produkte suchen oder durchstöbern. 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.
Benannte Filter 60zusätzliche Query-Parameter
adsLaunchedPeriodcurrenciesexcludeSellingCountrieshasPartnershipAdsmainSellingCountriesmaxActiveAdsmaxAdSharemaxAdsLaunchedmaxEstDailySalesmaxEstMonthlySalesmaxEuAdSpendmaxEuReachmaxMonthlyRevenuemaxMonthlyUnitsSoldmaxPricemaxPriceUsdmaxRatingmaxReviewCountmaxReviewsmaxShopMonthlyVisitsmaxShopProductsCountmaxShopTrafficGrowth30dmaxSpendSharemaxUnitsSoldDailymaxUnitsSoldMonthlyminActiveAdsminAdShareminAdsLaunchedminEstDailySalesminEstMonthlySalesminEuAdSpendminEuReachminMonthlyRevenueminMonthlyUnitsSoldminPriceminPriceUsdminRatingminReviewCountminReviewsminShopMonthlyVisitsminShopProductsCountminShopTrafficGrowth30dminSpendShareminUnitsSoldDailyminUnitsSoldMonthlypartnershippixelIdspromoTypespublishedAfterpublishedBeforesellingCountriesshopshopCountriesshopCreatedAftershopCreatedBeforeshopIdshopVisitorCountriesshopifyAppIdssubscriptionthemeIds
ParameterBeschreibung
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. Mögliche Werte: 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). Mögliche Werte: relevance, newest, activeAds, spend, estSales, bestSelling, adPressure, createdAt.
order Sort direction (default desc). Mögliche Werte: 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

Produkte mit Filtern durchsuchen. 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.
Benannte Filter 60Felder auf oberster Ebene des Bodys
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}

Ein Produkt abrufen. 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`.
ParameterBeschreibung
productIderforderlich 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

Ein Produkt über seine Seitenadresse suchen. The product behind a Shopify product page (`url`), as GET /v1/products/{productId} answers it.
ParameterBeschreibung
urlerforderlich 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

Anzeigen eines Produkts auflisten. The Meta ads that link to the product's page, newest first, in the format of /v1/ads. `status`: active or inactive.
ParameterBeschreibung
productIderforderlich The product's `ref`, as a product search returns it.
status active or inactive. Mögliche Werte: 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

Einen öffentlichen Link zu einem Produkt erstellen (oder abrufen). Anyone with the link can view the product's sheet on the website without an account, with no EU data.
ParameterBeschreibung
productIderforderlich 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

Den öffentlichen Link zu einem Produkt entfernen.
ParameterBeschreibung
productIderforderlich 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}

Ein Produkt hinter einem Freigabelink (kein Schlüssel nötig). The same record the share page shows, as JSON.
ParameterBeschreibung
tokenerforderlich 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

Filterwerte für die Produktsuche. 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

Ihre letzten Bildersuchen. 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.
ParameterBeschreibung
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}

Eine Bildersuche erneut abrufen. 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.
ParameterBeschreibung
searchIderforderlich The searchId an image search answered (meta.searchId).
filters A JSON object of the product search's named filters.
sortBy Defaults to relevance. Mögliche Werte: relevance, estSales, activeAds, adPressure, newest, spend, spend14d.
order Sort direction (default desc). Mögliche Werte: 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"

Facetten

Die Werte und IDs, die die Suchfilter erwarten.

GET/v1/facets/categories

Kategorien (IDs für die categoryIds-Filter). The ids taken by every categoryIds filter. Each row has id, name, path, parentId and usageCount.
ParameterBeschreibung
search Only options whose name contains this text.
limit Options per page, 1-500 (default 100).
offset Options to skip.
curl "https://api.sellwinners.com/v1/facets/categories?limit=20" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/facets/shopify-apps

Shopify-Apps (IDs für die App-Filter).
ParameterBeschreibung
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

Storefront-Technologien (Slugs für den Technologie-Filter).
ParameterBeschreibung
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

Tracking-Pixel (IDs für die Pixel-Filter).
ParameterBeschreibung
search Only options whose name contains this text.
limit Options per page, 1-500 (default 100).
offset Options to skip.
curl "https://api.sellwinners.com/v1/facets/pixels?limit=20" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/facets/themes

Shopify-Themes (IDs für die Theme-Filter).
ParameterBeschreibung
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

E-Mail-Kategorien, Aktionsarten und Anlässe. The ids taken by emailCategoryIds, promotionTypeIds and eventIds, and the event categories taken by eventCategories, in email searches.
curl "https://api.sellwinners.com/v1/facets/email-classifications" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/google-ads/facets/networks

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

GET/v1/google-ads/facets/countries

Zielgruppenländer von Google-Anzeigen.
ParameterBeschreibung
search Only options whose name contains this text.
limit Options per page, 1-500 (default 100).
offset Options to skip.
curl "https://api.sellwinners.com/v1/google-ads/facets/countries?limit=20" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/google-ads/facets/formats

Google-Anzeigenformate. 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 von Google-Anzeigen. 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

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

GET/v1/tiktok/facets/categories

TikTok-Kategorien. 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.
ParameterBeschreibung
search Only options whose name contains this text.
limit Options per page, 1-500 (default 100).
offset Options to skip.
curl "https://api.sellwinners.com/v1/tiktok/facets/categories?limit=20" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/tiktok/facets/languages

TikTok-Sprachen. 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.
ParameterBeschreibung
search Only options whose name contains this text.
limit Options per page, 1-500 (default 100).
offset Options to skip.
curl "https://api.sellwinners.com/v1/tiktok/facets/languages?limit=20" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/tiktok/facets/countries

TikTok-Länder. 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.
ParameterBeschreibung
search Only options whose name contains this text.
limit Options per page, 1-500 (default 100).
offset Options to skip.
curl "https://api.sellwinners.com/v1/tiktok/facets/countries?limit=20" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/tiktok/facets/content-types

TikTok-Inhaltstypen. 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.
ParameterBeschreibung
search Only options whose name contains this text.
limit Options per page, 1-500 (default 100).
offset Options to skip.
curl "https://api.sellwinners.com/v1/tiktok/facets/content-types?limit=20" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/tiktok/facets/media-types

TikTok-Medientypen. 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.
ParameterBeschreibung
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}

Filterwerte für E-Mails. 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.
ParameterBeschreibung
faceterforderlich 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

Filterwerte für die Shop-Suche. 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

Filterwerte für die Suche nach Werbetreibenden. 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

Filterwerte für die Produktsuche. 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

Filterwerte für die Anzeigensuche.
curl "https://api.sellwinners.com/v1/filters/ads" \
  -H "X-API-Key: YOUR_API_KEY"

Boards

Anzeigen, Shops, Produkte, E-Mails und Werbetreibende in Boards speichern und teilen.

GET/v1/boards

Boards auflisten.
ParameterBeschreibung
scope Defaults to workspace. Mögliche Werte: workspace, personal.
state Defaults to active. Mögliche Werte: active, archived.
kind A collection holds items, a folder holds boards. Mögliche Werte: collection, folder.
surface What the board is for. Mögliche Werte: ads, shops, landing, emails, products, advertisers, mixed.
parentBoardId Only boards inside this folder board.
rootOnly Only top-level boards. Mögliche Werte: 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

Board erstellen. 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}

Ein Board abrufen.
ParameterBeschreibung
boardIderforderlich Board id.
curl "https://api.sellwinners.com/v1/boards/BOARD_ID" \
  -H "X-API-Key: YOUR_API_KEY"

PATCH/v1/boards/{boardId}

Ein Board aktualisieren. Send at least one of name, description or visibility.
ParameterBeschreibung
boardIderforderlich 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}

Ein Board archivieren. Archives the board and everything under it. The restore endpoint brings it back.
ParameterBeschreibung
boardIderforderlich 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

Ein archiviertes Board wiederherstellen.
ParameterBeschreibung
boardIderforderlich 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

Ein Board verschieben. parentBoardId is a folder board; null moves the board to the top level.
ParameterBeschreibung
boardIderforderlich 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

Die Elemente eines Boards auflisten.
ParameterBeschreibung
boardIderforderlich 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. Mögliche Werte: 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

Ein Element zu einem Board hinzufügen. 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.
ParameterBeschreibung
boardIderforderlich 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

Ein Element in ein anderes Board verschieben.
ParameterBeschreibung
boardIderforderlich Board id.
itemIderforderlich 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}

Ein Element aus einem Board entfernen.
ParameterBeschreibung
boardIderforderlich Board id.
itemIderforderlich 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

Einen öffentlichen Link zu einem Board erstellen. The answer carries a url: a web page anyone can open, without an API key. Each call creates a new link.
ParameterBeschreibung
boardIderforderlich 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

Die öffentlichen Links zu einem Board entfernen. Every link to the board stops working at once; the board itself stays.
ParameterBeschreibung
boardIderforderlich 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}

Ein Board hinter einem Freigabelink (kein Schlüssel nötig). The same board the share page shows, as JSON.
ParameterBeschreibung
tokenerforderlich Token at the end of a share link.
curl "https://api.sellwinners.com/v1/shared/boards/TOKEN" \
  -H "X-API-Key: YOUR_API_KEY"

Favoriten

Favorisierte Anzeigen, Shops und E-Mails, in Ordnern.

GET/v1/favorites/ads

Favorisierte Anzeigen auflisten.
ParameterBeschreibung
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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

Eine Anzeige als Favorit speichern. 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

Eine gespeicherte Favoriten-Anzeige verschieben.
ParameterBeschreibung
favoriteIderforderlich id of a saved favorite, from the favorites list.
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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}

Eine gespeicherte Favoriten-Anzeige löschen.
ParameterBeschreibung
favoriteIderforderlich id of a saved favorite, from the favorites list.
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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}

Eine Favoriten-Anzeige anhand ihrer adId entfernen.
ParameterBeschreibung
recordIderforderlich The adId of the saved ad.
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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

Ordner für Favoriten-Anzeigen auflisten.
ParameterBeschreibung
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: workspace, personal.
parentId Only folders inside this folder.
rootOnly Only top-level folders. Mögliche Werte: 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

Einen Ordner für Favoriten-Anzeigen erstellen. 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

Die Reihenfolge eines Ordners für Favoriten-Anzeigen prüfen. Folders have no stored order: the list is checked and echoed back sorted by order. The answer carries reordered: true.
ParameterBeschreibung
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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

Einen öffentlichen Link zu einem Ordner für Favoriten-Anzeigen erstellen.
ParameterBeschreibung
folderIderforderlich Folder id.
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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

Die öffentlichen Links zu einem Ordner für Favoriten-Anzeigen entfernen.
ParameterBeschreibung
folderIderforderlich Folder id.
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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

Die Sichtbarkeit eines Ordners für Favoriten-Anzeigen festlegen. visibility is private or organization.
ParameterBeschreibung
folderIderforderlich Folder id.
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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}

Einen Ordner für Favoriten-Anzeigen umbenennen oder verschieben. Body: name, and parentId to move the folder (null moves it to the top level).
ParameterBeschreibung
folderIderforderlich Folder id.
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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}

Einen Ordner für Favoriten-Anzeigen löschen. mode is delete_items, move_items_to_root or move_items_to_folder (with targetFolderId).
ParameterBeschreibung
folderIderforderlich Folder id.
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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

Favorisierte Shops auflisten.
ParameterBeschreibung
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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

Einen Shop als Favorit speichern. 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

Einen gespeicherten Favoriten-Shop verschieben.
ParameterBeschreibung
favoriteIderforderlich id of a saved favorite, from the favorites list.
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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}

Einen gespeicherten Favoriten-Shop löschen.
ParameterBeschreibung
favoriteIderforderlich id of a saved favorite, from the favorites list.
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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}

Einen Favoriten-Shop anhand seiner websiteId entfernen.
ParameterBeschreibung
recordIderforderlich The websiteId of the saved shop.
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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

Ordner für Favoriten-Shops auflisten.
ParameterBeschreibung
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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

Einen Ordner für Favoriten-Shops erstellen. 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

Die Reihenfolge eines Ordners für Favoriten-Shops prüfen. Folders have no stored order: the list is checked and echoed back sorted by order. The answer carries reordered: true.
ParameterBeschreibung
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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

Einen öffentlichen Link zu einem Ordner für Favoriten-Shops erstellen.
ParameterBeschreibung
folderIderforderlich Folder id.
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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

Die öffentlichen Links zu einem Ordner für Favoriten-Shops entfernen.
ParameterBeschreibung
folderIderforderlich Folder id.
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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

Die Sichtbarkeit eines Ordners für Favoriten-Shops festlegen. visibility is private or organization.
ParameterBeschreibung
folderIderforderlich Folder id.
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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}

Einen Ordner für Favoriten-Shops umbenennen oder verschieben. Body: name.
ParameterBeschreibung
folderIderforderlich Folder id.
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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}

Einen Ordner für Favoriten-Shops löschen. mode is delete_items, move_items_to_root or move_items_to_folder (with targetFolderId).
ParameterBeschreibung
folderIderforderlich Folder id.
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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

Favorisierte E-Mails auflisten.
ParameterBeschreibung
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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

Eine E-Mail als Favorit speichern. 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

Eine gespeicherte Favoriten-E-Mail verschieben.
ParameterBeschreibung
favoriteIderforderlich id of a saved favorite, from the favorites list.
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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}

Eine gespeicherte Favoriten-E-Mail löschen.
ParameterBeschreibung
favoriteIderforderlich id of a saved favorite, from the favorites list.
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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}

Eine Favoriten-E-Mail anhand ihrer emailId entfernen.
ParameterBeschreibung
recordIderforderlich The emailId of the saved email.
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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

Ordner für Favoriten-E-Mails auflisten.
ParameterBeschreibung
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: workspace, personal.
parentId Only folders inside this folder.
rootOnly Only top-level folders. Mögliche Werte: 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

Einen Ordner für Favoriten-E-Mails erstellen. 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

Die Reihenfolge eines Ordners für Favoriten-E-Mails prüfen. Folders have no stored order: the list is checked and echoed back sorted by order. The answer carries reordered: true.
ParameterBeschreibung
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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

Einen öffentlichen Link zu einem Ordner für Favoriten-E-Mails erstellen.
ParameterBeschreibung
folderIderforderlich Folder id.
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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

Die öffentlichen Links zu einem Ordner für Favoriten-E-Mails entfernen.
ParameterBeschreibung
folderIderforderlich Folder id.
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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

Die Sichtbarkeit eines Ordners für Favoriten-E-Mails festlegen. visibility is private or organization.
ParameterBeschreibung
folderIderforderlich Folder id.
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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}

Einen Ordner für Favoriten-E-Mails umbenennen oder verschieben. Body: name, and parentId to move the folder (null moves it to the top level).
ParameterBeschreibung
folderIderforderlich Folder id.
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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}

Einen Ordner für Favoriten-E-Mails löschen. mode is delete_items, move_items_to_root or move_items_to_folder (with targetFolderId).
ParameterBeschreibung
folderIderforderlich Folder id.
scopeerforderlich Which favorites: shared with the workspace or personal. Mögliche Werte: 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"}'

Gespeicherte Ansichten

Die Suchen, die Sie auf den Listenseiten der Website gespeichert haben, nach Seite.

GET/v1/views

Ihre gespeicherten Ansichten auflisten. 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.
ParameterBeschreibung
context Only this list page's views. Defaults to every page. Mögliche Werte: shops, meta, tiktok, google, advertisers, emails, products.
curl "https://api.sellwinners.com/v1/views" \
  -H "X-API-Key: YOUR_API_KEY"

POST/v1/views

Eine Ansicht speichern. 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}

Eine gespeicherte Ansicht umbenennen, verschieben oder ändern. Send at least one of name, position (its place among the page's views, 0 the first) or state.
ParameterBeschreibung
viewIderforderlich 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}

Eine gespeicherte Ansicht löschen. Open on every plan; the page's other views keep their order.
ParameterBeschreibung
viewIderforderlich 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"

Marken-Tracker

Marken folgen und Berichte über ihre Anzeigen, Creatives und Landingpages lesen.

GET/v1/brandtrackers

Verfolgte Marken auflisten. 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).
ParameterBeschreibung
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 Mögliche Werte: 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

Marke verfolgen. 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}

Eine verfolgte Marke. 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.
ParameterBeschreibung
brandtrackerIderforderlich 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}

Eine Marke nicht mehr verfolgen.
ParameterBeschreibung
brandtrackerIderforderlich 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

Dashboard-Ansicht einer Marke. 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).
ParameterBeschreibung
brandtrackerIderforderlich Tracker id, from the list of tracked brands.
euOnly Only ads shown in the EU and UK. Mögliche Werte: true, false.
curl "https://api.sellwinners.com/v1/brandtrackers/BRANDTRACKER_ID/overview" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/{brandtrackerId}/snapshots

Snapshot-Daten einer Marke. The days recorded for a brand, newest first. Built from a daily record that starts the day the brand is tracked.
ParameterBeschreibung
brandtrackerIderforderlich 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

Anzeigen einer Marke. 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.
ParameterBeschreibung
brandtrackerIderforderlich 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. Mögliche Werte: newest, longestRunning, reach, duplicates, relevance, reachDelta7d, currentRank, rankDelta7d, rankDelta14d, rankDelta30d, spend.
status Running or stopped ads. Mögliche Werte: active, inactive, all.
mediaType Creative type. Mögliche Werte: 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. Mögliche Werte: true, false.
partnerIds Only ads with these partner pages (Facebook page ids), comma-separated.
euOnly Only ads shown in the EU and UK. Mögliche Werte: 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

Die Anzeigen einer Marke in der Reihenfolge ihres Starts.
ParameterBeschreibung
brandtrackerIderforderlich 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. Mögliche Werte: newest, longestRunning, reach, duplicates, relevance, reachDelta7d, currentRank, rankDelta7d, rankDelta14d, rankDelta30d, spend.
status Running or stopped ads. Mögliche Werte: active, inactive, all.
mediaType Creative type. Mögliche Werte: 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. Mögliche Werte: true, false.
partnerIds Only ads with these partner pages (Facebook page ids), comma-separated.
euOnly Only ads shown in the EU and UK. Mögliche Werte: 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

Anzahl und Zeitraum der Zeitachse einer Marke. totalIsExact is false when totalCount is a lower bound; totalCount is null when the source sends no total.
ParameterBeschreibung
brandtrackerIderforderlich Tracker id, from the list of tracked brands.
status Running or stopped ads. Mögliche Werte: active, inactive, all.
mediaType Creative type. Mögliche Werte: 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. Mögliche Werte: true, false.
partnerIds Only ads with these partner pages (Facebook page ids), comma-separated.
euOnly Only ads shown in the EU and UK. Mögliche Werte: 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

Partnerschaftsanzeigen einer Marke.
ParameterBeschreibung
brandtrackerIderforderlich 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. Mögliche Werte: newest, longestRunning, reach, duplicates, relevance, reachDelta7d, currentRank, rankDelta7d, rankDelta14d, rankDelta30d, spend.
status Running or stopped ads. Mögliche Werte: active, inactive, all.
mediaType Creative type. Mögliche Werte: 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. Mögliche Werte: true, false.
partnerIds Only ads with these partner pages (Facebook page ids), comma-separated.
euOnly Only ads shown in the EU and UK. Mögliche Werte: 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

Anzahl der Partnerschaftsanzeigen einer Marke. isExact is false when count is a lower bound; count is null when the source sends no total.
ParameterBeschreibung
brandtrackerIderforderlich Tracker id, from the list of tracked brands.
status Running or stopped ads. Mögliche Werte: active, inactive, all.
mediaType Creative type. Mögliche Werte: 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. Mögliche Werte: true, false.
partnerIds Only ads with these partner pages (Facebook page ids), comma-separated.
euOnly Only ads shown in the EU and UK. Mögliche Werte: 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

Die Anzeigen einer Marke, gerankt. 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.
ParameterBeschreibung
brandtrackerIderforderlich 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. Mögliche Werte: currentRank, rankDelta, rankDelta7d, rankDelta14d, rankDelta30d, reach, reachDelta7d, daysRunning, duplicates.
status Defaults to active. Mögliche Werte: active, inactive, all.
includeInactive Also rank stopped ads. Mögliche Werte: true, false.
euOnly Only ads shown in the EU and UK. Mögliche Werte: 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

Die Anzeigen einer Marke, die im Rang gestiegen sind. 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).
ParameterBeschreibung
brandtrackerIderforderlich 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. Mögliche Werte: last7d, last14d, last30d.
sortBy Defaults to rankDelta. Mögliche Werte: 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

Die skalierenden Anzeigen einer Marke. Same answer as /ad-rank.
ParameterBeschreibung
brandtrackerIderforderlich 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. Mögliche Werte: last7d, last14d, last30d.
sortBy Defaults to rankDelta. Mögliche Werte: 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

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

Creative-Tests einer Marke. 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.
ParameterBeschreibung
brandtrackerIderforderlich 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. Mögliche Werte: active, inactive, all.
mediaType Creative type. Mögliche Werte: 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. Mögliche Werte: true, false.
partnerIds Only ads with these partner pages (Facebook page ids), comma-separated.
euOnly Only ads shown in the EU and UK. Mögliche Werte: 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

Hooks, mit denen eine Marke ihre Videos eröffnet. 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.
ParameterBeschreibung
brandtrackerIderforderlich Tracker id, from the list of tracked brands.
timePeriod Which ads to read (default live). Mögliche Werte: 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. Mögliche Werte: usageCount, longestRunning, totalImpressions, firstUsedAt, lastUsedAt.
order Sort direction (default desc). Mögliche Werte: desc, asc.
euOnly Only ads shown in the EU and UK. Mögliche Werte: 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

Videoskripte einer Marke. 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).
ParameterBeschreibung
brandtrackerIderforderlich Tracker id, from the list of tracked brands.
timePeriod Which ads to read (default live). Mögliche Werte: 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. Mögliche Werte: usageCount, longestRunning, totalImpressions, firstUsedAt, lastUsedAt.
order Sort direction (default desc). Mögliche Werte: desc, asc.
euOnly Only ads shown in the EU and UK. Mögliche Werte: 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

Überschriften der Anzeigen einer Marke. 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.
ParameterBeschreibung
brandtrackerIderforderlich Tracker id, from the list of tracked brands.
timePeriod Which ads to read (default live). Mögliche Werte: 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. Mögliche Werte: usageCount, longestRunning, totalImpressions, firstUsedAt, lastUsedAt.
order Sort direction (default desc). Mögliche Werte: desc, asc.
euOnly Only ads shown in the EU and UK. Mögliche Werte: 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

Anzeigentexte einer Marke. Ad texts and how many live ads use each; longestRunning is null when the age of its ads is unknown.
ParameterBeschreibung
brandtrackerIderforderlich 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). Mögliche Werte: desc, asc.
euOnly Only ads shown in the EU and UK. Mögliche Werte: 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

Landingpages einer Marke. 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.
ParameterBeschreibung
brandtrackerIderforderlich 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. Mögliche Werte: usageCount, longestRunning, totalImpressions.
order Sort direction (default desc). Mögliche Werte: 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

Landingpages einer Marke, nach Seite gruppiert. Query strings, fragments, trailing slashes and a leading www. are ignored when grouping.
ParameterBeschreibung
brandtrackerIderforderlich 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. Mögliche Werte: usageCount, activeAdsCount.
order Sort direction (default desc). Mögliche Werte: 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

Anzeigentexte einer Marke im Zeitverlauf. 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.
ParameterBeschreibung
brandtrackerIderforderlich 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

Überschriften einer Marke im Zeitverlauf. 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.
ParameterBeschreibung
brandtrackerIderforderlich 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

Landingpages einer Marke im Zeitverlauf. 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.
ParameterBeschreibung
brandtrackerIderforderlich 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

Partner, die Anzeigen für eine Marke schalten. 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).
ParameterBeschreibung
brandtrackerIderforderlich 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. Mögliche Werte: activeAds, launchDate, reach, estimatedSpend.
order Sort direction (default desc). Mögliche Werte: desc, asc.
euOnly Only ads shown in the EU and UK. Mögliche Werte: 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

Formatmix der aktiven Anzeigen einer Marke.
ParameterBeschreibung
brandtrackerIderforderlich Tracker id, from the list of tracked brands.
euOnly Only ads shown in the EU and UK. Mögliche Werte: 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

Zielgruppe der Anzeigen einer Marke. 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.
ParameterBeschreibung
brandtrackerIderforderlich 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

Die neuesten Elemente einer verfolgten Marke aus einer Quelle. 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.
ParameterBeschreibung
brandtrackerIderforderlich Tracker id, from the list of tracked brands.
source Defaults to meta. Mögliche Werte: 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

Die Ereignisse einer verfolgten Marke. 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.
ParameterBeschreibung
brandtrackerIderforderlich 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

Der Kalender einer verfolgten Marke über Meta, TikTok, Google und E-Mail. 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.
ParameterBeschreibung
brandtrackerIderforderlich 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

Wie viel eine verfolgte Marke an jedem Tag gestartet hat, nach Quelle. 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.
ParameterBeschreibung
brandtrackerIderforderlich 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

Gestartete Anzeigen, aktive Anzeigen und Reichweite im Zeitverlauf. 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.
ParameterBeschreibung
brandtrackerIderforderlich Tracker id, from the list of tracked brands.
granularity Defaults to daily. Mögliche Werte: daily, weekly, monthly.
period Use it instead of startDate / endDate. Mögliche Werte: 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. Mögliche Werte: 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

Top-Anzeigen aller verfolgten Marken. 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.
ParameterBeschreibung
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. Mögliche Werte: currentRank, rankDelta, rankDelta7d, reach, reachDelta7d, daysRunning, duplicates.
includeInactive Also rank stopped ads. Mögliche Werte: true, false.
euOnly Only ads shown in the EU and UK. Mögliche Werte: 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

Skalierende Anzeigen aller verfolgten Marken. 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.
ParameterBeschreibung
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. Mögliche Werte: 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. Mögliche Werte: 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

Hooks aller verfolgten Marken. 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.
ParameterBeschreibung
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. Mögliche Werte: usageCount, longestRunning, totalImpressions, firstUsedAt, lastUsedAt.
order Sort direction (default desc). Mögliche Werte: desc, asc.
euOnly Only ads shown in the EU and UK. Mögliche Werte: true, false.
curl "https://api.sellwinners.com/v1/workspace/hooks?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/workspace/ad-copies

Anzeigentexte aller verfolgten Marken. 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.
ParameterBeschreibung
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. Mögliche Werte: usageCount.
order Sort direction (default desc). Mögliche Werte: desc, asc.
euOnly Only ads shown in the EU and UK. Mögliche Werte: 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

Landingpages aller verfolgten Marken. 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.
ParameterBeschreibung
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. Mögliche Werte: usageCount, longestRunning, totalImpressions.
order Sort direction (default desc). Mögliche Werte: 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

Formatmix aller verfolgten Marken. 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.
ParameterBeschreibung
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. Mögliche Werte: activeAds, image, video, dco, other.
euOnly Only ads shown in the EU and UK. Mögliche Werte: true, false.
curl "https://api.sellwinners.com/v1/workspace/media-mix?limit=10" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/brandtrackers/folders

Tracker-Ordner auflisten.
curl "https://api.sellwinners.com/v1/brandtrackers/folders" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/workspace/folders

Tracker-Ordner auflisten. 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

Einen Tracker-Ordner erstellen.
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}

Einen Tracker-Ordner umbenennen.
ParameterBeschreibung
folderIderforderlich 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}

Einen Tracker-Ordner löschen. action is move-to-default (keeps the trackers) or delete-brandtrackers (removes them).
ParameterBeschreibung
folderIderforderlich 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

Tracker in einem Ordner.
ParameterBeschreibung
folderIderforderlich 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 Mögliche Werte: 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"

Konto

Ihr Schlüssel, Ihr Tarif und Ihre Nutzung. Diese Aufrufe werden nie gezählt.

GET/v1/account

Ihr Tarif, Ihre Credits und Ihre Nutzung in diesem Monat.
curl "https://api.sellwinners.com/v1/account" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/usage

In diesem Monat verbrauchte und verbleibende Credits.
curl "https://api.sellwinners.com/v1/usage" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/me

Der verwendete API-Schlüssel und sein Arbeitsbereich.
curl "https://api.sellwinners.com/v1/me" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/workspace

Der Arbeitsbereich hinter dem API-Schlüssel.
curl "https://api.sellwinners.com/v1/workspace" \
  -H "X-API-Key: YOUR_API_KEY"

Arbeitsbereiche

Ihre Arbeitsbereiche, ihre Mitglieder und Plätze sowie die gesendeten und erhaltenen Einladungen. Diese Aufrufe werden nie gezählt.

GET/v1/workspaces

Ihre Arbeitsbereiche auflisten. 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

Arbeitsbereich erstellen. 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

Ihren Standard-Arbeitsbereich wählen. 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}

Einer Ihrer Arbeitsbereiche. A workspace you don't belong to answers 404.
ParameterBeschreibung
workspaceIderforderlich 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}

Einen Arbeitsbereich umbenennen. Owners and admins only.
ParameterBeschreibung
workspaceIderforderlich 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}

Einen Arbeitsbereich entfernen. 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).
ParameterBeschreibung
workspaceIderforderlich 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

Die Mitglieder eines Arbeitsbereichs auflisten. Every member with their email and role, the owner first, and the seats. Every member can read it.
ParameterBeschreibung
workspaceIderforderlich 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}

Die Rolle eines Mitglieds ändern. The owner changes anyone but themself; an admin changes members and readonly members only. The owner role can't be changed.
ParameterBeschreibung
workspaceIderforderlich id of one of your workspaces (ws_...), from the list of your workspaces.
userIderforderlich 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}

Ein Mitglied entfernen. They lose access at once; getting them back takes a new invitation.
ParameterBeschreibung
workspaceIderforderlich id of one of your workspaces (ws_...), from the list of your workspaces.
userIderforderlich 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

Ausstehende Einladungen auflisten. Owners and admins only, newest first, each with its email, role, who sent it and when it expires.
ParameterBeschreibung
workspaceIderforderlich 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

Jemanden einladen. 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.
ParameterBeschreibung
workspaceIderforderlich 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

Eine Einladung erneut senden. A new link (the old one stops working), valid 7 days. At most once a minute.
ParameterBeschreibung
workspaceIderforderlich id of one of your workspaces (ws_...), from the list of your workspaces.
invitationIderforderlich 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}

Eine Einladung widerrufen. It stops working at once and its seat is free again.
ParameterBeschreibung
workspaceIderforderlich id of one of your workspaces (ws_...), from the list of your workspaces.
invitationIderforderlich 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

Einladungen, die Sie erhalten haben. 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}

Eine Einladung, die Sie erhalten haben. Its status: active, accepted, declined, revoked or expired.
ParameterBeschreibung
invitationIderforderlich 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

Eine Einladung annehmen. Join with the role offered. 410 invitation_closed when it is no longer open (details.status says why).
ParameterBeschreibung
invitationIderforderlich 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

Eine Einladung ablehnen. The seat it held is free again.
ParameterBeschreibung
invitationIderforderlich 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"

System

Dienststatus. Kein API-Schlüssel nötig.

GET/v1

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

GET/v1/health

Dienststatus (kein Schlüssel nötig).
curl "https://api.sellwinners.com/v1/health" \
  -H "X-API-Key: YOUR_API_KEY"

GET/v1/system/freshness

Wie aktuell die Daten sind (kein Schlüssel nötig).
curl "https://api.sellwinners.com/v1/system/freshness" \
  -H "X-API-Key: YOUR_API_KEY"

MCP-Server

Unser gehosteter MCP-Server stellt KI-Agenten dieselben Daten als Tools bereit. Nutzen Sie denselben API-Schlüssel wie für die REST-API; ein Tool-Aufruf kostet wie die API so viele Credits, wie er Ergebnisse liefert, und seine Antwort nennt das in meta.credits (used, remaining, source). Außerdem stellt er drei Ressourcen bereit: sellwinners://me, sellwinners://usage und sellwinners://openapi.

Der Tarif Free umfasst auch den MCP-Server: 150 Credits pro Monat, 10 Anfragen pro Minute, die ersten 10 Ergebnisse jeder Suche. In Free nennt die Tool-Liste die Tools, die Free umfasst; ein anderes Tool liefert einen Tool-Fehler, der auf [plan_not_eligible] endet und nicht gezählt wird. In einem kostenpflichtigen Tarif liefert ein Tool-Aufruf, den der Tarif nicht umfasst, einen Tool-Fehler, der auf [plan_not_eligible] endet und nicht gezählt wird.

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.

Client-Einrichtung

No API key: these sign in with your SellWinners account.
Der Tarif Free umfasst auch den MCP-Server: 150 Credits pro Monat,
10 Anfragen pro Minute, die ersten 10 Ergebnisse jeder Suche.

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.

Tools

Nachschlagen 3
lookupEinen Markennamen, eine Shop-Domain oder eine Facebook-Seiten-ID in IDs auflösen, die Sie mit den anderen Tools verwenden können
3 Argumente
qtexttypetextlimitnumber
lookup_filter_idsIDs für die Filter der Such-Tools
7 Argumente
typetextquerytextscope_tracked_pageslistscope_domaintextstatustextlimitnumbersnapshot_datetext
list_saved_viewsDie Suchen, die Sie auf den Listenseiten der Website gespeichert haben, bereit für die Such-Tools
1 Argument
contexttext
Shops 17
search_shopsShopify-Shops suchen oder durchstöbern
48 Argumente
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_shopsWettbewerber eines Shops (ID oder Domain)
10 Argumente
shoptextlimitnumbersort_bytextordertextoffsetnumberseasontextfiltersobjectmarkettextexclude_shopslistdetailtext
find_winning_productsProdukte, die sich in einer Nische gerade verkaufen
5 Argumente
nichetextkeywordslistcountrytextmax_resultsnumberdetailtext
search_productsShop-Produkte nach Preis, Umsatz, verkauften Einheiten, Verkaufsländern, Anzeigen, Reichweite, Bewertungen, Startdatum, Währung oder Shop-Land suchen oder durchstöbern
37 Argumente
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_imageShop-Produkte finden, die einem Bild ähneln (eine Bild-URL oder die Datei), mit ihren Shops
12 Argumente
image_urltextimage_base64textsort_bytextordertextmax_per_shopnumberfiltersobjectpagenumberlimitnumbersearch_idtextdetailtextoffsetnumbergroup_brandstrue / false
search_shops_by_imageShops finden, die verkaufen, was ein Bild zeigt, mit ihren ähnlichsten Produkten
7 Argumente
image_urltextimage_base64textsearch_idtextlimitnumberoffsetnumbergroup_brandstrue / falseproducts_per_shopnumber
get_productEin Produkt mit vollständigem Datenblatt: Fotos, Optionen und Varianten
2 Argumente
product_idtexturltext
get_product_adsDie Meta-Anzeigen, die auf die Seite eines Produkts verlinken
5 Argumente
product_idtextstatustextpagenumberlimitnumberdetailtext
analyze_productEin Produkt, seine neuesten Anzeigen und eine Einschätzung seiner Signale
3 Argumente
product_idtexturltexttop_adsnumber
product_launch_radarKürzlich gestartete Produkte, sortiert nach Umsatz oder Anzeigendruck
34 Argumente
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_linkDen öffentlichen Link zu einem Produkt erstellen (oder abrufen)
2 Argumente
product_idtextconfirmtrue / false
delete_product_share_linkDen öffentlichen Link zu einem einzelnen Produkt entfernen
2 Argumente
product_idtextconfirmtrue / false
brief_competitorEin kompaktes Briefing zu einem Wettbewerber (Shop-ID, Domain oder Name)
11 Argumente
competitortextsectionslistmax_productsnumbermax_emailsnumbermax_adsnumbershoptextad_rank_windowtextad_rank_sorttextmax_current_ranknumbermin_rank_deltanumbersnapshot_datetext
shop_reportEin Bericht zu einem Shop: sein Feed, seine Facebook-Seiten, die Q4-Saison, eine Landingpage, sein Anzeigen-Ranking oder seine Creative-Tests
19 Argumente
shoptextreporttextyearnumberdate_fromtextdate_totexturltextadvertiser_idtextmodetextdaysnumberad_idslistdatetextas_oftextmedia_typetextstatustextkeywordslistsnapshot_datetextpagenumberlimitnumberdetailtext
compare_shopsEine Kennzahl mehrerer Shops im direkten Vergleich
3 Argumente
shopslistmetrictextsnapshot_datetext
market_overviewDer gesamte Markt, Tag für Tag oder über eine Q4-Saison
5 Argumente
kindtextyearnumberdate_fromtextdate_totextlimitnumber
detect_shopify_storeOb ein Shop auf Shopify läuft, sein Theme und die Shopify-Apps, die er lädt
1 Argument
urltext
Anzeigen und Medien 8
search_adsMeta-Anzeigen (Facebook / Instagram) nach Wörtern im Anzeigentext, in der Marke oder in der Landingpage durchsuchen
97 Argumente
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_adDer vollständige Datensatz einer Meta-Anzeige (oder einer Google-Anzeige oder eines TikTok-Beitrags)
1 Argument
ad_identifiertext
creative_inspiration_packCreative-Inspiration für eine Nische
5 Argumente
nichetextkeywordslistfocustextmax_adsnumbertrend_signaltext
search_google_ads_libraryGoogle-Anzeigen suchen
57 Argumente
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_libraryTikTok-Anzeigen und organische Beiträge durchsuchen
66 Argumente
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_linkDen öffentlichen Link zu einer Anzeige erstellen (oder zurückgeben)
2 Argumente
ad_idtextconfirmtrue / false
delete_ad_share_linkDen öffentlichen Link zu einer Anzeige entfernen
2 Argumente
ad_idtextconfirmtrue / false
write_ad_hooksDrei kurze Eröffnungszeilen (Hooks) für eine Anzeige zu einem Produkt schreiben, für Meta, TikTok oder beide
7 Argumente
nichetextproducttextangletextplatformtextlanguagetextregeneratetextidempotency_keytext
Werbetreibende und E-Mails 5
search_advertisersWerbetreibende (Facebook-Seiten) durchsuchen
26 Argumente
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_advertiserDer Datensatz eines Werbetreibenden oder seine aktiven Anzeigen und seine Reichweite Tag für Tag
4 Argumente
advertiser_idtextviewtextdaysnumbersnapshot_datetext
search_emailsMarketing-E-Mails von Marken nach Wörtern im Betreff, im Absender oder im Inhalt durchsuchen
11 Argumente
querytextshoptextcampaign_typetextsort_bytextordertextpagenumberlimitnumberfiltersobjectdetailtexttimeframetextintenttext
get_email_htmlDas Roh-HTML einer E-Mail (ermitteln Sie die ID zuerst mit search_emails)
4 Argumente
email_idtextinclude_htmltrue / falseshoptexthtml_partnumber
analyze_shop_emailsDie E-Mail-Strategie eines Shops
2 Argumente
shoptextmax_emailsnumber
Verfolgte Marken 14
list_tracked_brandsDie Marken, die Sie verfolgen, mit ihren Zählern aktiver Anzeigen
6 Argumente
pagenumberlimitnumberfolder_idslistnametextsort_bytextfolder_idnumber
add_to_brandtrackerEine Marke verfolgen
5 Argumente
facebook_page_idtextwebsite_idtextshop_idtextdomaintextfolder_idnumber
delete_from_brandtrackerEine Marke nicht mehr verfolgen
3 Argumente
brandtracker_idtextconfirmtrue / falseworkspace_link_idnumber
list_brandtracker_foldersIhre Tracker-Ordner
create_brandtracker_folderEinen Tracker-Ordner erstellen
1 Argument
nametext
rename_brandtracker_folderEinen Tracker-Ordner umbenennen
2 Argumente
folder_idnumbernametext
delete_brandtracker_folderEinen Tracker-Ordner löschen
3 Argumente
folder_idnumberactiontextconfirmtrue / false
move_tracked_brandsVerfolgte Marken in einen Ordner verschieben (folder_id=null nimmt sie aus jedem Ordner heraus)
3 Argumente
brandtracker_idslistfolder_idnumberworkspace_link_idslist
get_brand_activityWas eine verfolgte Marke auf Meta, TikTok, Google und per E-Mail getan hat
11 Argumente
brandtracker_idtextbrandtextviewtextsourcetextsincetextuntiltextdaytexttypeslistpagenumberlimitnumberdetailtext
analyze_tracked_brandEin genauer Blick auf eine verfolgte Marke
4 Argumente
brandtracker_idtextbrandtextsnapshot_datetextdetailtext
analyze_brand_changesWas sich bei einer verfolgten Marke in einem Zeitraum geändert hat (1d, 7d, 14d, 30d; der Ranggewinn wird für 1d über 7d gelesen, die Hooks für 14d über 30d, die Creative-Tests sind die neuesten)
6 Argumente
brandtracker_idtextbrandtextperiodtextfocustextsnapshot_datetextdetailtext
get_brandtracker_scaling_adsDie Anzeigen einer verfolgten Marke, die am meisten im Rang gestiegen sind, mit ihrem Rangverlauf
32 Argumente
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_transcriptsVideoskripte einer verfolgten Marke, nach Text gruppiert
9 Argumente
brandtracker_idtextbrandtexttime_periodtextpagenumberlimitnumbereu_onlytrue / falseordertextsort_bytextsnapshot_datetext
daily_radarTägliche Zusammenfassung über Ihre verfolgten Marken
4 Argumente
folder_idslistfocustextevent_typeslistfolder_idnumber
Boards 14
list_boardsIhre Boards
8 Argumente
scopetextstatetextkindtextsurfacetextparent_board_idtextroot_onlytrue / falsepagenumberlimitnumber
get_boardEin Board
1 Argument
board_idtext
create_boardBoard erstellen
6 Argumente
nametextkindtextsurfacetextdescriptiontextvisibilitytextparent_board_idtext
update_boardEin Board umbenennen oder seine Beschreibung oder Sichtbarkeit ändern
4 Argumente
board_idtextnametextdescriptiontextvisibilitytext
move_boardEin Board unter ein Ordner-Board verschieben (parent_board_id=null verschiebt es auf die oberste Ebene)
2 Argumente
board_idtextparent_board_idtext
archive_boardEin Board mit allem, was darunter liegt, archivieren (restore_board holt es zurück)
2 Argumente
board_idtextconfirmtrue / false
restore_boardEin archiviertes Board wiederherstellen
1 Argument
board_idtext
list_board_itemsDie in einem Board gespeicherten Elemente
3 Argumente
board_idtextpagenumberlimitnumber
find_saved_itemsAlles durchsuchen, was Sie gespeichert haben, in jedem Board und in Ihren Favoriten
13 Argumente
querytextsource_typeslistboard_idtextscopetextstatetextsaved_fromtextsaved_totextsort_bytextordertextpagenumberlimitnumberinclude_itemstrue / falsedetailtext
add_board_itemEin Element in einem Sammlungs-Board speichern
5 Argumente
board_idtextsource_typetextsource_idtextsource_indextextpositionnumber
move_board_itemEin gespeichertes Element in ein anderes Board verschieben
4 Argumente
board_idtextitem_idtexttarget_board_idtextpositionnumber
remove_board_itemEin gespeichertes Element aus einem Board entfernen
3 Argumente
board_idtextitem_idtextconfirmtrue / false
create_board_share_linkEinen öffentlichen Link zu einem Board erstellen
2 Argumente
board_idtextconfirmtrue / false
delete_board_share_linkDie öffentlichen Links zu einem Board entfernen
2 Argumente
board_idtextconfirmtrue / false
Favoriten 10
list_favoritesIhre gespeicherten Anzeigen, Shops oder E-Mails
6 Argumente
kindtextscopetextfolder_idtextpagenumberlimitnumberdetailtext
add_favorite_itemEine Anzeige, einen Shop oder eine E-Mail speichern
4 Argumente
kindtextitem_idtextscopetextfolder_idtext
move_favorite_itemEinen gespeicherten Favoriten in einen Ordner verschieben (folder_id=null nimmt ihn aus jedem Ordner heraus)
4 Argumente
kindtextfavorite_idtextscopetextfolder_idtext
remove_favorite_itemEinen gespeicherten Favoriten entfernen, über seine eigene ID (favorite_id) oder über die ID des gespeicherten Datensatzes (item_id)
5 Argumente
kindtextscopetextfavorite_idtextitem_idtextconfirmtrue / false
create_favorite_folderEinen Favoritenordner erstellen
4 Argumente
kindtextnametextscopetextparent_idtext
update_favorite_folderEinen Favoritenordner umbenennen oder verschieben (move=true mit parent_id, null für die oberste Ebene)
6 Argumente
kindtextfolder_idtextscopetextnametextparent_idtextmovetrue / false
delete_favorite_folderEinen Favoritenordner löschen
6 Argumente
kindtextfolder_idtextmodetextscopetexttarget_folder_idtextconfirmtrue / false
set_favorite_folder_visibilityEinen Favoritenordner auf privat oder geteilt setzen
4 Argumente
kindtextfolder_idtextvisibilitytextscopetext
create_favorite_folder_share_linkEinen öffentlichen Link zu einem Favoritenordner erstellen
4 Argumente
kindtextfolder_idtextscopetextconfirmtrue / false
delete_favorite_folder_share_linkDie öffentlichen Links zu einem Favoritenordner entfernen
4 Argumente
kindtextfolder_idtextscopetextconfirmtrue / false
Konto 2
usage_getIhr Tarif, seine Credits und wie viele noch übrig sind
check_creditsWie viele Credits Ihnen in diesem Monat noch bleiben (dieselbe Antwort wie usage_get)