TL;DR, Resposta Rápida
10 min de leituraO Bluesky não expõe contador de visualizações, contador de impressões nem endpoint de métricas. A definição app.bsky.feed.defs#postView carrega exatamente cinco contadores, likeCount, repostCount, replyCount, quoteCount e bookmarkCount, e nenhum dos treze namespaces sob app.bsky é um namespace de métricas. O protocolo até define um evento interactionSeen, mas ele é somente de escrita e vai para os geradores de feed, não para o autor do post.
O Bluesky tem métricas?
Pergunte se o Bluesky tem métricas e a resposta é não: os lexicons do AT Protocol que definem cada resposta da API do Bluesky não carregam contador de visualizações, contador de impressões nem endpoint de métricas. Um post volta com cinco contadores de engajamento. Um perfil volta com totais de seguidores, seguindo e publicações. Nada em lugar nenhum diz quantas pessoas viram o que você publicou.
Isso é uma afirmação sobre uma ausência, então aqui está exatamente o que foi verificado antes de fazê-la, em 10 de setembro de 2026:
- Todos os arquivos de lexicon em
bluesky-social/atprotono branchmain, 404 arquivos JSON no total. Uma busca sem diferenciar maiúsculas e minúsculas em todos eles retorna zero ocorrências deimpression,viewCount,analyticeinsight. - A definição de
postViewemlexicons/app/bsky/feed/defs.json, campo por campo. - A listagem do diretório
lexicons/app/bsky, para nomear cada namespace que existe. - Uma chamada ao vivo sem autenticação ao AppView público, para confirmar que o serviço em execução devolve o que o schema promete.
A afirmação cobre os lexicons de primeira parte e o AppView público. Ela não diz nada sobre painéis internos que a Bluesky PBC opere para si mesma, nem sobre serviços de terceiros que modelam alcance a partir de outros sinais.
Quais campos o app.bsky.feed.defs#postView carrega de verdade?
Quinze, e cinco deles são contadores.
| Campo | Tipo | O que ele te dá |
|---|---|---|
uri | string, at-uri | O endereço do post |
cid | string, cid | Hash de conteúdo desta versão do registro |
author | ref | app.bsky.actor.defs#profileViewBasic |
record | unknown | O registro do post em si, texto e tudo mais |
embed | union | Imagens, vídeo, link externo ou registro citado |
replyCount | integer | Respostas |
repostCount | integer | Reposts |
likeCount | integer | Curtidas |
quoteCount | integer | Posts com citação |
bookmarkCount | integer | Itens salvos |
indexedAt | string, datetime | Quando o AppView indexou o post, não quando ele foi escrito |
viewer | ref | Sua própria relação com o post, como se você curtiu ou não |
labels | array | Rótulos de moderação anexados ao post |
threadgate | ref | Restrições de resposta na thread |
debug | unknown | Descrito no lexicon como "Debug information for internal development" |
Dois detalhes dessa tabela passam batido com facilidade. indexedAt é um carimbo de indexação, então é o campo errado para usar como horário de publicação; o valor createdAt dentro de record é o que você quer. E os contadores não estão na lista required da definição, que diz ["uri", "cid", "author", "record", "indexedAt"]. Uma resposta em conformidade pode omitir likeCount por completo, então o código que lê esse campo deve tratar um valor ausente como desconhecido, e não como zero.
Aqui está o serviço em execução dizendo a mesma coisa:
GET https://public.api.bsky.app/xrpc/app.bsky.feed.getAuthorFeed?actor=bsky.app&limit=1
"post": {
"uri": "at://...",
"cid": "...",
"author": { ... },
"record": { ... },
"embed": { ... },
"replyCount": 1,
"repostCount": 2,
"likeCount": 132,
"quoteCount": 3,
"bookmarkCount": 3,
"indexedAt": "...",
"labels": []
}Cinco chaves terminando em Count. Nenhuma sexta.
Existe um namespace de métricas sob app.bsky?
Não. Treze namespaces ficam sob app.bsky, e cada um deles tem uma função que não é medir.
| Namespace | O que ele cobre |
|---|---|
app.bsky.actor | Perfis, preferências, busca de contas |
app.bsky.ageassurance | Estado da verificação de idade |
app.bsky.bookmark | Criar, apagar e listar itens salvos |
app.bsky.contact | Importação de contatos, verificação de telefone, descarte de correspondências |
app.bsky.draft | Rascunhos guardados no servidor |
app.bsky.embed | Formatos de incorporação de imagem, vídeo, link externo e registro |
app.bsky.feed | Posts, curtidas, reposts, citações, threads, geradores de feed |
app.bsky.graph | Seguidos, bloqueios, silenciamentos, listas, starter packs |
app.bsky.labeler | Serviços de rotulagem |
app.bsky.notification | Lista de notificações, contagem de não lidas, registro de push |
app.bsky.richtext | Facetas de texto, como links e menções |
app.bsky.unspecced | Endpoints instáveis que o cliente oficial usa |
app.bsky.video | Upload de vídeo e status do processamento |
Amplie a busca para além de app.bsky e o quadro se mantém. As outras raízes do repositório são com.atproto para o encanamento do protocolo, chat.bsky para mensagens diretas, tools.ozone para moderação, além de internal.bsky, site.standard e com.germnetwork. Os únicos endpoints de todo o conjunto com sabor estatístico são tools.ozone.report.getLiveStats, tools.ozone.report.getHistoricalStats, tools.ozone.report.refreshStats e tools.ozone.moderation.getReporterStats. Esses relatam filas de moderação para moderadores. getLiveStats está documentado como "Get live report statistics from the past 24 hours. Filter by queue, moderator, or report type." Nada disso encosta no desempenho de um post.
Por que o protocolo define um evento de visualização e nunca o devolve?
Porque o evento de visualização flui para os geradores de feed, não para os autores. Essa é a parte que vale citar quando alguém insiste que o dado tem que estar lá em algum lugar.
app.bsky.feed.sendInteractions é um procedimento cuja entrada é um array de objetos app.bsky.feed.defs#interaction. Cada interação nomeia um item por uma AT URI e um token de evento. Os valores conhecidos incluem:
| Token | Descrição do lexicon |
|---|---|
app.bsky.feed.defs#interactionSeen | "Feed item was seen by user" |
app.bsky.feed.defs#clickthroughItem | "User clicked through to the feed item" |
app.bsky.feed.defs#clickthroughAuthor | "User clicked through to the author of the feed item" |
app.bsky.feed.defs#interactionLike | "User liked the feed item" |
app.bsky.feed.defs#requestLess | "Request that less content like the given feed item be shown in the feed" |
Ou seja, o vocabulário de uma impressão existe. interactionSeen é, em bom português, um evento de visualização. O que falta é um caminho de leitura. A descrição do próprio procedimento diz que ele envia a informação "back to the feed generator that served them", e o schema de saída é um objeto vazio, {"type": "object", "properties": {}}. Quem opera um feed personalizado consegue contar eventos de visualização dos itens que seu feed entregou. Você, como autor de um post, não tem endpoint algum que devolva quantas vezes seu post foi visto, nesse feed ou em qualquer outro.
Essa assimetria é a resposta honesta para por que o Bluesky dá a sensação de que deveria ter contagem de visualizações. O sinal está definido, é coletado pelos clientes e entregue aos geradores de feed. Para por aí.

