A API do SellWinners oferece inteligência de e-commerce e publicidade por HTTPS, com respostas em JSON: lojas Shopify com os produtos e o tráfego; produtos das lojas com preço, estimativas de vendas, avaliações e anúncios; anúncios da Meta, do Google e do TikTok; anunciantes; e os e-mails que as marcas enviam. Todos os endpoints também estão disponíveis para agentes de IA pelo nosso servidor MCP hospedado. Esta página aborda a autenticação, o formato das respostas, a paginação, a ordenação e os filtros, os limites de requisições e os créditos, os erros e as URLs de mídia, depois todos os endpoints, com os parâmetros e uma requisição de exemplo, e as ferramentas do servidor MCP.
URL base
https://api.sellwinners.com
Teste ao vivo
Envie requisições reais pelo Playground nos planos pagos ou gere um cliente a partir da especificação OpenAPI:
Envie sua chave de API em todas as requisições no cabeçalho X-API-Key ou como um token bearer:
X-API-Key: YOUR_API_KEY
# or
Authorization: Bearer YOUR_API_KEY
As chaves começam com ak_live_. Mantenha-as em segredo: não as coloque em código de front-end nem em repositórios públicos. Você pode criar várias chaves (uma por app ou ambiente) e revogar qualquer chave no seu painel; uma chave revogada para de funcionar imediatamente.
Respostas
Toda resposta é em JSON. Ela traz um requestId e o resultado em data: uma lista para buscas e listagens, um objeto para um único registro. As listas acrescentam um objeto pagination, e algumas respostas acrescentam meta.
Os registros são objetos aninhados: um anúncio tem media, advertiser, content, metrics, audience, rank e flags, e as lojas, os anunciantes, os anúncios do Google, os itens do TikTok e os e-mails são agrupados da mesma forma. Um valor desconhecido é null. Os demais campos sem lugar fixo ficam em extra. O exemplo acima está resumido.
Em um anúncio, content.title é o título e content.callToAction é um texto legível, como «Shop now». metrics.estimatedSpend é a estimativa de investimento da fonte quando ela existe (um único anúncio de /v1/ads/{adId} a lê); caso contrário, é o alcance x 9 / 1000 (9 USD por 1.000 pessoas alcançadas); uma estimativa de investimento mantém duas casas decimais abaixo de 10 USD e fica em dólares inteiros a partir de 10 USD. rank.rankDelta é a posição atual menos a anterior, então um valor negativo significa que o anúncio subiu, e rank.improvementPct é uma fração (0.25 é um quarto).
Os relatórios de posição do monitor de marcas (/ad-rank, /scaling-ads, /v1/workspace/scaling-ads e a ferramenta MCP get_brandtracker_scaling_ads) acrescentam as próprias metrics: nelas, metrics.rankDelta é a posição anterior menos a atual (positivo: posições ganhas) e metrics.improvementPct é a fração da posição anterior que foi ganha, como em um anúncio (0.875 é 87,5%). Em um único anúncio, metrics.reachDelta1d, reachDelta7d e reachDelta30d são preenchidos a partir do histórico de alcance. As lojas nomeiam as categorias: catalog.mainCategory nas listagens, e também catalog.categories em uma única loja.
Em um anúncio do Google, media.type e media.format são text, image ou video, e media.url é a imagem do anúncio: para um anúncio em vídeo, a miniatura (não há arquivo de vídeo). transparencyUrl é o anúncio na Central de Transparência de Anúncios do Google, onde um anúncio em vídeo é reproduzido; é null quando o anúncio não tem ids do Google. network é search, youtube, shopping, maps ou other, e os valores de extra.networks também.
Alterado em 19 de outubro de 2026:
O media.format de um anúncio do Google era um código de formato e agora é text, image ou video, o media.type pode ser text ou video, e extra.networks usa os nomes em minúsculas de network.
Um media.url do Google nunca é um arquivo de vídeo, mesmo quando media.type é video.
No filtro formats do Google, image agora significa anúncios de imagem (antes significava anúncios de texto), então use text para anúncios de texto. Os códigos anteriores static_image, html5_iframe e responsive_display, e os nomes curtos deles, continuam sendo aceitos.
O status de um anúncio do Google é active só enquanto o Google exibe o anúncio: um anúncio que o Google não exibe há mais de 7 dias fica unknown. daysRunning conta os dias de firstSeenAt a lastSeenAt, ambos incluídos; extra.servedDays é a contagem da própria fonte de dados, que continua depois que um anúncio para. Os filtros concordam com o que cada anúncio mostra: status=active mantém os anúncios que o Google exibiu nos últimos 7 dias e status=inactive, os anúncios que a fonte de dados marca como parados, então um anúncio unknown não entra em nenhum dos dois; minDaysRunning e maxDaysRunning mantêm os anúncios cujo daysRunning está no intervalo. Uma lista assim tem pagination.total nulo e, quando poucos dos anúncios lidos correspondem, termina antes, com meta.partial e um aviso.
Sem texto de busca, sortBy=relevance lista os mais recentes; sortBy=reach aceita só order=desc. Com status=active, sortBy=reach lista poucos anúncios: na ordem de alcance, os primeiros anúncios são, na maioria, anúncios que o Google parou de exibir, então ordene pelos mais recentes para ver os anúncios que o Google exibe agora (o aviso diz isso). Os anúncios do Google não aceitam sortBy=longestRunning: a fonte de dados o ordena por dias que continuam contando depois que um anúncio para, então ele listava anúncios que o Google não exibe mais, e a resposta é 400 com esse motivo.
extra.startIsFloor marca um anúncio visto pela primeira vez em 31 de maio de 2018, o primeiro dia dos dados de anúncios do Google, então ele pode ser mais antigo. audience.countries lista todos os países do público, com um percentage só para um anúncio exibido em um único país; remarketing e interest são null quando desconhecidos.
O Google informa um alcance só para alguns dos anúncios exibidos na UE, muitas vezes apenas como 10.000.000, o topo da escala dele (10 milhões ou mais): a maioria dos anúncios não tem nenhum, e nullReasons diz por que reach.value é null (not_reported: um anúncio exibido na UE para o qual o Google não informa nenhum; eu_only: um anúncio exibido em outro lugar), exceto quando é um alcance que o plano deixa de fora. extra.networks é a lista de plataformas do anúncio segundo a fonte de dados, que pode não citar network. extra.shop.google traz os totais do Google do site do anunciante; para um site que não é uma loja (uma loja de apps, uma rede social, um encurtador de links), advertiser.domain e websiteId são null.
Alterado em 20 de outubro de 2026:
Um domínio (GET /v1/shops/{domain}, a consulta, um domain do TikTok, o briefing de concorrente) é o site com exatamente esse domínio, também fora do índice de lojas; um domínio que a fonte de dados não alcança responde 404.
GET /v1/lookup ordena os resultados do melhor para o pior: o próprio site de um domínio, as próprias páginas do Facebook dele (a página principal primeiro) e depois as páginas com nome parecido; para um nome, o próprio site da marca e as próprias páginas dela (a página principal primeiro) e depois as lojas e páginas encontradas pelo nome.
Quando o site da marca é encontrado, uma loja ou página que tem o nome só dentro de uma palavra fica de fora, e um site com esse nome só é exato quando veicula anúncios; caso contrário, uma correspondência de nome só é exata com tráfego ou anúncios. Páginas oficiais com outro nome e sem nenhum anúncio no ar vêm depois das páginas encontradas pelo nome.
O signals.activeAdsSource de uma linha de loja diz de onde vêm os activeAds dela: page (os anúncios no ar da página principal, lidos agora, na própria linha da loja) ou index (a contagem do índice de lojas, que pode ser mais antiga).
Uma busca de lojas por domínio (searchType=domain) lista primeiro o site exato, com extra.exactDomainMatch (e extra.inShopIndex falso quando o índice de lojas o deixa de fora).
Para um site que não é uma loja (uma loja de apps, uma rede social ou de mensagens, um encurtador de links ou um redirecionamento de rastreamento), o extra.domain de uma linha de anunciante é nulo, um registro de anunciante o cita em extra.nonShopSite, deixa de fora extra.platforms e obtém linkedShops das páginas de destino dele (fromLandingPages), e um anúncio não tem shops.
As datas e horas que a fonte de dados envia sem fuso horário estão em UTC e agora são enviadas com +00:00.
Nas estatísticas de e-mails, as chaves de emailsByDayOfWeek são o número do dia: 0 é domingo, 6 é sábado.
As linhas da consulta podem trazer nullReasons, e um registro de loja, meta.partial quando os números da listagem dele não puderam ser lidos.
Também alterado em 20 de outubro de 2026 (TikTok):
O publishedAt de um item do TikTok está em UTC. Ele estava 1 ou 2 horas atrasado, então um post feito nas últimas horas de um dia em UTC aparecia no dia seguinte e com um daysRunning um dia a menos.
Os filtros concordam com ele: publishedAfter e publishedBefore estão em UTC (uma data sozinha é o início do dia, e publishedBefore lista os posts anteriores a ela), minDaysRunning e maxDaysRunning contam a partir do dia em UTC, como daysRunning, e sortBy=longestRunning começa em 31 de agosto de 2016, às 22:00 UTC.
Também alterado em 20 de outubro de 2026 (anúncios do Google):
GET /v1/google-ads, POST /v1/google-ads/query e a ferramenta MCP não aceitam sortBy=longestRunning (nem daysRunning) e respondem 400 com o motivo: a fonte de dados o ordena por dias que continuam contando depois que um anúncio para, então ele listava anúncios que o Google não exibe mais.
Uma busca no Free cujos primeiros resultados ficam reduzidos com status=active responde meta.partial com um aviso que diz quantos dos anúncios lidos ela lista.
Em extra.shop, um site sem dados de tráfego não tem monthlyVisits (antes era 0), um trafficGrowth30d só aparece junto com visitas acima de 0, e extra.shop.google deixa de fora um totalReach ou weeklyReach igual a 0 (nunca informado) e, quando não conta nenhum anúncio, as contagens iguais a 0.
Um anúncio do Google salvo em um quadro é lido da mesma forma.
Também alterado em 20 de outubro de 2026 (lojas):
Em GET /v1/shops/{shopId}, advertising.summary.reach30d é o alcance na UE dos últimos 30 dias, somado por data (antes era o total desde o início do monitoramento, agora totalReach), spend30d é esse alcance x 9 / 1000, extra.estimatedSpendUsd é o investimento desde o início do monitoramento e extra.adsLaunched30d soma os anúncios lançados nos últimos 30 dias; todos são nulos para uma loja sem alcance na UE ou no Reino Unido.
Os registros de lojas, as lojas listadas e as estatísticas de e-mails trazem nullReasons, o caminho de um campo associado ao motivo de ele ser nulo: not_shopify (as vendas e os produtos são estimados só para lojas Shopify), no_estimate, not_measured, eu_uk_only, not_linked (sem perfil no TikTok), not_on_tp, no_reviews, none_found.
Uma estimativa de vendas igual a zero junto com unidades vendidas é nula, nos registros, nas listagens e no histórico de vendas, cujo period=week tem um ponto por semana.
traffic.growth30d é uma fração (-0.1543 é -15,4%), e traffic.history começa no primeiro mês com visitas.
catalog.mainCategory vem dos ids de categoria (a mais específica do ramo principal), com catalog.categoryLeaves e productsCountCapped (25.001 é o teto da fonte de dados: 25.000 ou mais).
Uma página do Trustpilot sem nenhuma avaliação tem nota nula.
tiktok.matchedBy é socials ou handle quando os números do TikTok vêm dos perfis sociais da loja ou de um perfil encontrado pelo nome de usuário (uma correspondência, não um vínculo da fonte de dados).
advertising.mainPageActiveAds são os anúncios no ar da página principal (a leitura da visão geral de anúncios dela, como a página principal em linkedAdvertisers a mostra; a contagem das listas de lojas só na falta dela) e linkedAdvertisers[].rank é a posição da página.
As lojas semelhantes deixam de fora a própria loja e os sites dela, e cada página é completada com itens mais abaixo na lista (offset e limit contam a lista sem eles).
Os produtos ordenados por popularidade colocam primeiro os mais vendidos da loja (meta.order).
Os e-mails e as estatísticas de e-mails de uma loja contam todos os tipos de campanha, e os números de 90 dias deles são nulos quando desconhecidos.
Uma ordenação por vendas lista uma linha por loja Shopify (extra.sharedSalesWith), e sortBy=estMonthlySales&order=asc deixa de fora as lojas sem estimativa.
Também alterado em 20 de outubro de 2026 (números das lojas):
Uma ordenação por vendas de GET /v1/shops continua lendo além dos domínios que ela junta em uma linha por loja Shopify (antes parava depois das primeiras linhas), junta também os domínios de uma loja mais abaixo na lista, e o pagination.total dela é nulo até a lista ser lida até o fim; sortBy=estMonthlySales&order=asc começa em uma estimativa de 100 USD (minMonthlySales 100).
Uma estimativa de vendas abaixo de 0,50 USD por unidade vendida é nula (no_estimate), nos registros, nas listagens e no histórico de vendas.
traffic.monthlyVisits é nulo para um site ainda não medido, e traffic.growth30d, quando o mês anterior não teve visitas (not_measured); o growth30d de uma rede social vem do histórico de seguidores quando a fonte de dados dá 0 ou nada, e 0 seguidores é nulo (not_measured).
As lojas listadas dizem por que catalog.productsCount e sales.unitsSold são nulos.
extra.storeWide marca um domínio com 0 visitas que traz as vendas da loja dele (um 0 medido, ou outro domínio da loja, citado em extra.sharedSalesWith, tem as visitas; o Free deixa o nome fora de um registro de loja).
advertising.mainPageActiveAds são os anúncios no ar da página principal, conforme a visão geral de anúncios dela os lê (a contagem das listas de lojas só na falta dela).
As lojas semelhantes também deixam de fora as lojas de marca da loja, e extra.similarIndexed é falso para uma loja que o índice de semelhança não contém.
catalog.mainCategory mantém o rótulo da própria fonte de dados só quando ele é o nome de uma categoria.
Um arquivo de mídia que uma resposta trazia como link e que a fonte de dados não tem mais responde 200 com o corpo vazio e X-Media-Missing: true.
Também alterado em 20 de outubro de 2026 (anunciantes e anúncios da Meta):
O alcance de um anunciante é o alcance na UE e no Reino Unido, nas próprias janelas da busca de anunciantes: advertising.reach30d, extra.reach14d, reach90d e totalReach são nulos para uma página sem anúncios na UE ou no Reino Unido e sem alcance, ou para uma janela que a fonte de dados não contou, e nullReasons diz por quê (eu_uk_only, not_measured); uma página criada dentro de uma janela tem todo o alcance nela (antes eram 0).
Em GET /v1/advertisers/{advertiserId}, o alcance é o que as listas de anunciantes mostram (antes era lido 30 leituras para trás, e as leituras pulam dias), as estimativas de investimento são nulas junto com ele, extra.avgSpendUsd14d é o investimento diário médio de 14 dias, extra.avgActiveAds14d é a média de 14 dias dos anúncios no ar (antes eram os anúncios novos de 14 dias) e, quando a fonte de dados não a calculou, para uma página criada dentro dos 14 dias, ela vem dos anúncios no ar lidos desde o primeiro dia (extra.averagedFrom), senão é nula, e as contagens de anúncios novos de uma página criada dentro da janela contam todos os anúncios dela.
advertising.countryDistribution é a parcela dos anúncios no ar que segmentam cada país (um anúncio segmenta vários), extra.reachCountries traz a parcela de cada país no alcance na UE, extra.platforms.meta traz os anúncios da própria página (antes trazia os da página principal da loja), uma contagem do TikTok ou do Google sem número fica de fora, extra.mainLandingPages recorre à prévia das páginas de destino de uma página nova, e os lastAds de uma página cujos anúncios a busca de anúncios ainda não incorporou são os mais recentes que a linha de anunciante dela lista, com meta.indexing, como em GET /v1/advertisers/{advertiser_id}/ads (com meta.liveAds).
Novo: GET /v1/advertisers/{advertiserId}/history, os anúncios no ar da página e o alcance na UE que ela ganhou, dia a dia.
Uma contagem de seguidores do Instagram igual a 0 é nula (a fonte de dados escreve 0 para uma página sem nenhuma conta que ela conheça).
O metrics.reach de um anúncio da Meta e o investimento dele são nulos para um anúncio não exibido na UE nem no Reino Unido (eu_uk_only; antes eram 0 ou nulos) e para um anúncio da UE cujo alcance ainda não foi contado (not_measured; antes era 0), com as linhas de mídia dizendo o motivo em nullReasons.reach; media.type é carousel para um anúncio com mais de uma imagem ou vídeo, e extra.startIsFloor marca um anúncio iniciado em 1º de janeiro de 2018, o primeiro dia das datas de anúncios da Meta da fonte de dados.
sortBy=adRank lista primeiro a melhor posição (1), seja qual for a ordem.
Um único anúncio (GET /v1/ads/{adId}) usa o alcance mais recente que a fonte de dados informa e o investimento correspondente, conta as variações de alcance por data enquanto o histórico de alcance está atualizado (senão elas são nulas), lista as imagens e os vídeos como a linha de busca dele faz, preenche advertiser.reach30d e pageAnalytics.instagramFollowersHistory, acrescenta pageAnalytics.reachHistory (a mesma série de impressionsHistory) e nomeia uma loja que o registro traz só pelo id (com o traffic nulo e nullReasonsshops.traffic quando o site não é medido); os audience.gender, ageMin, ageMax e metrics.aggregatedReach dele são sempre nulos, já que a fonte de dados não os informa para um único anúncio.
Em uma busca de anunciantes, sortBy=reach ordena pelo alcance total desde o início do monitoramento, e newAds, pelos anúncios novos de 14 dias.
A segmentação de um anúncio da Meta diz por que o alcance dele é nulo: eu_uk_only só para um anúncio que não segmenta nenhum país da UE nem o Reino Unido; um que segmenta algum, ou cuja segmentação ainda não é conhecida, é not_measured nos primeiros 7 dias e not_reported depois (antes eram eu_uk_only), nas listagens de anúncios, nas linhas de mídia e em um único anúncio.
Um único anúncio lê os históricos de alcance e de investimento como uma só série, com uma leitura por dia (as variações também), e usa a última leitura e o investimento dessa série quando o alcance do registro é mais que o dobro dela e a série vai até o último dia do anúncio; o media dele recorre ao primeiro arquivo listado, e advertiser.totalReach, ao alcance na UE dos detalhes da página.
Um registro de anunciante cuja linha não lê nenhum alcance, ao lado de detalhes da página que leem algum, fica com o alcance deles (extra.totalReach, o investimento correspondente, advertising.reach30d calculado sobre ele), as parcelas de extra.reachCountries dele nunca são arredondadas para 0, extra.averagedFrom nunca é anterior ao dia em que a página foi criada, e o histórico diário dele (extra.history, GET /v1/advertisers/{advertiserId}/history) deixa de fora as leituras que a fonte de dados perdeu (uma sequência de zeros de 14 dias ou menos entre leituras acima de 0).
Um único anúncio que usa a leitura da série guarda o alcance do registro em extra.recordReach (o número que as listagens de anúncios mostram); em uma busca de anunciantes, uma linha que não lê nenhum alcance na UE, ao lado de detalhes da página que leem algum, fica com o alcance deles, como o registro dela; e GET /v1/advertisers/{advertiserId}/history mantém as leituras iguais a 0 de uma página sem nenhum anúncio na UE agora que ganhou alcance antes dos dias pedidos (ela não ganhou nenhum; antes eram deixadas de fora como not_measured).
No Free, um anúncio cujo alcance é desconhecido diz o motivo, como nos planos pagos; só um alcance que o plano deixa de fora não tem motivo.
Também alterado em 20 de outubro de 2026 (estimativas de investimento):
Um investimento estimado abaixo de 10 USD mantém duas casas decimais: um alcance de 140 a 9 USD por 1.000 pessoas alcançadas dá 1,26 (antes era 1), e uma média diária mantém os próprios centavos; a partir de 10 USD, uma estimativa de investimento fica em dólares inteiros (um alcance de 2.000 dá 18).
Isso vale para extra.estimatedSpendUsd e extra.avgSpendUsd14d do registro de anunciante, advertising.summary.spend30d e extra.estimatedSpendUsd de uma loja, metrics.estimatedSpend de um anúncio da Meta e statistics.euData.estimatedSpend30d de uma marca monitorada e o estimatedSpend de cada ponto de /time-series (os dois tinham duas casas decimais em qualquer valor), tanto na API quanto nas ferramentas MCP. Quando o número da própria fonte de dados é essa estimativa em dólares inteiros, ele mantém os centavos da mesma forma.
Também alterado em 20 de outubro de 2026 (alcance dos anunciantes e histórico diário):
GET /v1/advertisers/{advertiserId} acrescenta extra.reachScope: outside_eu_uk para uma página cujo alcance por país foi visto, em sua maior parte, fora da UE e do Reino Unido (a fonte de dados também informa o alcance de alguns anúncios exibidos em outros lugares; o alcance dela e as estimativas feitas a partir dele são então esse alcance, não o alcance na UE), senão eu_uk. O extra.avgSpendUsd14d de uma página criada dentro dos 14 dias é o investimento dela dividido pelos dias inteiros desde a criação (pelo menos um; antes era o alcance de 14 dias dividido por 14 dias quando a linha de anunciante tinha um).
O extra.history do registro de anunciante e GET /v1/advertisers/{advertiserId}/history começam no dia em que a página foi criada; extra.history.newAds deixa de fora os 0 dos dias que a fonte de dados perdeu, extra.followersHistory e as curtidas e os seguidores de pageAnalytics de um anúncio deixam de fora um 0 entre duas leituras acima de 0 ou de um desses dias, e as estimativas diárias de investimento mantêm duas casas decimais abaixo de 10 USD.
Uma página cujos anúncios no ar ainda não estão em nenhuma lista tem meta.indexing no registro e uma primeira página vazia de GET /v1/advertisers/{advertiser_id}/ads com meta.indexing e meta.liveAds.
Um único anúncio (GET /v1/ads/{adId}): extra.spendHistory começa no dia em que o anúncio começou, cada spendUsd com duas casas decimais abaixo de 10 USD; advertiser.totalReach nunca fica abaixo da última leitura de pageAnalytics.reachHistory (extra.pageRecordReach traz então o total do registro, o que as listas de anunciantes mostram); extra.recordSpend é o investimento de extra.recordReach; extra.reachScope e extra.pageReachScope dizem onde foi vista a maior parte do alcance do anúncio e do alcance da página dele.
Também alterado em 20 de outubro de 2026 (monitores de marcas):
Em GET /v1/brandtrackers e GET /v1/brandtrackers/{id}, um 0 em advertising.newAdsLastDay ao lado de lançamentos nos últimos 7 dias é conferido com os lançamentos da loja de ontem: a contagem deles, ou nulo (not_measured) sem leitura desse dia; uma listagem confere no máximo 20 marcas por chamada, as da página pedida.
Em /top-ads e /v1/workspace/top-ads, metrics.totalReach é o alcance do anúncio na UE: nulo para um anúncio exibido fora da UE e do Reino Unido (eu_uk_only) ou para um anúncio da UE ainda não contado (not_measured), com nullReasons, e por último em uma ordenação por alcance (antes era 0).
/testing calcula as estatísticas de alcance sobre os anúncios cujo alcance é conhecido, com nullReasonsstats.reach para um lote sem nenhum.
Em /hooks, /transcripts, /landing-pages e nos ganchos e páginas de destino do espaço de trabalho, um totalImpressions igual a 0 é nulo com o novo motivo no_eu_reach (nenhum alcance na UE ou no Reino Unido contado para os anúncios; not_measured com euOnly), por último na ordenação.
Em /ad-rank, /scaling-ads e /v1/workspace/scaling-ads, quando o histórico de posições de um anúncio começa dentro de uma janela de 14 ou 30 dias, metrics.previousRank e rankDelta contam a partir da leitura mais antiga dele ali: metrics.since é esse dia e meta.windowNote informa isso, e um número que não pode ser dado é nulo com nullReasons.
Em /partners, isOwnPage é verdadeiro para a página principal da loja, as páginas oficiais dela com nome parecido com o da marca e uma página com o mesmo nome da marca (criadores também podem ser classificados como oficiais), e um alcance ou investimento nulo tem nullReasons.
A primeira página de /ads com adCopyHashes tem meta.latestAdDate e dataFreshnessLagDays e, com status=active, meta.stoppedCount.
/demography é o público na UE e no Reino Unido, e um país abaixo de um décimo de milésimo do primeiro passa de countryDistribution para otherCountries.
/ad-copy-evolution e /headline-evolution têm um ponto para cada dia registrado (0 quando o texto não foi usado, nulo em um dia cortado nos textos que guarda), classificam os textos pelo dia mais recente e deixam de fora os dias que a fonte de dados leu errado (anúncios no ar abaixo de um décimo dos dias ao redor, um dia ou 2 ou 3 seguidos, ou muito menos textos que os dias dos dois lados), como diz meta.periodNote; meta.recordedDays conta os dias. Os anúncios no ar semanais e mensais de /time-series também deixam de fora 2 ou 3 leituras desse tipo seguidas.
Também alterado em 20 de outubro de 2026 (relatórios do monitor de marcas, consulta e alcance do Google):
Em /ad-rank, /scaling-ads e /v1/workspace/scaling-ads, todas as posições de uma linha vêm do histórico de posições do anúncio: metrics.currentRank é a leitura do dia em que a posição da biblioteca de anúncios foi lida (a posição que /top-ads mostra; a biblioteca pode estar um dia atrás do histórico), senão a leitura mais recente, a trajectory termina nesse dia e, sem leitura no dia em que a janela começa, vale a leitura mais antiga dentro dela (a variação da própria fonte de dados na janela não é mais usada).
Os 50 primeiros anúncios da biblioteca de anúncios (10 por marca, entre várias marcas) são classificados de novo por esses números: um anúncio que, por eles, ganhou menos que minRankDelta ou fica abaixo de maxCurrentRank é deixado de fora (um anúncio cujo histórico de posições não mostra ganho, pela contagem da própria biblioteca de anúncios), pagination cobre os anúncios mantidos e meta.rankNote diz o que foi lido e deixado de fora, também entre marcas.
Um /time-series diário (e o graph da visão geral) é nulo em um dia cujos anúncios no ar a fonte de dados leu errado (abaixo de um décimo dos dias dos dois lados; o dia mais recente fica como foi lido, também nas evoluções de texto), assim como os lançamentos desse dia, e também os lançamentos do dia seguinte quando são quase todos os anúncios no ar dele; semanas e meses deixam esses lançamentos de fora, e leftOut lista os dias. /landing-page-evolution deixa esses dias de fora de todas as páginas, e também a leitura própria de uma página abaixo de um décimo das leituras dos dois lados, como diz o meta.periodNote dela, com o dia até onde o histórico chega quando ele está atrasado.
Um lote de /testing sem alcance contado tem nullReasonsstats.reachno_eu_reach, a menos que um dos anúncios dele ainda não tenha sido contado (not_measured) ou que todos tenham sido exibidos fora da UE e do Reino Unido (eu_uk_only); o alcance e o investimento ausentes de uma linha de /partners são not_measured só nos 7 dias após o launchDate dela, e no_eu_reach depois.
/creatives chama de carousel um anúncio com várias imagens ou vídeos (antes era unknown).
Em GET /v1/lookup, o signals.monthlyVisits de uma loja é nulo para um site ainda não medido (nullReasonsnot_measured; antes era 0), os anúncios no ar da linha da loja exata (com qualquer type, inclusive shop) são os da página principal dela, conforme a visão geral de anúncios os lê, o mainPageActiveAds dela, e as linhas das próprias páginas da loja leem os delas da mesma forma; o signals.monthlyVisits de uma marca monitorada (e o totalTraffic dela em GET /v1/brandtrackers) é nulo para um site ainda não medido e diz por que está ausente (not_measured, ou no_shop para uma página sem loja), e no Free o alcance de uma página que nenhum plano tem mantém o motivo (eu_uk_only, not_measured), também nas listas de anunciantes.
Um reach.value nulo de um anúncio do Google tem nullReasons (not_reported, eu_only), exceto quando é um alcance que o plano deixa de fora.
Em GET /v1/shops/{shopId}, advertising.mainPageActiveAds são os anúncios no ar da página principal, conforme a visão geral de anúncios dela os lê, a contagem que a página principal em linkedAdvertisers mostra (antes era a contagem do índice de lojas, que pode ser um dia mais antiga).
Também alterado em 20 de outubro de 2026 (TikTok e e-mails):
O metrics.engagementRate de uma linha do TikTok é (curtidas + comentários + compartilhamentos + salvamentos) / visualizações como fração (0.0513 é 5,13%; as buscas enviavam uma porcentagem, e GET /v1/tiktok/library/{itemId}, outra métrica), e daysRunning são os dias desde a publicação do post, nos dois casos.
metrics.rank é a posição do post entre os posts do criador (1 é a melhor).
profile.followers é nulo quando a fonte de dados não os contou (ela enviava 0), content.category é nulo para a categoria genérica All dela, e content.hashtags são as tags do post, uma vez cada, escritas como na descrição e sem a pontuação depois delas (as de um registro são a lista da fonte de dados; as de uma linha de busca, as da descrição).
Um registro do TikTok acrescenta profile.adsCount, organicCount e avgPostsPerWeek90d, preenche profile.pageCreation e tem links nulos para uma linha da fonte de dados sem nenhum TikTok por trás (um id com menos de 15 dígitos, ou publicado antes de 31 de agosto de 2016, às 22:00 UTC).
sortBy=longestRunning começa nos primeiros TikToks (31 de agosto de 2016, às 22:00 UTC).
Um registro de e-mail cita o tipo de promoção, a categoria e o evento, e as visitas mensais, os anúncios no ar, os produtos e os números de 90 dias da loja dele são os que as listas de e-mails mostram, assim como os números last90Days das estatísticas de e-mails.
Uma linha de e-mail deixa de fora extra.shopActiveAds quando ele é 0 sem total de anúncios (os nullReasons dela dizem not_measured), e o shop.marketing.activeAds de um registro de e-mail fica então nulo; quando os números da loja não puderam ser lidos, o registro tem meta.partial, um aviso e nullReasonsfailed para eles.
Na ferramenta MCP analyze_shop_emails, dominant classifica tipos de campanha, categorias, tipos de promoção e eventos, cada um separadamente, e deixa de fora No Promotion e No Event.
Alterado em 21 de outubro de 2026:
O metrics.views de um item do TikTok, e os likes e saves dele que mostram 0 ao lado, são nulos com nullReasonsnot_measured (assim como engagementRate) quando a fonte de dados enviou 0 visualizações junto com curtidas, comentários, compartilhamentos ou salvamentos acima de 0, nas buscas e em GET /v1/tiktok/library/{itemId}; sortBy=views ou likes com order=asc lista os posts com as visualizações contadas (minViews 1).
Uma busca de anúncios da Meta com websiteIds lista os próprios anúncios das lojas: todos os anúncios da página principal de uma loja e das páginas oficiais dela com nome parecido, e os anúncios das outras páginas dela (criadores, publishers e parceiros que veicularam os anúncios dela) que levam à loja ou a um site no domínio dela; até a lista ser lida até o fim, o pagination.total da busca são então os anúncios das próprias páginas da loja pesquisadas, uma estimativa (pagination.totalEstimated verdadeiro), ou nulo quando a busca não cita nenhuma das próprias páginas dela.
Com sortBy=longestRunning, cada lote de anúncios lido da fonte de dados é colocado em ordem de daysRunning.
Em GET /v1/shops/{shopId}, advertising.activeAds conta os anúncios no ar das próprias páginas da loja (linkedAdvertisers[].isOwnPage), e no /products dela um mais vendido classificado tem o título, o preço e a imagem de catalog.bestSellers (o preço de um mais vendido pode ser o menor entre os das variantes dele).
O traffic.monthlyVisits de uma loja (e o growth30d) é nulo com not_measured quando mostra 0 porque o histórico dela caiu para 0 ao lado de uma estimativa de vendas acima de 0 e de unidades vendidas, nos registros, nas lojas listadas e semelhantes e na consulta; um domínio assim continua sendo extra.storeWide.
Em GET /v1/ads/{adId}, advertiser.totalReach é a última leitura de pageAnalytics.reachHistory enquanto essa leitura tem no máximo 2 dias (extra.pageRecordReach traz então o total do registro), extra.advertiserTotalAds é preenchido a partir dos números listados da página (not_measured na falta deles), os ganhos de alcance de 7 e de 30 dias de um anúncio iniciado dentro da janela são todo o alcance dele, e um ganho menor que o de um período com menos dias é nulo (not_measured).
O statistics.ctaCount de uma marca monitorada nomeia cada chamada para ação como content.callToAction faz («Shop now»).
Também alterado em 21 de outubro de 2026 (lojas):
Em GET /v1/shops/{shopId}, advertising.history são os anúncios no ar da página principal por dia em todos os planos (no Free, contava os de todas as páginas), e a documentação diz que o alcance e o investimento de advertising.summary, extra.adsLaunched30d, extra.totalAds e extra.estimatedSpendUsd cobrem todas as páginas da loja, enquanto advertising.activeAds conta as próprias páginas dela.
Um catalog.productsCount igual a 0 de uma loja sem nenhum produto listado, ao lado de visitas, de uma estimativa de vendas ou de unidades vendidas, é nulo com not_measured, nos registros, nas lojas listadas e no meta.productsCount de GET /v1/shops/{shopId}/products; sortBy=productsCount deixa essas lojas de fora e, com order=asc, envia minProductsCount 1, a menos que seja dado um mínimo de produtos.
Uma busca de anúncios da Meta de uma loja restrita a páginas que não são dela (trackedPages) e que termina antes diz o motivo em meta.warnings, sem pedir para restringi-la.
GET /v1/filters/shops informa em meta.warnings quando a fonte de dados não lista nenhum valor, e cita as listas que os fornecem.
Também alterado em 21 de outubro de 2026 (paginação, e-mails e listas de anúncios):
Paginar uma busca de anunciantes não falha mais quando a fonte de dados não a continua (antes respondia 503, e tentar de novo não ajudava): os 100 primeiros resultados são lidos em uma chamada, e a página que chega ao fim do que pode ser lido responde hasMore falso, com meta.partial verdadeiro e um aviso que diz até onde a busca lê.
Uma página que começa depois do total exato de uma busca fica vazia, com hasMore falso.
Uma busca do TikTok ordenada por views ou likes com order=asc começa nos primeiros TikToks (31 de agosto de 2016, às 22:00 UTC), como longestRunning, e o metrics.views de um item do TikTok (e o engagementRate) é nulo com not_measured quando mostra menos visualizações que curtidas.
O content.bodyPreview e o bodyLength de um e-mail, e o content.body de um registro, são nulos com not_measured quando a fonte de dados enviou o marcador dela para um corpo que ainda não leu.
As datas e horas que a fonte de dados dá em UTC são escritas de um único jeito, tanto nas listas quanto nos registros, com +00:00 e sem zeros à direita na fração de segundo (2026-09-30T00:20:11.507+00:00; os horários em que os seus próprios quadros, favoritos, monitores de marcas e links de compartilhamento foram criados ou alterados terminam em Z, como antes), e as linhas de e-mail trazem os ids da categoria, do tipo de promoção e do evento, como o registro do e-mail.
Toda lista paginada responde pagination.hasMore, e GET /v1/google-ads/facets/countries responde um objeto pagination.
Um corpo de requisição que não é um JSON válido responde 400 validation_failed com a mensagem «The request body is not valid JSON.» e details.position, o caractere em que ele se interrompe.
Nas listas de anúncios da Meta, o alcance de uma linha é a leitura do índice de anúncios, que pode estar um dia atrás do registro do anúncio, e os ganhos de alcance dela são nulos ao lado de um alcance conhecido quando a fonte de dados não lista nenhum (not_measured), exceto em uma janela em que o anúncio começou, na qual ele ganhou todo o alcance que a linha mostra; em GET /v1/ads/{adId}, um ganho nulo ao lado de um alcance conhecido também tem not_measured.
Alterado em 22 de outubro de 2026 (o plano Free):
A API e o servidor MCP passaram para os planos pagos: uma chave de uma conta no plano Free respondia 403 plan_not_eligible em todos os endpoints, exceto GET /v1/account, com details.upgradeUrl, e nada era contabilizado. Não era possível criar uma chave no Free.
O plano Free mudou desde então: O plano Free diz o que ele inclui agora.
Uma chave criada em um plano pago é mantida e volta a funcionar assim que a conta volta para um plano pago. Os links de compartilhamento criados por uma conta no Free são pausados da mesma forma.
Também alterado em 22 de outubro de 2026 (relatórios e registros de lojas):
Em GET /v1/shops/{shopId}/ad-ranking/series, rankDelta é a posição final menos a inicial (negativo quando o anúncio subiu, como em todos os anúncios; antes eram as posições ganhas) e improvementPercent agora é improvementPct, uma fração; cada linha de /ad-ranking traz os mesmos dois números na janela do ranking em rank.
No /activity/calendar de uma marca monitorada, em um dia do calendário e em /activity/calendar/days, meta.partial é verdadeiro ou falso, meta.partialSources cita as fontes lidas em parte (em /calendar e em um dia), e os horários das prévias estão em UTC, inclusive os de um post do TikTok.
Em GET /v1/shops/{shopId}/landing-pages/detail, activeAds recorre aos anúncios da página, shareOfAds é linkedAdsTotal sobre shopActiveAds, snapshots conta os dias em que a página foi capturada, lifetimeAds e impressions deixaram de existir (as impressões eram o alcance de novo), um alcance igual a 0 é nulo com nullReasons.reachno_eu_reach, e linkedAds têm os campos das linhas de uma busca de anúncios.
O /feed de uma loja lista os próprios anúncios da Meta dela, como as buscas de anúncios dela.
GET /v1/market/q4-overview aceita quaisquer from e to dentro da temporada.
Em /q4-season, winners lista a chave de cada liquidação com os criativos dela, e as URLs das páginas de destino trazem o esquema.
Os detectores da Shopify leem uma loja no domínio dela sem www..
GET /v1/advertisers/{advertiserId} e as páginas de destino, o público e o mix de mídia de uma marca monitorada repetem um dia passado em meta.snapshotDate.
Quando as estatísticas de anúncios da Meta de uma loja não podem ser lidas naquele momento, GET /v1/shops/{shopId} responde meta.partial verdadeiro com um aviso: o alcance, as estimativas de investimento feitas a partir dele e o mix de mídia e de formatos ficam nulos com nullReasonsfailed, os anúncios por país são contados como a linha de busca dela os dá, e a resposta não é guardada, então a próxima chamada os lê de novo (o briefing de concorrente traz o mesmo meta.partial e os mesmos avisos).
Uma página de destino no próprio domínio da loja, ou em um subdomínio dele, é toShop verdadeiro em /v1/shops/{shopId}/advertisers e /advertisers/{advertiserId}/landing-pages; quando os domínios da loja deixam esse domínio de fora, meta.domains o lista primeiro a partir das páginas de destino das páginas dela (fromLandingPages verdadeiro, um limite inferior), e o shopAds de uma página nunca é menor que os anúncios no ar das páginas de destino dela na loja (shopAdsAtLeast verdadeiro quando é elevado).
Em GET /v1/tiktok/library/{itemId}, profile.latestPosts[].mediaUrl é o vídeo do post, ou nulo com nullReasonsnot_reported (antes era a imagem de capa).
Uma busca de anunciantes lê os 100 primeiros resultados e informa que termina na página que chega ao 100º (hasMore falso e o aviso), não na página vazia depois dela.
Uma busca do TikTok ordenada por views ou likes com order=asc agora deixa de fora os posts cujas visualizações não são contadas (menos visualizações que curtidas), e o pagination.total dela é uma estimativa (totalEstimated) até a lista ser lida até o fim; todas as outras ordens os listam, com as visualizações nulas.
Também alterado em 22 de outubro de 2026 (itens salvos e ganchos de anúncios):
Novo: GET /v1/boards/search encontra o que você salvou, em todos os quadros e nos seus favoritos, pelas palavras do que cada cópia salva mostra (todas as palavras precisam aparecer, em qualquer ordem; maiúsculas, minúsculas e acentos são ignorados), pelo id ou pelo nome do quadro, e aceita sourceType, boardId, savedFrom e savedTo; ele lê só os seus itens salvos, nunca a fonte de dados (MCP find_saved_items).
Novo: POST /v1/tools/ad-hooks escreve três frases curtas de abertura para um anúncio do seu produto, e GET /v1/tools/ad-hooks informa a sua cota: sem limite mensal nos planos pagos e com um limite por minuto (429 com Retry-After); ler a cota não é contabilizado (MCP write_ad_hooks).
O servidor MCP tem 64 ferramentas.
Também alterado em 23 de outubro de 2026 (visualizações salvas e filtros de lojas):
Novo: GET /v1/views lista as buscas que você salvou nas páginas de lista do site, cada uma com a busca que ela faz (request: a busca, searchType, sortBy, order e os filtros nomeados, como os endpoints de busca os aceitam); POST /v1/views salva uma, PATCH /v1/views/{viewId} renomeia, move ou altera uma e DELETE /v1/views/{viewId} remove uma. Eles leem e gravam só as suas próprias visualizações, nunca a fonte de dados (MCP list_saved_views).
As buscas de lojas aceitam excludeCurrencies (códigos de moeda como EUR), socialNetworks (instagram ou tiktok: uma loja com qualquer um deles) e shopifyPlan (headless). trafficGrowth também lê 90 dias (min90, max90), e adsGrowth, 7 dias (min7, max7), ou o period de uma regra (last90d, last7d); min e max continuam sendo os últimos 30 dias.
O servidor MCP tem 65 ferramentas.
Também alterado em 23 de outubro de 2026 (links de produtos):
Em GET /v1/shops/{shopId}, cada item de catalog.bestSellers traz handle e productUrl, a página do produto no próprio site da loja: o endereço que a fonte de dados dá quando ele está no domínio da loja (ou em um subdomínio dele) ou no domínio myshopify dela, senão https://<domain>/products/<handle> quando o handle é conhecido, senão nulo.
Em GET /v1/shops/{shopId}/products, productUrl segue a mesma regra, então um endereço em outro site não é mais informado, e handle é nulo quando não é uma parte única de um endereço.
Também alterado em 23 de outubro de 2026 (linhas de lojas, lojas semelhantes e produtos):
O createdAt de uma loja (o registro da loja, as linhas de lojas e as lojas semelhantes) é só a data de criação de uma loja Shopify. Para um site fora da Shopify, a fonte de dados dá o dia em que começou a monitorar o site, não a criação dele: createdAt agora é nulo (nullReasonstracking_date) e esse dia é o novo trackedSince. Uma data em 1º de janeiro de 2000 ou antes é o marcador da fonte de dados e é nula (not_reported).
Os catalog.bestSellers das linhas de lojas trazem handle, productUrl (com a regra do registro da loja) e rank (1 é o mais vendido), e as linhas trazem profile.isHeadless e catalog.myShopifyDomain, como o registro da loja.
O googleAds.reach.value de uma linha de loja é nulo: as linhas de lojas não trazem alcance do Google, que fica no registro da loja (extra.googleAds.reach).
As lojas semelhantes (GET /v1/shops/{shopId}/similar, o similarShops do registro) mantêm o extra delas (logo, Trustpilot, histórico de vendas). Uma lista de semelhantes que a fonte de dados interrompe antes do fim responde meta.partial e um aviso na página que chega a esse ponto.
Em GET /v1/shops/{shopId}/products, createdAt e publishedAt eram o relógio da própria loja enviado como UTC (8 horas mais cedo para uma loja no horário do Pacífico dos EUA). Agora estão em UTC, com o novo updatedAt, a partir da diferença da loja em relação ao UTC (meta.shopUtcOffset, como -08:00). Quando nenhuma diferença pode ser lida, os três são nulos (local_time) e createdAtLocal, publishedAtLocal e updatedAtLocal dão o relógio da loja, sem fuso horário.
Um produto listado só entre os mais vendidos dos detalhes da loja tem publishedAt e updatedAt nulos (not_reported): os da fonte de dados eram cópias do horário de criação dele.
Cada produto diz em quais listas está (lists: bestSellers, newest) e a posição dele entre os mais vendidos (listPosition, de 1 a 100).
Também alterado em 23 de outubro de 2026 (registros de lojas):
Em GET /v1/shops/{shopId}, extra.googleAds.reach.value era sempre nulo: agora é o alcance do Google na UE da loja, com lowerBound e upperBound, e extra.googleAds acrescenta reachHistory, history (os anúncios do Google dela marcados como ativos por semana), updatedAt e latestAds.
O growth30d de uma rede social agora é a variação de 30 dias da visão geral de seguidores (para algumas páginas do Facebook, era outra janela: 0.3636 quando a variação era 0.2898). GET /v1/shops/{shopId}/socials também o dá como growth30d.
O perfil da loja no X é socials.x. socials.twitter foi renomeado para socials.x e continua, como o mesmo objeto, por mais uma versão. Cada rede tem url, e socials.others lista os outros links da loja.
tiktok.profileMetrics.percentAds é uma porcentagem (de 0 a 100); o novo adsShare é o mesmo valor como fração. tiktok acrescenta avatarUrl, history, postsChange30d, postsChange30dPct e latestAds, e tiktok.activity.avgActiveAds7d e avgActiveAds30d, antes nulos, fazem a média diária dos anúncios do TikTok dela.
Novo nos planos pagos: advertising.summary.firstAdSeenAt, longestRunningDays, medianRunningDays, landingPagesCount e as variações de 30 dias dos anúncios no ar, dos anúncios lançados e do alcance na UE (activeAdsChange30d, launchedChange30d, reachChange30d, cada uma também como fração, …Pct), e advertising.runningDaysMix, reachCountries, reachHistory, topLandingPages, adsByAgeRange e adsByGender. Em todos os planos: advertising.allPagesHistory e advertising.topCountries[].ads.
Novo: catalog.bestSellers[].rank, sales.hasSubscription, technology.apps[].appStoreUrl e categories, profile.isHeadless, extra.updatedAt, e o createdAt e o trackedSince das datas de loja descritas acima.
GET /v1/shops/{shopId}/advertisers acrescenta o logoUrl e o moreLandingPages de cada página, um profileUrl quando a visão geral de anúncios não tem nenhum, e o landingPagesCount e o moreLandingPages de cada domínio.
Também alterado em 23 de outubro de 2026 (produtos):
Novo: GET /v1/products e POST /v1/products/query pesquisam e navegam pelos produtos das lojas, cada um com preço, estimativas de vendas, unidades vendidas, avaliações, posição entre os mais vendidos, anúncios da Meta, alcance e investimento na UE, países de venda, data de lançamento e loja, ordenados por relevance, newest (a data de lançamento), activeAds ou spend (investimento em anúncios na UE nos últimos 30 dias) (MCP search_products). searchType compara o texto com o nome do produto ou com o domínio da loja dele, e os filtros nomeados limitam o preço em USD, os anúncios ativos, a participação dos anúncios, o número de avaliações e o dia de lançamento, e aceitam moedas e assinatura; GET /v1/filters/products lista as moedas que eles aceitam.
shop (o domínio ou o id de uma loja) lista só os produtos dessa loja, sem texto de busca ao lado, na busca de produtos e em search_products. Os quadros salvam produtos (sourceTypeproduct) como uma busca os mostrou pela última vez, e a busca em tudo o que foi salvo os encontra pelo título e pela loja.
O servidor MCP tem 73 ferramentas.
Também alterado em 23 de outubro de 2026 (filtros de produtos):
A busca de produtos aceita mais filtros nomeados: a estimativa de vendas de um mês ou de um dia (minEstMonthlySales, minEstDailySales e os máximos correspondentes; o limite de um dia equivale a 30 dias dele), unidades vendidas por mês ou por dia (minUnitsSoldMonthly, minUnitsSoldDaily), sellingCountries (um produto que vende para qualquer um deles), shopCountries, a nota das avaliações (minRating, maxRating), minAdsLaunched (anúncios da Meta lançados nos últimos 30 dias), minSpendShare, minEuReach (o alcance na UE em 30 dias), hasPartnershipAds, promoTypes (percent-off) e minShopProductsCount, cada um com o máximo correspondente quando existe; GET /v1/filters/products também lista os países das lojas.
sortBy aceita estSales (a estimativa de vendas), adPressure (a participação dos anúncios) e bestSelling (a posição entre os mais vendidos da loja, posição 1 primeiro), e searchType aceita productDescription e url.
Cada produto tem os anúncios mais recentes (advertising.latestAds, com as imagens em advertising.previewUrls) e as semanas dele (weeks: anúncios no ar, participação dos anúncios, investimento e alcance na UE por dia), e bestSeller.rankPercent é a posição dele como porcentagem dos produtos da loja (quanto menor, melhor).
Alterado em 24 de outubro de 2026 (parâmetros, leituras com falha e páginas profundas):
Um parâmetro de consulta que uma rota não lê é recusado com 400 validation_failed, cuja mensagem o cita e lista os parâmetros que a rota aceita, quando antes era descartado sem aviso (um nome digitado errado, ou um filtro enviado a uma rota que não tem nenhum, respondia como se nunca tivesse sido enviado). As buscas recusam um filtro nomeado desconhecido, como antes. Um parâmetro simples (country, mediaType, active, type) que define, com outro valor, um filtro que um filtro nomeado também define é recusado também.
Monitores de marcas: /ads e /timeline/metadata recusam um snapshotDate passado (eles leem a biblioteca de anúncios como ela está agora), /partnership-ads recusa um sortBy desconhecido, /v1/workspace/scaling-ads, um period desconhecido, e as listas de monitores, um hasNewAdsSince de mais de 30 dias atrás (os contadores de anúncios novos cobrem 30 dias). /v1/workspace/hooks, /ad-copies e /landing-pages leem as linhas de cada marca no sortBy e na order pedidos antes de juntá-las. Os relatórios entre marcas do site enviam euOnly só para os relatórios que o leem.
As lojas semelhantes recusam displayInTrending em filters (a lista não tem a marcação do índice de lojas) e leem os limites de crescimento como porcentagens, como uma busca de lojas; um offset além do que uma requisição consegue ler (600 lojas além das já lidas) é recusado com um 400 que diz até onde é possível ir, e uma página em que a leitura parou tem meta.partial com um aviso. A biblioteca do TikTok de uma loja recusa filtros de perfil e de site (o próprio escopo da loja ocupa o lugar deles).
Uma parte de uma resposta que a fonte de dados não conseguiu ler desta vez define meta.partial com um aviso (e a resposta não vai para o cache), nunca uma lacuna silenciosa ou uma lista vazia; uma resposta da fonte de dados que não é JSON é um 503 upstream_error, e uma loja salva, um novo monitor ou uma lista de opções de e-mail cuja leitura falha responde o erro, nunca not_found. Uma página mais profunda do que uma leitura alcança, em uma lista que deixa linhas de fora, tem meta.partial e hasMore verdadeiros, e os textos de anúncios, os parceiros e os testes de criativos de uma marca informam com meta.partial quando uma leitura não cobre a marca.
GET /v1/google-ads/facets/networks aceita search, limit e offset, como as outras listas de opções. O metric de /v1/shops/compare é obrigatório (a referência dizia opcional).
MCP: uma ferramenta recusa um argumento que o tipo escolhido não lê (shop_report, lookup_filter_ids, market_overview, scan_advertiser) e argumentos que se contradizem (trend_signal com sort_by, active_only com status, um argumento nomeado com filters); creative_inspiration_pack classifica juntos os anúncios de todas as palavras-chave.
Também alterado em 24 de outubro de 2026 (busca por imagem):
Novo: POST /v1/products/image-search encontra os produtos das lojas que se parecem com uma imagem, cada um com a loja, os mais próximos primeiro. Envie a imagem como multipart/form-data: um arquivo PNG, JPG ou WEBP de no máximo 10 MB (image), ou uma URL direta da imagem (imageUrl), que nós mesmos baixamos. Cada linha é uma linha de produto como a busca de produtos a retorna, com similarity (de 0.7 a 1) e matchOnly (uma correspondência da qual o índice de produtos não tem registro: só o título, a imagem, o preço, a data de lançamento e a loja).
A busca aceita os filtros nomeados da busca de produtos, sortBy (relevance, estSales, activeAds, adPressure, newest, spend, spend14d) e maxPerShop (as 1, 3, 5, 10 ou 20 correspondências mais próximas de cada loja), em páginas de até 32. GET /v1/products/image-search/{searchId} lê as outras páginas, ordenações, filtros e resultados por loja sem enviar a imagem de novo, e GET /v1/products/image-search/history lista as suas próprias buscas por imagem recentes.
A imagem é regravada antes da busca, como um JPEG sem os metadados (EXIF, localização, comentários), e uma URL de imagem nunca sai dos nossos servidores. Novos erros: 400 invalid_image, 400 unsupported_url e 422 unreadable_image.
No plano Free, a busca por imagem é ordenada por relevância, sem filtros. O servidor MCP tem 67 ferramentas: search_products_by_image é nova.
Alterado em 25 de outubro de 2026 (créditos):
A API e o servidor MCP são medidos em créditos, e não em requisições: 1 crédito = 1 resultado retornado: os detalhes de uma marca, um anúncio ou uma linha de uma lista. Um resultado vazio é gratuito. Uma chamada custa os resultados que retorna, e a cota mensal dos planos é em créditos.
As respostas medidas enviam X-Usage-Cost, X-Credits-Used, X-Credits-Remaining e X-Credits-Source; GET /v1/usage informa os créditos de recarga em credits.topup.balance.
402 insufficient_credits aparece quando os créditos do mês e os créditos de recarga se esgotam, com details.upgradeUrl e details.topUpUrl.
O limite de requisições é compartilhado por todo o espaço de trabalho.
Os links de compartilhamento (shareUrl) abrem uma página web em https://sellwinners.com que qualquer pessoa pode ver. O mesmo registro está disponível em JSON em /v1/shared/ads/{token} e /v1/shared/boards/{token}. Um link cujo dono está no plano Free responde 403 forbidden até o dono voltar para um plano pago.
Os endpoints de identidade /v1/me, /v1/usage e /v1/workspace retornam os objetos no nível superior, ao lado de requestId. Os endpoints de sistema /v1, /v1/health e /v1/system/freshness não trazem requestId, e /v1 e /v1/health respondem um objeto simples sem data. O id da requisição também é enviado no cabeçalho X-Request-Id. Informe-o quando entrar em contato com o suporte.
Quadros, favoritos e monitores de marcas também têm endpoints POST, PATCH e DELETE. Eles aceitam um corpo JSON, enviado com Content-Type: application/json.
Paginação
Os endpoints de lista aceitam limit (até 100 nas buscas; as listagens de facetas aceitam até 500, e o /snapshots de uma marca, até 365) e page (1, 2, 3…) ou offset. Quando os dois são enviados, offset é usado. O tamanho de página padrão aparece em cada endpoint. As listagens de anúncios, anúncios do Google, TikTok, e-mails e mídia respondem com:
Para obter a próxima página, repita a mesma requisição com page mais um, ou com offset mais limit. No corpo de um POST …/query, envie "page" ou "offset" como campos. hasMore é false na última página. Quando a fonte de dados não continua uma busca além de certo ponto, a página que chega a ele responde hasMore falso com meta.partial verdadeiro e um aviso que diz quantos resultados podem ser lidos. A paginação alcança os primeiros 5.000 resultados de uma busca (em uma busca de anunciantes, os primeiros 100). Restrinja a busca com filtros ou mude a ordenação para ver outros resultados.
As listagens de anúncios do Google retornam um total exato, exceto uma lista restringida pela regra de status ou de dias no ar (veja a busca de anúncios do Google). Um "totalEstimated": true marca um total (e o totalPages dele) que é uma estimativa até a lista ser lida até o fim, como nas lojas semelhantes de uma loja e em uma busca de anúncios da Meta de uma loja (websiteIds).
Os quadros, os favoritos e os relatórios do monitor de marcas aceitam page e limit e respondem com page, limit, total, totalPages e hasMore. As listas de facetas, o /products de uma loja e as lojas /similar dela aceitam limit e offset e respondem com limit, offset, total e hasMore.
Ordenação & filtros
Os endpoints de busca aceitam sortBy e order (desc por padrão). Quando você envia um termo de busca, os resultados são ordenados por relevance, a menos que você escolha outra ordenação; sem termo de busca, o padrão é newest (lojas e produtos: relevance; mídia: reach). As buscas de anúncios do Google e do TikTok são sempre classificadas por relevância; nelas, sortBy se aplica quando você navega sem termo de busca.
Cada conjunto de dados tem um endpoint POST …/query que aceita um corpo JSON com query, filters, sortBy, order, limit e page (ou offset) para filtragem avançada. Use os endpoints de facetas para ver os valores e os ids que os filtros aceitam.
Os filtros podem ser enviados pelo nome: como parâmetros de consulta extras em uma busca GET (?status=active&minDaysRunning=30&mainCountries=US,GB) ou como campos de nível superior no corpo de um POST …/query ({"status": "active", "minDaysRunning": 30}). Cada endpoint abaixo lista os nomes que aceita. Nos endpoints de busca, um nome de filtro que o endpoint não suporta retorna um 400 validation_failed que lista os suportados, para que um erro de digitação nunca retorne silenciosamente resultados sem filtro; os relatórios do monitor de marcas ignoram os nomes que não conhecem. As listas aceitam valores separados por vírgula ou um array JSON, as datas usam 2026-01-31, e o objeto bruto filters continua funcionando junto com os filtros nomeados.
Os filtros de crescimento (trafficGrowth, adsGrowth, pageReachGrowth, adReachGrowth) aceitam regras escritas como {"comparison": "greater" | "lower", "value": 50} ou {"operator": "gte" | "lte", "value": 50}. Os valores são porcentagens dos últimos 30 dias; outros períodos não estão disponíveis. minRankDelta é o número mínimo de posições que um anúncio ganhou em rankDeltaWindow (7d, a menos que você envie 14d ou 30d). hideSavedAds deixa de fora os anúncios que você já salvou. Os ids de categoria de todos os filtros categoryIds vêm de /v1/facets/categories.
Limites de requisições & créditos
Plano
Créditos / mês
Limite de requisições
Starter
5.000
60 / minuto
Pro
15.000
120 / minuto
Business
20.000
300 / minuto
1 crédito = 1 resultado retornado: os detalhes de uma marca, um anúncio ou uma linha de uma lista. Um resultado vazio é gratuito. Cada plano inclui créditos para o mês, renovados às 00:00 UTC do dia 1º. Uma chamada custa os resultados que retorna, então um limit menor custa menos, e uma chamada de ferramenta MCP custa os resultados que retorna, como na API. Os créditos e o limite de requisições são por espaço de trabalho: todos os membros, todas as chaves, a API e o servidor MCP compartilham um único saldo de créditos e um único limite de requisições. Em um plano pago, o proprietário do espaço de trabalho pode comprar créditos de recarga na página de cobrança (€1 compra 120 créditos, a partir de €10): eles são usados depois dos créditos do mês, passam para os meses seguintes e nunca expiram.
Chamada
Créditos
Uma busca ou uma lista
1 por resultado retornado
Um registro (uma loja, um anúncio, um e-mail)
1
Um resultado vazio
0
Uma alteração (salvar, mover, compartilhar, excluir)
1 (um item que já está no quadro: 0)
Uma busca por imagem
4 por resultado retornado
O histórico de vendas de uma loja
4
Consultas, valores de filtros (facetas), GET /v1/account e GET /v1/usage
0
Um erro ou uma recusa
0
Toda resposta medida inclui:
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
Acima do limite de requisições por minuto, você recebe 429 rate_limited com um cabeçalho Retry-After (em segundos). Quando os créditos do mês e os créditos de recarga se esgotam, você recebe 402 insufficient_credits, com details.upgradeUrl e details.topUpUrl, até os créditos mensais serem renovados. Confira seus créditos a qualquer momento com GET /v1/account ou GET /v1/usage. Essas chamadas não custam nada, ainda enviam X-Usage-Cost: 0, X-Credits-Used: 0 e X-Credits-Remaining, e funcionam mesmo quando os créditos se esgotaram.
Esses limites se aplicam à API e ao servidor MCP, nos planos pagos e no Free. O app web no site não é medido: nos planos pagos, ele é ilimitado dentro do uso justo.
O plano Free
O plano Free inclui o app web e o servidor MCP (150 créditos por mês), sem a API. Uma conta Free cria no painel uma chave para o servidor MCP (agentes de IA), dentro de 150 créditos por mês e 10 requisições por minuto; a API REST está nos planos pagos: com uma chave Free, ela responde 403 plan_not_eligible, com details.feature, details.requiredPlan e details.upgradeUrl, em todos os endpoints, exceto GET /v1/account, e nada é contabilizado. Uma chave criada em um plano pago fica pausada no Free e volta a funcionar assim que a conta volta para um plano pago. No Free, uma busca retorna os primeiros resultados, e uma ferramenta ou um endpoint cujos dados o Free não inclui responde com a mensagem dos planos pagos. A comparação de planos mostra o que o Free inclui. As marcas de demonstração ficam abertas por completo no site.
Erros
Os erros usam códigos de status HTTP padrão e um corpo JSON:
{
"error": {
"code": "invalid_api_key",
"message": "This API key is invalid or has been revoked.",
"requestId": "req_8f2c1a9b4d7e6f3a2b1c0d9e",
"details": null
}
}
code é estável e seguro para usar em condições no seu código, message é escrito para pessoas, e details traz dados extras quando existem (os campos rejeitados de um 400; os créditos mensais, a data de renovação, upgradeUrl e topUpUrl de um 402).
Status
code
Significado
400
validation_failed
Um parâmetro, filtro ou campo do corpo não é válido. message explica qual.
400
invalid_image / unsupported_url
A imagem de uma busca por imagem não é um arquivo PNG, JPG ou WEBP de no máximo 10 MB, ou a URL dela não é um endereço http ou https público.
401
missing_api_key / invalid_api_key
Nenhuma chave foi enviada, ou a chave está errada ou foi revogada.
402
insufficient_credits
Os créditos do mês e os créditos de recarga se esgotaram. Os créditos mensais são renovados no dia 1º do mês; você pode comprar créditos de recarga ou fazer upgrade do plano (details.topUpUrl, details.upgradeUrl).
403
plan_not_eligible
O seu plano não inclui isso. No plano Free, isso vale para todas as requisições, exceto GET /v1/account. details indica o feature, o requiredPlan e um upgradeUrl.
403
workspace_public_api_suspended
A conta foi desativada. Entre em contato com o suporte.
403
forbidden
Esta chave não pode fazer isso.
404
not_found
O recurso ou o id não existe.
409
conflict
A alteração entra em conflito com o que já está salvo, como um item que já está no quadro de destino.
422
unreadable_image
A imagem de uma busca por imagem não pôde ser lida, ou a URL dela não pôde ser baixada. Tente outro arquivo ou outra URL.
Um problema temporário do nosso lado. É seguro tentar de novo com espera progressiva (Retry-After).
503
upstream_timeout
A busca demorou demais. Restrinja-a com menos filtros ou com filtros mais rígidos, ou tente de novo. (502 e 504 antes de 27 de outubro de 2026.)
URLs de mídia
As imagens e os vídeos das respostas são servidos pela nossa CDN em https://api.sellwinners.com/v1/media/file/…. Essas URLs não precisam de chave de API e não consomem créditos, então você pode incorporá-las diretamente em tags <img> e <video>. Um arquivo que a fonte de dados não tem mais é enviado como null por um dia, e um arquivo ausente responde um 404 vazio do tipo de mídia dele. As imagens de produtos e os ícones de apps hospedados na CDN da Shopify também são servidos pela nossa CDN. Para mostrar uma imagem pequena, adicione ?w=96 (miniaturas) ou ?w=480 (cards): uma imagem JPEG, PNG, WebP ou GIF é então enviada como WebP com no máximo essa largura, nunca ampliada; uma animação, uma imagem menor ou um vídeo vêm como estão. Para uma lista simples de criativos, pronta para exibição, use /v1/media.
Para mostrar uma imagem no tamanho original, mas mais leve, adicione ?w=full: uma imagem JPEG, PNG, WebP ou GIF é então enviada como WebP com a largura e a altura originais, com uma qualidade visualmente igual, quando isso economiza pelo menos um décimo do arquivo; caso contrário, e para uma animação ou um vídeo, o original vem como está. Sem w, o arquivo original é enviado.
Descoberta
Transforme um nome, um domínio ou um ID de página nos IDs que os outros endpoints usam.
GET/v1/lookup
Encontrar uma marca, um anunciante ou uma loja. 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).
Parâmetro
Descrição
qobrigatório
Brand name, domain (allbirds.com) or Facebook page id.
type
What to look for (default auto: all of them). Um destes: auto, brandtracker, advertiser, shop.
Páginas do Facebook de uma loja, ou a loja de uma página. 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.
Encontre lojas Shopify e obtenha produtos, tráfego, vendas, redes sociais e anúncios.
GET/v1/shops
Pesquisar ou navegar pelas lojas (em alta quando vazio). 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).
Pesquisar lojas com filtros avançados. 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).
Filtros nomeados 52campos de nível superior do corpo
Uma loja por ID ou domínio. 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.
Parâmetro
Descrição
shopIdobrigatório
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.
Produtos da loja. 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).
Parâmetro
Descrição
shopIdobrigatório
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). Um destes: popularity, price, createdAt.
order
Sort direction: asc by default for popularity (best sellers first), desc for price and createdAt. Um destes: asc, desc.
snapshotDate
A past day (YYYY-MM-DD): the products as the shop listed them then, unranked.
Lojas semelhantes a um ID ou domínio de loja. 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.
Parâmetro
Descrição
shopIdobrigatório
Shop id or domain, such as allbirds.com.
sortBy
Defaults to relevance. Um destes: relevance, monthlyVisits, activeAds, growth30d, productsCount, createdAt.
order
Sort direction (default desc). Um destes: 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}.
Páginas de anunciantes ligadas a uma loja. 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.
Histórico de vendas estimadas. 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.
Parâmetro
Descrição
shopIdobrigatório
Shop id or domain, such as allbirds.com.
period
One point per day, week or month. Um destes: day, week, month.
Um indicador de várias lojas lado a lado. 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.
Parâmetro
Descrição
shopIdsobrigatório
1 to 10 shop ids or domains, comma-separated.
metricobrigatório
The figure compared. Um destes: googleLiveAds, tiktokPosts, metaReach.
Apps da Shopify que uma loja usa, pelo endereço dela. 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).
Se uma loja roda na Shopify, e o tema dela. isShopify, theme and isHeadless (a storefront built apart from Shopify's themes). Any store, tracked or not, read at its domain without www. (url).
Os anúncios e e-mails mais recentes de uma loja. 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.
A temporada do Q4 de uma loja, dia a dia. 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).
Parâmetro
Descrição
shopIdobrigatório
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. Um destes: true, false.
advertiserIds
Only these Facebook pages of the shop, comma-separated.
Páginas de destino da temporada do Q4 de uma loja. The season's landing pages by the date each appeared: url, ads, screenshotUrl, isBlackFriday and blackFridayStartedAt. meta.total counts them all.
Parâmetro
Descrição
shopIdobrigatório
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. Um destes: true, false.
advertiserIds
Only these Facebook pages of the shop, comma-separated.
Criativos da temporada do Q4 de uma loja. The season's creatives by the date each was launched: adId, hook, thumbnailUrl, mediaType, reach and isActive. meta.total counts them all.
Parâmetro
Descrição
shopIdobrigatório
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. Um destes: true, false.
advertiserIds
Only these Facebook pages of the shop, comma-separated.
Ganchos, transcrições, títulos ou textos de anúncios de uma loja. 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).
Parâmetro
Descrição
shopIdobrigatório
Shop id or domain, such as allbirds.com.
kindobrigatório
The texts to list. Um destes: 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. Um destes: usageCount, longestRunning, totalImpressions, firstUsedAt, lastUsedAt.
order
Descending by default. Um destes: desc, asc.
timePeriod
The ads counted (default live); not with ad-copy. Um destes: live, last24h, last3d, last7d, last30d, last3m, last6m, last1y.
Páginas de destino de uma loja. 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.
Parâmetro
Descrição
shopIdobrigatório
Shop id or domain, such as allbirds.com.
advertiserIds
Only these Facebook pages of the shop, comma-separated.
Uma página de destino dos anúncios de uma loja. 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.
Parâmetro
Descrição
shopIdobrigatório
Shop id or domain, such as allbirds.com.
urlobrigatório
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.
Páginas de destino de uma das páginas do Facebook de uma loja. 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).
Os anúncios da Meta de uma loja em ranking ao longo de um período. 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.
Parâmetro
Descrição
shopIdobrigatório
Shop id or domain, such as allbirds.com.
mode
best-rank (default): the best rank each reached; rank-delta: the places each gained. Um destes: best-rank, rank-delta.
days
The window, up to yesterday (default 7). Um destes: 7, 14, 30.
advertiserIds
Only these Facebook pages of the shop, comma-separated.
Anúncios Meta de uma loja classificados, com filtros. 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.
Parâmetro
Descrição
shopIdobrigatório
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
A posição diária de alguns anúncios de uma loja. 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).
Parâmetro
Descrição
shopIdobrigatório
Shop id or domain, such as allbirds.com.
adIdsobrigatório
Up to 24 ad ids, comma-separated.
days
The window, up to yesterday (default 7). Um destes: 7, 14, 30.
advertiserIds
Only these Facebook pages of the shop, comma-separated.
Os testes de criativos de uma loja, dia a dia. 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.
Parâmetro
Descrição
shopIdobrigatório
Shop id or domain, such as allbirds.com.
mediaType
Defaults to all. Um destes: all, image, video.
status
Um destes: all, active, inactive.
keywords
Words in the ads, comma-separated.
keywordMode
Um destes: any, all.
advertiserIds
Only these Facebook pages of the shop, comma-separated.
Os anúncios de um dos testes de criativos de uma loja. 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.
Parâmetro
Descrição
shopIdobrigatório
Shop id or domain, such as allbirds.com.
dateobrigatório
A day, as YYYY-MM-DD.
mediaType
Defaults to all. Um destes: all, image, video.
status
Um destes: all, active, inactive.
keywords
Words in the ads, comma-separated.
keywordMode
Um destes: 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).
Os totais diários do mercado inteiro e a temporada do Q4.
GET/v1/market/overview
O mercado inteiro, dia a dia. 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.
Parâmetro
Descrição
from
First day (YYYY-MM-DD; default 365 days before to).
O mercado inteiro ao longo de uma temporada do Q4, dia a dia. 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.
Criativos de anúncios do Facebook e do Instagram com mídia, alcance e posição.
GET/v1/ads
Pesquisar anúncios da Meta. A search returns one ad per brand unless maxAdsPerBrand is raised (0: no cap); trackedPages (Facebook page ids) and websiteIds (shop ids) narrow it to those brands, with all their ads: a shop's are its own (every ad of its main page and of its official pages named like it, and the ads of its other pages, creators, publishers and partners who ran its ads, that link to the shop or to a site on its domain; trackedPages narrows the search to the pages it names; until the list is read to its end, its pagination.total is then the ads of the shop's own pages searched, an estimate, pagination.totalEstimated true, as the ads of its other pages that link to it add to them, or null when the search names none of its own pages). sortBy=longestRunning takes order=desc only; each batch of ads read from the data source is put in order of daysRunning (its own order can be a day off); sortBy=adRank lists the best rank (1) first, whatever the order. metrics.reach is EU reach: null for an ad not shown in the EU or the UK, with its spend (nullReasons eu_uk_only), and for an EU ad whose reach is not counted yet (not_measured). The ad's targeting decides: an ad that targets no EU or UK country is eu_uk_only, one that targets one, or whose targeting is not known yet, not_measured in its first 7 days and not_reported after. media.type is carousel for an ad of more than one image or video (the thumbnails of its videos aside). advertiser.instagramFollowers is null for a page with no Instagram account or none the data source knows. extra.startIsFloor marks an ad started on January 1, 2018, the first day of the data source's Meta ad dates: it may be older. metrics.estimatedSpend keeps two decimals under 10 USD (1.26) and is in whole dollars from 10 USD up. A row's reach is the ad index's reading, which can be a day behind the ad's record (GET /v1/ads/{adId}). A row's metrics.reachDelta1d, reachDelta7d and reachDelta30d are null beside a known reach when the data source lists none (nullReasons not_measured), except over a window the ad started in, where it gained all the reach its row reads; the ad's record reads them from its reach history. A row's rank.lastRank is the last rank of an ad not ranked now (rank.currentTotal and rank.lastRankedAt are null on rows: the ad's record has them); metrics.reachGrowth7d, the EU reach growth over 7 days as a fraction, is null beside a known reach when the data source lists none (nullReasons not_measured); advertiser.countryShares is where the page's ads run, each country with its share of the page's ads as a fraction (an ad targets several countries, so the shares can add up to more than 1). growthRank takes rising, stable or falling; ageRanges and excludeAgeRanges 13-17, 18-24, 25-34, 35-44, 45-54, 55-64 and 65+; minPageAdsLaunched and maxPageAdsLaunched count the ads the page launched over pageAdsLaunchedPeriod (yesterday, last7d, last14d, last30d, last90d); adsTimePeriod takes last7d, last14d or last30d; reachPeriod, spendPeriod, reachPerPagePeriod and spendPerPagePeriod last24h, last7d or last30d (no period: all time); shopifyStoresOnly keeps the ads of Shopify stores. Growth ranges are percentages over 30 days; adReachGrowth also takes min7 and max7 (7 days) and adsGrowth min90 and max90 (90 days).
Pesquisar anúncios da Meta com filtros avançados. 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).
Filtros nomeados 114campos de nível superior do corpo
Um anúncio da Meta por 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).
Páginas de destino usadas pelos anúncios de uma loja ou de páginas. 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.
Parâmetro
Descrição
scopeDomain
A shop domain.
scopeTrackedPages
Up to 20 Facebook page ids, comma-separated.
status
Pages with running ads, without, or all (default all). Um destes: 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.
Textos dos anúncios de uma loja. 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.
Parâmetro
Descrição
scopeDomainobrigatório
The shop's domain or id.
limit
Results, 1-100 (default 100).
advertiserIds
Only these Facebook pages of the shop, comma-separated.
Parceiros dos anúncios de uma loja. 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.
Parâmetro
Descrição
scopeDomainobrigatório
The shop's domain or id.
limit
Results, 1-100 (default 100).
advertiserIds
Only these Facebook pages of the shop, comma-separated.
Escrever ganchos de anúncio para um produto. 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.
Sua cota de ganchos de anúncio neste mês. 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.
Pesquisar anúncios do Google. Searches are ranked by relevance; sortBy applies when browsing without a search term. formats are text, image and video; networks are Search, YouTube, Shopping, Maps and Other. Each ad has media.type and media.format (text, image or video) and media.url, the ad's image (for a video ad, its thumbnail: there is no video file). transparencyUrl is the ad on Google's Ads Transparency Center, where a video ad plays (null without Google's ids for the ad). Excluded audience countries (excludeCountryCodes, audienceCountries.exclude) work only without included ones. hideNonEuUkAds keeps the ads shown in the EU or the UK. Growth ranges are percentages over 30 days. status is active only while Google shows the ad (unknown once it has not for more than 7 days), and status=active keeps the ads Google showed in those 7 days; status=inactive keeps the ads the data source marks stopped, so an unknown ad is under neither. daysRunning counts the days from firstSeenAt to lastSeenAt, both included, and minDaysRunning and maxDaysRunning keep the ads whose daysRunning is in range; extra.servedDays is the data source's own count, which goes on after an ad stops, so longestRunning is not a Google sort; sortBy=relevance with no search term lists the newest; sortBy=reach takes order=desc only. With status=active or a days-running bound, pagination.total is null, and a list where few ads match ends early (meta.partial). With status=active, sortBy=reach lists few ads: in reach order the first ads are mostly ones Google stopped showing, so sort by newest for the ads Google shows now (its warning says so). extra.startIsFloor marks an ad first seen on May 31, 2018, the first day of Google's ad data. audience.countries lists every country (a percentage only for one country). Google reports a reach for some of the ads shown in the EU only, often only as 10,000,000, the top of its scale (10 million or more): most ads have none, and nullReasons says why reach.value is null (not_reported: an ad shown in the EU that Google reports none for; eu_only: an ad shown elsewhere), except for a reach the plan leaves out. extra.networks is the data source's list of the ad's platforms. extra.shop.google holds the Google totals of the advertiser's website, without a 0 reach (never reported) and, when it counts no ad, without its 0 counts; extra.shop has no monthlyVisits for a site with no traffic data, and a trafficGrowth30d only beside visits above 0. network and extra.networks name a network search, youtube, shopping, maps, display or other (display since October 23, 2026: it read other before); network, the ad's main network, is never display, so networks=display is refused with a 400 that says so (the data source answers none for it). advertiser.transparencyUrl is the advertiser's page on Google's Ads Transparency Center (null without Google's id for it) and advertiser.totalAds.all the website's ads on every platform. extra.categories names extra.categoryIds (id and name). extra.shop adds the website's countryCode, productsCount, followersBy (facebook, instagram, tiktok), metaTotalAds and metaNewAds, and extra.shop.google the time its totals were read (recordedAt, UTC) and the bounds of each reach it keeps (totalReachLow, totalReachUp, weeklyReachLow, weeklyReachUp). meta.breakdown, read with the list's total (on the first page of a search; the pages after it reuse that total and carry none), gives the search's ads by status (the data source's active flag, as liveAds counts, not status), by format (text, image, video), by servedDays bucket (the days served, which go on after an ad stops), by country (the first 10) and by network. remarketing and interestTargeting keep the ads that target it (true) or do not (false); minAdvertiserReach and maxAdvertiserReach bound the EU reach of the advertiser behind the ad; websiteIds narrows to one brand's shop; marketCountries, mainMarketCountries, excludeMarketCountries, creationCountries, excludeCreationCountries, the products count, best seller price and shop creation bounds, and shopifyAppIds, themeIds and pixelIds (with their exclude names, ids from /v1/facets/*) filter the shop behind the ad.
Pesquisar anúncios do Google com filtros. 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.
Filtros nomeados 41campos de nível superior do corpo
Um anúncio do Google por 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.
Parâmetro
Descrição
adIdobrigatório
Google ad id from a Google ad search (google_CR...).
Pesquisar anúncios e posts do TikTok. Searches are ranked by relevance; sortBy applies when browsing without a search term. websiteId (a shop id) and domain narrow to one shop: its TikTok profiles, or for a shop with none, the posts linking to the shop or its stores on its domain. websiteIds in filters means the posts linking to those websites. mediaType is video or carousel; categories are the data source's category names, in any case; hashtags are taken with or without the #. Growth ranges are percentages over 30 days. In each row, metrics.engagementRate is (likes + comments + shares + saves) / views as a fraction (0.0513 is 5.13%), daysRunning the days since the post was published, and metrics.rank its rank among its creator's posts (1 is the best; rankPercent the same rank as a percent of the creator's posts). profile.followers is null when the data source has not counted them, and content.category is null for its catch-all All. metrics.views, and the likes and saves that read 0 beside them, are null with nullReasons not_measured (engagementRate too) when the data source sent 0 views next to likes, comments, shares or saves above 0, or fewer views than likes: it has not counted the post; sortBy=views or likes with order=asc lists the posts whose views are counted, from the first TikToks on: a view or more (minViews 1) and no fewer views than likes (the posts not counted are left out of these two orders only; pagination.total is an estimate, totalEstimated, until the list is read to its end). A row the data source sends with no views or likes (and no reason) takes the post's counts from its own record (GET /v1/tiktok/library/{itemId}) once that was read, all of one reading (metrics.countsFromPost true). sortBy=longestRunning starts at the first TikToks (August 31, 2016, 22:00 UTC): the data source's older rows are not real posts. publishedAt is UTC. The filters agree with it: publishedAfter and publishedBefore are UTC (a date alone is the start of its day, and publishedBefore lists the posts before it), and minDaysRunning and maxDaysRunning count from the UTC day, as daysRunning does. media.mediaUrl of a video post is its cover image (the same file as media.thumbnailUrl in most rows), never its video: media.videoUrl is the video. media.durationSec is null when the data source reads 0 (every carousel). profile.adsShare is the share of the profile's posts that are ads, a fraction (profile.percentAds is the same share as the data source's percent, 0 to 100). shop.monthlyVisits is null with nullReasons not_measured for a linked shop the data source reads 0 visits (and 0 growth) for, and shop.trafficGrowth30d is kept only beside visits above 0 (else null with nullReasons not_measured); shop.categories names shop.googleCategoryIds (id and name). sortBy=rank lists the best rank (1) first, whatever the order. GET /v1/tiktok/facets/categories lists the categories the categories filter takes. profileCreatedAfter and profileCreatedBefore bound the profile's creation, minProfileAdsShare and maxProfileAdsShare the percent of its posts that are ads (0 to 100), minProfilePosts and maxProfilePosts its posts; marketCountries, mainMarketCountries, excludeMarketCountries, creationCountries, excludeCreationCountries, minTraffic, maxTraffic, the products count, best seller price and shop creation bounds, and shopifyAppIds, themeIds and pixelIds (with their exclude names, ids from /v1/facets/*) filter the shop the post links to.
Pesquisar anúncios e posts do TikTok com filtros. 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.
Filtros nomeados 58campos de nível superior do corpo
Um item do TikTok por 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).
Itens do TikTok de uma loja. 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.
Criativos prontos para exibir: URLs de imagens e vídeos na nossa CDN.
GET/v1/media
Criativos de anúncios como mídia pronta para exibir. 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).
Mídia pronta para exibir com filtros avançados. 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.
Filtros nomeados 114campos de nível superior do corpo
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).
Parâmetro
Descrição
keyobrigatório
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. Um destes: 96, 480, full.
Anunciantes (páginas do Facebook) e a atividade deles.
GET/v1/advertisers
Pesquisar anunciantes. 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. Um destes: brand, adCopy, websiteCopy, urlContains, domain, all.
country
2-letter ISO country code.
sortBy
Defaults to relevance when searching, otherwise newest. Um destes: relevance, newest, activeAds, newAds, reach, reach14d, growth30d, followers, euAdsShare.
order
Sort direction (default desc). Um destes: desc, asc.
Pesquisar anunciantes com filtros. 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).
Filtros nomeados 59campos de nível superior do corpo
Um anunciante por 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).
Parâmetro
Descrição
advertiserIdobrigatório
Facebook page id of an advertiser or ad.
snapshotDate
A past day (YYYY-MM-DD): the page's details as they were then.
Anúncios ativos por dia e alcance na UE de um anunciante. 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).
Parâmetro
Descrição
advertiserIdobrigatório
Facebook page id of an advertiser or ad.
days
How many days back, 7-3650 (default 90), or all for every reading.
Anúncios da Meta de um anunciante. 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).
Parâmetro
Descrição
advertiser_idobrigatório
Facebook page id of an advertiser or ad.
sortBy
Defaults to relevance when searching, otherwise newest. Um destes: relevance, newest, reach, reachGrowth7d, reachDelta7d, longestRunning, duplicates, spend, adRank, rankDelta7d, rankDelta14d, rankDelta30d, createdAt, relevanceScore, mostDuplicates, adOrder.
order
Sort direction (default desc). Um destes: desc, asc.
Pesquisar e-mails de marcas. 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.
Pesquisar e-mails de marcas com filtros. 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.
Filtros nomeados 33campos de nível superior do corpo
Um e-mail por 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.
Estatísticas de envio de e-mails de uma loja. 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.
Produtos das lojas com preço, vendas, avaliações, anúncios e alcance na UE.
GET/v1/products
Pesquisar ou navegar pelos produtos. 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. Um destes: 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). Um destes: relevance, newest, activeAds, spend, estSales, bestSelling, adPressure, createdAt.
order
Sort direction (default desc). Um destes: desc, asc.
Pesquisar produtos com filtros. 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.
Filtros nomeados 60campos de nível superior do corpo
Obter um produto. 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`.
Parâmetro
Descrição
productIdobrigatório
The product's `ref`, as a product search returns it.
Criar (ou devolver) um link público para um produto. Anyone with the link can view the product's sheet on the website without an account, with no EU data.
Parâmetro
Descrição
productIdobrigatório
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
Remover o link público para um produto.
Parâmetro
Descrição
productIdobrigatório
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.
Parâmetro
Descrição
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).
Buscar produtos por imagem. 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.
Parâmetro
Descrição
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). Um destes: relevance, estSales, activeAds, adPressure, newest, spend, spend14d.
order
Sort direction (default desc). Um destes: desc, asc.
maxPerShop
The closest matches of each shop: 0 (all, the default), 1, 3, 5, 10 or 20.
Suas buscas por imagem recentes. 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.
Ler uma busca por imagem de novo. 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.
Parâmetro
Descrição
searchIdobrigatório
The searchId an image search answered (meta.searchId).
filters
A JSON object of the product search's named filters.
sortBy
Defaults to relevance. Um destes: relevance, estSales, activeAds, adPressure, newest, spend, spend14d.
order
Sort direction (default desc). Um destes: desc, asc.
Categorias de e-mail, tipos de promoção e eventos. The ids taken by emailCategoryIds, promotionTypeIds and eventIds, and the event categories taken by eventCategories, in email searches.
Formatos de anúncio do Google. The values the formats filter of a Google search takes (text, image, video), each with the ads it counts (adsCount), most first. On paid plans, as Google ads are.
Status dos anúncios do Google. The values the status filter of a Google search takes (active, inactive), each with the ads the data source counts for it (adsCount): an ad it still marks active that Google has not shown for more than 7 days counts as active here, though status=active leaves it out. On paid plans, as Google ads are.
Categorias do TikTok. The names the categories filter of a TikTok search takes, as the data source spells them. Each row has value, label and postsCount (the posts the category counts), most first. On paid plans, as TikTok is.
Idiomas do TikTok. The names the languages filter of a TikTok search takes (english). Each row has value, label and postsCount (the posts it counts), most first. On paid plans, as TikTok is.
Países do TikTok. The two-letter codes the countries filter of a TikTok search takes. Each row has value, label and postsCount (the posts it counts), most first. On paid plans, as TikTok is.
Tipos de conteúdo do TikTok. The content types of TikTok posts (ad, organic: the type filter). Each row has value, label and postsCount (the posts it counts), most first. On paid plans, as TikTok is.
Tipos de mídia do TikTok. The media types of TikTok posts (video, carousel: the mediaType filter). Each row has value, label and postsCount (the posts it counts), most first. On paid plans, as TikTok is.
Valores dos filtros de e-mail. 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.
Parâmetro
Descrição
facetobrigatório
The list: languages, countries, creationCountries, promotionTypes, eventNames, categories or campaignTypes.
Valores dos filtros da busca de lojas. 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.
Valores dos filtros da busca de anunciantes. 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.
Pesquise tudo o que você salvou. 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.
Parâmetro
Descrição
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. Um destes: all, workspace, personal.
state
The state of the item's board. Defaults to active. Um destes: 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. Um destes: savedAt, name.
order
Defaults to desc for savedAt and asc for name. Um destes: 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. Um destes: item.
Adicionar um item a um quadro. 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.
Salvar um anúncio favorito. 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.
Verificar a ordem de uma pasta de anúncios favoritos. Folders have no stored order: the list is checked and echoed back sorted by order. The answer carries reordered: true.
Parâmetro
Descrição
scopeobrigatório
Which favorites: shared with the workspace or personal. Um destes: workspace, personal.
Verificar a ordem de uma pasta de lojas favoritas. Folders have no stored order: the list is checked and echoed back sorted by order. The answer carries reordered: true.
Parâmetro
Descrição
scopeobrigatório
Which favorites: shared with the workspace or personal. Um destes: workspace, personal.
Verificar a ordem de uma pasta de e-mails favoritos. Folders have no stored order: the list is checked and echoed back sorted by order. The answer carries reordered: true.
Parâmetro
Descrição
scopeobrigatório
Which favorites: shared with the workspace or personal. Um destes: workspace, personal.
As buscas que você salvou nas páginas de lista do site, por página.
GET/v1/views
Listar suas visualizações salvas. 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.
Parâmetro
Descrição
context
Only this list page's views. Defaults to every page. Um destes: shops, meta, tiktok, google, advertisers, emails, products.
Salvar uma visualização. 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).
Acompanhe marcas e leia relatórios sobre os anúncios, os criativos e as páginas de destino delas.
GET/v1/brandtrackers
Listar marcas monitoradas. 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).
Parâmetro
Descrição
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
Um destes: newAdsLastDay, newAdsLast7Days, newAdsLast30Days, activeAds, totalTraffic, name, createdAt.
folderIds
Only these folders, comma-separated; none: the brands in no folder.
Monitorar uma marca. 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).
Uma marca monitorada. 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.
Visão de painel de uma marca. 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).
Parâmetro
Descrição
brandtrackerIdobrigatório
Tracker id, from the list of tracked brands.
euOnly
Only ads shown in the EU and UK. Um destes: true, false.
Anúncios de uma marca. 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.
Parâmetro
Descrição
brandtrackerIdobrigatório
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. Um destes: newest, longestRunning, reach, duplicates, relevance, reachDelta7d, currentRank, rankDelta7d, rankDelta14d, rankDelta30d, spend.
status
Running or stopped ads. Um destes: active, inactive, all.
mediaType
Creative type. Um destes: 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. Um destes: true, false.
partnerIds
Only ads with these partner pages (Facebook page ids), comma-separated.
euOnly
Only ads shown in the EU and UK. Um destes: true, false.
Total e intervalo de datas da linha do tempo de uma marca. totalIsExact is false when totalCount is a lower bound; totalCount is null when the source sends no total.
Parâmetro
Descrição
brandtrackerIdobrigatório
Tracker id, from the list of tracked brands.
status
Running or stopped ads. Um destes: active, inactive, all.
mediaType
Creative type. Um destes: 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. Um destes: true, false.
partnerIds
Only ads with these partner pages (Facebook page ids), comma-separated.
euOnly
Only ads shown in the EU and UK. Um destes: true, false.
Os anúncios de uma marca, em ranking. 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.
Parâmetro
Descrição
brandtrackerIdobrigatório
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. Um destes: currentRank, rankDelta, rankDelta7d, rankDelta14d, rankDelta30d, reach, reachDelta7d, daysRunning, duplicates.
status
Defaults to active. Um destes: active, inactive, all.
includeInactive
Also rank stopped ads. Um destes: true, false.
euOnly
Only ads shown in the EU and UK. Um destes: true, false.
Os anúncios de uma marca que ganharam posições. 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).
Parâmetro
Descrição
brandtrackerIdobrigatório
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. Um destes: last7d, last14d, last30d.
sortBy
Defaults to rankDelta. Um destes: rankDelta, currentRank.
Testes de criativos de uma marca. 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.
Parâmetro
Descrição
brandtrackerIdobrigatório
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. Um destes: active, inactive, all.
mediaType
Creative type. Um destes: 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. Um destes: true, false.
partnerIds
Only ads with these partner pages (Facebook page ids), comma-separated.
euOnly
Only ads shown in the EU and UK. Um destes: true, false.
Ganchos com que uma marca abre seus vídeos. 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.
Parâmetro
Descrição
brandtrackerIdobrigatório
Tracker id, from the list of tracked brands.
timePeriod
Which ads to read (default live). Um destes: 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. Um destes: usageCount, longestRunning, totalImpressions, firstUsedAt, lastUsedAt.
order
Sort direction (default desc). Um destes: desc, asc.
euOnly
Only ads shown in the EU and UK. Um destes: true, false.
Roteiros de vídeo de uma marca. 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).
Parâmetro
Descrição
brandtrackerIdobrigatório
Tracker id, from the list of tracked brands.
timePeriod
Which ads to read (default live). Um destes: 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. Um destes: usageCount, longestRunning, totalImpressions, firstUsedAt, lastUsedAt.
order
Sort direction (default desc). Um destes: desc, asc.
euOnly
Only ads shown in the EU and UK. Um destes: true, false.
Títulos dos anúncios de uma marca. 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.
Parâmetro
Descrição
brandtrackerIdobrigatório
Tracker id, from the list of tracked brands.
timePeriod
Which ads to read (default live). Um destes: 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. Um destes: usageCount, longestRunning, totalImpressions, firstUsedAt, lastUsedAt.
order
Sort direction (default desc). Um destes: desc, asc.
euOnly
Only ads shown in the EU and UK. Um destes: true, false.
Páginas de destino de uma marca. 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.
Parâmetro
Descrição
brandtrackerIdobrigatório
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. Um destes: usageCount, longestRunning, totalImpressions.
order
Sort direction (default desc). Um destes: desc, asc.
Textos de anúncios de uma marca ao longo do tempo. 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.
Títulos de uma marca ao longo do tempo. 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.
Páginas de destino de uma marca ao longo do tempo. 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.
Parceiros que veiculam anúncios para uma marca. 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).
Parâmetro
Descrição
brandtrackerIdobrigatório
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. Um destes: activeAds, launchDate, reach, estimatedSpend.
order
Sort direction (default desc). Um destes: desc, asc.
euOnly
Only ads shown in the EU and UK. Um destes: true, false.
cpm
Cost per 1,000 impressions used for the spend estimate (default 9).
Público dos anúncios de uma marca. 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.
Os itens mais recentes de uma fonte para uma marca monitorada. 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.
Parâmetro
Descrição
brandtrackerIdobrigatório
Tracker id, from the list of tracked brands.
source
Defaults to meta. Um destes: meta, tiktok, google, email.
since
First day (YYYY-MM-DD; default 6 days before until: 7 days).
Os eventos de uma marca monitorada. 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.
Parâmetro
Descrição
brandtrackerIdobrigatório
Tracker id, from the list of tracked brands.
since
First day (YYYY-MM-DD; default 6 days before until: 7 days).
O calendário de uma marca monitorada na Meta, no TikTok, no Google e por 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.
Parâmetro
Descrição
brandtrackerIdobrigatório
Tracker id, from the list of tracked brands.
since
First day (YYYY-MM-DD; default 6 days before until: 7 days).
Quanto uma marca monitorada lançou por dia, por fonte. 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.
Parâmetro
Descrição
brandtrackerIdobrigatório
Tracker id, from the list of tracked brands.
since
First day (YYYY-MM-DD; default 6 days before until: 7 days).
Anúncios lançados, anúncios ativos e alcance ao longo do tempo. 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.
Parâmetro
Descrição
brandtrackerIdobrigatório
Tracker id, from the list of tracked brands.
granularity
Defaults to daily. Um destes: daily, weekly, monthly.
period
Use it instead of startDate / endDate. Um destes: 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. Um destes: true, false.
cpm
Cost per 1,000 impressions used for the spend estimate.
Principais anúncios entre as marcas monitoradas. 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.
Parâmetro
Descrição
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. Um destes: currentRank, rankDelta, rankDelta7d, reach, reachDelta7d, daysRunning, duplicates.
includeInactive
Also rank stopped ads. Um destes: true, false.
euOnly
Only ads shown in the EU and UK. Um destes: true, false.
Anúncios escalando entre as marcas monitoradas. 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.
Parâmetro
Descrição
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. Um destes: 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. Um destes: last7d, last14d, last30d.
Ganchos entre as marcas monitoradas. 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.
Parâmetro
Descrição
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. Um destes: usageCount, longestRunning, totalImpressions, firstUsedAt, lastUsedAt.
order
Sort direction (default desc). Um destes: desc, asc.
euOnly
Only ads shown in the EU and UK. Um destes: true, false.
Textos de anúncios entre as marcas monitoradas. 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.
Parâmetro
Descrição
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. Um destes: usageCount.
order
Sort direction (default desc). Um destes: desc, asc.
euOnly
Only ads shown in the EU and UK. Um destes: true, false.
Páginas de destino entre as marcas monitoradas. 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.
Parâmetro
Descrição
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. Um destes: usageCount, longestRunning, totalImpressions.
order
Sort direction (default desc). Um destes: desc, asc.
Mix de formatos entre as marcas monitoradas. 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.
Parâmetro
Descrição
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. Um destes: activeAds, image, video, dco, other.
euOnly
Only ads shown in the EU and UK. Um destes: true, false.
Seus espaços de trabalho, os membros e as vagas de cada um, e os convites enviados e recebidos. Essas chamadas nunca são contabilizadas.
GET/v1/workspaces
Listar seus espaços de trabalho. 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.
Remover um espaço de trabalho. 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).
Parâmetro
Descrição
workspaceIdobrigatório
id of one of your workspaces (ws_...), from the list of your workspaces.
Alterar a função de um membro. The owner changes anyone but themself; an admin changes members and readonly members only. The owner role can't be changed.
Parâmetro
Descrição
workspaceIdobrigatório
id of one of your workspaces (ws_...), from the list of your workspaces.
userIdobrigatório
A member's user id (user_...), from the workspace's members.
Convidar alguém. 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.
Parâmetro
Descrição
workspaceIdobrigatório
id of one of your workspaces (ws_...), from the list of your workspaces.
O nosso servidor MCP hospedado expõe os mesmos dados como ferramentas para agentes de IA. Use a mesma chave de API da API REST; uma chamada de ferramenta custa os resultados que retorna, como na API, e a resposta informa isso em meta.credits (used, remaining, source). Ele também expõe três recursos: sellwinners://me, sellwinners://usage e sellwinners://openapi.
O plano Free também inclui o servidor MCP: 150 créditos por mês, 10 requisições por minuto, os primeiros 10 resultados de cada busca. No Free, a lista de ferramentas cita as ferramentas que o Free inclui; qualquer outra ferramenta responde com um erro de ferramenta que termina com [plan_not_eligible], que não é contabilizado. Em um plano pago, uma chamada de ferramenta que o plano não inclui retorna um erro de ferramenta que termina com [plan_not_eligible], que não é contabilizado.
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.
Configuração do cliente
No API key: these sign in with your SellWinners account.
O plano Free também inclui o servidor MCP: 150 créditos por mês,
10 requisições por minuto, os primeiros 10 resultados de cada
busca.
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.
Pesquisar ou navegar pelos produtos das lojas por preço, vendas, unidades vendidas, países de venda, anúncios, alcance, avaliações, data de lançamento, moeda ou país da loja
37 argumentos
Um relatório sobre uma loja: o feed, as páginas do Facebook, a temporada do Q4, uma página de destino, o ranking de anúncios ou os testes de criativos
19 argumentos
O que mudou para uma marca monitorada em um período (1d, 7d, 14d, 30d; as posições ganhas são lidas em 7d para 1d, os ganchos em 30d para 14d, e os testes de criativos são os mais recentes)
6 argumentos
Tornar uma pasta de favoritos privada ou compartilhada
4 argumentos
kindtextfolder_idtextvisibilitytextscopetext
create_favorite_folder_share_link
Criar um link público para uma pasta de favoritos
4 argumentos
kindtextfolder_idtextscopetextconfirmtrue / false
delete_favorite_folder_share_link
Remover os links públicos de uma pasta de favoritos
4 argumentos
kindtextfolder_idtextscopetextconfirmtrue / false
Conta 2
usage_get
Seu plano, os créditos dele e quantos restam
check_credits
Quantos créditos você ainda tem neste mês (a mesma resposta de usage_get)
Quer nos ajudar a melhorar o SellWinners? Com a sua permissão, usamos cookies para acompanhar sua visita de página em página e gravá-la, com tudo o que você digita oculto. Também lembramos, por 30 dias, o afiliado cujo link trouxe você até aqui.
Sem ela, ainda vemos quais páginas você abre e até onde rola, em que você clica e eventuais erros, sem nenhum cookie.
Este navegador guarda sua escolha, e o chat de suporte só armazena seus cookies quando você o abre ou aceita. Como funciona