De API van SellWinners geeft je e-commerce- en advertentie-inzichten via HTTPS met JSON-antwoorden: Shopify-winkels met hun producten en verkeer; winkelproducten met hun prijs, omzetschattingen, reviews en advertenties; Meta-, Google- en TikTok-advertenties; adverteerders; en de e-mails die merken versturen. Elk endpoint is ook beschikbaar voor AI-agents via onze gehoste MCP-server. Deze pagina behandelt authenticatie, het antwoordformaat, paginering, sorteren en filters, snelheidslimieten en credits, fouten en media-URL's, daarna elk endpoint met zijn parameters en een voorbeeldverzoek, en de tools van de MCP-server.
Basis-URL
https://api.sellwinners.com
Probeer het live
Stuur echte verzoeken vanuit de Playground bij betaalde abonnementen, of genereer een client uit de OpenAPI-specificatie:
Stuur je API-sleutel bij elk verzoek mee in de header X-API-Key, of als bearer-token:
X-API-Key: YOUR_API_KEY
# or
Authorization: Bearer YOUR_API_KEY
Sleutels beginnen met ak_live_. Houd ze geheim: zet ze niet in front-endcode of openbare repository's. Je kunt meerdere sleutels maken (één per app of omgeving) en elke sleutel intrekken vanuit je dashboard; een ingetrokken sleutel werkt meteen niet meer.
Antwoorden
Elk antwoord is JSON. Het bevat een requestId en het resultaat onder data: een lijst voor zoekopdrachten en overzichten, één object voor één record. Lijsten voegen een object pagination toe, en sommige antwoorden voegen meta toe.
Records zijn geneste objecten: een advertentie heeft media, advertiser, content, metrics, audience, rank en flags, en winkels, adverteerders, Google-advertenties, TikTok-items en e-mails zijn op dezelfde manier gegroepeerd. Een waarde die niet bekend is, is null. Verdere velden zonder vaste plek staan onder extra. Het voorbeeld hierboven is ingekort.
In een advertentie is content.title de kop en content.callToAction leesbare tekst zoals 'Shop now'. metrics.estimatedSpend is de uitgavenschatting van de bron als die er een heeft (een losse advertentie via /v1/ads/{adId} leest die), anders bereik x 9 / 1000 (9 USD per 1.000 bereikte mensen); een uitgavenschatting heeft twee decimalen onder 10 USD en is in hele dollars vanaf 10 USD. rank.rankDelta is de huidige rang min de vorige, dus een negatieve waarde betekent dat de advertentie is gestegen, en rank.improvementPct is een fractie (0,25 is een kwart).
De rangrapporten van de Merktracker (/ad-rank, /scaling-ads, /v1/workspace/scaling-ads en de MCP-tool get_brandtracker_scaling_ads) voegen hun eigen metrics toe: daar is metrics.rankDelta de vorige rang min de huidige (positief: gewonnen plaatsen) en metrics.improvementPct de fractie van de vorige rang die is gewonnen, zoals bij een advertentie (0,875 is 87,5%). Bij een losse advertentie worden metrics.reachDelta1d, reachDelta7d en reachDelta30d gevuld uit de bereikgeschiedenis. Winkels noemen hun categorieën: catalog.mainCategory in overzichten, plus catalog.categories bij een losse winkel.
In een Google-advertentie zijn media.type en media.formattext, image of video, en media.url is de afbeelding van de advertentie: bij een videoadvertentie de miniatuur (er is geen videobestand). transparencyUrl is de advertentie in het Ads Transparency Center van Google, waar een videoadvertentie wordt afgespeeld; die is null als de advertentie geen Google-id's heeft. network is search, youtube, shopping, maps of other, en dat geldt ook voor de waarden van extra.networks.
Gewijzigd op 19 oktober 2026:
De media.format van een Google-advertentie was een formaatcode en is nu text, image of video, de media.type kan text of video zijn, en extra.networks gebruikt de namen van network in kleine letters.
Bij Google is media.url nooit een videobestand, ook niet als media.type gelijk is aan video.
In het Google-filter formats betekent image nu afbeeldingsadvertenties (eerder betekende het tekstadvertenties), dus gebruik text voor tekstadvertenties. De eerdere codes static_image, html5_iframe en responsive_display, en hun korte namen, worden nog steeds geaccepteerd.
De status van een Google-advertentie is alleen active zolang Google de advertentie toont: een advertentie die Google al meer dan 7 dagen niet heeft getoond, is unknown. daysRunning telt de dagen van firstSeenAt tot lastSeenAt, beide meegerekend; extra.servedDays is de eigen telling van de databron, die doorloopt nadat een advertentie stopt. De filters stemmen overeen met wat elke advertentie toont: status=active houdt de advertenties over die Google in de laatste 7 dagen heeft getoond en status=inactive de advertenties die de databron als gestopt markeert, dus een unknown-advertentie valt onder geen van beide; minDaysRunning en maxDaysRunning houden de advertenties over waarvan daysRunning binnen de grenzen valt. Zo'n lijst heeft pagination.total null, en als weinig van de gelezen advertenties overeenkomen, eindigt hij vroeg, met meta.partial en een waarschuwing.
Zonder zoektekst toont sortBy=relevance de nieuwste; sortBy=reach accepteert alleen order=desc. Met status=active toont sortBy=reach weinig advertenties: in volgorde van bereik zijn de eerste advertenties vooral advertenties die Google niet meer toont, dus sorteer op nieuwste voor de advertenties die Google nu toont (de waarschuwing zegt dat ook). Google-advertenties accepteren geen sortBy=longestRunning: de databron rangschikt die sortering op dagen die doorlopen nadat een advertentie stopt, waardoor er advertenties werden getoond die Google niet meer toont, en de API antwoordt 400 met die reden.
extra.startIsFloor markeert een advertentie die voor het eerst is gezien op 31 mei 2018, de eerste dag van de advertentiedata van Google, dus ze kan ouder zijn. audience.countries toont elk doelgroepland, met een percentage alleen voor een advertentie die in één land is getoond; remarketing en interest zijn null als ze onbekend zijn.
Google rapporteert alleen een bereik voor een deel van de advertenties die in de EU worden getoond, vaak alleen als 10.000.000, de top van zijn schaal (10 miljoen of meer): de meeste advertenties hebben er geen, en nullReasons zegt waarom reach.valuenull is (not_reported: een advertentie die in de EU is getoond en waarvoor Google geen bereik rapporteert; eu_only: een advertentie die elders is getoond), behalve bij een bereik dat het abonnement weglaat. extra.networks is de lijst van de databron met de platforms van de advertentie, die network niet per se noemt. extra.shop.google bevat de Google-totalen van de website van de adverteerder; voor een site die geen winkel is (een appstore, een sociale site, een linkverkorter) zijn advertiser.domain en websiteIdnull.
Gewijzigd op 20 oktober 2026:
Een domein (GET /v1/shops/{domain}, de lookup, een domain bij TikTok, de concurrentenbriefing) is de site met precies dat domein, ook buiten de winkelindex; een domein dat de databron niet bereikt, antwoordt 404.
GET /v1/lookup rangschikt de resultaten met de beste eerst: de eigen site van een domein, de eigen Facebook-pagina's (hoofdpagina eerst), daarna de pagina's met een naam zoals het domein; voor een naam de eigen site van het merk en de eigen pagina's (hoofdpagina eerst), daarna de winkels en pagina's die op de naam zijn gevonden.
Als de site van het merk is gevonden, wordt een winkel of pagina die de naam alleen binnen een woord heeft weggelaten, en is een site met die naam alleen exact als hij advertenties draait; anders is een naamovereenkomst alleen exact met verkeer of advertenties. Officiële pagina's met een andere naam zonder live advertentie komen na de pagina's die op naam zijn gevonden.
De signals.activeAdsSource van een winkelrij zegt waar de activeAds vandaan komen: page (de live advertenties van de hoofdpagina, nu gelezen, in de eigen rij van de winkel) of index (de telling van de winkelindex, die ouder kan zijn).
Een zoekopdracht op winkeldomein (searchType=domain) toont de exacte site eerst, met extra.exactDomainMatch (en extra.inShopIndex false als de winkelindex de site weglaat).
Voor een site die geen winkel is (een appstore, een sociale site of berichtensite, een linkverkorter of een trackingredirect) is extra.domain van een adverteerdersrij null, noemt een adverteerdersrecord de site in extra.nonShopSite, laat het extra.platforms weg en haalt het linkedShops uit de landingspagina's (fromLandingPages), en heeft een advertentie geen shops.
Datum-tijden die de databron zonder tijdzone stuurt, zijn UTC en worden nu met +00:00 verstuurd.
In e-mailstatistieken heeft emailsByDayOfWeek als sleutel het nummer van de dag: 0 is zondag, 6 zaterdag.
Lookup-rijen kunnen nullReasons bevatten, en een winkelrecord meta.partial als de cijfers uit het overzicht niet konden worden gelezen.
Ook gewijzigd op 20 oktober 2026 (TikTok):
De publishedAt van een TikTok-item is UTC. Die liep 1 of 2 uur achter, waardoor een post uit de laatste uren van een UTC-dag op de volgende dag stond en daysRunning één dag te kort was.
De filters stemmen daarmee overeen: publishedAfter en publishedBefore zijn UTC (een datum alleen is het begin van die dag, en publishedBefore toont de posts daarvoor), minDaysRunning en maxDaysRunning tellen vanaf de UTC-dag, net als daysRunning, en sortBy=longestRunning begint op 31 augustus 2016, 22:00 UTC.
Ook gewijzigd op 20 oktober 2026 (Google-advertenties):
GET /v1/google-ads, POST /v1/google-ads/query en de MCP-tool accepteren geen sortBy=longestRunning (en ook geen daysRunning) en antwoorden 400 met de reden: de databron rangschikt die sortering op dagen die doorlopen nadat een advertentie stopt, waardoor er advertenties werden getoond die Google niet meer toont.
Een Free-zoekopdracht waarvan status=active de eerste resultaten inkort, antwoordt met meta.partial en een waarschuwing die zegt hoeveel van de gelezen advertenties ze toont.
In extra.shop heeft een site zonder verkeersdata geen monthlyVisits (dat was 0), komt een trafficGrowth30d alleen naast bezoeken boven 0, en laat extra.shop.google een totalReach of weeklyReach van 0 weg (nooit gerapporteerd) en, als het geen advertentie telt, de tellingen van 0.
Een Google-advertentie die op een bord is bewaard, ziet er hetzelfde uit.
Ook gewijzigd op 20 oktober 2026 (winkels):
In GET /v1/shops/{shopId} is advertising.summary.reach30d het EU-bereik van de laatste 30 dagen, opgeteld per datum (het was het totaal sinds het begin van de tracking, nu totalReach), is spend30d dat bereik x 9 / 1000, is extra.estimatedSpendUsd de uitgaven sinds het begin van de tracking en telt extra.adsLaunched30d de advertenties op die in de laatste 30 dagen zijn gelanceerd; ze zijn allemaal null voor een winkel zonder bereik in de EU of het VK.
Winkelrecords, winkels in overzichten en e-mailstatistieken bevatten nullReasons, een veldpad gekoppeld aan de reden waarom het null is: not_shopify (omzet en producten worden alleen voor Shopify-winkels geschat), no_estimate, not_measured, eu_uk_only, not_linked (geen TikTok-profiel), not_on_tp, no_reviews, none_found.
Een omzetschatting van nul naast verkochte stuks is null, in records, overzichten en de omzetgeschiedenis, waarvan period=week één punt per week heeft.
traffic.growth30d is een fractie (-0,1543 is -15,4%), en traffic.history begint bij de eerste maand met bezoeken.
catalog.mainCategory komt uit de categorie-id's (de meest specifieke van de hoofdtak), met catalog.categoryLeaves en productsCountCapped (25.001 is het plafond van de databron: 25.000 of meer).
Een Trustpilot-pagina zonder review heeft als beoordeling null.
tiktok.matchedBy is socials of handle als de TikTok-cijfers uit de sociale profielen van de winkel komen of uit een profiel dat via de handle is gevonden (een match, geen koppeling van de databron).
advertising.mainPageActiveAds zijn de live advertenties van de hoofdpagina (de meting uit het advertentieoverzicht van die pagina, zoals de hoofdpagina in linkedAdvertisers die toont; de telling uit winkeloverzichten alleen als die meting er niet is) en linkedAdvertisers[].rank is de rang van de pagina.
Vergelijkbare winkels laten de winkel zelf en zijn eigen sites weg, en elke pagina wordt aangevuld vanuit verder in de lijst (offset en limit tellen de lijst zonder die sites).
Producten gesorteerd op populariteit zetten de bestsellers van de winkel eerst (meta.order).
De e-mails en e-mailstatistieken van een winkel tellen elk campagnetype, en hun cijfers over 90 dagen zijn null als ze onbekend zijn.
Een sortering op omzet toont één rij per Shopify-winkel (extra.sharedSalesWith), en sortBy=estMonthlySales&order=asc laat de winkels zonder schatting weg.
Ook gewijzigd op 20 oktober 2026 (winkelcijfers):
Een sortering op omzet van GET /v1/shops leest door voorbij de domeinen die hij samenvoegt tot één rij per Shopify-winkel (hij stopte na de eerste rijen), voegt de domeinen van een winkel ook verderop in de lijst samen, en zijn pagination.total is null tot de lijst tot het einde is gelezen; sortBy=estMonthlySales&order=asc begint bij een schatting van 100 USD (minMonthlySales 100).
Een omzetschatting onder 0,50 USD per verkocht stuk is null (no_estimate), in records, overzichten en de omzetgeschiedenis.
traffic.monthlyVisits is null voor een site die nog niet is gemeten, en traffic.growth30d als de maand ervoor geen bezoeken had (not_measured); de growth30d van een sociaal netwerk komt uit de volgersgeschiedenis als de databron 0 of niets geeft, en 0 volgers is null (not_measured).
Winkels in overzichten zeggen waarom catalog.productsCount en sales.unitsSold null zijn.
extra.storeWide markeert een domein met 0 bezoeken dat de omzet van zijn winkel draagt (een gemeten 0, of een ander domein van de winkel, genoemd in extra.sharedSalesWith, heeft de bezoeken; Free laat de naam weg uit een winkelrecord).
advertising.mainPageActiveAds zijn de live advertenties van de hoofdpagina zoals het advertentieoverzicht ervan ze leest (de telling uit winkeloverzichten alleen als die meting er niet is).
Vergelijkbare winkels laten ook de merkwinkels van de winkel weg, en extra.similarIndexed is false voor een winkel die niet in de gelijkenisindex staat.
catalog.mainCategory houdt het eigen label van de databron alleen als dat de naam van een categorie is.
Een mediabestand waarnaar een antwoord linkte en dat de databron niet meer heeft, antwoordt 200 met een lege body en X-Media-Missing: true.
Ook gewijzigd op 20 oktober 2026 (adverteerders en Meta-advertenties):
Het bereik van een adverteerder is het bereik in de EU en het VK, met de eigen vensters van de adverteerderszoekfunctie: advertising.reach30d, extra.reach14d, reach90d en totalReach zijn null voor een pagina zonder advertenties in de EU of het VK en zonder bereik, of voor een venster dat de databron niet heeft geteld, en nullReasons zegt waarom (eu_uk_only, not_measured); een pagina die binnen een venster is aangemaakt, heeft al haar bereik daarin (ze waren 0).
In GET /v1/advertisers/{advertiserId} is het bereik het bereik dat adverteerdersoverzichten tonen (het werd 30 metingen terug gelezen, en metingen slaan dagen over), zijn de uitgavenschattingen null wanneer het bereik dat is, is extra.avgSpendUsd14d de gemiddelde dagelijkse uitgaven over 14 dagen, is extra.avgActiveAds14d het gemiddelde over 14 dagen van de live advertenties (het waren de nieuwe advertenties van 14 dagen), waar de databron het niet heeft berekend, voor een pagina die binnen de 14 dagen is aangemaakt, berekend uit de live advertenties die sinds haar eerste dag zijn gelezen (extra.averagedFrom), anders null, en tellen de aantallen nieuwe advertenties van een pagina die binnen het venster is aangemaakt al haar advertenties mee.
advertising.countryDistribution is het aandeel van de live advertenties dat op elk land is gericht (een advertentie richt zich op meerdere landen), extra.reachCountries bevat het aandeel van elk land in het EU-bereik, extra.platforms.meta bevat de eigen advertenties van de pagina (het bevatte die van de hoofdpagina van de winkel), een TikTok- of Google-telling zonder cijfer wordt weggelaten, extra.mainLandingPages valt terug op de preview van de landingspagina's van een nieuwe pagina, en de lastAds van een pagina waarvan de advertentiezoekfunctie de advertenties nog niet heeft opgenomen, zijn de nieuwste die de adverteerdersrij toont, met meta.indexing, zoals bij GET /v1/advertisers/{advertiser_id}/ads (met meta.liveAds).
Nieuw: GET /v1/advertisers/{advertiserId}/history, de live advertenties van de pagina en het EU-bereik dat ze heeft gewonnen, dag voor dag.
Een Instagram-volgersaantal van 0 is null (de databron schrijft 0 voor een pagina zonder account dat ze kent).
De metrics.reach en de uitgaven van een Meta-advertentie zijn null voor een advertentie die niet in de EU of het VK is getoond (eu_uk_only; ze waren 0 of null) en voor een EU-advertentie waarvan het bereik nog niet is geteld (not_measured; het was 0), waarbij mediarijen de reden geven in nullReasons.reach, media.type is carousel voor een advertentie met meer dan één afbeelding of video, en extra.startIsFloor markeert een advertentie die is gestart op 1 januari 2018, de eerste dag van de Meta-advertentiedata van de databron.
sortBy=adRank toont de beste rang (1) eerst, ongeacht de volgorde.
Eén advertentie (GET /v1/ads/{adId}) neemt het nieuwste bereik dat de databron rapporteert en de uitgaven daarvan, telt de bereikdelta's per datum zolang de bereikgeschiedenis actueel is (anders zijn ze null), toont de afbeeldingen en video's zoals de zoekrij dat doet, vult advertiser.reach30d en pageAnalytics.instagramFollowersHistory, voegt pageAnalytics.reachHistory toe (dezelfde reeks als impressionsHistory), en geeft de naam van een winkel die het record alleen met zijn id aanduidt (met traffic null en nullReasonsshops.traffic als de site niet is gemeten); audience.gender, ageMin, ageMax en metrics.aggregatedReach zijn altijd null, omdat de databron ze niet voor één advertentie rapporteert.
In een adverteerderszoekopdracht rangschikt sortBy=reach op het totale bereik sinds het begin van de tracking en newAds op de nieuwe advertenties van 14 dagen.
De targeting van een Meta-advertentie zegt waarom het bereik null is: eu_uk_only alleen voor een advertentie die zich op geen enkel land in de EU of het VK richt; een advertentie die zich op zo'n land richt, of waarvan de targeting nog niet bekend is, is not_measured in de eerste 7 dagen en not_reported daarna (ze waren eu_uk_only), in advertentieoverzichten, mediarijen en bij één advertentie.
Eén advertentie leest haar bereik- en uitgavengeschiedenis als één reeks, één meting per dag (ook de delta's), en neemt de laatste meting en de uitgaven van die reeks als het bereik van het record meer dan twee keer zo groot is en de reeks doorloopt tot de laatste dag van de advertentie; haar media valt terug op het eerste vermelde bestand, en advertiser.totalReach op het EU-bereik uit de paginadetails.
Een adverteerdersrecord waarvan de rij geen bereik leest naast paginadetails die wel bereik lezen, krijgt het bereik uit die details (extra.totalReach, de uitgaven daarvan, advertising.reach30d daarop geteld), de aandelen in extra.reachCountries worden nooit naar 0 afgerond, extra.averagedFrom ligt nooit vóór de dag waarop de pagina is aangemaakt, en de dagelijkse geschiedenis (extra.history, GET /v1/advertisers/{advertiserId}/history) laat de metingen weg die de databron heeft gemist (een reeks nullen van 14 dagen of minder tussen metingen boven 0).
Eén advertentie die de meting van haar reeks neemt, bewaart het bereik van het record in extra.recordReach (het cijfer dat advertentieoverzichten tonen); in een adverteerderszoekopdracht krijgt een rij die geen EU-bereik leest naast paginadetails die wel bereik lezen het bereik uit die details, net als het record; en GET /v1/advertisers/{advertiserId}/history bewaart de metingen van 0 van een pagina die nu geen EU-advertentie heeft en vóór de gevraagde dagen bereik won (ze won er geen; ze werden weggelaten als not_measured).
Bij Free zegt een advertentie waarvan het bereik onbekend is waarom, net als bij betaalde abonnementen; alleen een bereik dat het abonnement weglaat, heeft geen reden.
Ook gewijzigd op 20 oktober 2026 (uitgavenschattingen):
Geschatte uitgaven onder 10 USD houden twee decimalen: een bereik van 140 tegen 9 USD per 1.000 bereikte mensen is 1,26 (het was 1), en een daggemiddelde houdt zijn eigen centen; vanaf 10 USD is een uitgavenschatting in hele dollars (een bereik van 2.000 is 18).
Dit geldt voor extra.estimatedSpendUsd en extra.avgSpendUsd14d van het adverteerdersrecord, advertising.summary.spend30d en extra.estimatedSpendUsd van een winkel, metrics.estimatedSpend van een Meta-advertentie, en statistics.euData.estimatedSpend30d van een merktracker en de estimatedSpend van elk punt van /time-series (beide hadden bij elk bedrag twee decimalen), in de API en de MCP-tools gelijk. Waar het eigen cijfer van de databron die schatting in hele dollars is, houdt het zijn centen op dezelfde manier.
Ook gewijzigd op 20 oktober 2026 (bereik van adverteerders en dagelijkse geschiedenis):
GET /v1/advertisers/{advertiserId} voegt extra.reachScope toe: outside_eu_uk voor een pagina waarvan het meeste bereik per land buiten de EU en het VK is gezien (de databron rapporteert ook het bereik van sommige advertenties die elders zijn getoond; het bereik en de schattingen die daarop zijn gebaseerd, zijn dan dat bereik, geen EU-bereik), anders eu_uk. De extra.avgSpendUsd14d van een pagina die binnen de 14 dagen is aangemaakt, is haar uitgaven gedeeld door de volle dagen sinds de aanmaak (minstens één; het was het bereik van 14 dagen gedeeld door 14 dagen waar de adverteerdersrij er een had).
De extra.history van het adverteerdersrecord en GET /v1/advertisers/{advertiserId}/history beginnen op de dag dat de pagina is aangemaakt; extra.history.newAds laat de 0 weg van de dagen die de databron heeft gemist, extra.followersHistory en de likes en volgers in de pageAnalytics van een advertentie laten een 0 weg tussen twee metingen boven 0 of van zo'n dag, en de dagelijkse uitgavenschattingen houden twee decimalen onder 10 USD.
Een pagina waarvan nog geen lijst de live advertenties bevat, heeft meta.indexing in haar record, en een lege eerste pagina van GET /v1/advertisers/{advertiser_id}/ads met meta.indexing en meta.liveAds.
Eén advertentie (GET /v1/ads/{adId}): extra.spendHistory begint op de dag dat de advertentie is gestart, elke spendUsd met twee decimalen onder 10 USD; advertiser.totalReach ligt nooit onder de laatste meting van pageAnalytics.reachHistory (extra.pageRecordReach bevat dan het totaal van het record, het totaal dat adverteerdersoverzichten tonen); extra.recordSpend zijn de uitgaven van extra.recordReach; extra.reachScope en extra.pageReachScope zeggen waar het meeste bereik van de advertentie en van haar pagina is gezien.
Ook gewijzigd op 20 oktober 2026 (merktrackers):
In GET /v1/brandtrackers en GET /v1/brandtrackers/{id} wordt een 0 bij advertising.newAdsLastDay naast lanceringen in de laatste 7 dagen gecontroleerd aan de hand van de lanceringen van de winkel van gisteren: hun aantal, of null (not_measured) als er geen meting van die dag is; een overzicht controleert maximaal 20 merken per aanroep, die van de gevraagde pagina.
In /top-ads en /v1/workspace/top-ads is metrics.totalReach het EU-bereik van de advertentie: null voor een advertentie die buiten de EU en het VK is getoond (eu_uk_only) of een EU-advertentie die nog niet is geteld (not_measured), met nullReasons, en als laatste in een sortering op bereik (het was 0).
/testing telt de bereikstatistieken over de advertenties waarvan het bereik bekend is, met nullReasonsstats.reach voor een batch zonder zulke advertenties.
In /hooks, /transcripts, /landing-pages en de hooks en landingspagina's van de werkruimte is een totalImpressions van 0 null met de nieuwe reden no_eu_reach (geen bereik in de EU of het VK geteld voor de advertenties; not_measured met euOnly), als laatste in de sortering.
In /ad-rank, /scaling-ads en /v1/workspace/scaling-ads tellen metrics.previousRank en rankDelta, als de ranggeschiedenis van een advertentie binnen een venster van 14 of 30 dagen begint, vanaf de oudste meting daarbinnen: metrics.since is die dag en meta.windowNote zegt dat, en een cijfer dat niet kan worden gegeven, is null met nullReasons.
In /partners is isOwnPage true voor de hoofdpagina van de winkel, de officiële pagina's met een naam zoals het merk en een pagina met de naam van het merk (creators kunnen ook als officieel worden gerangschikt), en een null-bereik of null-uitgaven hebben nullReasons.
De eerste pagina van /ads met adCopyHashes heeft meta.latestAdDate en dataFreshnessLagDays, en met status=active ook meta.stoppedCount.
/demography is de doelgroep in de EU en het VK, en een land onder een tienduizendste van het grootste land verhuist van countryDistribution naar otherCountries.
/ad-copy-evolution en /headline-evolution hebben een punt voor elke vastgelegde dag (0 als de tekst niet is gebruikt, null op een dag die is afgekapt bij de teksten die worden bewaard), rangschikken teksten op de nieuwste dag en laten de dagen weg die de databron verkeerd heeft gelezen (live advertenties onder een tiende van de dagen eromheen, één dag of 2 of 3 op rij, of veel minder teksten dan de dagen aan beide kanten), zoals meta.periodNote zegt; meta.recordedDays telt de dagen. Wekelijkse en maandelijkse live advertenties in /time-series laten ook 2 of 3 zulke metingen op rij weg.
Ook gewijzigd op 20 oktober 2026 (rapporten van merktrackers, lookup en Google-bereik):
In /ad-rank, /scaling-ads en /v1/workspace/scaling-ads komt elke rang van een rij uit de ranggeschiedenis van de advertentie: metrics.currentRank is de meting van de dag waarop de rang van de advertentiebibliotheek is gelezen (de rang die /top-ads toont; de bibliotheek kan een dag achterlopen op de geschiedenis), anders de nieuwste meting, de trajectory eindigt op die dag, en zonder meting op de dag dat het venster begint, telt de oudste meting daarbinnen (de eigen verandering van de databron over het venster wordt niet meer gebruikt).
De eerste 50 advertenties van de advertentiebibliotheek (10 per merk over meerdere merken) worden opnieuw gerangschikt op deze cijfers: een advertentie die volgens deze cijfers minder won dan minRankDelta, of lager staat dan maxCurrentRank, wordt weggelaten (een advertentie waarvan de ranggeschiedenis geen winst geeft, volgens de eigen telling van de advertentiebibliotheek), pagination dekt de bewaarde advertenties en meta.rankNote zegt wat er is gelezen en weggelaten, ook over meerdere merken.
Een dagelijkse /time-series (en de graph van het overzicht) is null op een dag waarvan de databron de live advertenties verkeerd heeft gelezen (onder een tiende van de dagen aan beide kanten; de nieuwste dag blijft zoals gelezen, ook in de tekstevoluties), net als de lanceringen van die dag, en dat geldt ook voor de lanceringen van de dag erna als die bijna al zijn live advertenties zijn; weken en maanden laten die lanceringen weg, en leftOut toont de dagen. /landing-page-evolution laat die dagen weg uit elke pagina, en ook de eigen meting van een pagina onder een tiende van de metingen aan beide kanten, zoals de meta.periodNote zegt, met de dag die de geschiedenis bereikt als die achterloopt.
Een /testing-batch zonder geteld bereik heeft nullReasonsstats.reachno_eu_reach, tenzij een van de advertenties nog niet is geteld (not_measured) of alle advertenties buiten de EU en het VK zijn getoond (eu_uk_only); het ontbrekende bereik en de ontbrekende uitgaven van een /partners-rij zijn alleen not_measured in de 7 dagen na de launchDate, en daarna no_eu_reach.
/creatives noemt een advertentie met meerdere afbeeldingen of video's carousel (het was unknown).
In GET /v1/lookup is signals.monthlyVisits van een winkel null voor een site die nog niet is gemeten (nullReasonsnot_measured; het was 0), zijn de live advertenties van de exacte winkelrij (bij elk type, ook shop) die van de hoofdpagina zoals het advertentieoverzicht ze leest, de mainPageActiveAds, en lezen de rijen van de eigen pagina's van de winkel de hunne op dezelfde manier, is signals.monthlyVisits van een gevolgd merk (en de totalTraffic in GET /v1/brandtrackers) null voor een site die nog niet is gemeten en zegt het waarom het ontbreekt (not_measured, of no_shop voor een pagina zonder winkel), en houdt bij Free het bereik van een pagina dat geen enkel abonnement heeft zijn reden (eu_uk_only, not_measured), ook in adverteerdersoverzichten.
Als reach.value van een Google-advertentie null is, heeft die nullReasons (not_reported, eu_only), behalve bij een bereik dat het abonnement weglaat.
In GET /v1/shops/{shopId} zijn advertising.mainPageActiveAds de live advertenties van de hoofdpagina zoals het advertentieoverzicht ze leest, de telling die de hoofdpagina in linkedAdvertisers toont (het was de telling van de winkelindex, die een dag ouder kan zijn).
Ook gewijzigd op 20 oktober 2026 (TikTok en e-mails):
De metrics.engagementRate van een TikTok-rij is (likes + reacties + shares + saves) / weergaven als fractie (0,0513 is 5,13%; zoekopdrachten stuurden een percentage en GET /v1/tiktok/library/{itemId} een andere maatstaf), en daysRunning is het aantal dagen sinds de post is gepubliceerd, in beide.
metrics.rank is de rang van de post onder de posts van de creator (1 is de beste).
profile.followers is null als de databron de volgers niet heeft geteld (ze stuurde 0), content.category is null voor de verzamelcategorie All, en content.hashtags zijn de tags van de post, elk één keer, gespeld zoals in de beschrijving en zonder de leestekens erna (die van een record zijn de lijst van de databron, die van een zoekrij die uit de beschrijving).
Een TikTok-record voegt profile.adsCount, organicCount en avgPostsPerWeek90d toe, vult profile.pageCreation, en heeft links null voor een rij van de databron zonder TikTok erachter (een id van minder dan 15 cijfers, of gepubliceerd vóór 31 augustus 2016, 22:00 UTC).
sortBy=longestRunning begint bij de eerste TikToks (31 augustus 2016, 22:00 UTC).
Een e-mailrecord noemt het actietype, de categorie en het evenement, en de bezoeken per maand, live advertenties, producten en cijfers over 90 dagen van de winkel zijn die welke de e-mailoverzichten tonen, net als de cijfers in last90Days van de e-mailstatistieken.
Een e-mailrij laat extra.shopActiveAds weg bij een 0 zonder advertentietotaal (de nullReasons zeggen not_measured), en de shop.marketing.activeAds van een e-mailrecord is dan null; als de cijfers van de winkel niet konden worden gelezen, heeft het record meta.partial, een waarschuwing en nullReasonsfailed voor die cijfers.
In de MCP-tool analyze_shop_emails rangschikt dominant campagnetypes, categorieën, actietypes en evenementen elk afzonderlijk en laat het No Promotion en No Event weg.
Gewijzigd op 21 oktober 2026:
De metrics.views van een TikTok-item, en de likes en saves die daarnaast 0 lezen, zijn null met nullReasonsnot_measured (net als engagementRate) als de databron 0 weergaven stuurde naast likes, reacties, shares of saves boven 0, in zoekopdrachten en in GET /v1/tiktok/library/{itemId}; sortBy=views of likes met order=asc toont de posts waarvan de weergaven zijn geteld (minViews 1).
Een zoekopdracht naar Meta-advertenties met websiteIds toont de eigen advertenties van de winkels: elke advertentie van de hoofdpagina van een winkel en van de officiële pagina's met een naam zoals de winkel, en de advertenties van de andere pagina's (creators, uitgevers en partners die advertenties voor de winkel draaiden) die naar de winkel of naar een site op zijn domein linken; tot de lijst tot het einde is gelezen, is pagination.total van de zoekopdracht dan het aantal advertenties van de doorzochte eigen pagina's van de winkel, een schatting (pagination.totalEstimated true), of null als de zoekopdracht geen van de eigen pagina's noemt.
Met sortBy=longestRunning wordt elke batch advertenties die uit de databron is gelezen, op volgorde van daysRunning gezet.
In GET /v1/shops/{shopId} telt advertising.activeAds de live advertenties van de eigen pagina's van de winkel (linkedAdvertisers[].isOwnPage), en in /products heeft een gerangschikte bestseller de titel, prijs en afbeelding van catalog.bestSellers (de prijs van een bestseller kan de laagste van zijn varianten zijn).
De traffic.monthlyVisits (en growth30d) van een winkel is null met not_measured als die 0 leest omdat de geschiedenis naar 0 ging naast een omzetschatting boven 0 en verkochte stuks, in records, winkels in overzichten, vergelijkbare winkels en de lookup; zo'n domein is nog steeds extra.storeWide.
In GET /v1/ads/{adId} is advertiser.totalReach de laatste meting van pageAnalytics.reachHistory zolang die meting hoogstens 2 dagen oud is (extra.pageRecordReach bevat dan het totaal van het record), wordt extra.advertiserTotalAds gevuld uit de cijfers van de pagina in overzichten (not_measured als die er niet zijn), is de bereikwinst over 7 en 30 dagen van een advertentie die binnen het venster is gestart al haar bereik, en is een winst die lager is dan die over minder dagen null (not_measured).
De statistics.ctaCount van een merktracker noemt elke call-to-action zoals content.callToAction dat doet ('Shop now').
Ook gewijzigd op 21 oktober 2026 (winkels):
In GET /v1/shops/{shopId} is advertising.history de live advertenties van de hoofdpagina per dag bij elk abonnement (bij Free telde het die van elke pagina), en de docs zeggen dat het bereik en de uitgaven in advertising.summary, extra.adsLaunched30d, extra.totalAds en extra.estimatedSpendUsd elke pagina van de winkel dekken, terwijl advertising.activeAds de eigen pagina's telt.
Een catalog.productsCount van 0 van een winkel zonder vermeld product, naast bezoeken, een omzetschatting of verkochte stuks, is null met not_measured, in records, winkels in overzichten en de meta.productsCount van GET /v1/shops/{shopId}/products; sortBy=productsCount laat die winkels weg, en stuurt met order=ascminProductsCount 1 mee, tenzij er een minimum voor producten is opgegeven.
Een zoekopdracht naar Meta-advertenties van een winkel, beperkt tot pagina's die niet van de winkel zelf zijn (trackedPages), die vroeg eindigt, zegt waarom in meta.warnings, zonder te vragen om de zoekopdracht te beperken.
GET /v1/filters/shops meldt in meta.warnings wanneer de databron geen waarden toont, en noemt de lijsten die ze wel geven.
Ook gewijzigd op 21 oktober 2026 (paginering, e-mails en advertentielijsten):
Pagineren door een adverteerderszoekopdracht mislukt niet meer als de databron die niet voortzet (die antwoordde 503, en opnieuw proberen hielp niet): de eerste 100 resultaten worden in één aanroep gelezen, en de pagina die het einde bereikt van wat kan worden gelezen, antwoordt hasMore false, met meta.partial true en een waarschuwing die zegt hoe ver de zoekopdracht leest.
Een pagina die voorbij de exacte total van een zoekopdracht begint, is leeg, met hasMore false.
Een TikTok-zoekopdracht gesorteerd op views of likes met order=asc begint bij de eerste TikToks (31 augustus 2016, 22:00 UTC), net als longestRunning, en de metrics.views (en engagementRate) van een TikTok-item is null met not_measured als die minder weergaven leest dan likes.
De content.bodyPreview en bodyLength van een e-mail, en de content.body van een record, zijn null met not_measured waar de databron haar placeholder stuurde voor een body die ze niet heeft gelezen.
Datum-tijden die de databron in UTC geeft, worden in lijsten en records op dezelfde manier geschreven, met +00:00 en zonder nullen aan het eind van de fractie van een seconde (2026-09-30T00:20:11.507+00:00; de tijden waarop je eigen borden, favorieten, merktrackers en deellinks zijn gemaakt of gewijzigd, eindigen op Z, zoals voorheen), en e-mailrijen bevatten de id's van hun categorie, actietype en evenement, net als het record van de e-mail.
Elke gepagineerde lijst antwoordt pagination.hasMore, en GET /v1/google-ads/facets/countries antwoordt met een object pagination.
Een verzoekbody die geen geldige JSON is, antwoordt 400 validation_failed met het bericht 'The request body is not valid JSON.' en details.position, het teken waar de body afbreekt.
In Meta-advertentielijsten is het bereik van een rij de meting van de advertentie-index, die een dag kan achterlopen op het record van de advertentie, en de bereikwinsten zijn null naast een bekend bereik als de databron er geen toont (not_measured), behalve over een venster waarin de advertentie is gestart, waar ze al het bereik heeft gewonnen dat haar rij leest; in GET /v1/ads/{adId} heeft een winst die null is naast een bekend bereik ook not_measured.
Gewijzigd op 22 oktober 2026 (het Free-abonnement):
De API en de MCP-server zijn naar betaalde abonnementen verhuisd: een sleutel van een account op het Free-abonnement antwoordde 403 plan_not_eligible op elk endpoint behalve GET /v1/account, met details.upgradeUrl, en er werd niets geteld. Op Free kon geen sleutel worden gemaakt.
Het Free-abonnement is sindsdien veranderd: Het Free-abonnement zegt wat het nu omvat.
Een sleutel die op een betaald abonnement is gemaakt, blijft bewaard en werkt weer zodra het account terug is op een betaald abonnement. Deellinks die door een account op Free zijn gemaakt, worden op dezelfde manier gepauzeerd.
Ook gewijzigd op 22 oktober 2026 (winkelrapporten en records):
In GET /v1/shops/{shopId}/ad-ranking/series is rankDelta de eindrang min de beginrang (negatief als de advertentie is gestegen, zoals bij elke advertentie; het waren de gewonnen plaatsen) en heet improvementPercent nu improvementPct, een fractie; elke rij van /ad-ranking bevat dezelfde twee cijfers over het venster van de ranking in rank.
In /activity/calendar van een gevolgd merk, een kalenderdag en /activity/calendar/days is meta.partial true of false, noemt meta.partialSources de bronnen die gedeeltelijk zijn gelezen (bij /calendar en een dag), en zijn previewtijden UTC, ook die van een TikTok-post.
In GET /v1/shops/{shopId}/landing-pages/detail valt activeAds terug op de advertenties van de pagina, is shareOfAdslinkedAdsTotal gedeeld door shopActiveAds, telt snapshots de dagen waarop de pagina is vastgelegd, zijn lifetimeAds en impressions verdwenen (de impressies waren opnieuw het bereik), is een bereik van 0 null met nullReasons.reachno_eu_reach, en hebben linkedAds de velden van de rijen van een advertentiezoekopdracht.
De /feed van een winkel toont de eigen Meta-advertenties, net als de advertentiezoekopdrachten van de winkel.
GET /v1/market/q4-overview accepteert elke from en to binnen het seizoen.
In /q4-season toont winners de sleutel van elke actie met de creatives, en de URL's van landingspagina's bevatten hun protocol.
De Shopify-detectors lezen een winkel op zijn domein zonder www..
GET /v1/advertisers/{advertiserId} en de landingspagina's, doelgroep en mediamix van een gevolgd merk geven een eerdere dag terug in meta.snapshotDate.
Als de Meta-advertentiestatistieken van een winkel op dat moment niet kunnen worden gelezen, antwoordt GET /v1/shops/{shopId} met meta.partial true en een waarschuwing: het bereik, de uitgavenschattingen die daarop zijn gebaseerd en de media- en formaatmix zijn null met nullReasonsfailed, de advertenties per land worden geteld zoals de zoekrij ze geeft, en het antwoord wordt niet bewaard, zodat de volgende aanroep ze opnieuw leest (de concurrentenbriefing bevat dezelfde meta.partial en waarschuwingen).
Een landingspagina op het eigen domein van de winkel, of op een subdomein daarvan, is toShop true in /v1/shops/{shopId}/advertisers en /advertisers/{advertiserId}/landing-pages; als de domeinen van de winkel dat domein weglaten, zet meta.domains het als eerste op basis van de landingspagina's van de pagina's (fromLandingPages true, een ondergrens), en is de shopAds van een pagina nooit minder dan de live advertenties van haar landingspagina's op de winkel (shopAdsAtLeast true als het is verhoogd).
In GET /v1/tiktok/library/{itemId} is profile.latestPosts[].mediaUrl de video van de post, of null met nullReasonsnot_reported (het was de omslagafbeelding).
Een adverteerderszoekopdracht leest de eerste 100 resultaten en zegt dat hij eindigt op de pagina die het 100e resultaat bereikt (hasMore false en de waarschuwing), niet op de lege pagina daarna.
Een TikTok-zoekopdracht gesorteerd op views of likes met order=asc laat nu de posts weg waarvan de weergaven niet zijn geteld (minder weergaven dan likes), en de pagination.total is een schatting (totalEstimated) tot de lijst tot het einde is gelezen; elke andere volgorde toont ze, met weergaven null.
Ook gewijzigd op 22 oktober 2026 (bewaarde items en advertentiehooks):
Nieuw: GET /v1/boards/search vindt wat je hebt bewaard, over al je borden en je favorieten, op de woorden van wat elke bewaarde kopie toont (elk woord moet voorkomen, in willekeurige volgorde; hoofdletters en accenten worden genegeerd), op het id of op de naam van het bord, en accepteert sourceType, boardId, savedFrom en savedTo; het leest alleen je bewaarde items, nooit de databron (MCP find_saved_items).
Nieuw: POST /v1/tools/ad-hooks schrijft drie korte openingszinnen voor een advertentie van je product, en GET /v1/tools/ad-hooks geeft je tegoed: geen maandlimiet bij betaalde abonnementen, en een limiet per minuut (429 met Retry-After); het tegoed opvragen wordt niet geteld (MCP write_ad_hooks).
De MCP-server heeft 64 tools.
Ook gewijzigd op 23 oktober 2026 (bewaarde weergaven en winkelfilters):
Nieuw: GET /v1/views toont de zoekopdrachten die je op de lijstpagina's van de website hebt bewaard, elk met de zoekopdracht die ze uitvoert (request: de zoekopdracht, searchType, sortBy, order en benoemde filters, zoals de zoekendpoints ze accepteren); POST /v1/views bewaart er een, PATCH /v1/views/{viewId} hernoemt, verplaatst of wijzigt er een en DELETE /v1/views/{viewId} verwijdert er een. Ze lezen en schrijven alleen je eigen weergaven, nooit de databron (MCP list_saved_views).
Winkelzoekopdrachten accepteren excludeCurrencies (valutacodes zoals EUR), socialNetworks (instagram of tiktok: een winkel met een van beide) en shopifyPlan (headless). trafficGrowth leest ook 90 dagen (min90, max90) en adsGrowth 7 dagen (min7, max7), of de period van een regel (last90d, last7d); min en max blijven de laatste 30 dagen.
De MCP-server heeft 65 tools.
Ook gewijzigd op 23 oktober 2026 (productlinks):
In GET /v1/shops/{shopId} bevat elk item van catalog.bestSellershandle en productUrl, de pagina van het product op de eigen site van de winkel: het adres dat de databron geeft als dat op het domein van de winkel staat (of op een subdomein daarvan) of op het myshopify-domein, anders https://<domain>/products/<handle> als de handle bekend is, anders null.
In GET /v1/shops/{shopId}/products volgt productUrl dezelfde regel, dus een adres op een andere site wordt niet meer gegeven, en handle is null als het niet één enkel deel van een adres is.
Ook gewijzigd op 23 oktober 2026 (winkelrijen, vergelijkbare winkels en producten):
De createdAt van een winkel (het winkelrecord, winkelrijen en vergelijkbare winkels) is alleen de aanmaakdatum van een Shopify-winkel. Voor een site buiten Shopify geeft de databron de dag waarop ze de site begon te volgen, niet de aanmaak: createdAt is nu null (nullReasonstracking_date) en die dag is de nieuwe trackedSince. Een datum op of vóór 1 januari 2000 is de placeholder van de databron en is null (not_reported).
De catalog.bestSellers van winkelrijen bevatten handle, productUrl (volgens de regel van het winkelrecord) en rank (1 is de bestseller), en rijen bevatten profile.isHeadless en catalog.myShopifyDomain, net als het winkelrecord.
De googleAds.reach.value van een winkelrij is null: winkelrijen bevatten geen Google-bereik, dat in het winkelrecord staat (extra.googleAds.reach).
Vergelijkbare winkels (GET /v1/shops/{shopId}/similar, de similarShops van het record) behouden hun extra (logo, Trustpilot, omzetgeschiedenis). Een lijst met vergelijkbare winkels die de databron vóór het einde stopt, antwoordt met meta.partial en een waarschuwing op de pagina die dat punt bereikt.
In GET /v1/shops/{shopId}/products waren createdAt en publishedAt de eigen klok van de winkel, verstuurd als UTC (8 uur te vroeg voor een winkel op Amerikaanse Pacifische tijd). Ze zijn nu UTC, met de nieuwe updatedAt, op basis van de afwijking van de winkel ten opzichte van UTC (meta.shopUtcOffset, zoals -08:00). Als er geen afwijking kan worden gelezen, zijn de drie null (local_time) en geven createdAtLocal, publishedAtLocal en updatedAtLocal de klok van de winkel, zonder tijdzone.
Een product dat alleen tussen de bestsellers in de winkeldetails staat, heeft publishedAt en updatedAt null (not_reported): die van de databron waren kopieën van de aanmaaktijd.
Elk product zegt in welke lijsten het staat (lists: bestSellers, newest) en wat zijn plaats is onder de bestverkopende producten (listPosition, 1 tot 100).
Ook gewijzigd op 23 oktober 2026 (winkelrecords):
In GET /v1/shops/{shopId} was extra.googleAds.reach.value altijd null: het is nu het Google-bereik van de winkel in de EU, met lowerBound en upperBound, en extra.googleAds voegt reachHistory, history (de Google-advertenties die per week als actief zijn gemarkeerd), updatedAt en latestAds toe.
De growth30d van een sociaal netwerk is nu de verandering over 30 dagen uit het volgersoverzicht (het was een ander venster voor sommige Facebook-pagina's: 0,3636 waar de verandering 0,2898 was). GET /v1/shops/{shopId}/socials geeft het ook als growth30d.
Het X-profiel van de winkel is socials.x. socials.twitter heet nu socials.x en blijft nog één release bestaan, als hetzelfde object. Elk netwerk heeft url, en socials.others toont de andere links van de winkel.
tiktok.profileMetrics.percentAds is een percentage (0 tot 100); de nieuwe adsShare is hetzelfde als fractie. tiktok voegt avatarUrl, history, postsChange30d, postsChange30dPct en latestAds toe, en tiktok.activity.avgActiveAds7d en avgActiveAds30d, voorheen null, middelen de TikTok-advertenties per dag.
Nieuw bij betaalde abonnementen: advertising.summary.firstAdSeenAt, longestRunningDays, medianRunningDays, landingPagesCount en de veranderingen over 30 dagen van de live advertenties, de gelanceerde advertenties en het EU-bereik (activeAdsChange30d, launchedChange30d, reachChange30d, elk ook als fractie, …Pct), en advertising.runningDaysMix, reachCountries, reachHistory, topLandingPages, adsByAgeRange en adsByGender. Bij elk abonnement: advertising.allPagesHistory en advertising.topCountries[].ads.
Nieuw: catalog.bestSellers[].rank, sales.hasSubscription, technology.apps[].appStoreUrl en categories, profile.isHeadless, extra.updatedAt, en de createdAt en trackedSince van de winkeldatums hierboven.
GET /v1/shops/{shopId}/advertisers voegt per pagina logoUrl en moreLandingPages toe, een profileUrl waar het advertentieoverzicht er geen heeft, en per domein landingPagesCount en moreLandingPages.
Ook gewijzigd op 23 oktober 2026 (producten):
Nieuw: GET /v1/products en POST /v1/products/query doorzoeken en doorbladeren winkelproducten, elk met de prijs, omzetschattingen, verkochte stuks, reviews, bestsellerrang, Meta-advertenties, EU-bereik en uitgaven, verkooplanden, lanceerdatum en winkel, gesorteerd op relevance, newest (de lanceerdatum), activeAds of spend (advertentie-uitgaven in de EU over de laatste 30 dagen) (MCP search_products). searchType vergelijkt de tekst met de naam van het product of het domein van de winkel, en de benoemde filters begrenzen de prijs in USD, de actieve advertenties, het advertentieaandeel, het aantal reviews en de lanceerdag, en accepteren valuta's en of een product een abonnement is; GET /v1/filters/products toont de valuta's die ze accepteren.
shop (het domein of id van één winkel) toont alleen de producten van die winkel, zonder zoektekst ernaast, in de productzoekfunctie en in search_products. Borden bewaren producten (sourceTypeproduct) zoals een zoekopdracht ze het laatst toonde, en het zoeken in alles wat is bewaard, vindt ze op hun titel en winkel.
De MCP-server heeft 73 tools.
Ook gewijzigd op 23 oktober 2026 (productfilters):
De productzoekfunctie accepteert meer benoemde filters: de omzetschatting van een maand of een dag (minEstMonthlySales, minEstDailySales en hun maximums; de grens van een dag is 30 dagen daarvan), verkochte stuks per maand of per dag (minUnitsSoldMonthly, minUnitsSoldDaily), sellingCountries (een product dat aan een van die landen verkoopt), shopCountries, de reviewscore (minRating, maxRating), minAdsLaunched (Meta-advertenties gelanceerd in de laatste 30 dagen), minSpendShare, minEuReach (het EU-bereik over 30 dagen), hasPartnershipAds, promoTypes (percent-off) en minShopProductsCount, elk met zijn maximum waar er een is; GET /v1/filters/products toont ook de landen van de winkels.
sortBy accepteert estSales (de omzetschatting), adPressure (het advertentieaandeel) en bestSelling (de bestsellerrang in de winkel, rang 1 eerst), en searchType accepteert productDescription en url.
Elk product heeft zijn nieuwste advertenties (advertising.latestAds, met de afbeeldingen in advertising.previewUrls) en zijn weken (weeks: live advertenties, advertentieaandeel, EU-uitgaven en bereik per dag), en bestSeller.rankPercent is de rang als percentage van de producten van de winkel (laag is beter).
Gewijzigd op 24 oktober 2026 (parameters, mislukte leesacties en diepe pagina's):
Een queryparameter die een route niet leest, wordt geweigerd met 400 validation_failed, waarvan het bericht de parameter noemt en de parameters toont die de route accepteert, terwijl hij vroeger zonder melding werd genegeerd (een verkeerd gespelde naam, of een filter dat naar een route zonder filters werd gestuurd, kreeg een antwoord alsof hij nooit was verstuurd). Zoekopdrachten weigeren zoals voorheen een onbekend benoemd filter. Een gewone parameter (country, mediaType, active, type) die een filter instelt dat ook door een benoemd filter wordt ingesteld, op een andere waarde, wordt ook geweigerd.
Merktrackers: /ads en /timeline/metadata weigeren een snapshotDate in het verleden (ze lezen de advertentiebibliotheek zoals die nu is), /partnership-ads een onbekende sortBy, /v1/workspace/scaling-ads een onbekende period, en de trackeroverzichten een hasNewAdsSince van meer dan 30 dagen terug (de tellers voor nieuwe advertenties dekken 30 dagen). /v1/workspace/hooks, /ad-copies en /landing-pages lezen de rijen van elk merk in de gevraagde sortBy en order voordat ze worden samengevoegd. De rapporten over alle merken op de website sturen euOnly alleen naar de rapporten die het lezen.
Vergelijkbare winkels weigeren displayInTrending in filters (de lijst heeft geen vlag uit de winkelindex) en lezen de groeigrenzen als percentages, net als een winkelzoekopdracht; een offset voorbij wat één verzoek kan lezen (600 winkels verder dan die al gelezen zijn) wordt geweigerd met een 400 die zegt hoe diep het kan gaan, en een pagina waarin het lezen stopte, heeft meta.partial met een waarschuwing. De TikTok-bibliotheek van een winkel weigert profiel- en sitefilters (de eigen afbakening van de winkel neemt hun plaats in).
Een deel van een antwoord dat de databron deze keer niet kon lezen, zet meta.partial met een waarschuwing (en het antwoord wordt niet gecachet), nooit een stil gat of een lege lijst; een antwoord van de databron dat geen JSON is, is een 503 upstream_error, en een bewaarde winkel, een nieuwe tracker of een lijst met e-mailopties waarvan het lezen mislukt, antwoordt met de fout, nooit met not_found. Een pagina dieper dan één leesactie van een lijst die rijen weglaat bereikt, heeft meta.partial en hasMore true, en de advertentieteksten, partners en creatieve tests van een merk melden met meta.partial wanneer één leesactie het merk niet dekt.
GET /v1/google-ads/facets/networks accepteert search, limit en offset, net als de andere optielijsten. metric van /v1/shops/compare is verplicht (de referentie zei optioneel).
MCP: een tool weigert een argument dat de gekozen soort niet leest (shop_report, lookup_filter_ids, market_overview, scan_advertiser) en argumenten die elkaar tegenspreken (trend_signal met sort_by, active_only met status, een benoemd argument met filters); creative_inspiration_pack rangschikt de advertenties van alle zoekwoorden samen.
Ook gewijzigd op 24 oktober 2026 (zoeken op afbeelding):
Nieuw: POST /v1/products/image-search vindt de winkelproducten die op een afbeelding lijken, elk met zijn winkel, de meest gelijkende eerst. Stuur de afbeelding als multipart/form-data: een PNG-, JPG- of WEBP-bestand van maximaal 10 MB (image), of een directe afbeeldings-URL (imageUrl), die we zelf downloaden. Elke rij is een productrij zoals de productzoekfunctie die geeft, met similarity (0,7 tot 1) en matchOnly (een match waarvan de productindex geen record heeft: alleen de titel, afbeelding, prijs, lanceerdatum en winkel).
De zoekopdracht accepteert de benoemde filters van de productzoekfunctie, sortBy (relevance, estSales, activeAds, adPressure, newest, spend, spend14d) en maxPerShop (de 1, 3, 5, 10 of 20 meest gelijkende matches per winkel), in pagina's van maximaal 32. GET /v1/products/image-search/{searchId} leest de andere pagina's, sorteringen, filters en resultaten per winkel zonder de afbeelding opnieuw te sturen, en GET /v1/products/image-search/history toont je eigen recente zoekopdrachten op afbeelding.
De afbeelding wordt opnieuw weggeschreven voordat ze wordt doorzocht, als JPEG zonder metadata (EXIF, locatie, opmerkingen), en een afbeeldings-URL verlaat onze servers nooit. Nieuwe fouten: 400 invalid_image, 400 unsupported_url en 422 unreadable_image.
Bij het Free-abonnement wordt zoeken op afbeelding gerangschikt op relevantie, zonder filters. De MCP-server heeft 67 tools: search_products_by_image is nieuw.
Gewijzigd op 25 oktober 2026 (credits):
De API en de MCP-server worden gemeten in credits in plaats van verzoeken: 1 credit = 1 geretourneerd resultaat: de details van één merk, één advertentie of één rij van een lijst. Een leeg resultaat is gratis. Een aanroep kost de resultaten die hij teruggeeft, en het maandelijkse tegoed van de abonnementen is in credits.
Gemeten antwoorden sturen X-Usage-Cost, X-Credits-Used, X-Credits-Remaining en X-Credits-Source mee; GET /v1/usage meldt de opwaardeercredits onder credits.topup.balance.
402 insufficient_credits komt zodra de credits van de maand en de opwaardeercredits allebei op zijn, met details.upgradeUrl en details.topUpUrl.
De snelheidslimiet wordt gedeeld door de hele werkruimte.
Deellinks (shareUrl) openen een webpagina op https://sellwinners.com die iedereen kan bekijken. Hetzelfde record is als JSON beschikbaar via /v1/shared/ads/{token} en /v1/shared/boards/{token}. Een link waarvan de eigenaar op het Free-abonnement zit, antwoordt 403 forbidden tot de eigenaar terug is op een betaald abonnement.
De identiteitsendpoints /v1/me, /v1/usage en /v1/workspace geven hun objecten op het hoogste niveau terug, naast requestId. De systeemendpoints /v1, /v1/health en /v1/system/freshness bevatten geen requestId, en /v1 en /v1/health antwoorden met een gewoon object zonder data. De request-id wordt ook meegestuurd in de header X-Request-Id. Vermeld die als je contact opneemt met support.
Borden, favorieten en merktrackers hebben ook POST-, PATCH- en DELETE-endpoints. Ze accepteren een JSON-body, verstuurd met Content-Type: application/json.
Paginering
Lijstendpoints accepteren limit (maximaal 100 bij zoekopdrachten; facetoverzichten accepteren maximaal 500 en de /snapshots van een merk maximaal 365) en ofwel page (1, 2, 3…) ofwel offset. Als beide worden verstuurd, wordt offset gebruikt. De standaard paginagrootte staat bij elk endpoint. Overzichten van advertenties, Google-advertenties, TikTok, e-mails en media antwoorden met:
Herhaal voor de volgende pagina hetzelfde verzoek met page plus één, of met offset plus limit. Stuur in een POST …/query-body "page" of "offset" als velden mee. hasMore is false op de laatste pagina. Als de databron een zoekopdracht na een bepaald punt niet voortzet, antwoordt de pagina die dat punt bereikt hasMore false met meta.partial true en een waarschuwing die zegt hoeveel resultaten kunnen worden gelezen. Pagineren bereikt de eerste 5.000 resultaten van een zoekopdracht (bij een adverteerderszoekopdracht de eerste 100). Beperk de zoekopdracht met filters of wijzig de sortering om andere resultaten te zien.
Overzichten van Google-advertenties geven een exacte total, behalve een lijst die de regel voor status of dagen actief beperkt (zie de zoekfunctie voor Google-advertenties). Een "totalEstimated": true markeert een total (en de bijbehorende totalPages) die een schatting is tot de lijst tot het einde is gelezen, zoals bij de vergelijkbare winkels van een winkel en een zoekopdracht naar Meta-advertenties van een winkel (websiteIds).
Borden, favorieten en rapporten van merktrackers accepteren page en limit en antwoorden met page, limit, total, totalPages en hasMore. Facetlijsten, de /products van een winkel en de /similar-winkels accepteren limit en offset en antwoorden met limit, offset, total en hasMore.
Sorteren & filters
Zoekendpoints accepteren sortBy en order (standaard desc). Als je een zoekterm meegeeft, worden de resultaten gesorteerd op relevance, tenzij je een andere sortering kiest; zonder zoekterm is de standaard newest (winkels en producten: relevance, media: reach). Zoekopdrachten naar Google- en TikTok-advertenties worden altijd op relevantie gerangschikt; daar geldt sortBy als je zonder zoekterm bladert.
Elke dataset heeft een POST …/query-endpoint dat een JSON-body accepteert met query, filters, sortBy, order, limit en page (of offset) voor geavanceerd filteren. Gebruik de facet-endpoints om de waarden en id's te zien die de filters accepteren.
Filters kunnen op naam worden verstuurd: als extra queryparameters bij een GET-zoekopdracht (?status=active&minDaysRunning=30&mainCountries=US,GB) of als velden op het hoogste niveau van een POST …/query-body ({"status": "active", "minDaysRunning": 30}). Elk endpoint hieronder toont de namen die het accepteert. Bij de zoekendpoints geeft een filternaam die het endpoint niet ondersteunt een 400 validation_failed die de ondersteunde namen toont, zodat een typefout nooit stilletjes ongefilterde resultaten oplevert; de rapporten van merktrackers negeren namen die ze niet kennen. Lijsten accepteren door komma's gescheiden waarden of een JSON-array, datums gebruiken 2026-01-31, en het ruwe object filters werkt nog steeds naast benoemde filters.
Groeifilters (trafficGrowth, adsGrowth, pageReachGrowth, adReachGrowth) accepteren regels in de vorm {"comparison": "greater" | "lower", "value": 50} of {"operator": "gte" | "lte", "value": 50}. Waarden zijn percentages over de laatste 30 dagen; andere periodes zijn niet beschikbaar. minRankDelta is het minimum aantal posities dat een advertentie heeft gewonnen over rankDeltaWindow (7d, tenzij je 14d of 30d stuurt). hideSavedAds laat de advertenties weg die je al hebt bewaard. Categorie-id's voor elk filter categoryIds komen uit /v1/facets/categories.
Snelheidslimieten & credits
Abonnement
Credits / maand
Snelheidslimiet
Starter
5.000
60 / minuut
Pro
15.000
120 / minuut
Business
20.000
300 / minuut
1 credit = 1 geretourneerd resultaat: de details van één merk, één advertentie of één rij van een lijst. Een leeg resultaat is gratis. Elk abonnement bevat credits voor de maand, vernieuwd om 00:00 UTC op de 1e. Een aanroep kost de resultaten die hij teruggeeft, dus een kleinere limit kost minder, en een MCP-toolaanroep kost, net als bij de API, de resultaten die hij teruggeeft. Credits en de snelheidslimiet gelden per werkruimte: iedereen erin, al haar sleutels, de API en de MCP-server delen één pot credits en één snelheidslimiet. Bij een betaald abonnement kan de eigenaar van de werkruimte opwaardeercredits kopen op de factureringspagina (voor €1 krijg je 120, vanaf €10): ze worden gebruikt na de credits van de maand, schuiven door en verlopen nooit.
Aanroep
Credits
Een zoekopdracht of een lijst
1 per teruggegeven resultaat
Eén record (een winkel, een advertentie, een e-mail)
1
Een leeg resultaat
0
Een wijziging (bewaren, verplaatsen, delen, verwijderen)
1 (een item dat al op het bord staat: 0)
Een zoekopdracht op afbeelding
4 per teruggegeven resultaat
De omzetgeschiedenis van een winkel
4
Lookups, filterwaarden (facetten), GET /v1/account en GET /v1/usage
0
Een fout of een weigering
0
Elk gemeten antwoord bevat:
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
Boven de snelheidslimiet per minuut krijg je 429 rate_limited met een header Retry-After (in seconden). Als de credits van de maand en de opwaardeercredits allebei op zijn, krijg je 402 insufficient_credits, met details.upgradeUrl en details.topUpUrl, tot de maandelijkse credits worden vernieuwd. Controleer je credits op elk moment met GET /v1/account of GET /v1/usage. Deze aanroepen kosten niets, sturen nog steeds X-Usage-Cost: 0, X-Credits-Used: 0 en X-Credits-Remaining mee, en werken ook als de credits op zijn.
Deze limieten gelden voor de API en de MCP-server, bij betaalde abonnementen en bij Free. De web-app op de website wordt niet gemeten: bij betaalde abonnementen is hij onbeperkt binnen redelijk gebruik.
Het Free-abonnement
Het Free-abonnement omvat de web-app en de MCP-server (150 credits per maand), zonder de API. Een Free-account maakt in zijn dashboard een sleutel voor de MCP-server (AI-agents), binnen 150 credits per maand en 10 verzoeken per minuut; de REST API hoort bij betaalde abonnementen: met een Free-sleutel antwoordt die 403 plan_not_eligible, met details.feature, details.requiredPlan en details.upgradeUrl, op elk endpoint behalve GET /v1/account, en er wordt niets geteld. Een sleutel die op een betaald abonnement is gemaakt, wordt op Free gepauzeerd en werkt weer zodra het account terug is op een betaald abonnement. Op Free geeft een zoekopdracht de eerste resultaten, en een tool of endpoint waarvan Free de data niet omvat, antwoordt met het bericht van de betaalde abonnementen. De vergelijking van de abonnementen laat zien wat Free omvat. De demomerken zijn volledig toegankelijk op de website.
Fouten
Fouten gebruiken standaard HTTP-statuscodes en een JSON-body:
{
"error": {
"code": "invalid_api_key",
"message": "This API key is invalid or has been revoked.",
"requestId": "req_8f2c1a9b4d7e6f3a2b1c0d9e",
"details": null
}
}
code is stabiel en veilig om op te vertakken, message is geschreven voor mensen, en details bevat extra data als die er is (de afgewezen velden van een 400; de maandelijkse credits, de vernieuwingsdatum, upgradeUrl en topUpUrl van een 402).
Status
code
Betekenis
400
validation_failed
Een parameter, filter of bodyveld is ongeldig. message legt uit welke.
400
invalid_image / unsupported_url
De afbeelding van een zoekopdracht op afbeelding is geen PNG-, JPG- of WEBP-bestand van maximaal 10 MB, of de URL is geen openbaar http- of https-adres.
401
missing_api_key / invalid_api_key
Er is geen sleutel meegestuurd, of de sleutel is onjuist of ingetrokken.
402
insufficient_credits
De credits van de maand en de opwaardeercredits zijn op. De maandelijkse credits worden op de 1e van de maand vernieuwd; je kunt opwaardeercredits kopen of je abonnement upgraden (details.topUpUrl, details.upgradeUrl).
403
plan_not_eligible
Je abonnement omvat dit niet. Bij het Free-abonnement geldt dat voor elk verzoek behalve GET /v1/account. details noemt de feature, het requiredPlan en een upgradeUrl.
403
workspace_public_api_suspended
Het account is uitgeschakeld. Neem contact op met support.
403
forbidden
Deze sleutel mag dit niet doen.
404
not_found
De resource of het id bestaat niet.
409
conflict
De wijziging botst met wat al is bewaard, zoals een item dat al op het doelbord staat.
422
unreadable_image
De afbeelding van een zoekopdracht op afbeelding kon niet worden gelezen, of de URL kon niet worden gedownload. Probeer een ander bestand of een andere URL.
429
rate_limited
Te veel verzoeken deze minuut. Wacht Retry-After seconden.
500
internal_error
Er ging iets mis aan onze kant. Je kunt het veilig opnieuw proberen.
Een tijdelijk probleem aan onze kant. Je kunt het veilig opnieuw proberen met backoff (Retry-After).
503
upstream_timeout
De zoekopdracht duurde te lang. Beperk hem met minder of strengere filters, of probeer het opnieuw. (502 en 504 vóór 27 oktober 2026.)
Media-URL's
Afbeeldingen en video's in antwoorden worden geleverd vanaf ons CDN op https://api.sellwinners.com/v1/media/file/…. Voor deze URL's is geen API-sleutel nodig en ze kosten geen credits, dus je kunt ze direct insluiten in <img>- en <video>-tags. Een bestand dat de databron niet meer heeft, wordt een dag lang als null verstuurd, en een ontbrekend bestand antwoordt met een lege 404 van zijn mediatype. Productafbeeldingen en app-iconen die op het CDN van Shopify staan, worden ook vanaf ons CDN geleverd. Om een afbeelding klein te tonen, voeg je ?w=96 (miniaturen) of ?w=480 (kaarten) toe: een JPEG-, PNG-, WebP- of GIF-afbeelding wordt dan als WebP verstuurd met hoogstens die breedte, nooit groter gemaakt; een animatie, een kleinere afbeelding of een video komt zoals hij is. Gebruik voor een platte, direct toonbare lijst met creatives /v1/media.
Om een afbeelding op haar eigen formaat maar lichter te tonen, voeg je ?w=full toe: een JPEG-, PNG-, WebP- of GIF-afbeelding wordt dan als WebP verstuurd op haar eigen breedte en hoogte, in een kwaliteit die er hetzelfde uitziet, als dat minstens een tiende van het bestand bespaart; anders, en voor een animatie of een video, komt het origineel zoals het is. Zonder w wordt het originele bestand verstuurd.
Ontdekken
Zet een naam, een domein of een pagina-ID om in de ID's die de andere endpoints gebruiken.
GET/v1/lookup
Een merk, adverteerder of winkel vinden. 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).
Parameter
Beschrijving
qverplicht
Brand name, domain (allbirds.com) or Facebook page id.
type
What to look for (default auto: all of them). Een van: auto, brandtracker, advertiser, shop.
Facebook-pagina's van een winkel, of de winkel van een pagina. 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.
Zoek Shopify-winkels en haal hun producten, verkeer, verkopen, sociale accounts en advertenties op.
GET/v1/shops
Winkels zoeken of doorbladeren (trending als de zoekopdracht leeg is). 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).
Winkels zoeken met geavanceerde filters. 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).
Benoemde filters 52velden op het hoogste niveau van de body
Eén winkel op ID of domein. 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.
Parameter
Beschrijving
shopIdverplicht
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.
Producten winkel. 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).
Parameter
Beschrijving
shopIdverplicht
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). Een van: popularity, price, createdAt.
order
Sort direction: asc by default for popularity (best sellers first), desc for price and createdAt. Een van: asc, desc.
snapshotDate
A past day (YYYY-MM-DD): the products as the shop listed them then, unranked.
Winkels die lijken op een winkel-ID of domein. 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.
Parameter
Beschrijving
shopIdverplicht
Shop id or domain, such as allbirds.com.
sortBy
Defaults to relevance. Een van: relevance, monthlyVisits, activeAds, growth30d, productsCount, createdAt.
order
Sort direction (default desc). Een van: 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}.
Adverteerderspagina's die aan een winkel zijn gekoppeld. 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.
Geschiedenis van geschatte verkopen. 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.
Parameter
Beschrijving
shopIdverplicht
Shop id or domain, such as allbirds.com.
period
One point per day, week or month. Een van: day, week, month.
Eén cijfer van meerdere winkels naast elkaar. 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.
Parameter
Beschrijving
shopIdsverplicht
1 to 10 shop ids or domains, comma-separated.
metricverplicht
The figure compared. Een van: googleLiveAds, tiktokPosts, metaReach.
Shopify-apps die een winkel gebruikt, op basis van het adres. 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).
Of een winkel op Shopify draait, en het thema. isShopify, theme and isHeadless (a storefront built apart from Shopify's themes). Any store, tracked or not, read at its domain without www. (url).
De nieuwste advertenties en e-mails van een winkel. 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.
Het Q4-seizoen van een winkel, dag voor dag. 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).
Parameter
Beschrijving
shopIdverplicht
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. Een van: true, false.
advertiserIds
Only these Facebook pages of the shop, comma-separated.
Landingspagina's uit het Q4-seizoen van een winkel. The season's landing pages by the date each appeared: url, ads, screenshotUrl, isBlackFriday and blackFridayStartedAt. meta.total counts them all.
Parameter
Beschrijving
shopIdverplicht
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. Een van: true, false.
advertiserIds
Only these Facebook pages of the shop, comma-separated.
Creatives uit het Q4-seizoen van een winkel. The season's creatives by the date each was launched: adId, hook, thumbnailUrl, mediaType, reach and isActive. meta.total counts them all.
Parameter
Beschrijving
shopIdverplicht
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. Een van: true, false.
advertiserIds
Only these Facebook pages of the shop, comma-separated.
Hooks, transcripties, koppen of advertentieteksten van een winkel. 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).
Parameter
Beschrijving
shopIdverplicht
Shop id or domain, such as allbirds.com.
kindverplicht
The texts to list. Een van: 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. Een van: usageCount, longestRunning, totalImpressions, firstUsedAt, lastUsedAt.
order
Descending by default. Een van: desc, asc.
timePeriod
The ads counted (default live); not with ad-copy. Een van: live, last24h, last3d, last7d, last30d, last3m, last6m, last1y.
Landingspagina's van een winkel. 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.
Parameter
Beschrijving
shopIdverplicht
Shop id or domain, such as allbirds.com.
advertiserIds
Only these Facebook pages of the shop, comma-separated.
Eén landingspagina van de advertenties van een winkel. 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.
Parameter
Beschrijving
shopIdverplicht
Shop id or domain, such as allbirds.com.
urlverplicht
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.
Landingspagina's van een van de Facebook-pagina's van een winkel. 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).
De Meta-advertenties van een winkel, gerangschikt over een periode. 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.
Parameter
Beschrijving
shopIdverplicht
Shop id or domain, such as allbirds.com.
mode
best-rank (default): the best rank each reached; rank-delta: the places each gained. Een van: best-rank, rank-delta.
days
The window, up to yesterday (default 7). Een van: 7, 14, 30.
advertiserIds
Only these Facebook pages of the shop, comma-separated.
Meta-advertenties van een winkel gerangschikt, met filters. 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.
Parameter
Beschrijving
shopIdverplicht
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
De dagelijkse rang van enkele advertenties van een winkel. 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).
Parameter
Beschrijving
shopIdverplicht
Shop id or domain, such as allbirds.com.
adIdsverplicht
Up to 24 ad ids, comma-separated.
days
The window, up to yesterday (default 7). Een van: 7, 14, 30.
advertiserIds
Only these Facebook pages of the shop, comma-separated.
De creativetests van een winkel, dag voor dag. 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.
Parameter
Beschrijving
shopIdverplicht
Shop id or domain, such as allbirds.com.
mediaType
Defaults to all. Een van: all, image, video.
status
Een van: all, active, inactive.
keywords
Words in the ads, comma-separated.
keywordMode
Een van: any, all.
advertiserIds
Only these Facebook pages of the shop, comma-separated.
De advertenties van een van de creativetests van een winkel. 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.
Parameter
Beschrijving
shopIdverplicht
Shop id or domain, such as allbirds.com.
dateverplicht
A day, as YYYY-MM-DD.
mediaType
Defaults to all. Een van: all, image, video.
status
Een van: all, active, inactive.
keywords
Words in the ads, comma-separated.
keywordMode
Een van: 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).
De dagtotalen van de hele markt, en het Q4-seizoen ervan.
GET/v1/market/overview
De hele markt, dag voor dag. 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.
Parameter
Beschrijving
from
First day (YYYY-MM-DD; default 365 days before to).
De hele markt over een Q4-seizoen, dag voor dag. 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.
Facebook- en Instagram-advertentiecreatives met media, bereik en rang.
GET/v1/ads
Meta-advertenties zoeken. 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).
Meta-advertenties zoeken met geavanceerde filters. 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).
Benoemde filters 114velden op het hoogste niveau van de body
Eén Meta-advertentie op 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).
Landingspagina's die de advertenties van een winkel of pagina's gebruiken. 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.
Parameter
Beschrijving
scopeDomain
A shop domain.
scopeTrackedPages
Up to 20 Facebook page ids, comma-separated.
status
Pages with running ads, without, or all (default all). Een van: 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.
Teksten van de advertenties van een winkel. 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.
Parameter
Beschrijving
scopeDomainverplicht
The shop's domain or id.
limit
Results, 1-100 (default 100).
advertiserIds
Only these Facebook pages of the shop, comma-separated.
Partners van de advertenties van een winkel. 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.
Parameter
Beschrijving
scopeDomainverplicht
The shop's domain or id.
limit
Results, 1-100 (default 100).
advertiserIds
Only these Facebook pages of the shop, comma-separated.
Advertentiehooks schrijven voor een product. 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.
Je tegoed aan advertentiehooks deze maand. 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.
Google-advertenties zoeken. 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.
Google-advertenties zoeken met filters. 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.
Benoemde filters 41velden op het hoogste niveau van de body
Eén Google-advertentie op 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.
Parameter
Beschrijving
adIdverplicht
Google ad id from a Google ad search (google_CR...).
TikTok-advertenties en -posts zoeken. 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.
TikTok-advertenties en posts zoeken met filters. 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.
Benoemde filters 58velden op het hoogste niveau van de body
Eén TikTok-item op 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).
TikTok-items van één winkel. 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.
Creatives klaar voor weergave: URL's van afbeeldingen en video's op ons CDN.
GET/v1/media
Advertentiecreatives als media klaar voor weergave. 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).
Media klaar voor weergave, met geavanceerde filters. 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.
Benoemde filters 114velden op het hoogste niveau van de body
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).
Parameter
Beschrijving
keyverplicht
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. Een van: 96, 480, full.
Adverteerders (Facebook-pagina's) en hun activiteit.
GET/v1/advertisers
Adverteerders zoeken. 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).
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. Een van: brand, adCopy, websiteCopy, urlContains, domain, all.
country
2-letter ISO country code.
sortBy
Defaults to relevance when searching, otherwise newest. Een van: relevance, newest, activeAds, newAds, reach, reach14d, growth30d, followers, euAdsShare.
order
Sort direction (default desc). Een van: desc, asc.
Adverteerders zoeken met filters. 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).
Benoemde filters 59velden op het hoogste niveau van de body
Eén adverteerder op 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).
Parameter
Beschrijving
advertiserIdverplicht
Facebook page id of an advertiser or ad.
snapshotDate
A past day (YYYY-MM-DD): the page's details as they were then.
Dagelijkse live advertenties en EU-bereik van één adverteerder. 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).
Parameter
Beschrijving
advertiserIdverplicht
Facebook page id of an advertiser or ad.
days
How many days back, 7-3650 (default 90), or all for every reading.
Meta-advertenties van één adverteerder. 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).
Parameter
Beschrijving
advertiser_idverplicht
Facebook page id of an advertiser or ad.
sortBy
Defaults to relevance when searching, otherwise newest. Een van: relevance, newest, reach, reachGrowth7d, reachDelta7d, longestRunning, duplicates, spend, adRank, rankDelta7d, rankDelta14d, rankDelta30d, createdAt, relevanceScore, mostDuplicates, adOrder.
order
Sort direction (default desc). Een van: desc, asc.
Merk-e-mails zoeken. 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.
Campaign type, in any case (default: Newsletter and Marketing). Een van: 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. Een van: relevance, newest, event, promotionType, activeAds, emails90d, avgEmailsPerWeek, oldest, shopEmailFrequency.
order
Sort direction (default desc). Een van: desc, asc.
Merk-e-mails zoeken met filters. 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.
Benoemde filters 33velden op het hoogste niveau van de body
Eén e-mail op 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.
Verzendstatistieken van de e-mails van een winkel. 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.
Winkelproducten met hun prijs, verkopen, reviews, advertenties en EU-bereik.
GET/v1/products
Producten zoeken of doorbladeren. 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.
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. Een van: 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). Een van: relevance, newest, activeAds, spend, estSales, bestSelling, adPressure, createdAt.
order
Sort direction (default desc). Een van: desc, asc.
Producten zoeken met filters. 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.
Benoemde filters 60velden op het hoogste niveau van de body
Een product ophalen. 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`.
Parameter
Beschrijving
productIdverplicht
The product's `ref`, as a product search returns it.
De advertenties van een product weergeven. The Meta ads that link to the product's page, newest first, in the format of /v1/ads. `status`: active or inactive.
Parameter
Beschrijving
productIdverplicht
The product's `ref`, as a product search returns it.
Een openbare link naar een product maken (of ophalen). Anyone with the link can view the product's sheet on the website without an account, with no EU data.
Parameter
Beschrijving
productIdverplicht
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
De openbare link naar een product verwijderen.
Parameter
Beschrijving
productIdverplicht
The product's `ref`, as a product search returns it.
Search shops by image. The shops selling what a picture shows, the most active advertisers first, each with its closest products; a brand's storefronts come back as one row with `otherStorefronts`. Costs 4 credits per shop returned.
Parameter
Beschrijving
image
The picture: a PNG, JPG or WEBP file of 10 MB at most.
imageUrl
Or a direct image URL (http or https).
searchId
Reads the next shops of an earlier search, without sending the picture again.
groupBrands
One row per brand, with its other storefronts (true by default).
productsPerShop
The closest products on each row (1-10, default 3).
Producten zoeken op afbeelding. Body: multipart/form-data. 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.
Parameter
Beschrijving
image
The picture: a PNG, JPG or WEBP file of 10 MB at most (or send imageUrl).
imageUrl
A direct image URL (http or https), downloaded by us (or send image).
filters
A JSON object of the product search's named filters (each may also be a field of its own).
sortBy
Defaults to relevance (the closest matches first). Een van: relevance, estSales, activeAds, adPressure, newest, spend, spend14d.
order
Sort direction (default desc). Een van: desc, asc.
maxPerShop
The closest matches of each shop: 0 (all, the default), 1, 3, 5, 10 or 20.
Je recente zoekopdrachten op afbeelding. 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.
Een zoekopdracht op afbeelding opnieuw lezen. 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.
Parameter
Beschrijving
searchIdverplicht
The searchId an image search answered (meta.searchId).
filters
A JSON object of the product search's named filters.
sortBy
Defaults to relevance. Een van: relevance, estSales, activeAds, adPressure, newest, spend, spend14d.
order
Sort direction (default desc). Een van: desc, asc.
E-mailcategorieën, promotietypes en evenementen. The ids taken by emailCategoryIds, promotionTypeIds and eventIds, and the event categories taken by eventCategories, in email searches.
Google-advertentieformaten. 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.
Statussen van Google-advertenties. 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.
TikTok-categorieën. 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.
TikTok-talen. 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.
TikTok-landen. 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.
TikTok-contenttypes. 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.
TikTok-mediatypes. 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.
Filterwaarden voor 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.
Parameter
Beschrijving
facetverplicht
The list: languages, countries, creationCountries, promotionTypes, eventNames, categories or campaignTypes.
Filterwaarden voor winkels zoeken. 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.
Filterwaarden voor adverteerders zoeken. 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.
Doorzoek alles wat je hebt bewaard. Searches your boards and favorites (a favorite is kept on a board) in what each saved copy shows on every plan: a shop's name, domain and category; a Meta ad's page name, title, text, landing page domain and call to action lines; a Google ad's advertiser, shop and domain; an email's subject, preview line, shop name and domain; a product's title and its shop's name and domain. Every item also matches its own id and the name of its board, a favorites board by the name the website shows (Favorites: Ads, Favorites: Shops, Favorites: Emails). A TikTok post or an advertiser is saved by its id, so it matches on that and on its board. q may be left out when sourceType, boardId, savedFrom or savedTo is given. Each row is the board item with its board (id, name, displayName, surface, visibility, isSystem, archivedAt) and a label (the shop's name, the ad's page and title, the Google advertiser, the email's subject). include=item adds the saved copy as it is stored, and copySavedOnFree: true for a copy saved on the Free plan that you now see on a paid plan; it lacks what Free hides (an ad's reach and spend, for one) until the board's items are read with include=item, which reads it again. The matches come from your 10,000 most recently saved items that pass the filters; meta.scanned is how many it looked at and meta.capped is true when there were more. It only reads what you saved and is never cached.
Parameter
Beschrijving
q
Words to find, 2 to 120 characters. Every word must appear, in any order; case and accents are ignored.
sourceType
Only these kinds, comma-separated: meta_ad, google_ad, tiktok, shop, email, advertiser, product.
boardId
Only the items of this board (a folder board: of every board inside it).
scope
Defaults to all. Een van: all, workspace, personal.
state
The state of the item's board. Defaults to active. Een van: active, archived, all.
savedFrom
Saved on or after this day (YYYY-MM-DD).
savedTo
Saved on or before this day (YYYY-MM-DD).
sortBy
Defaults to savedAt. Een van: savedAt, name.
order
Defaults to desc for savedAt and asc for name. Een van: desc, asc.
page
Page number, starting at 1.
limit
Results per page, 1-100 (default 25).
include
item adds the saved copy of each record. Een van: item.
Een item aan een bord toevoegen. 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.
Een favoriete advertentie bewaren. 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.
De volgorde van een map met favoriete advertenties controleren. Folders have no stored order: the list is checked and echoed back sorted by order. The answer carries reordered: true.
Parameter
Beschrijving
scopeverplicht
Which favorites: shared with the workspace or personal. Een van: workspace, personal.
De volgorde van een map met favoriete winkels controleren. Folders have no stored order: the list is checked and echoed back sorted by order. The answer carries reordered: true.
Parameter
Beschrijving
scopeverplicht
Which favorites: shared with the workspace or personal. Een van: workspace, personal.
De volgorde van een map met favoriete e-mails controleren. Folders have no stored order: the list is checked and echoed back sorted by order. The answer carries reordered: true.
Parameter
Beschrijving
scopeverplicht
Which favorites: shared with the workspace or personal. Een van: workspace, personal.
De zoekopdrachten die je op de lijstpagina's van de website hebt opgeslagen, per pagina.
GET/v1/views
Je opgeslagen weergaven opvragen. 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.
Parameter
Beschrijving
context
Only this list page's views. Defaults to every page. Een van: shops, meta, tiktok, google, advertisers, emails, products.
Een weergave opslaan. 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).
Een opgeslagen weergave hernoemen, verplaatsen of wijzigen. Send at least one of name, position (its place among the page's views, 0 the first) or state.
Volg merken en lees rapporten over hun advertenties, creatives en landingspagina's.
GET/v1/brandtrackers
Gevolgde merken opvragen. 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).
Parameter
Beschrijving
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
Een van: newAdsLastDay, newAdsLast7Days, newAdsLast30Days, activeAds, totalTraffic, name, createdAt.
folderIds
Only these folders, comma-separated; none: the brands in no folder.
Merk volgen. 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).
Eén gevolgd merk. 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.
Dashboardweergave van een merk. 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).
Parameter
Beschrijving
brandtrackerIdverplicht
Tracker id, from the list of tracked brands.
euOnly
Only ads shown in the EU and UK. Een van: true, false.
Advertenties van een merk. 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.
Parameter
Beschrijving
brandtrackerIdverplicht
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. Een van: newest, longestRunning, reach, duplicates, relevance, reachDelta7d, currentRank, rankDelta7d, rankDelta14d, rankDelta30d, spend.
status
Running or stopped ads. Een van: active, inactive, all.
mediaType
Creative type. Een van: 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. Een van: true, false.
partnerIds
Only ads with these partner pages (Facebook page ids), comma-separated.
euOnly
Only ads shown in the EU and UK. Een van: true, false.
Aantal en datumbereik van de tijdlijn van een merk. totalIsExact is false when totalCount is a lower bound; totalCount is null when the source sends no total.
Parameter
Beschrijving
brandtrackerIdverplicht
Tracker id, from the list of tracked brands.
status
Running or stopped ads. Een van: active, inactive, all.
mediaType
Creative type. Een van: 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. Een van: true, false.
partnerIds
Only ads with these partner pages (Facebook page ids), comma-separated.
euOnly
Only ads shown in the EU and UK. Een van: true, false.
De advertenties van een merk, gerangschikt. 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.
Parameter
Beschrijving
brandtrackerIdverplicht
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. Een van: currentRank, rankDelta, rankDelta7d, rankDelta14d, rankDelta30d, reach, reachDelta7d, daysRunning, duplicates.
status
Defaults to active. Een van: active, inactive, all.
includeInactive
Also rank stopped ads. Een van: true, false.
euOnly
Only ads shown in the EU and UK. Een van: true, false.
De advertenties van een merk die in rang zijn gestegen. 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).
Parameter
Beschrijving
brandtrackerIdverplicht
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. Een van: last7d, last14d, last30d.
sortBy
Defaults to rankDelta. Een van: rankDelta, currentRank.
Creativetests van een merk. 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.
Parameter
Beschrijving
brandtrackerIdverplicht
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. Een van: active, inactive, all.
mediaType
Creative type. Een van: 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. Een van: true, false.
partnerIds
Only ads with these partner pages (Facebook page ids), comma-separated.
euOnly
Only ads shown in the EU and UK. Een van: true, false.
Hooks waarmee een merk zijn video's opent. 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.
Parameter
Beschrijving
brandtrackerIdverplicht
Tracker id, from the list of tracked brands.
timePeriod
Which ads to read (default live). Een van: 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. Een van: usageCount, longestRunning, totalImpressions, firstUsedAt, lastUsedAt.
order
Sort direction (default desc). Een van: desc, asc.
euOnly
Only ads shown in the EU and UK. Een van: true, false.
Videoscripts van een merk. 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).
Parameter
Beschrijving
brandtrackerIdverplicht
Tracker id, from the list of tracked brands.
timePeriod
Which ads to read (default live). Een van: 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. Een van: usageCount, longestRunning, totalImpressions, firstUsedAt, lastUsedAt.
order
Sort direction (default desc). Een van: desc, asc.
euOnly
Only ads shown in the EU and UK. Een van: true, false.
Koppen van de advertenties van een merk. 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.
Parameter
Beschrijving
brandtrackerIdverplicht
Tracker id, from the list of tracked brands.
timePeriod
Which ads to read (default live). Een van: 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. Een van: usageCount, longestRunning, totalImpressions, firstUsedAt, lastUsedAt.
order
Sort direction (default desc). Een van: desc, asc.
euOnly
Only ads shown in the EU and UK. Een van: true, false.
Landingspagina's van een merk. 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.
Parameter
Beschrijving
brandtrackerIdverplicht
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. Een van: usageCount, longestRunning, totalImpressions.
order
Sort direction (default desc). Een van: desc, asc.
Advertentieteksten van een merk door de tijd. 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.
Koppen van een merk door de tijd. 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.
Landingspagina's van een merk door de tijd. 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.
Partners die advertenties voor een merk draaien. 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).
Parameter
Beschrijving
brandtrackerIdverplicht
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. Een van: activeAds, launchDate, reach, estimatedSpend.
order
Sort direction (default desc). Een van: desc, asc.
euOnly
Only ads shown in the EU and UK. Een van: true, false.
cpm
Cost per 1,000 impressions used for the spend estimate (default 9).
Doelgroep van de advertenties van een merk. 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.
De nieuwste items van één bron voor een gevolgd merk. 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.
Parameter
Beschrijving
brandtrackerIdverplicht
Tracker id, from the list of tracked brands.
source
Defaults to meta. Een van: meta, tiktok, google, email.
since
First day (YYYY-MM-DD; default 6 days before until: 7 days).
De gebeurtenissen van een gevolgd merk. 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.
Parameter
Beschrijving
brandtrackerIdverplicht
Tracker id, from the list of tracked brands.
since
First day (YYYY-MM-DD; default 6 days before until: 7 days).
De kalender van een gevolgd merk over Meta, TikTok, Google en 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.
Parameter
Beschrijving
brandtrackerIdverplicht
Tracker id, from the list of tracked brands.
since
First day (YYYY-MM-DD; default 6 days before until: 7 days).
Hoeveel een gevolgd merk elke dag lanceerde, per bron. 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.
Parameter
Beschrijving
brandtrackerIdverplicht
Tracker id, from the list of tracked brands.
since
First day (YYYY-MM-DD; default 6 days before until: 7 days).
Gelanceerde advertenties, live advertenties en bereik door de tijd. 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.
Parameter
Beschrijving
brandtrackerIdverplicht
Tracker id, from the list of tracked brands.
granularity
Defaults to daily. Een van: daily, weekly, monthly.
period
Use it instead of startDate / endDate. Een van: 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. Een van: true, false.
cpm
Cost per 1,000 impressions used for the spend estimate.
Topadvertenties van alle gevolgde merken. 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.
Parameter
Beschrijving
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. Een van: currentRank, rankDelta, rankDelta7d, reach, reachDelta7d, daysRunning, duplicates.
includeInactive
Also rank stopped ads. Een van: true, false.
euOnly
Only ads shown in the EU and UK. Een van: true, false.
Opschalende advertenties van alle gevolgde merken. 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.
Parameter
Beschrijving
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. Een van: 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. Een van: last7d, last14d, last30d.
Hooks van alle gevolgde merken. 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.
Parameter
Beschrijving
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. Een van: usageCount, longestRunning, totalImpressions, firstUsedAt, lastUsedAt.
order
Sort direction (default desc). Een van: desc, asc.
euOnly
Only ads shown in the EU and UK. Een van: true, false.
Advertentieteksten van alle gevolgde merken. 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.
Parameter
Beschrijving
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. Een van: usageCount.
order
Sort direction (default desc). Een van: desc, asc.
euOnly
Only ads shown in the EU and UK. Een van: true, false.
Landingspagina's van alle gevolgde merken. 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.
Parameter
Beschrijving
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. Een van: usageCount, longestRunning, totalImpressions.
order
Sort direction (default desc). Een van: desc, asc.
Formatenmix van alle gevolgde merken. 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.
Parameter
Beschrijving
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. Een van: activeAds, image, video, dco, other.
euOnly
Only ads shown in the EU and UK. Een van: true, false.
Je werkruimtes, hun leden en plekken, en de verstuurde en ontvangen uitnodigingen. Deze calls worden nooit geteld.
GET/v1/workspaces
Je werkruimtes opvragen. 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.
Een werkruimte verwijderen. 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).
Parameter
Beschrijving
workspaceIdverplicht
id of one of your workspaces (ws_...), from the list of your workspaces.
De rol van een lid wijzigen. The owner changes anyone but themself; an admin changes members and readonly members only. The owner role can't be changed.
Parameter
Beschrijving
workspaceIdverplicht
id of one of your workspaces (ws_...), from the list of your workspaces.
userIdverplicht
A member's user id (user_...), from the workspace's members.
Iemand uitnodigen. 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.
Parameter
Beschrijving
workspaceIdverplicht
id of one of your workspaces (ws_...), from the list of your workspaces.
Onze gehoste MCP-server stelt dezelfde data als tools beschikbaar voor AI-agents. Gebruik dezelfde API-sleutel als voor de REST API; een toolaanroep kost, net als bij de API, de resultaten die hij teruggeeft, en het antwoord vermeldt dat in meta.credits (used, remaining, source). De server stelt ook drie resources beschikbaar: sellwinners://me, sellwinners://usage en sellwinners://openapi.
Het Free-abonnement omvat ook de MCP-server: 150 credits per maand, 10 verzoeken per minuut, de eerste 10 resultaten van elke zoekopdracht. Bij Free noemt de toollijst de tools die Free omvat; een andere tool antwoordt met een toolfout die eindigt op [plan_not_eligible], die niet wordt geteld. Bij een betaald abonnement geeft een toolaanroep die het abonnement niet omvat een toolfout terug die eindigt op [plan_not_eligible], die niet wordt geteld.
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 instellen
No API key: these sign in with your SellWinners account.
Het Free-abonnement omvat ook de MCP-server: 150 credits per
maand, 10 verzoeken per minuut, de eerste 10 resultaten van elke
zoekopdracht.
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.
Winkelproducten zoeken of doorbladeren op prijs, verkopen, verkochte eenheden, verkooplanden, advertenties, bereik, reviews, lanceringsdatum, valuta of land van de winkel
37 argumenten
Eén rapport over een winkel: de feed, de Facebook-pagina's, het Q4-seizoen, een landingspagina, de advertentieranking of de creativetests
19 argumenten
Wat er voor een gevolgd merk veranderde in een periode (1d, 7d, 14d, 30d; gewonnen rang wordt bij 1d over 7d gelezen, hooks bij 14d over 30d, creativetests zijn de nieuwste)
6 argumenten
Een favorietenmap privé of gedeeld maken
4 argumenten
kindtextfolder_idtextvisibilitytextscopetext
create_favorite_folder_share_link
Een openbare link naar een favorietenmap maken
4 argumenten
kindtextfolder_idtextscopetextconfirmtrue / false
delete_favorite_folder_share_link
De openbare links naar een favorietenmap verwijderen
4 argumenten
kindtextfolder_idtextscopetextconfirmtrue / false
Account 2
usage_get
Je abonnement, de credits ervan en hoeveel er nog over zijn
check_credits
Hoeveel credits je deze maand nog hebt (hetzelfde antwoord als usage_get)
Help je ons SellWinners te verbeteren? Met je toestemming gebruiken we cookies om je bezoek van pagina tot pagina te volgen en op te nemen, met alles wat je typt verborgen. We onthouden ook 30 dagen de affiliate wiens link je hierheen bracht.
Zonder toestemming zien we nog steeds welke pagina's je opent en hoe ver je scrolt, waarop je klikt en eventuele fouten, zonder enige cookie.
Deze browser onthoudt je keuze, en de supportchat slaat zijn cookies pas op zodra je hem opent of akkoord gaat. Hoe het werkt