O que dá para medir no Bluesky hoje?
Bastante coisa, desde que você pare de procurar alcance.
AdaptlyPost
Comece seu teste grátis de 7 dias
Análises multiplataforma
Caixa Social
Assistente com IA
| Pergunta | Endpoint | Disponível |
|---|---|---|
| Quantas curtidas, reposts, respostas, citações, itens salvos? | app.bsky.feed.getPosts ou app.bsky.feed.getAuthorFeed | Sim |
| Quais contas curtiram este post? | app.bsky.feed.getLikes | Sim |
| Quais contas deram repost nele? | app.bsky.feed.getRepostedBy | Sim |
| Quais contas o citaram? | app.bsky.feed.getQuotes | Sim |
| Quantos seguidores e posts esta conta tem? | app.bsky.actor.getProfile | Sim, como followersCount, followsCount, postsCount |
| Quantas pessoas viram o post? | nenhum | Não |
| Qual foi a taxa de impressões por engajamento? | nenhum | Não |
As listas de contas com nome merecem mais atenção do que recebem. Na maioria das redes você recebe um total de curtidas e nada mais. O Bluesky te entrega as contas, o que significa que dá para perguntar de quem vêm seus reposts, se os mesmos vinte perfis sustentam cada lançamento e quais seguidores nunca interagiram uma vez sequer. Esse é um tipo de análise diferente do de impressões, e em algumas perguntas é melhor.
app.bsky.feed.getPosts recebe um array uris com maxLength de 25, então uma rotina em lote que confere um mês de posts avança em blocos de 25. app.bsky.feed.getAuthorFeed recebe limit com máximo de 100 e padrão de 50, mais um cursor, e está documentado como "Does not require auth", que é por isso que o exemplo acima roda contra public.api.bsky.app sem token.

O que uma ferramenta de métricas do Bluesky pode te dar com honestidade?
Duas coisas, e ela deveria deixar claro qual é qual.
A primeira é o próprio registro de publicação. Um agendador sabe o que enviou, de qual conta, em que minuto, com que texto, hashtags e mídia, porque foi ele quem enviou. Nenhuma API concede isso; são dados de primeira parte que a ferramenta já tem. É também a metade que falta para a maioria das pessoas, porque uma planilha de horários de envio é o que transforma um monte de contadores em comparação.
A segunda são os contadores públicos, amostrados ao longo do tempo. Chamar getAuthorFeed ou getPosts de forma programada e guardar likeCount, repostCount, replyCount, quoteCount e bookmarkCount a cada passagem transforma um número em uma curva, que mostra por quanto tempo um post continuou acumulando engajamento depois de sair.
Junte as duas e você responde perguntas reais: quais dos seus posts no Bluesky conquistaram engajamento, publicados em que hora, em que formato, ao lado dos mesmos posts nas outras redes do seu calendário. É essa junção que as métricas do Bluesky da AdaptlyPost reportam, e o mesmo formato de relatório cobre as outras redes através de métricas de redes sociais.
O que nenhuma ferramenta consegue te dar, incluindo esta, são impressões, alcance, visualizações de vídeo ou visitas ao perfil de um post do Bluesky. Esses números não estão na API, então um painel que os exibe está modelando ou está rotulando outra coisa. A pergunta útil para qualquer fornecedor é de qual campo o número veio. Se a resposta não for um dos cinco contadores ou um total de seguidores, o número é uma estimativa.
Agendar também não muda nada disso. Publicar por um agendador de posts do Bluesky te dá um log de envio limpo para medir; não dá ao Bluesky um contador de visualizações que ele não tem.
O que esta página não afirma
Ela não afirma que o Bluesky nunca vai lançar contagem de visualizações. A lista de campos cresce: bookmarkCount está ao lado dos quatro contadores mais antigos, e app.bsky.bookmark é um namespace completo, com endpoints próprios de criação, exclusão e listagem. Se um viewCount aparecer algum dia, ele vai surgir em lexicons/app/bsky/feed/defs.json antes de surgir em qualquer cliente, e esse arquivo é público. Confira por lá em vez de confiar em uma captura de tela.
Perguntas frequentes
O aplicativo do Bluesky mostra contagem de visualizações em algum lugar?
Não. O cliente oficial renderiza os mesmos contadores que a API devolve, que são curtidas, reposts, respostas, citações e itens salvos. Não existe número de visualizações ou impressões em um post, em um perfil ou em qualquer tela de configurações, porque nenhum endpoint fornece esse dado.
Existe algum endpoint de métricas nos lexicons do AT Protocol?
Não. Uma busca nos 404 arquivos de lexicon de bluesky-social/atproto não retorna arquivo nem campo nomeado por métricas, insights ou impressões. Os quatro endpoints que contêm "Stats" ficam todos sob tools.ozone, o namespace do ferramental de moderação, e relatam denúncias de moderação em vez de posts.
Uma ferramenta consegue estimar impressões do Bluesky pelo firehose?
Medir não, apenas modelar. O firehose com.atproto.sync transmite commits de repositório, então quem consome vê a criação de registros app.bsky.feed.like e app.bsky.feed.repost conforme acontecem. Visualizar um post não cria registro nenhum, o que significa que nada atravessa o firehose quando alguém lê e passa adiante. Qualquer número de impressões derivado dali é saída de modelo.
O app.bsky.feed.sendInteractions me deixa ver quem viu meu post?
Não. É um procedimento, não uma consulta. Os clientes empurram eventos de interação para dentro dele, incluindo interactionSeen, e o schema de saída é um objeto vazio. Os eventos são entregues ao gerador de feed que serviu o item, então não existe rota de volta para o autor do post.
Os contadores de engajamento estão sempre presentes na resposta da API?
Não. A lista required de app.bsky.feed.defs#postView é ["uri", "cid", "author", "record", "indexedAt"], o que deixa cada contador opcional. Trate um likeCount ausente como valor desconhecido em vez de assumir zero, ou uma queda de serviço vai parecer um post que ninguém curtiu.
AdaptlyPost
Comece seu teste grátis de 7 dias
Análises multiplataforma
Caixa Social
Assistente com IA
Quantos posts dá para checar em uma única chamada?
Vinte e cinco com app.bsky.feed.getPosts, que limita o array uris em maxLength: 25. app.bsky.feed.getAuthorFeed devolve até 100 posts por página com um cursor para a próxima, e não precisa de autenticação, então é o caminho mais barato quando você quer o histórico recente de uma conta inteira.
O bookmarkCount do Bluesky significa que mais métricas estão a caminho?
O bookmarkCount é o mais novo dos cinco contadores, somado a likeCount, repostCount, replyCount e quoteCount, e app.bsky.bookmark já tem seu próprio namespace completo com endpoints para criar, excluir e listar. Um viewCount poderia seguir o mesmo caminho. Se chegar, vai aparecer primeiro em lexicons/app/bsky/feed/defs.json antes de qualquer cliente, então esse arquivo é o lugar certo para conferir, não uma captura de tela.
Os endpoints de estatísticas do tools.ozone contam como métricas de post do Bluesky?
Ali não há métricas de post. Os quatro endpoints de estatísticas do repositório, getLiveStats, getHistoricalStats, refreshStats e getReporterStats, ficam todos sob tools.ozone, o namespace de moderação, e reportam sobre filas de moderação e denunciantes para moderadores. Nenhum deles toca em respostas, curtidas ou alcance de um post.
Preciso fazer login para conferir os números de engajamento de um post do Bluesky?
Os contadores públicos não pedem login. app.bsky.feed.getAuthorFeed é documentado como algo que não exige autenticação, por isso uma chamada a public.api.bsky.app sem token retorna os mesmos campos likeCount, repostCount, replyCount, quoteCount e bookmarkCount mostrados neste post. O que fica atrás da sua própria conta, como configurações de notificação, é outra história, mas ler os contadores públicos de outra conta só precisa da URL.
Devo confiar em um painel do Bluesky que mostra impressões ou alcance?
Desconfie se o fornecedor não conseguir nomear o campo. Impressões, alcance, visualizações de vídeo e visitas ao perfil não existem em nenhum lugar dos lexicons do AT Protocol, então um painel que os mostra está modelando o número a partir de outros sinais ou renomeando um dos cinco contadores reais. Pergunte de qual campo o número vem; se a resposta não for likeCount, repostCount, replyCount, quoteCount, bookmarkCount ou um total de seguidores, é uma estimativa.
Coloque isso em prática com o AdaptlyPost
Este artigo foi útil para você?
Conte-nos o que você achou!
Veja-nos mais no Google
Um clique marca a AdaptlyPost como fonte preferida e nossos artigos passam a aparecer mais acima nas suas Principais notícias, no modo IA e nas visões gerais com IA.
Antes de ir...
AdaptlyPost
Agende seu conteúdo em todas as plataformas
Gerencie todas as suas contas de redes sociais em um só lugar com o AdaptlyPost.
Análises multiplataforma
Caixa Social
Assistente com IA
Termos relacionados do glossário


Como postar um GIF no Bluesky que continua animado
Como um GIF no Bluesky chega a um post: o seletor KLIPY, uploads que viram vídeo, embeds de imagem com um só quadro e o que o AdaptlyPost envia.


Como funciona um gerador de feeds do Bluesky, do lexicon ao feed no ar
Um gerador de feeds do Bluesky é um serviço HTTPS que responde a uma consulta XRPC. Os lexicons, a entrada no documento DID, o JWT e as lacunas nos docs.


Por que Bluesky facets byteStart byteEnd contam bytes, não caracteres
Os offsets Bluesky facets byteStart byteEnd contam bytes UTF-8, não índices UTF-16 do JavaScript. O aviso do lexicon, um exemplo e código que acerta.
Artigos Relacionados


Como um threadgate do Bluesky decide quem pode responder a um post
Um threadgate do Bluesky limita respostas a mencionados, seguidores, quem você segue ou uma lista. Como o registro funciona e o postgate que barra citações.


Por que o limite de tamanho de imagem do Bluesky é de 2.000.000 bytes
O Bluesky limita cada imagem de post a 2.000.000 bytes, definidos pelo maxSize no lexicon images. Avatares e banners param em 1.000.000 bytes.


De onde vem l.facebook.com e por que os cliques chegam como Direct
O Facebook manda os cliques de saída por l.facebook.com, o link shim dele. O que o desvio faz com o seu referrer e por que a visita chega como direta.

