Contexto
- Novo ou recorrente
- Origem, campanha, UTM
- Dispositivo e browser
- Localização aproximada
- Hora, dia da semana
- Frequência de visitas
Proposta de direção de produto
A tag já está lá. Cada semana ligada, ela vale mais.
Durante anos ela serviu para avisar: chegou promoção, saiu matéria, tem novidade. Mas ela vê a loja inteira por dentro — quem volta ao mesmo produto, quem trava no frete, quem estava quase. A proposta é usar isso: em vez de pedir ao lojista que configure segmentos, campanhas e regras, um motor observa, entende, decide e aprende sozinho. O lojista só define os limites.
Uma página
As seis secções seguintes são o detalhe. Esta é a versão curta: a proposta, o que já está a funcionar, o que ainda é simulação, e a decisão que peço.
A proposta
A tag do Pushnews já está instalada em milhares de lojas e hoje só serve para avisar. Ela vê a sessão inteira: quem volta ao mesmo produto, quem trava no frete, quem estava quase a comprar.
Em vez de pedir ao lojista que configure segmentos, campanhas, gatilhos e testes, um motor observa a sessão, decide se vale a pena interromper, escolhe o que dizer e por onde dizê-lo — onsite, push ou WhatsApp. O lojista define só os limites: desconto máximo, categorias, frequência.
mainFlag por loja, desligada de fábrica, com prova de md5 de que quem não está na lista recebe pacote byte-a-byte idêntico.O que é real e o que é simulação — para não haver dúvida
Real: o coletor, o endpoint, a ligação ao gerador de pacotes, os botões de WhatsApp da secção 07 (abrem conversa a sério) e a verificação automática que abre um browser e usa estas páginas como faria uma pessoa.
Simulado: as mil sessões da console e todos os valores em reais que delas saem. São gerados com semente fixa e servem para mostrar o mecanismo da decisão — não são previsão de receita. Numa loja real isso mede-se com grupo de controlo, não se afirma.
A objeção certa é: como sabemos qual botão é o tamanho do calçado, qual é o frete, qual é a aba de avaliações? Resposta curta, em três camadas — o detalhe está na secção 02 · Técnico:
view_item, add_to_cart, begin_checkout no esquema padrão. Escutar o dataLayer é um adaptador; as cinco plataformas dominantes são mais cinco. Nada disto é por cliente.Nenhuma peça de infraestrutura nova está em falta e nada aqui está bloqueado por decisão de arquitetura. O que falta é escolher a primeira loja real e ligar-lhe a flag, com autorização por escrito. É a única data que precisa de ser marcada.
O ponto de partida
Hoje, para o Pushnews funcionar, o lojista precisa criar segmentos, journeys, campanhas, triggers, regras de pop-up, textos, timings, testes A/B, audiências e calendários. Cada um deles é uma decisão que pedimos a ele, e cada uma é uma chance de ele desistir.
A maioria das lojas não tem alguém com tempo para isso. O resultado previsível é o que já vemos: uma configuração inicial, um pop-up de boas-vindas com 10% de desconto, e depois silêncio durante meses.
exit_intent contém informação suficiente para saber que esta pessoa não hesita por causa do preço — hesita por causa da entrega. Dar a ele 10% de desconto é queimar margem respondendo à pergunta errada. ← arraste para ver →A tese
Não estamos propondo «adicionar IA ao Pushnews». Estamos propondo que tudo o que hoje pedimos ao lojista para configurar passe a ser um resultado calculado pelo motor. O lojista deixa de ser o programador das regras e passa a ser o gestor dos limites da IA.
| Hoje é um input do lojista | Amanhã é um output do motor | |
|---|---|---|
| Segmentos («viu a categoria X 3 vezes») | → | Scores de intenção calculados continuamente |
| Audiências e listas | → | Vetores de interesse por visitante |
| Triggers e regras de exibição | → | Oportunidades detectadas nos dados |
| Textos, headlines e CTAs | → | Criativo gerado para aquela pessoa |
| Escolha do desconto | → | Incentivo mínimo que ainda converte |
| Timings e frequência | → | Momento com maior lucro esperado |
| Testes A/B manuais | → | Experimentação permanente |
| Lista de interesses e taxonomia | → | Taxonomia derivada do catálogo |
| Escolha do canal | → | Canal e momento decididos por valor esperado |
| Montar a campanha: segmentos, textos, horários | → | Uma ordem com prazo — o motor monta o resto |
Antes de continuar, o que é possível fazer já
Nada disto exige que o lojista mexa no site dele. O script já foi instalado — por ele, uma vez, há anos — e a configuração que ele carrega todo dia é escrita por nós.
É a diferença entre um plano de dois anos e um plano que começa esta semana — está detalhado logo abaixo, e é a razão de este documento existir agora.
O que dá para começar esta semana
Vale olhar para o que temos hoje sem embelezar, porque é isso que define o que dá para fazer já. A base paga tem 123 contas ativas, com MRR de cerca de R$ 348 mil. Dessas, pela leitura da lista, 64 vendem alguma coisa online — o resto publica conteúdo ou presta serviço, e para esses a tese deste documento simplesmente não se aplica.
Números lidos da lista de clientes de agosto de 2026. Uma observação que vale reportar: circula internamente que «~90% do MRR vem de e-commerce», mas pela classificação nome a nome dos 123 ativos, quem vende online responde por 53% do MRR (R$ 184 mil) e quem publica por 35% (R$ 120 mil). A diferença muda o tamanho do alvo imediato, então vale a pena a equipe confirmar caso a caso antes de o plano assumir um número.
Aqui é preciso separar duas coisas que costumam ser somadas numa só, e não são a mesma. Cerca de 1.080 contas chegaram a pagar — as 123 ativas e as 959 que saíram —, e essas tiveram a tag instalada de verdade. As outras quase 18 mil nunca pagaram: em boa parte são leads que criaram conta e nunca chegaram a colocar o script no site. Delas temos o e-mail, não a distribuição.
São dois ativos diferentes, e ambos valem. Distribuição instalada: as lojas que hoje pagam, mais uma fração das 959 que saíram sem remover o script — é onde a coleta liga por configuração, sem ninguém tocar em nada. Lista qualificada: quase 18 mil contatos de gente que um dia procurou uma ferramenta de conversão para o próprio site. Não é distribuição, é canal de aquisição — e nenhum concorrente o compra pronto.
E o detalhe que torna isso acionável agora: a configuração que a tag carrega é gerada por nós, do lado do servidor. Não precisamos que o lojista publique nada, chame a agência dele ou abra um chamado. Precisamos de mudar o que nós emitimos.
Medido, não presumido — 12 de agosto
Cerca de 1 em cada 10 das lojas que cancelaram ainda carrega o nosso arquivo. Não é «muitas».
Abrimos 20 sites num navegador real e observámos a rede (o script) — o HTML sozinho não serve, porque a tag entra por GTM e não aparece no código-fonte. Entre quem paga hoje, 5 de 6 sites que responderam carregam a tag, o que valida o método. Entre quem cancelou, 1 de 10. A hipótese de que «muitos ex-clientes ainda têm o script lá» estava errada, e vale mais corrigi-la agora do que descobrir isso no meio do plano de reativação.
Ainda assim, 10% de 959 são cerca de 95 lojas onde ligar a coleta é imediato — sem reinstalação, sem tocar no site, sem chamar ninguém. E há um caso concreto que vale mais do que a média: um dos maiores e-commerces de eletrónicos do país cancelou há anos, deixou mais de R$ 400 mil de receita histórica, e continua pedindo o nosso sites/<appId>.js todos os dias. Basta uma conversa e uma linha de configuração.
Limites desta medição, para ninguém a usar como se fosse censo: só a página inicial, só desktop, seis segundos de espera, e três sites bloquearam o robô com 403 — entre eles duas das maiores contas ativas, que ficaram de fora da conta. O número certo sai do log de acessos do CDN por appId, que cobre a base toda e é a próxima medição a fazer. Esta amostra serve para saber a ordem de grandeza, e a ordem de grandeza já mudou uma frase do plano.
A consequência prática
Ligar a coleta nova em uma loja é uma mudança de configuração do nosso lado, não um projeto do lado dela.
Por isso o primeiro passo do plano não é construir o motor: é começar a acumular a matéria-prima do motor na base que já temos, enquanto o resto é construído. Cada semana sem isso é uma semana de dados que nunca vamos ter — e, como não há como recuperar histórico depois, esse é o único item do plano que não pode esperar por decisão nenhuma.
O resto deste documento descreve o produto completo. Mas a decisão que interessa hoje é só a primeira linha dessa lista — e ela não depende de aprovar mais nada.
Isto já roda — não é maquete
Abrir a console do motor sobre 1.000 sessões →
O coletor, o endpoint, o motor de perfis e a console estão no ar: 1.000 sessões e 12.093 eventos gravados numa base de produção pela mesma função que uma loja real chamaria. Dá para reproduzir qualquer sessão evento a evento, ver os scores que o motor calculou, a decisão que ele tomou e as alternativas que descartou — e ativar uma oportunidade. A classificação acerta 91,8% sem nunca ver a persona que gerou a sessão.
Peça 1 · O sensor
Pense no que aquele script vê num dia normal: cada produto aberto, cada busca, cada vez que alguém volta ao mesmo tênis pela terceira vez. Hoje ele descarta tudo isso e guarda só o suficiente para disparar uma notificação. É como ter uma câmera na loja e só usar para saber a que horas fecha. Deveria estar registando a sessão inteira — sem o lojista configurar nada, e sem integração profunda no primeiro dia.
Grande parte disso pode ser descoberto automaticamente a partir de JSON-LD, do dataLayer, do DOM, dos URLs e dos metadados que as lojas já publicam para o Google.
Regra
Coleta intensiva de sinais semanticamente úteis — não gravação indiscriminada de tudo o que o browser faz.
Movimento do mouse, DOM completo e session replay multiplicam o volume por 10× a 100× e nos transformariam num Hotjar. Não é o produto que queremos.
Peça 2 · O perfil
Cada browser ganha um perfil progressivo desde a primeira interação. É anônimo, é do lojista, e é infinitamente mais útil do que os atributos demográficos que hoje conseguimos oferecer.
gender = male
city = São Paulo
subscribed = true
last_seen = 2026-08-09
Diz quem a pessoa é. Não diz nada sobre o que ela quer nem sobre o que a faria comprar.
O lojista nunca define nenhum desses valores. São calculados a partir do comportamento e recalculados a cada evento relevante.
Peça 3 · A identidade
É a pergunta que decide se temos um produto ou um brinquedo. Um perfil que se apaga a cada visita não prevê nada: as afinidades levam sessões a se formar, e a hesitação que interessa acontece exatamente entre visitas. Vale a pena dizer com todas as letras como reconhecemos alguém — e onde não reconhecemos.
São quatro degraus, do mais frágil ao mais forte, e cada um resolve um caso diferente.
session_id em memória. Resolve a sessão e mais nada. É o que praticamente todas as ferramentas de analytics fazem.visitor_id pseudônimo guardado em cookie primário. É o degrau que sustenta o perfil progressivo — e é também o mais mal compreendido, porque tem um prazo de validade que quase ninguém menciona (a seguir).O celular e o desktop da mesma pessoa não têm absolutamente nada em comum que sirva de prova. Mesmo IP, mesmo horário, mesma cidade — tudo isso também é verdade para os vizinhos dela. É por isso que ligar dois aparelhos exige um ato dela, e por isso a pergunta que importa deixa de ser técnica e passa a ser de produto: quais são as ocasiões em que uma pessoa se identifica, e quantas delas nós conseguimos provocar?
São quatro, e elas não valem a mesma coisa:
| Ocasião | Frequência | Nós provocamos? | O que ela nos dá |
|---|---|---|---|
| Login | Baixa | Não | Identidade perfeita, mas a maior parte do e-commerce brasileiro não obriga a criar conta — e quem não comprou ainda, não tem. |
| Checkout | Média | Não | E-mail e CPF. Identidade forte, mas chega depois da compra — tarde demais para tudo o que queríamos ter feito antes. |
| Captura explícita | Média | Sim | «Avise quando baixar o preço», «guarde meu carrinho», cupom por e-mail. Ela dá o contato em troca de algo concreto. |
| Clique num link nosso | Alta | Sim | O único que depende só de nós — e o único que identifica sem pedir nada. |
A última linha merece ser desdobrada, porque é o mecanismo mais subestimado do produto. Quando enviamos um push, um e-mail ou um WhatsApp, o link vai com um token assinado que diz «esta é a pessoa 5512». Ela abre no celular — um aparelho que até então era um anônimo chamado 7C31 — e, no instante em que a página carrega, o token identifica aquele navegador. Sem formulário, sem login, sem fricção nenhuma. Identidade transferida por navegação.
Isso inverte a forma de pensar os canais de saída. Mandar uma mensagem não serve só para trazer a pessoa de volta: serve para descobrir onde ela está. Quem abre o e-mail no celular, o push no desktop e o WhatsApp no tablet acaba com três aparelhos ligados a uma identidade, e nós nunca pedimos um dado sequer. Há até casos em que vale gastar um contato barato só por isso — o retorno não é a conversão daquela mensagem, é o aparelho que ela liga para sempre.
Uma vantagem que só existe no Brasil
O CPF no checkout é o identificador mais estável que um e-commerce brasileiro tem.
Não muda de operadora, não expira em 7 dias, não é apagado pelo navegador, e a mesma pessoa usa o mesmo em qualquer loja. Guardado apenas como hash com sal por lojista — nunca em claro, nunca compartilhado entre lojas — vira uma chave de identidade excelente e defensável. É um ativo que as plataformas americanas não têm no mercado delas e por isso não desenharam para ele.
O que ninguém conta nas demos
No Safari, um cookie criado por JavaScript é apagado em 7 dias. Às vezes em 24 horas.
O ITP da Apple trata assim qualquer cookie escrito pelo navegador, e o Firefox tem regra parecida. Numa base brasileira com muito iPhone, isso significa que uma boa parte dos «visitantes recorrentes» chega como visitante novo — e nenhuma inteligência de perfil sobrevive a isso. A saída é técnica e está na aba seguinte: emitir o identificador pelo servidor, num endpoint do próprio domínio da loja. É a diferença entre lembrar de alguém por uma semana e lembrar por um ano.
Duas decisões que tomamos de propósito e que convém a equipe conhecer. Nada de fingerprinting nem de casamento probabilístico — juntar pessoas por IP, resolução e user agent funciona razoavelmente bem e é exatamente o que nos derrubaria numa auditoria da LGPD. E a fusão de perfis é conservadora: um computador de família ou um balcão de loja são dois usuários no mesmo dispositivo, por isso só fundimos com sinal forte e guardamos a origem da fusão, para poder desfazê-la.
Honestidade sobre o alcance: com cookie primário emitido pelo servidor, reconhecemos a maioria de quem volta em 30 dias no Chrome e no Android. No Safari sem esse cuidado, bem menos. E entre dispositivos, sem identificação, não reconhecemos — e não vamos fingir que sim. É justamente por isso que a peça seguinte existe.
Peça 4 · A decisão
Para cada visitante, o motor responde continuamente a uma pergunta. Não «que campanha está ativa», mas o que devo fazer a esta pessoa neste momento. E muitas vezes a resposta certa é não fazer nada: pop-ups para todo mundo destroem a experiência e treinam o cliente a esperar pelo desconto.
O João está olhando pela terceira vez para um tênis de R$ 899. O motor avalia as opções que tem e estima o lucro incremental de cada uma:
| Ação possível | Δ conversão | Lucro esperado |
|---|---|---|
| Prazo de entrega + avaliações, no mesmo bloco | +12,4% | +R$ 58 |
| Mostrar prazo de entrega | +9,1% | +R$ 47 |
| Mostrar avaliações (4,8/5, 382 compras) | +7,2% | +R$ 38 |
| As três juntas, num só pop-up | +13,1% | +R$ 31 |
| Mostrar alternativa a R$ 599 | +11,0% | +R$ 26 |
| Dar 10% de desconto | +18,4% | −R$ 18 |
| Não mostrar nada | 0% | R$ 0 |
Valores ilustrativos. O que interessa é a forma da tabela: o desconto é a ação com maior impacto na conversão e a única com lucro negativo, porque a maior parte dessas pessoas comprava sem ele. E repare nas duas linhas de combinação — é a pergunta seguinte.
É a primeira pergunta que qualquer pessoa faz ao ver essa tabela, e ela está meio certa. Meio, porque parte de um pressuposto que não se sustenta: o ganho das ações não soma. As três atacam a mesma hesitação, portanto são substitutas, não complementares — juntas rendem +13,1%, não os +27,3% da soma ingênua.
E há um detalhe pior. Uma das três destrói margem: a alternativa de R$ 599 tem o maior ganho de conversão isolado (+11,0%) e o menor lucro (+R$ 26), porque canibaliza a venda de R$ 899. Colocá-la ao lado das outras duas é oferecer a saída barata justamente a quem já ia comprar o caro — por isso o pop-up com as três converte mais (+13,1%) e ganha menos (+R$ 31) do que o bloco com duas.
Dito isso, a pergunta melhora a proposta, e é assim que ela deve entrar na arquitetura: o espaço de decisão do motor não pode ser a lista de ações isoladas, tem que ser o conjunto de combinações — com o lucro esperado estimado para cada combinação, nunca somado a partir das partes.
Aí a regra deixa de ser «uma ação» ou «três ações» e passa a depender de como elas se relacionam. Entrega e prova social são complementares: reduzem tipos diferentes de risco percebido e cabem no mesmo bloco sem competir. A alternativa mais barata é substituta e canibaliza: só entra se as outras duas falharem, ou se o perfil disser que a barreira é mesmo preço — que aqui não é, com price_sensitivity em 0,31.
Duas consequências práticas. A primeira é de custo: avaliar combinações faz o número de candidatos explodir, por isso o motor limita-se a blocos pequenos (dois, no máximo três elementos) e aprende quais compõem bem naquela loja. A segunda é de método: «uma intervenção vs. um bloco com duas» é exatamente o tipo de hipótese que o motor deve testar sozinho, loja a loja — e a resposta provavelmente não é a mesma para todas.
A função objetivo
Lucro esperado = probabilidade de compra × margem − custo do incentivo − custo do contato
Otimizamos lucro incremental, não taxa de conversão nem CTR. É a diferença entre uma plataforma que parece funcionar e uma que se paga sozinha.
Hoje a regra típica é «exit intent → 10%». Passa a ser «exit intent → é preciso incentivo?». Um cliente habitual que comprava na mesma recebe zero. Um visitante novo e sensível ao preço talvez receba frete grátis. Outro recebe 5%. Outro recebe apenas prova social. Isso elimina o problema clássico de ensinar o consumidor a esperar pelo pop-up.
Peça 5 · A execução
Escolhemos formato, headline, texto, imagem, produtos, CTA, incentivo, momento e posição — não apenas um template de uma lista. O SDK já sabe injetar boa parte desses componentes; o que falta é o motor escolher qual usar.
Isso fica abstrato depressa, então vale ver o que o João realmente enxerga na terceira visita ao Pegasus. A decisão da peça anterior foi prazo de entrega + prova social, no mesmo bloco — é exatamente isto:
✓Chega quinta, 14/08 se pedir hoje
★4,8 de 5 em 382 compras deste modelo
PushnewsVer prazos →
Repare no que não está aí: nenhum cupom, nenhum contador regressivo, nenhuma sobreposição que tape a página. O bloco responde às duas dúvidas que o comportamento dele revelou e sai da frente.
O que muda de visitante para visitante não é o template — é tudo o que está dentro dele, decidido no momento a partir do perfil.
Hesita no produto
★4,8 de 5 em 382 compras
✓Troca grátis em 30 dias
Preocupado com a entrega
✓Chega quinta, 14/08
✓Frete grátis acima de R$ 299
Sensível ao preço
→3 modelos parecidos abaixo de R$ 600
✓Mesmo amortecimento
Já ia comprar
Nada. A página fica como é.
Interromper aqui só custaria margem.
O catálogo de componentes que o motor pode injetar é o mesmo que já discutimos: carrossel de recomendações, mensagem flutuante, barra fixa, prova social, comparação de produtos, assistente de tamanho, cupom, contador, indicador de frete grátis, vistos recentemente, comprados juntos, alternativas, aviso de reposição de estoque, alerta de queda de preço, pesquisa, quiz e assistente conversacional.
E uma regra de desenho que vale a pena fixar agora, antes de existir código: a experiência tem que caber na página, não tapar a página. O formato padrão é um bloco ancorado que a pessoa pode ignorar; a sobreposição modal fica reservada para o caso raro em que ela já está saindo de qualquer maneira. Uma plataforma que aumenta a conversão de hoje destruindo a experiência da loja não sobrevive ao terceiro mês.
Peça 6 · Os canais
Aqui está o motivo pelo qual push, e-mail e WhatsApp não são um acessório do Pushnews — são o que torna o motor economicamente viável. Um cérebro sem braços fora do site só consegue agir sobre a fração de gente que ainda está com a aba aberta. O valor de verdade está na outra ponta: a decisão de comprar não acaba quando a sessão acaba. Quem viu o mesmo produto três vezes vai decidir nas próximas 48 horas — e, sem canal de saída, decide sem nós.
Cada canal é uma combinação diferente de custo, velocidade e permissão. Não existe o melhor canal; existe o canal certo para aquela pessoa, naquele momento, àquele custo.
| Canal | Custo por contato | Alcança em | Para que serve, e o que ele exige |
|---|---|---|---|
| Onsite | ~R$ 0 | Agora | A única intervenção sem atrito e sem permissão. Só funciona enquanto ela está lá — e é aí que acaba o alcance da maioria das ferramentas. |
| Push | ~R$ 0 | Segundos | O canal estratégico: é o único identificador durável que se obtém com um clique e sem pedir nenhum dado pessoal. Traz de volta, e ainda por cima resolve a identidade da Peça 3. |
| centavos | Horas | Espaço para explicar e mostrar produto. Exige o endereço, o que na prática significa checkout, conta ou captura. | |
| R$ 0,30–0,60 | Minutos | No Brasil, é onde as pessoas realmente leem. Custo real por mensagem, janela de 24 horas e template aprovado — poderoso e caro, nessa ordem. | |
| SMS | R$ 0,10–0,25 | Minutos | Alcance quase universal, sem riqueza nenhuma. Caso extremo, valor alto. |
| Nada | R$ 0 | — | Continua sendo uma decisão válida, e para a maioria é a certa. |
Custos de ordem de grandeza para o Brasil, para efeito de decisão. O que importa não é o número exato: é que eles diferem em uma ordem de grandeza entre si, e por isso o canal entra na mesma conta de lucro esperado que a ação. Um WhatsApp a R$ 0,45 só se justifica quando a probabilidade de compra vezes a margem paga esse custo — e num carrinho de R$ 80 com margem de 30%, muitas vezes não paga.
É a mesma ideia do incentivo mínimo, aplicada ao contato: sobe-se um degrau de cada vez, e só quando o anterior não resolveu.
Duas consequências que valem para o produto. A primeira é que «canais alcançáveis» passa a ser um atributo do perfil: o motor precisa saber, para cada pessoa, quais portas estão abertas — aceitou push, deu e-mail, autorizou WhatsApp — porque a melhor ação do mundo é inútil se não houver como entregá-la. A segunda é que o limite de frequência é da pessoa, não do canal: três mensagens em três canais diferentes continuam sendo três interrupções, e é assim que uma plataforma perde a permissão que levou meses para conquistar.
Repare no problema que sobrou das duas peças anteriores: para alcançar alguém depois que ela sai, precisamos de uma porta aberta; e para abrir a porta, historicamente, pedimos um dado — e-mail, telefone, uma conta. Cada pedido desses é um formulário, e cada formulário perde gente.
O «fale com a gente no WhatsApp» resolve isso de um jeito que nenhum formulário resolve. Quando a pessoa toca no botão e manda a mensagem, ela nos entrega o número, o consentimento e o contexto de uma vez — e do lado dela não pareceu um cadastro, pareceu tirar uma dúvida. Junte com o mecanismo do token: aquela conversa fica amarrada ao visitor_id daquele navegador, e o quarto degrau da identidade acontece sem que ninguém preencha nada.
Mas isso só funciona se o botão não for o balãozinho genérico de «Atendimento» parado no canto da tela, que todo mundo aprendeu a ignorar. O convite tem que nascer da hesitação que o motor acabou de detectar — mesmo lugar do bloco onsite, mesma lógica de decisão, texto gerado para aquele momento:
Trocou de tamanho 3 vezes
?Na dúvida entre o 41 e o 42?
Esse modelo veste um pouco justo.
Perguntar no WhatsAppAbriu o frete duas vezes
?Precisa chegar antes do fim de semana?
A gente confere pelo seu CEP.
Perguntar no WhatsAppCarrinho parado há 20 min
?Quer que a gente segure sua sacola?
Manda um oi e guardamos até amanhã.
Guardar pelo WhatsAppo link já vai preenchido → wa.me/55…?text=Oi! Tenho uma dúvida sobre o Pegasus 41, tam. 42 [#7C31] — o código curto amarra a conversa à sessão, ao produto e ao motivo
O texto pré-preenchido carrega o produto e o motivo, então quem atende — pessoa ou assistente — já começa sabendo do que se trata. E o mesmo assistente conversacional que está no catálogo de componentes pode atender essas conversas com o perfil, o estoque, os prazos e as políticas na mão.
E tem um efeito econômico que não é óbvio
Uma conversa iniciada pelo cliente abre uma janela de 24 horas em que responder não custa nada.
É a regra do próprio WhatsApp: mensagens que a empresa inicia exigem template pago (aqueles R$ 0,30 a R$ 0,60 da tabela acima); dentro da janela aberta por ela, a conversa de atendimento é livre. Ou seja, o CTA contextualizado transforma o canal mais caro da tabela no mais barato — e ainda por cima entrega a identidade de graça. Um botão criativo na página de produto vale mais do que uma campanha de reengajamento, e custa menos.
Uma ressalva que não pode ser esquecida: espalhar não é encher. O convite aparece onde há hesitação real — página de produto, frete, carrinho, pós-compra —, nunca em todas as páginas ao mesmo tempo, e entra na mesma conta de frequência de todo o resto.
A objeção óbvia é de capacidade: abrir mil conversas por dia numa loja que responde em seis horas destrói mais reputação do que qualquer pop-up. Mas repare no tipo de pergunta que esses convites provocam — e é aí que a objeção se desfaz.
| O que ela pergunta | Quem resolve | Por quê |
|---|---|---|
| «Chega até sexta no CEP 01310-000?» | Bot | É consulta a dado estruturado — prazo, frete, estoque, tamanho, política de troca. O motor já tem tudo isso do catálogo. |
| «Esse modelo veste justo?» | Bot | Está nas avaliações e na ficha. Responder bem aqui é leitura de conteúdo, não julgamento. |
| «Consegue um desconto pra mim?» | Bot, com limite | Só dentro do teto definido no onboarding, e só se o motor calcular que o incentivo se paga. Fora disso, escala. |
| «Meu pedido veio errado» | Humano da loja | Pós-venda, exceção, reclamação. Nunca deve ser resolvido por bot, e o handoff tem que ser imediato. |
| Qualquer coisa que o bot não entenda | Humano da loja | Regra dura: na dúvida, escala. Um bot que insiste é pior do que um bot que passa adiante. |
Ou seja: o bot cobre a maior parte — porque a maior parte é dúvida objetiva sobre prazo, tamanho, estoque e frete — e o humano entra quando o caso deixa de ser informação e passa a ser decisão. E note quem é esse humano: é sempre alguém da loja. Nós não atendemos o cliente final por ela, nem entramos no meio da relação: o Pushnews conduz a conversa até onde ela é automatizável e entrega o resto no atendimento que a loja já tem.
Isso também muda o que o motor precisa saber. A capacidade de atendimento vira um número do onboarding — quantas conversas humanas por dia a loja aguenta, em que horário —, e é ela que limita quantos convites o motor solta. Fora do horário, o bot avisa que a resposta humana vem de manhã, em vez de deixar a pessoa falando sozinha.
Essa pergunta aparece na primeira reunião com qualquer loja de porte, e a resposta muda a arquitetura — a ponto de merecer aba própria. Os cenários de número, o que a Meta descontinuou, o mecanismo do botão e a galeria de convites por contexto estão em 07 · WhatsApp.
A regra que evita a briga mais cara
O número é da loja. A conversa é da loja. Nós somos a inteligência que decide o momento.
Qualquer desenho em que o Pushnews se coloca como remetente, dono do número ou dono do histórico cria um conflito com o atendimento que a loja já tem — e é o tipo de conflito que mata a renovação. O produto ganha decidindo quando falar e o que dizer, não sendo o telefone.
Peça 7 · A adoção
Ninguém entrega o controle do seu site a uma IA no primeiro dia — nem nós devemos pedir isso. A adoção tem uma escada, e cada degrau precisa ser merecido com resultados demonstrados.
11,8% dos visitantes veem o mesmo produto três ou mais vezes e saem sem comprar. Está concentrado em celular e em tráfego pago.
R$ 24.800 Receita adicional estimada por mêsO que o visitante vai ver
✓Chega quinta, 14/08 se pedir hoje
★4,8 de 5 em 382 compras deste modelo
na página de produto · a partir da 3.ª visualização · sem desconto
AtivarIsso é uma proposta muito melhor do que um botão «Criar campanha» — mostra que já percebemos a loja antes de pedir qualquer coisa ao lojista.
E repare no bloco do meio, que é a parte que costuma faltar: o lojista vê a experiência exata que vai aparecer no site dele, onde ela aparece e com que gatilho, antes de clicar em Ativar. Sem isso, «Ativar» é um salto de fé — e ninguém entrega a própria página de produto a um botão em que precisa confiar às cegas. Como o criativo é gerado, a pré-visualização mostra o texto real que será servido, não um exemplo genérico; e o mesmo painel deixa reescrever qualquer linha antes de publicar, porque a primeira vez que uma marca vê uma IA escrevendo em seu nome, ela quer poder mexer.
Peça 8 · O onboarding
Tudo o resto é inferido. Se conseguimos ler a categoria, não perguntamos a categoria. Se conseguimos escrever o texto, não pedimos o texto.
Black Friday, volta às aulas, escoar uma coleção, uma ação paga por uma marca — nada disso está no comportamento de quem visita o site. Está num contrato com um fornecedor, num armazém cheio, num calendário fechado em junho. Um motor que só lê o visitante nunca descobre que existe um acordo com a Nike, e um produto que ignore isso é um produto que o lojista não pode usar em novembro.
A resposta não é devolver-lhe o construtor de campanhas. É uma ordem com prazo: uma janela em que o objetivo e os tetos mudam. O lojista declara-a numa frase — «de 24 a 30 de novembro quero escoar o estoque de inverno, pode ir até 30%» — e o motor devolve-a estruturada (janela, objetivo em unidades e não em receita, escopo de SKUs, teto de desconto, investimento) com o preço em margem que ela deve custar. Dentro da janela persegue o objetivo da ordem; fora dela volta ao do período. E o inverso também vale: vendo estoque parado, é o motor que propõe a ordem.
Junto com as cinco decisões, isto fecha o modelo de controle: limites permanentes, ordens com prazo e inegociáveis — a linha premium que nunca entra em desconto, a marca que tem de aparecer porque paga por isso. O lojista decide o quê, quando e até onde; o motor decide o como.
Ao ligar o site, fazemos uma leitura da homepage, das páginas de produto e categoria, das FAQs, das políticas de entrega e devolução e das avaliações. Daí sai a voz da marca, o vocabulário, as propostas de valor, as objeções típicas, o posicionamento de preço e a política promocional. O lojista não preenche um formulário descrevendo a própria marca.
Peça 9 · A console
A porcentagem de visitantes não tocados é uma métrica de qualidade, não de falha — e os 71% não são aspiração: é o que o motor decidiu nas 1.000 sessões gravadas em produção. Uma plataforma que interrompe 100% das sessões está destruindo a experiência da loja.
O que a IA aprendeu esta semana
Depois de meses, duas lojas nunca funcionam da mesma maneira: numa os descontos são decisivos, noutra são as avaliações, noutra são o frete. Esse conhecimento é proprietário daquela loja e não se transfere para um concorrente — é a forma mais saudável de lock-in que podemos construir.
Peça 10 · A entrada comercial
Um potencial cliente instala a tag. Durante algumas semanas observamos as mesmas 18.432 sessões da Peça 7 e não mostramos absolutamente nada. Depois entregamos um número.
| Oportunidade encontrada | Por mês |
|---|---|
| Abandono de carrinho | R$ 42.500 |
| Hesitação no produto | R$ 24.800 |
| Descoberta de produto deficiente | R$ 16.500 |
| Visitantes recorrentes não trabalhados | R$ 13.000 |
| Oportunidade de upsell | R$ 18.300 |
| Total identificado | R$ 115.100 |
Deixa de ser uma demonstração do nosso produto e passa a ser um diagnóstico da loja dele. Nenhum concorrente que exija configuração consegue oferecer isso antes da venda.
Peça 11 · A rede
Há dois tipos de aprendizado saindo do motor, e confundi-los seria o erro mais caro do produto inteiro.
O primeiro é específico daquela loja e é propriedade dela: que naquele catálogo o frete grátis converte melhor que 10%, que os clientes recorrentes daquela marca não reagem a desconto, que o pico é na segunda-feira à noite. Isso nasce dos dados dela, vive na conta dela, e não atravessa a parede em circunstância nenhuma.
O segundo é estrutural e não pertence a ninguém em particular: que a terceira visualização do mesmo produto é o melhor momento para intervir; que reforço de prazo de entrega funciona melhor em celular do que em desktop; que prova social vence desconto em tráfego social. Esses padrões só aparecem quando se olha para muitas lojas ao mesmo tempo, não identificam nenhuma, e é deles que se faz um produto que melhora sozinho para todo mundo.
Três condições, e nenhuma é opcional. Limiar mínimo: um padrão só sobe se aparecer em pelo menos algumas dezenas de lojas independentes — abaixo disso não é estrutura, é a loja de alguém disfarçada de estatística. Forma, nunca conteúdo: sobe «reforço de prazo supera desconto em celular na categoria calçados», nunca o texto que a loja usou, o produto, o preço ou o número dela. Reprodutibilidade: se um padrão não se confirma em lojas que não participaram de sua descoberta, ele não entra — é ruído.
Aqui a resposta importa mais do que parece, porque a mesma verdade dita de duas formas produz reações opostas. «Usamos os dados da sua loja para melhorar o produto» soa a extração, mesmo sendo legítimo. «Sua loja começa já sabendo o que aprendemos em milhares de outras» é a mesma coisa dita pelo lado do benefício — e é o lado verdadeiro, porque o fluxo que interessa ao lojista é o de descida, não o de subida.
Minha recomendação é comunicar o benefício com destaque e o mecanismo com precisão: a rede aparece na venda como vantagem («não começa do zero») e nos termos como cláusula clara sobre agregação e anonimização. Não escondemos, e também não transformamos em campanha — porque o detalhe do que se agrega e como se anonimiza é, esse sim, propriedade nossa e vantagem competitiva.
Duas travas que valem a pena assumir agora. Opt-out existe, mesmo que quase ninguém use: uma loja pode ficar fora da camada estrutural, e nesse caso ela para de receber os padrões também — quem contribui recebe mais, e isso é justo e fácil de explicar. E portabilidade total: os dados e o perfil dos visitantes são do lojista e saem com ele quando quiser, porque a LGPD exige e porque a barreira de saída certa não é reter dado de ninguém. É a próxima seção.
A consequência estratégica
Se o motor decide o que fazer com cada pessoa, então também decide onde: agora no site, ou por push daqui a trinta minutos, ou por e-mail daqui a quatro horas, ou por WhatsApp amanhã, ou nunca. Deixam de existir cinco campanhas independentes por canal; existe um percurso decidido pelo motor.
Um exemplo. Alguém vê quatro camisas, coloca uma no carrinho e sai. O motor não envia nada — estima alta probabilidade de retorno espontâneo. Quatro horas depois ainda não voltou: «a camisa azul que você viu continua disponível no seu tamanho». No dia seguinte: «encontramos outra que combina melhor com a calça que você viu». Só depois, e só se necessário: «hoje você tem frete grátis». A intervenção escala gradualmente, e o desconto é o último recurso, não o primeiro.
O princípio a tornar inegociável
O lojista nunca configura aquilo que a máquina consegue aprender.
Não perguntar a categoria se conseguimos lê-la. Não perguntar o público se conseguimos inferi-lo. Não pedir textos se conseguimos escrevê-los. Não pedir segmentos, triggers nem testes A/B se conseguimos criá-los, detectá-los e executá-los. E nem sequer pedir que olhe para os dados, se conseguimos dizer a ele «descobri isso, fiz isso, e gerou mais R$ 16.600 de margem».
Isso abre uma categoria maior do que aquela em que estamos hoje: uma plataforma de conversão que, por acaso, tem push, WhatsApp, e-mail, SMS e onsite como braços de execução. E a entrada para essa categoria já foi paga: está no rodapé de cada uma dessas lojas, carregando um arquivo nosso todo dia.
A primeira mudança
A pergunta certa para começar não é «como construímos o motor», é «o que exatamente precisa mudar naquilo que já está rodando em milhares de sites». A resposta é curta, e é boa: quase nada do que precisamos mudar é código que o cliente instalou.
| Peça | É nossa? | O que é, e o que dá para fazer com ela |
|---|---|---|
pushnews-app | Sim | PHP/Silex. Gera a configuração por cliente e publica cdn.pn.vg/sites/<appId>.js. É aqui que tudo começa — esse arquivo é lido pelo navegador do visitante a cada carregamento, e nós o reescrevemos quando quisermos. |
| SDK da tag | Sim | ilabspush.min.js, v57.31.3. É nosso — só não está no checkout local. Falamos com ele pela fila window.IlabsPush.push([…]) e, quando compensar, corrigimo-lo. |
| Pushnews-Api | Sim | api.pn.vg/api/v1. Também é nosso. O coletor nasce separado por prudência de risco, não por falta de acesso. |
| Script do site | Do cliente | Entra por GTM ou no HTML. Não precisa ser alterado: ele já busca a nossa configuração. |
A alavanca
O arquivo de configuração que emitimos é código nosso rodando no site do cliente, todo dia, sem deploy dele.
É por isso que a coleta pode ser ligada em uma loja como mudança de configuração e não como projeto de integração. Vale para a base ativa e, em princípio, para qualquer site que ainda tenha o script na página — inclusive os que pararam de pagar.
Correção — e ela abre portas que este documento tinha fechado
O SDK da tag e a Pushnews-Api são nossos. Não estavam no checkout local, e uma versão anterior deste documento tratou isso como «não é nosso».
A diferença não é de detalhe. Tudo o que estava escrito como contornar passa a ser corrigir, e três limites que pareciam do produto passam a ser escolhas nossas: os pop-ups não aceitarem variáveis no título e no corpo, a segmentação ler só quatro chaves, e a lista de condições de exibição ser fechada. Nada disso é lei da natureza — é código com dono. O plano abaixo continua a não mexer no SDK no dia 1, mas por gestão de risco: mudar o pacote que publicamos é reversível numa chave de S3, mudar o SDK afeta toda a base ao mesmo tempo. É sequência, não impossibilidade.
Vinha chamando «tag v2» ao que muda, e o nome atrapalha mais do que ajuda — porque sugere que existe um script novo para o lojista instalar. Não existe. Vale a pena separar as três coisas que costumam ser chamadas de «a tag», porque só uma delas muda:
| Peça | Hoje — v1 | Depois — v2 |
|---|---|---|
| Snippet no site instalado pelo lojista |
Entra por GTM ou no HTML e carrega o SDK | Idêntico. Ninguém instala nada, ninguém publica nada. |
SDKilabspush.min.js |
v57.31.3. Nosso, fora deste checkout. | Idêntico no dia 1 — e isso é opção, não limitação: dá para corrigir os defeitos dele quando valer a pena. |
Pacote que publicamossites/<appId>.js |
Configuração de campanhas, opt-in e pop-ups | É só isto que muda: a mesma configuração + um coletor de sinais de poucos KB |
→ ver todo o código — coletor, endpoint, esquema, diff e simulador, sem precisar de acesso ao repositório
Ou seja, a expressão correta não é «atualizar a tag do cliente» — é «publicar um pacote novo para aquele appId». E publicar é literalmente o que o SiteConfigService já faz hoje: um putObject no bucket, na chave sites/<appId>.js. Reverter é publicar a versão anterior na mesma chave.
O documento passa a usar pacote v1 e pacote v2 em vez de «tag v1/v2», para que ninguém saia daqui achando que há trabalho do lado do cliente onde não há.
| O que muda na prática | Pacote v1 | Pacote v2 |
|---|---|---|
| O que se observa | Opt-in, cliques em pop-up, conversão declarada pelo site | + páginas, produto, preço, categoria, busca, filtros, rolagem, tempo, sequência, carrinho, saída |
| Estado no navegador | pnews_*: primeira visita, últimas conversões, dispensas, tags | + contadores de sessão, número de visitas, produtos vistos, origem |
| Para onde envia | api.pn.vg | Igual, sem mudança — e mais um envio em lotes para o coletor novo |
| Efeito no produto atual | — | Nenhum. Campanhas, pop-ups e push continuam exatamente como estão |
| Peso acrescentado | — | Poucos KB, assíncrono, com orçamento de bytes por sessão |
| Quem precisa agir | — | Nós. O lojista só autoriza |
| Tempo para ligar numa loja | — | Minutos — o tempo de publicar um arquivo |
| Reversível? | — | Sim, republicando o pacote anterior na mesma chave |
Ao lado da configuração de campanhas que já geramos, o arquivo passa a carregar um coletor de sinais — um módulo pequeno, sem dependências, idempotente, que faz três coisas e mais nenhuma:
Só isso já produz o esquema rico da seção seguinte para lojas reais, com tráfego real, sem esperar por nada. As duas peças que exigem trabalho de verdade — o armazém de eventos e o coletor no edge — são infraestrutura nossa, construída em paralelo, sem bloquear a coleta.
Três coisas, e é honesto listá-las agora para ninguém se surpreender depois. O cookie de primeira parte precisa do endpoint no domínio da loja — sem isso a memória é curta no Safari, e o caminho para tornar isso fácil está algumas seções abaixo. Sinais que só o site sabe — carrinho, login, estoque em tempo real — ficam melhores com uma camada de sinais instalada pelo cliente, mas há uma versão inferida que funciona sem ela. E texto verdadeiramente personalizado depende de createPushOnSite, que compõe o conteúdo do nosso lado — o SDK não substitui variáveis no título e no corpo dos pop-ups, então o caminho é compor o texto inteiro antes de mandar.
Uma armadilha que custa caro se for esquecida
Antes da inicialização, todo comando que não seja init é descartado em silêncio.
Qualquer código nosso tem que entrar embrulhado numa função empurrada para a fila — IlabsPush.push(function(){ … }) — que a tag chama quando inicializa. E, em SPA, cada troca de rota reinicia a tag: o coletor precisa ser idempotente e se reaplicar a cada TAG:LOADED. Essas duas coisas são a causa número um de sinal perdido, e não aparecem em nenhum erro no console.
Arranque
Metade do caminho já está andada, e vale listar o que existe antes de listar o que falta — porque é a diferença entre um projeto de trimestre e uma semana de trabalho.
| Peça | Estado | Onde está |
|---|---|---|
| Canal de entrega do pacote | Existe | SiteConfigService já publica sites/<appId>.js no bucket. Publicar um pacote novo é um putObject. |
| Esqueleto do coletor | Existe | pn-personalization.js, do piloto: ~430 linhas, com adaptadores por loja para tipo de página, categoria, SKU, preço, carrinho e login. O coletor v2 que saiu daí está aqui. |
| Loja de ensaio | Existe | A demo-store é nossa e já tem a tag por GTM. Dá para testar tudo sem pedir nada a nenhum cliente. |
| Canal de saída | Existe | Push com base de inscritos, e o SDK renderiza onsite. |
| Endpoint de coleta | Falta | Aceitar lotes, validar envelope, limpar PII, gravar. É a única peça de infraestrutura nova do dia 1. |
| Esquema rico de eventos | Falta | Envelope + payload tipado + propriedades livres, como na seção anterior. |
| Envio em lotes no coletor | Falta | Estender o script do piloto: buffer, 10–30 eventos, envio assíncrono. |
Três itens em falta, todos pequenos, nenhum bloqueado por decisão de arquitetura. A sequência abaixo é o que dá para fazer nos primeiros cinco dias úteis.
→ já escrito e no ar
Um endpoint que aceita POST de lotes, valida o envelope, rejeita PII por padrão e grava o evento cru. No primeiro dia não precisa ser o armazém colunar da arquitetura alvo — precisa não perder evento. Guardar agora, processar depois.
curl com um lote de teste aparece gravado→ já escrito e verificado em Chromium
Pegar o pn-personalization.js e acrescentar o que falta: leitura de JSON-LD e dataLayer, contadores de sessão e visitas, rolagem, tempo, sequência de páginas, e o buffer que envia em lotes. Tudo dentro do embrulho da fila e idempotente por causa das SPA.
demo-store produz a sessão inteira do lado do coletor→ mergeado em main
O SiteConfigService passa a incluir o coletor no pacote quando a loja tiver a flag de coleta ligada. Uma flag por loja, desligada por padrão — assim ninguém é ligado por acidente e desligar é imediato.
main. Falta o deploy de produção do pushnews-app, que estava morto e agora é disparável à mãoLigar na demo-store e conferir quatro coisas: os eventos chegam completos, o peso acrescentado está dentro do orçamento, nada no produto atual mudou, e a tag sobrevive à troca de rota. Nenhum cliente envolvido até aqui.
Uma conta ativa que venda, com volume decente e um interlocutor acessível. Autorização por escrito, flag ligada, e acompanhar o primeiro dia de perto. Esta é a única data que precisa ser marcada — depois dela, cada loja nova é uma conversa curta e uma linha na configuração, e podem entrar várias na mesma semana.
Estado real, 12 de agosto
D1 a D4 estão feitos, verificados e em produção.
O endpoint é uma edge function pública que grava numa tabela de eventos com chave idempotente, valida o envelope, limpa PII e recusa lojas sem autorização registrada — testado sem qualquer credencial, como a tag chama. O coletor foi exercitado em Chromium: JSON-LD, rolagem, hesitação e troca de rota em SPA. A ligação ao SiteConfigService está mergeada em main (#3), com flag por loja desligada de fábrica e prova de md5 de que quem não está na lista recebe um pacote byte-a-byte idêntico. A console lê os dados que estão lá gravados. Falta o D5 — a primeira loja real, que é decisão comercial.
O que NÃO é preciso na primeira semana
Armazém colunar, perfis, scores, modelos, motor de decisão, console nova, geração de criativo — nada disso.
Tudo isso vem depois e pode ser construído com calma, porque só depende de dados que já estarão sendo guardados. A única coisa que não se recupera é o tempo em que não se coletou. Por isso o dia 1 é o endpoint, e não o motor.
Ponto de partida honesto
Vale a pena separar o que nos limita do que nos dá vantagem, porque a proposta se apoia inteiramente na segunda coluna.
ecommerce_events guarda essencialmente nome do evento e data — sem produto, sem preço, sem contexto, sem propriedades livres.A implicação
Isso não é reconstruir o produto. É construir um cérebro para um corpo que já existe e já está instalado.
Modelo de dados
O erro mais caro que podemos cometer é tratar tudo como «dados». Essas três camadas têm requisitos opostos e devem viver em lugares diferentes.
| Camada | O que é | Volume | Requisito dominante |
|---|---|---|---|
| Eventos | Fatos imutáveis. «O visitante 98AF viu o Pegasus às 11:42 a R$ 899.» Nunca se editam. | Centenas de milhões por loja grande | Escrita barata, leitura analítica, arquivo |
| Perfil | O estado atual de um visitante. Afinidades, scores, últimos produtos, valor esperado. É reescrito constantemente. | Milhões de perfis, dezenas de atributos cada | Leitura em menos de 10 ms |
| Inferência | Derivados: modelos, embeddings, taxonomia, aprendizados da loja. Recalculável a partir das duas anteriores. | Pequeno | Descartável e reproduzível |
Regra de runtime
Nunca ler três mil eventos para tomar uma decisão.
O caminho crítico lê o perfil, e o perfil é atualizado em segundo plano à medida que os eventos chegam. Se a decisão precisar tocar no armazém de eventos, a arquitetura está errada.
Esquema
O ponto que torna isso à prova de futuro: daqui a seis meses vamos descobrir que tempo_entre_visualizacoes ou abriu_info_de_entrega são muito preditivos. Se o esquema não aceitar campos novos sem migração, perdemos esses sinais para sempre — e não há como recuperá-los retroativamente.
{
"envelope": { // validado na escrita, estável
"event_id": "01JC…", // ULID, idempotência
"store_id": "st_4821",
"visitor_id": "98AF…", // pseudônimo, por loja
"session_id": "s_77c1…",
"ts": "2026-08-12T11:42:03.221Z",
"type": "product_view",
"schema_v": 2,
"consent": { "analytics": true, "marketing": false },
"source": { "utm_source": "google", "utm_campaign": "…", "referrer": "…" },
"device": { "kind": "mobile", "os": "iOS", "viewport": [390, 844] },
"page": { "kind": "pdp", "url_hash": "…", "locale": "pt-BR" }
},
"payload": { // tipado por "type"
"product_id": "NIKE-PEG-41",
"title": "Pegasus 41",
"category_path": ["Calçados", "Corrida", "Rua"],
"brand": "Nike",
"price": 899.00,
"compare_at": 1099.00,
"currency": "BRL",
"variant": { "size": "42", "color": "preto" },
"in_stock": true,
"position": 3
},
"properties": { // livre, schema-on-read
"scroll_depth": 0.80,
"time_on_page_ms": 38200,
"nth_view_of_sku": 3,
"came_from_search": "red running shoes"
}
}
Envelope validado na escrita, propriedades interpretadas na leitura. O envelope é contrato: se falhar na validação, é rejeitado. As propriedades entram sem cerimônia e ganham significado quando alguém descobrir que são úteis. Isso permite à tag começar a coletar um sinal novo hoje e nós decidirmos daqui a três meses se ele entra no modelo.
A última coluna é a mais importante e a mais fácil de esquecer: sem registrar o que nós mesmos mostramos, e a quem, não conseguimos medir uplift nem treinar nada. Os eventos das nossas intervenções são tanto dados de treino quanto os do visitante.
A pergunta óbvia ao ler a coluna «sinais finos»: como sabemos qual botão é o tamanho do calçado, qual é o cálculo de frete, qual é a aba de avaliações? Na demonstração está tudo colado ao site de teste, e o pn-personalization.js de hoje resolve isso com adaptadores escritos loja a loja. Não é isso que se propõe repetir. São três camadas, e só a última precisa de trabalho por loja — que também é automatizável.
Igual em qualquer loja, sem saber o que é botão nenhum: tipo de página por padrão de URL; produto, preço, marca, stock e categoria por JSON-LD ou dataLayer; rolagem, tempo, n.ª vez no mesmo SKU, n.ª visita, origem, dispositivo.
hesitation e exit_intent estão aqui — são temporização e geometria (parado numa PDP; ponteiro a sair pelo topo), não semântica de DOM.
Quem tem GA4 ou GTM já empurra view_item, add_to_cart, select_item e begin_checkout no dataLayer, no esquema padrão. Escutar o dataLayer é um adaptador, não trabalho por cliente.
O mesmo para as plataformas: Shopify, VTEX, Nuvemshop, Tray e WooCommerce têm DOM e APIs conhecidas — cinco adaptadores escritos uma vez, não um por loja.
O botão do 42, o cálculo de frete, a aba de avaliações. A resposta não é mapear à mão: a tag regista o clique de forma anónima (selector estável, aria-label, texto visível, label mais próxima) e, uma vez por loja, um modelo lê o template da PDP e devolve o mapa semântico, versionado, revalidado quando o DOM muda.
Minutos de máquina por loja, não horas de consultor.
«Clicou 3× no elemento X e saiu» já é preditivo sem saber que X é o seletor de tamanho. O rótulo serve para escrever a frase — «ainda em dúvida no tamanho?».
Decisão a partir do sinal genérico; explicação a partir do mapa semântico. Sem mapa, a decisão é a mesma e o texto cai para a versão genérica — e o motor diz que degradou, em vez de inventar.
Identidade
A parte de produto está na Peça 3. Aqui fica o que a equipe precisa construir, porque a diferença entre reconhecer alguém por sete dias e por um ano está em três detalhes de implementação.
Um cookie escrito por JavaScript no Safari é apagado em 7 dias pelo ITP — 24 horas se o visitante chegou por um link com parâmetros de rastreio conhecidos. Não é contornável por engenhosidade: é política do navegador. O que é aceito é um cookie de primeira parte emitido pelo servidor, num Set-Cookie HTTP vindo de um endpoint no próprio domínio da loja.
Ou seja, o coletor do pacote v2 não pode falar só com api.pushnews…: o coletor precisa responder de dentro do domínio do cliente. O caminho clássico para isso é um CNAME — e aqui está a parte que decide a adoção do produto inteiro, porque pedir um registro de DNS a um lojista é onde o onboarding morre. Metade não sabe onde fica o DNS; a outra metade sabe e vai «ver isso com a agência» — que é como se diz «nunca» em português.
A saída é não tratar isso como um passo único e obrigatório, mas como uma escada de quatro caminhos que o próprio onboarding percorre sozinho, do mais invisível ao mais manual. Detectamos a plataforma e o provedor de DNS da loja no primeiro minuto e oferecemos só o caminho mais fácil que aquela loja permite.
Shopify, VTEX, Nuvemshop, Tray e WooCommerce já sabem servir um caminho do próprio domínio da loja e encaminhá-lo para um terceiro. No Shopify chama-se App Proxy: loja.com.br/apps/pushnews/* chega até nós, com o domínio da loja no cabeçalho — primeira parte de verdade, sem tocar em DNS. No WooCommerce, o plugin faz o mesmo dentro do WordPress.
Muita loja no Brasil está em Cloudflare. Nesse caso o lojista autoriza pela conta dele (OAuth), e nós criamos o registro e a regra de proxy por API. Ele vê uma tela de permissão, não um painel de DNS.
Quando não há app nem Cloudflare, lemos o provedor de DNS pelos servidores de nome e mostramos as instruções daquele provedor — Registro.br, Locaweb, HostGator, GoDaddy — com o valor pronto para copiar. E ficamos verificando a propagação sozinhos: quando o registro aparece, ativamos e avisamos. O lojista nunca precisa voltar para dizer que fez.
O motor roda com cookie de navegador e memória curta. O que não pode acontecer é falhar em silêncio: a console mostra «memória reduzida — reconhecemos quem volta por até 7 dias no Safari», com o número real de retornos que estamos perdendo e o botão para ativar a memória longa. É o mesmo princípio da simulação declarada: funcionar pior é aceitável, esconder que está pior não é.
E o nome disso na tela
Ninguém quer «configurar um CNAME». Todo mundo quer que o produto lembre dos clientes.
No onboarding isso se chama «ativar memória longa», com uma frase explicando o ganho — «passamos a reconhecer quem volta por até um ano, em vez de uma semana» — e o caminho técnico escondido atrás do botão. O passo continua existindo; o que muda é que ele deixa de parecer trabalho de TI e passa a parecer uma funcionalidade que se liga.
Quando um visitor_id anônimo passa a estar ligado a uma pessoa, o histórico anterior tem que ser reatribuído. Isso não se faz reescrevendo eventos — eles são imutáveis. Faz-se com uma tabela de aliases que mapeia identificadores para uma identidade canônica, e recalculando o perfil por cima dela.
identity_alias store_id st_4821 from_id 98AF… // visitor anônimo do desktop to_id usr_5512… // identidade canônica evidence "email_no_checkout" // sinal forte, nunca heurística confidence 1.0 linked_at 2026-08-12T11:58Z reversible true // dá para desfazer, e às vezes é preciso
Como o perfil é derivado e não editado, desfazer uma fusão errada é remover a linha e recalcular — não é uma cirurgia de dados. É exatamente por isso que a Peça sobre as três camadas insiste que a inferência seja descartável e reproduzível.
A métrica que prova que isso funciona
Taxa de reconhecimento de retorno, medida por navegador e por janela de tempo.
É o número que diz se temos memória ou ilusão de memória, e tem que estar no painel interno desde a F2 — separado entre Chrome/Android e Safari/iOS, porque a média esconde exatamente o problema que interessa. Se cair, alguma coisa mudou num navegador e o motor está cego sem saber.
Arquitetura alvo
A transição
Nenhuma dessas fases exige desligar o que existe. O sistema atual continua funcionando durante todo o percurso, e cada fase tem uma forma explícita de se provar antes de avançarmos para a seguinte.
O pacote v2 passa a enviar o esquema novo para um coletor novo, mantendo intacto tudo o que hoje envia. Zero mudanças visíveis para o lojista e para o visitante. É a fase que compra opções: a partir do dia em que entra no ar, começamos a acumular a matéria-prima de tudo o resto.
Modo de aprendizado: identificar automaticamente páginas de produto, listagens, pesquisa, carrinho e checkout; extrair o catálogo; construir a taxonomia a partir dos produtos reais em vez da lista de interesses feita manualmente. Continua invisível para o lojista.
Armazém de perfis, motor de features, primeiros modelos de propensão. O perfil existe e está correto, mas ainda não decide nada. É aqui que se ganha ou perde a latência: o alvo é ler um perfil em menos de 10 ms.
O motor decide e registra a decisão, mas não age. Comparamos o que ele teria feito com o que as campanhas manuais fizeram. Esta é a fase que nos diz se a tese é verdadeira, e é a mais barata de todas para descobrir que não é.
Primeiro valor visível para o cliente. As oportunidades aparecem quantificadas na console, o lojista clica em «Ativar», e o motor executa através do SDK que já existe. As campanhas manuais continuam funcionando ao lado, com prioridade configurável.
O motor lança e retira experiências dentro dos limites definidos no onboarding: teto de desconto, frequência máxima, tom. Com interruptor de emergência acessível, registro auditável de cada decisão, e o grupo de controle mantido para sempre.
Coexistência
Não há backfill possível. O histórico em ecommerce_events não tem produto, preço nem contexto, e nada os recupera. Serve para volumetria e sazonalidade; não serve para inteligência. O aprendizado de cada loja começa no dia em que o pacote v2 é publicado — o que é mais um argumento para colocar a F0 no ar cedo, mesmo antes de sabermos se vamos construir todo o resto.
Regra de medição
Grupo de controle permanente entre 5% e 10% dos visitantes, que nunca recebe qualquer intervenção do motor.
É a única maneira de a frase «geramos R$ 188.200 de receita incremental» ser verdadeira em vez de ser correlação bem apresentada. Custa-nos alguma receita e compra-nos a credibilidade do número que vamos colocar na capa da console.
Camadas de decisão
Se mandarmos cada evento a um modelo de linguagem, a fatura é impossível e o resultado é pior. Um LLM é extraordinário a interpretar, raciocinar, gerar conteúdo e explicar decisões — e é um mau e caro classificador de probabilidade de compra. Cada camada só passa à seguinte o que a anterior não consegue resolver.
Regra de arquitetura
Nenhuma chamada a um LLM sem uma razão econômica para essa chamada.
Cada chamada precisa estar ligada a detectar uma oportunidade, escolher uma ação, criar uma experiência, aprender alguma coisa ou aumentar receita. E nenhuma chamada a um LLM no caminho crítico de uma decisão onsite: o orçamento de latência é de 100 ms no percentil 95, e o criativo é gerado antecipadamente e servido de cache.
Privacidade
Coleta intensiva de comportamento no Brasil significa LGPD, e conformidade precisa ser desenhada junto com o sistema, não acrescentada depois. E vira argumento de venda: é exatamente aqui que as plataformas americanas são frágeis.
visitor_id é pseudônimo e isolado por lojista. Não construímos um grafo de comportamento entre lojas — não temos base legal para isso na LGPD, e seria o que nos derrubaria numa auditoria.visitor_id precisa remover eventos e perfil, e os derivados precisam ser recalculáveis sem essa pessoa. Se um modelo não pode ser retreinado sem ela, o pedido de exclusão não foi cumprido.Riscos
| Risco | Mitigação |
|---|---|
| O motor treina naquilo que ele mesmo causou e entra numa espiral | Grupo de controle permanente, registro da propensão de cada decisão, e exploração forçada de uma fração do tráfego. |
| Partida a frio: uma loja nova não tem dados para nada | Modelos globais de base especializados por loja ao longo das semanas; até lá, oportunidades genéricas conservadoras. |
| Latência onsite acima de 100 ms degrada a página do cliente | Perfil em cache no edge, decisão sem LLM no caminho crítico, criativo pré-gerado por combinação de estratégia e contexto. |
| Custo de IA sai de controle numa loja grande | Orçamento por loja com disjuntor, cache de criativo, processamento em lote para tudo o que não é tempo real. |
| Lojas com marcação pobre — sem JSON-LD, sem dataLayer | Cascata de descoberta com validação humana rápida no onboarding, e degradação explícita das capacidades disponíveis. |
| Tráfego de bots polui perfis e métricas | Filtragem no coletor antes de o evento entrar no armazém, e não lá na frente. |
| Queries analíticas mal escritas custam mais do que todo o armazenamento | Features materializadas e pré-agregação; o motor nunca faz varreduras ao vivo. |
| Deriva do modelo ao longo dos meses | Re-treino agendado e monitoramento de calibração como métrica de produção, com alerta. |
| Conflito entre campanhas manuais e experiências do motor | Um único árbitro de exibição com precedência explícita e limite de frequência compartilhado entre os dois mundos. |
Ritmo
O prazo curto só é possível por causa do que já existe: a tag instalada, o SDK que renderiza onsite, o canal push com base de inscritos, a relação comercial com as lojas e a configuração que geramos do lado do servidor. Não estamos começando um produto do zero — estamos ligando um cérebro a um corpo que já está no lugar.
O calendário abaixo é contado a partir de agosto de 2026 e assume uma equipe pequena e dedicada. Cada marco tem uma verificação observável, não uma opinião sobre estar pronto.
Fase 0 · agora
Começa esta semana e não depende de nenhuma decisão de arquitetura. Conversa curta com as contas ativas que vendem, autorização por escrito, e a coleta é ligada pela configuração que já emitimos.
Coletor de sinais emitido na configuração, coletor no edge, armazém de eventos, esquema rico. Zero mudanças visíveis para o lojista e para o visitante.
→ código: pn-collector.js · endpoint · esquema · o diff do gerador de pacotes
Risco desta fase: uma loja recusar por desconfiança. Mitigação: o pedido é de leitura, não de mudança — e o argumento é honesto, porque ela recebe o diagnóstico de graça no fim.
Fase 1 · setembro a novembro
As três peças que transformam eventos em decisão, construídas em paralelo com a coleta já rodando — de modo que, quando o motor ficar pronto, ele tenha semanas de histórico real de lojas reais para aprender, em vez de começar vazio.
Descoberta automática de páginas, catálogo, embeddings e taxonomia a partir dos produtos reais.
Armazém de perfis, motor de features, primeiros modelos de propensão. Ainda invisível para o lojista.
O motor decide e registra, mas não age. É a fase mais barata para descobrir que a tese está errada, e por isso ela vem antes de qualquer promessa comercial.
Começa com uma ou duas — para haver alguém a acompanhar de perto o primeiro dia de cada uma — e alarga assim que a primeira mostrar uplift. Não há razão técnica para o piloto ser pequeno: instalar a segunda loja não repete nenhum trabalho da primeira; é uma autorização e uma linha na configuração.
O que a escala do piloto muda
A primeira loja custa uma conversa e um dia de acompanhamento. A décima custa um e-mail.
Isso tem duas consequências que vale a pena assumir já. A primeira é que o piloto deve ser deliberadamente diverso — moda, calçados, farmácia, um supermercado, um serviço — porque um motor treinado em cinco lojas parecidas aprende a resolver uma loja só. A segunda é que o gargalo deixa de ser técnico e passa a ser atenção: cada loja no piloto precisa de alguém que olhe para os números dela na primeira semana. É esse número de pessoas que define quantas entram, não a infraestrutura.
Fase 2 · dezembro a fevereiro
Só aqui o produto começa a cobrar, e por uma razão de sequência: a auditoria só convence com dados daquela loja, e esses dados levam semanas para existir. Cobrar antes seria vender promessa; cobrar depois de mostrar o diagnóstico é vender resultado.
O que decide se esse calendário se cumpre
Não é a velocidade de escrever código. É a data em que a primeira loja começa a coletar.
Todo o resto pode atrasar duas semanas sem consequência. A coleta, não: ela define quando existe histórico suficiente para o motor aprender, para a auditoria ser convincente e para o trial ter o que medir. E como cada loja seguinte entra por autorização — sem repetir trabalho técnico nenhum —, a data que realmente importa é a da primeira. As outras vêm atrás dela, e depressa.
2027
A partir de fevereiro o trabalho deixa de ser construir e passa a ser escalar — com três frentes rodando em paralelo e uma quarta que só abre quando as três primeiras estiverem estáveis.
Os números trimestrais dessa escala — quantas lojas, qual receita, com que margem — estão na aba do plano.
Enquadramento
Estes números são estimativas de ordem de grandeza, com premissas explícitas, feitas para decidir arquitetura — não são uma proposta de preços nem um orçamento. O componente com maior incerteza é o compute analítico, que pode variar entre metade e o triplo do valor indicado conforme a qualidade das queries.
100 mil sessões/mês
≈ 5 M eventos
≈ 7,5 GB novos/mês
1 M sessões/mês
≈ 50 M eventos
≈ 75 GB novos/mês
10 M sessões/mês
≈ 500 M eventos
≈ 750 GB novos/mês
Custo direto mensal por loja
| Componente | Pequena | Média | Grande |
|---|---|---|---|
| Tag e coletor no edge | R$ 25 | R$ 50 | R$ 155 |
| Fila, fluxo e ingestão | R$ 15 | R$ 50 | R$ 305 |
| Analytics e armazém | R$ 130 | R$ 510 | R$ 3.840 |
| Armazenamento quente e frio | R$ 25 | R$ 205 | R$ 2.050 |
| Armazém de perfis e cache | R$ 75 | R$ 305 | R$ 1.280 |
| Features e scoring de ML | R$ 50 | R$ 510 | R$ 4.095 |
| IA em tempo real | R$ 40 | R$ 390 | R$ 3.890 |
| IA profunda e aprendizado | R$ 50 | R$ 510 | R$ 5.120 |
| Embeddings | R$ 5 | R$ 15 | R$ 100 |
| Logs e observabilidade | R$ 25 | R$ 205 | R$ 1.280 |
| Backups, segurança, jobs | R$ 25 | R$ 100 | R$ 510 |
| COGS técnico | R$ 465 | R$ 2.850 | R$ 22.625 |
| com 25% de margem operacional | R$ 580 | R$ 3.560 | R$ 28.280 |
Valores em reais por mês e por loja, convertidos à taxa de 11 de agosto de 2026 (1 USD = R$ 5,12; 1 EUR = R$ 5,91) e arredondados. A taxa cambial é uma variável real do modelo: o custo é quase todo em dólares e a receita é em reais, por isso uma desvalorização de 20% do real comprime a margem bruta sem que nada mude no produto.
Comunicações pagas — SMS e WhatsApp — estão deliberadamente fora desta tabela. Push, onsite e e-mail têm custo marginal baixo e podem estar incluídos; SMS e WhatsApp têm custo variável por operadora e destroem qualquer múltiplo se forem absorvidos na mensalidade.
Composição do custo
Esta é a leitura que mais interessa para decisões de produto: numa loja pequena, o custo é sobretudo compute analítico; numa loja grande, quase três quintos do custo são inteligência. Cada funcionalidade nova de IA pesa desproporcionalmente nos maiores clientes.
Reais por mês e por loja — pequena / média / grande —, agrupando as linhas da tabela acima. A proporção de IA sobe de 31% na loja pequena para 58% na grande.
Regra de preço
É a regra fixa do modelo: preço = 4 × COGS, o que dá 75% de margem bruta antes de vendas, suporte e estrutura. Serve como piso, não como preço recomendado: onde o valor gerado é muito superior — tipicamente nas lojas médias e grandes — o preço deve ser mais alto, e para clientes empresariais o alvo razoável é 5× a 8×.
| Segmento | COGS / mês | Preço ao lojista (4×) | Margem bruta |
|---|---|---|---|
| Pequena | R$ 465–580 | R$ 1.900–2.300 | 75% |
| Média | R$ 2.850–3.560 | R$ 11.400–14.200 | 75% |
| Grande | R$ 22.625–28.280 | R$ 90.500–113.000 | 75% |
A banda inferior de cada linha é o COGS técnico puro; a superior inclui os 25% de margem operacional. Vender ao preço da banda inferior mantém os 75% sobre o custo puro mas come a folga operacional — por isso o piso a usar comercialmente é o valor de cima.
Vale a pena olhar para a última linha sem embelezar: a regra dos 4× coloca uma loja de 10 milhões de sessões acima de R$ 90 mil por mês. É um preço de contrato empresarial, não de plano de catálogo — o que significa que o segmento grande precisa de venda consultiva com prova de receita incremental, e que a auditoria gratuita deixa de ser um truque de marketing para passar a ser o instrumento de venda principal. Se a conclusão for que o mercado não paga isso, o caminho é reduzir o COGS — quase todo IA, quase todo otimizável pelo funil computacional — e não afrouxar o múltiplo.
A consequência para a equipe de produto
Toda a funcionalidade de IA passa a ser avaliada também pelo efeito que tem no COGS.
Se uma funcionalidade nova sobe o custo de uma loja média de R$ 3.560 para R$ 4.900, o preço mínimo sobe automaticamente de R$ 14.200 para R$ 19.600. A pergunta deixa de ser «isso melhora a conversão?» e passa a ser «o ganho adicional justifica quatro vezes o custo marginal que acrescenta?». Só entra em autopilot o que tem esse índice claramente positivo.
Do lado do lojista
A regra dos 4× resolve a nossa margem. Falta a outra metade da conversa, que é a que se tem numa reunião: o lojista não compara o preço com o nosso custo, compara com o que ele ganha. E essa conta é mais simples do que parece.
| As 64 contas que vendem online | Por mês | Por ano |
|---|---|---|
| Total que pagam hoje | R$ 184.407 | R$ 2,21 milhões |
| Média por conta | R$ 2.881 | — |
| Mediana | R$ 1.338 | — |
| 11 contas acima de R$ 5 mil · mediana da faixa | R$ 7.911 | — |
| 26 contas entre R$ 1 mil e 5 mil · mediana | R$ 2.136 | — |
| 27 contas abaixo de R$ 1 mil · mediana | R$ 554 | — |
Da maior (R$ 22.500/mês) à menor (R$ 110/mês). A mediana em R$ 1.338 diz o essencial: metade da base que vende paga menos de mil e quatrocentos reais por mês — e é para essa metade que o preço novo de R$ 2.300 tem de ser justificado.
Com margem de 50%, cada real de mensalidade exige dois reais de venda adicional para empatar. É toda a aritmética: vendas adicionais necessárias = preço ÷ margem. O que muda entre os portes não é a conta, é o tamanho do denominador.
| Porte | GMV/mês estimado | Paga hoje | Preço novo | Vendas a mais para empatar | % do GMV |
|---|---|---|---|---|---|
| Pequena · 100 mil sessões | R$ 450 mil | R$ 1.400 | R$ 2.300 | R$ 4.600 | 1,02% |
| Média · 1 M sessões | R$ 5,4 mi | R$ 4.200 | R$ 14.200 | R$ 28.400 | 0,53% |
| Grande · 10 M sessões | R$ 63 mi | R$ 15.000 | R$ 113.000 | R$ 226.000 | 0,36% |
GMV estimado com conversão de 1,8% e ticket médio de R$ 250 a R$ 350 conforme o porte — valores conservadores para e-commerce brasileiro. «Paga hoje» é a mediana observada em cada faixa da nossa base. Margem do lojista assumida em 50%: numa loja de moda é mais, numa de eletrónicos é bem menos, e é por isso que a conta deve ser refeita com o número real dele na reunião.
E o argumento mais fácil de todos
O aumento de preço, sozinho, pede entre 0,3% e 0,4% de vendas a mais.
Uma loja pequena que paga R$ 1.400 e passa a pagar R$ 2.300 está acrescentando R$ 900 de custo — que, com 50% de margem, se pagam com R$ 1.800 de venda adicional por mês, ou 0,4% do que ela já vende. Na média são 0,37%; na grande, 0,31%. Não é preciso convencer ninguém de que o produto transforma o negócio: basta que ele mova a agulha meio ponto percentual.
Uma ressalva que nos impede de nos enganarmos a nós próprios: o simulador calcula «lucro incremental» e dá números altos, mas não serve para provar esta conta. Ele demonstra o mecanismo — que o motor escolhe por lucro e não por conversão — com deltas de probabilidade que eu escolhi. O número que vale é o do grupo de controle numa loja real, e é por isso que ele aparece já na primeira fase paga. Até lá, a única coisa que se pode afirmar com segurança é esta: a barra que o produto tem de saltar é da ordem de 1%, e isso é baixo.
Unidade de custo
Uma sessão que entra, vê a homepage e sai custa praticamente zero. Uma sessão que vê doze produtos, faz três pesquisas, adiciona ao carrinho, retira, volta, recebe uma recomendação, fala com o assistente, abandona, recebe um push, volta e compra consome centenas de vezes mais recursos — e gera muito mais valor.
A unidade interna certa é a decisão de conversão analisada, não a sessão nem o pageview. É essa unidade que devemos instrumentar desde a F0, porque é sobre ela que assentará tanto o modelo de custos como qualquer modelo de preços futuro.
A conclusão econômica
O risco não é guardarmos dados a mais. É processarmos dados de forma burra.
Com uma arquitetura razoável, uma loja média com 50 milhões de eventos por mês fica abaixo de R$ 3.600 de infraestrutura e IA. Preferimos coletar demais no início do que de menos: se daqui a seis meses descobrirmos que um sinal é altamente preditivo e nunca o coletamos, não há forma de voltar atrás.
Retenção
Software de marketing costuma valer o máximo no dia da instalação e virar commodity depois — por isso o churn é uma luta permanente e a renovação se ganha no desconto. Um motor que aprende inverte essa curva: no mês 1 ele sabe pouco e vale pouco; no mês 12 ele conhece a sazonalidade daquela loja, sabe quais categorias reagem a frete, quais clientes não merecem desconto, que criativo funciona em qual público. Trocar de fornecedor deixa de ser trocar de ferramenta e passa a ser apagar a memória.
A conta é simples e vale a pena estar escrita, porque justifica investir em onboarding com a mesma seriedade com que se investe em features. Tomando a loja média a R$ 14.200/mês com 75% de margem bruta — R$ 10.650 de margem por mês:
| Churn mensal | Vida média | Margem por cliente (LTV) |
|---|---|---|
| 3,0% — típico de ferramenta de marketing | 33 meses | R$ 355 mil |
| 2,0% | 50 meses | R$ 533 mil |
| 1,5% — o que o conhecimento acumulado permite | 67 meses | R$ 710 mil |
Cortar o churn pela metade dobra o valor de cada cliente — aritmética elementar, mas o que importa aqui é o mecanismo: não é fidelidade nem contrato de 12 meses, é o custo real de recomeçar. Um concorrente que entre amanhã não herda nada: volta ao modo de aprendizado, e são 60 a 90 dias até valer alguma coisa. Esse intervalo é a barreira.
Vale separar isso explicitamente, porque a diferença define que tipo de empresa somos. Reter dado é hostil — e, no Brasil, também é ilegal: a LGPD dá ao titular o direito à portabilidade, e os eventos e perfis são do lojista. Devemos exportá-los inteiros, em formato aberto, no dia em que ele pedir, sem fricção e sem ligação para «entender melhor a sua necessidade».
O que não se exporta é o modelo calibrado, e isso não é uma trava que colocamos: é a natureza da coisa. Os pesos só fazem sentido dentro do motor que os treinou, do mesmo jeito que exportar as notas de um aluno não transfere o que ele aprendeu. O lojista leva a matéria-prima e não leva a experiência — e é justamente por isso que a barreira é honesta.
Para discussão
Nada disso depende de aprovarmos a visão inteira hoje. Depende de decidirmos as quatro primeiras.
Ponto de partida
Todo o plano assenta em quatro fatos lidos da base de agosto de 2026, e vale começar por eles porque são menos confortáveis do que a narrativa habitual.
| Fato | Hoje | O que significa para o plano |
|---|---|---|
| Contas pagantes | 123 | Base pequena. Cada conversão pesa muito, e cada cancelamento também. |
| MRR | R$ 348 mil | ARR de cerca de R$ 4,2 milhões. Top-10 clientes = 38% do MRR, top-20 = 58%: concentração alta. |
| Contas que vendem online | 64 | É o alvo real do motor. São 53% do MRR (R$ 184 mil). O resto publica conteúdo ou presta serviço. |
| Novas contas por ano | de 330 → 13 | A aquisição caiu ano após ano desde 2017. O plano não pode depender de vender para gente nova no primeiro ano. |
A última linha é a mais importante e a menos discutida: 2017 trouxe 330 contas novas, 2024 trouxe 71, 2025 trouxe 39 e 2026 traz 13 até agora. Um plano que assuma crescimento por aquisição em 2027 está assumindo uma reversão que ainda não aconteceu. Por isso o plano abaixo cresce, no primeiro ano, dentro de casa: convertendo quem já é cliente e reativando quem saiu.
O ativo que não aparece em nenhuma linha do balanço
959 contas pagaram e saíram, deixando R$ 20,5 milhões de receita histórica para trás. E quase 18 mil registaram-se sem nunca pagar.
São dois ativos distintos e vale não os confundir. As 959 tiveram a tag instalada — é a base de reativação, maior em receita já provada do que a base ativa. Numa amostra medida em 12 de agosto, cerca de 10% ainda carregam o nosso arquivo — aí o arranque é imediato. As quase 18 mil são sobretudo leads que nunca instalaram nada: delas temos o e-mail de alguém que um dia procurou exatamente isto. Uma é distribuição; a outra é aquisição. Somá-las numa só linha seria contar a mesma história duas vezes.
O tamanho do prêmio
As 64 contas que vendem pagam hoje R$ 184 mil por mês. No preço da regra de 4× COGS, com o mix de portes que essa base sugere, as mesmas 64 contas valeriam cerca de R$ 511 mil por mês — 2,8 vezes mais, sem um cliente novo sequer.
| Porte | Contas | Preço/mês | Se todas converterem |
|---|---|---|---|
| Grande (10 M sessões) | 2 | R$ 113 mil | R$ 226 mil |
| Média (1 M sessões) | 12 | R$ 14,2 mil | R$ 170 mil |
| Pequena (100 mil sessões) | 50 | R$ 2,3 mil | R$ 115 mil |
| Teto teórico da base atual | 64 | — | R$ 511 mil |
Portes estimados pelo MRR atual como aproximação de volume — dos 64, onze pagam acima de R$ 5 mil/mês e vinte e sete pagam menos de R$ 1 mil. É uma aproximação grosseira que a coleta da F0 vai substituir por número real de sessões nas primeiras semanas, e esse é mais um motivo para ligá-la já.
É um teto, não uma previsão. Nem todas convertem, nem todas convertem rápido, e algumas vão achar caro — a loja que paga R$ 1,4 mil hoje vai receber uma proposta de R$ 2,3 mil. A diferença entre o teto e o plano de verdade é exatamente o que a tabela seguinte modela.
Projeção
A trajetória segue o roadmap: nada de receita nova até o produto existir, primeiras ativações no primeiro trimestre de 2027, e escala só depois de a auditoria provar que converte. As lojas que migram deixam de pagar o plano antigo — a coluna de legacy já desconta isso.
| Trimestre | Lojas no motor | MRR do motor | Legacy | MRR total | O que acontece |
|---|---|---|---|---|---|
| Hoje · Q3 2026 | 0 | — | R$ 348 mil | R$ 348 mil | Coleta ligada em 30–40 lojas, de graça |
| Q4 2026 | 1 piloto | — | R$ 348 mil | R$ 348 mil | Produto completo em novembro · trial em dezembro |
| Q1 2027 | 7 | R$ 28 mil | R$ 335 mil | R$ 363 mil | Primeiras ativações pagas |
| Q2 2027 | 17 | R$ 75 mil | R$ 316 mil | R$ 391 mil | Abre para a base que cancelou |
| Q3 2027 | 31 | R$ 253 mil | R$ 293 mil | R$ 546 mil | Primeira loja grande entra |
| Q4 2027 | 45 | R$ 432 mil | R$ 275 mil | R$ 707 mil | Meta de saída · ARR R$ 8,5 milhões |
Barras na mesma escala: o comprimento total é comparável entre linhas. O MRR dobra em quinze meses, e o que muda de verdade é a composição — no fim de 2027, a maior parte da receita vem de um produto que hoje não existe.
Margem
Como o preço é fixado em 4× COGS, a margem bruta do produto novo é conhecida por construção. O que a tabela mostra é que ela se mantém enquanto a receita triplica — que é a propriedade que torna esse crescimento saudável em vez de apenas grande.
| Q4 2027 | Receita/mês | COGS/mês | Margem bruta |
|---|---|---|---|
| Motor (2 grandes, 9 médias, 34 pequenas) | R$ 432 mil | R$ 108 mil | 75% |
| Legacy (push e pop-ups) | R$ 275 mil | baixo | alta |
| Total | R$ 707 mil | — | — |
Os R$ 108 mil de COGS saem da tabela de custos da aba anterior aplicada ao mix de portes. Fora dessa conta: equipe, vendas, suporte e as comunicações pagas — SMS e WhatsApp iniciado por nós — que continuam faturadas à parte, por crédito, para não corroerem o múltiplo.
Vale deixar as premissas expostas, porque cada uma delas é falsificável e é assim que se descobre cedo que o plano precisa mudar:
O cenário conservador, para não fingir que só há um
Se a conversão for metade do previsto e nenhuma loja grande entrar em 2027, o motor fecha o ano em torno de R$ 110 mil/mês em vez de R$ 432 mil.
Ainda assim seria um MRR total próximo de R$ 420 mil — acima de hoje, com margem de 75% no produto novo e com a coleta rodando numa base que nenhum concorrente tem. O pior caso do plano continua sendo melhor do que a trajetória atual, em que a aquisição cai ano após ano e a receita depende de dez clientes.
Não é maquete
Tudo o que este documento descreve existe e está de pé: o coletor, o endpoint que grava, o motor que constrói perfis e decide, e a console. As 1.000 sessões abaixo foram gravadas numa base de produção pela mesma função que uma loja real chamaria — nenhum número desta aba foi escrito à mão.
Clique numa sessão para ver os scores e a decisão. Depois, em «ver na loja», a sessão é reproduzida na loja demo: o cursor se move, a página rola, o painel de frete abre, o item cai na sacola — e no fim aparece a experiência que o motor escolheu, ou não aparece nada, se ele decidir não interromper.
O motor não espera pelo fim. Ao longo da sessão ele intervém quando o sinal aparece: na terceira volta ao mesmo modelo, na segunda abertura do frete, na parada em cima do preço. A barra do replay conta essas intervenções à medida que acontecem, e cada uma diz o que a provocou. As de meio de sessão saem de cena sozinhas; só a decisão final fica. E os botões de WhatsApp que surgem na página são os mesmos da aba WhatsApp — durante um replay não disparam nada para fora, mostram a mensagem que sairia.
O acerto é medido contra a persona que gerou cada sessão — que o classificador nunca lê. Ela existe nos dados só como gabarito. É a diferença entre demonstrar e fingir.
Abrir a console em aba própria → · ver um replay direto na loja → · ler o código que gerou isto →
A console acima é a mesma que abre em aba própria. Os replays na loja abrem sempre numa aba nova.
A distinção que muda tudo
Quando se diz «vamos usar WhatsApp», estão sendo ditas duas coisas que não têm quase nada em comum. Uma é cara, lenta de aprovar e cheia de regras. A outra é imediata, gratuita e ninguém precisa de autorizar nada. Confundi-las é o erro que faz um projeto de WhatsApp demorar três meses para começar.
| Nós iniciamos · outbound | Ela inicia · inbound | |
|---|---|---|
| Como acontece | Mandamos uma mensagem para quem não falou conosco | Ela toca num botão no site e manda a primeira mensagem |
| Template aprovado | Obrigatório, com categoria e revisão da Meta | Não existe. Texto livre |
| Opt-in de marketing | Obrigatório, e registrado | Não se aplica — ela iniciou |
| Limites de volume | Tiers de 1 mil, 10 mil, 100 mil conversas iniciadas | Não contam. Inbound não entra no tier |
| Qualidade e bloqueio | Quality rating cai, e com ela o limite | Risco muito menor: ela pediu para falar |
| Custo por conversa | R$ 0,30 a R$ 0,60 | Zero, durante 24 horas |
| Quanto demora a ligar | Semanas: verificação, templates, aprovações | Um link. Hoje |
A consequência para a sequência de trabalho
Começamos pelo lado que não precisa de autorização de ninguém.
Todo o custo, toda a burocracia e todo o risco de bloqueio vêm de sermos nós a iniciar. Invertendo o sentido — um botão no site, ela manda a primeira mensagem — isso tudo desaparece de uma vez. E não é um consolo: é o degrau que colhe o telefone, o consentimento e a ligação à sessão, que é o que falta para o resto funcionar. O outbound de template continua a fazer sentido, mas depois, e só quando houver base de opt-in que o justifique.
O que pediste
Não é um botão flutuante de «Fale conosco» parado no canto — esse toda a gente aprendeu a ignorar. É um convite que nasce da hesitação que o motor viu, no sítio onde ela aconteceu, com o texto escrito para aquele momento.
Cada cartão mostra as três peças: o botão como aparece na página, a mensagem que ela envia (que é o que o ?text= pré-preenche — a caixa dela, não a nossa) e a nossa resposta, já dentro da janela de 24 horas, onde cabe tudo o que quisermos dizer.
Estes botões funcionam
Não são imagens. Cada um abre o WhatsApp com a mensagem já escrita, para o
+55 11 96333-0480 — o nosso número de demonstração. Clique num
e a conversa chega mesmo, com a etiqueta [pn:…] que liga aquela
mensagem à sessão que a originou. É essa etiqueta que transforma um visitante
anônimo em uma pessoa conhecida, sem lhe pedir o telefone em formulário nenhum.
Hoje o celular mostra o número, não um nome —
e é da nossa conta, não do produto. O nome de exibição passa por revisão da Meta:
o número está verificado (VERIFIED) e a ficha do negócio já é a da
Pushnews (sites pushnews.eu e pushnews.com.br, categoria
de serviços profissionais), mas o nome que lá estava submetido era
OS1 Agentic — de outra marca, o que a Meta recusou. Submetemos
«Pushnews», que bate com a ficha: está em
PENDING_REVIEW. Aprovado, passa a ser esse o nome no celular de quem
clica. Numa loja de verdade quem aparece é a loja, com o nome dela — está
explicado em quem atende.
Trocou de tamanho 3 vezes
Página de produto · abaixo do seletor
Tirar dúvida de tamanhoela envia →
Oi! Fiquei na dúvida do tamanho do Pegasus 41 [#7C31]
resposta em segundos · sem templateEsse modelo veste um pouco justo — quem calça 41 costuma pedir 42. Quer que eu separe o 42 pra você?
Abriu o frete duas vezes
Página de produto · dentro do painel de frete
Confirmar prazo no meu CEPela envia →
Preciso saber se chega antes de sexta [#7C31]
resposta em segundosMe manda seu CEP que eu confirmo agora. Pra São Paulo capital, pedindo hoje, chega quinta (14/08).
Carrinho parado há 20 min
Carrinho · barra fixa no rodapé
Guardar minha sacolaela envia →
Quero guardar minha sacola na corre.br [#7C31]
resposta em segundos · aqui é onde o incentivo pode entrarGuardei: Pegasus 41, tam. 42 — R$ 899. Fica reservado até amanhã às 18h. Quer que eu avise se o preço mudar?
Produto sem estoque no tamanho dela
Página de produto · no lugar do botão de compra
Avisar quando chegarela envia →
Me avisa quando o 42 voltar [#7C31]
resposta em segundosAnotado. Assim que o 42 entrar, te aviso aqui. A reposição costuma sair em 10 dias — e eu já te mando com o link direto.
Este é o único que produz opt-in explícito para voltar depois: ela pediu para ser avisada.
Comparou 4 produtos, filtrou por preço
Listagem · depois do quarto produto aberto
Me ajuda a escolher? →ela envia →
Vi vários modelos e não sei qual escolher [#7C31]
resposta em segundosVi que você olhou o Pegasus, o Wave Rider e o Ultraboost. Corre em asfalto ou trilha? Com isso eu te digo qual dos três faz mais sentido — e nenhum deles é o mais caro.
Comprou há 2 dias
E-mail de confirmação e página do pedido
Acompanhar meu pedidoela envia →
Quero acompanhar o pedido #48211 [#7C31]
resposta em segundosSaiu do centro de distribuição ontem e chega quinta. Te aviso quando sair para entrega.
O mais fácil de aprovar internamente: é atendimento, não marketing. E é o que enche a base de números mais depressa.
O que impede isto de virar spam
Seis convites espalhados pelo site podem ser seis oportunidades ou seis interrupções — a diferença não está no desenho do botão, está nas regras que decidem quando ele aparece. Estas estão implementadas na loja demo, não são intenção:
| Regra | Porquê |
|---|---|
| Um pedido de atenção de cada vez | Abrir o convite do meio da tela fecha o do canto. Dois avisos ao mesmo tempo são dois avisos ignorados. |
| Convite em linha não é interrupção | O botão nasce onde a dúvida nasceu — debaixo do seletor de tamanho, dentro do painel de frete — e fica quieto. Não tapa nada, não pisca, não persegue. |
| Só interrompe quem passa o piso | O pop-up do meio da tela exige intenção de compra ≥ 0,25 pela mesma conta que o motor já usa. Quem mexeu em dois tamanhos de passagem e ia sair do mesmo jeito não é alguém com uma dúvida — é alguém passando. |
| Uma vez por sessão, e diz porquê | O que interrompe aparece uma só vez, e nomeia o sinal que o fez aparecer: «você abriu o prazo de entrega duas vezes e não seguiu». Um convite que não se explica é um banner. |
| Quem recusa fica em paz | «Não, obrigado» cala todos os convites restantes até ao fim da sessão — não só aquele. |
| Quem aceita também | Clicou em um, está falando conosco. Os outros se calam: continuar oferecendo conversa para quem já a começou é a definição de não estar ouvindo. |
| Nunca no checkout | A barra da sacola desaparece quando o pagamento começa. Ninguém interrompe quem já está pagando. |
É a mesma disciplina que o motor aplica às ofertas, aplicada ao atendimento — com um piso mais baixo, e por uma razão que se defende: oferecer conversa não gasta margem. Um cupão custa dinheiro em cada uso e por isso tem de passar por uma conta de lucro; uma pergunta respondida custa o tempo de um bot e abre a janela de 24 horas que torna todo o resto possível. O que não muda é a exigência de haver um motivo — o piso existe nos dois casos, só está em sítios diferentes.
O código [#7C31] é o fio que liga a mensagem à sessão que a gerou — produto, carrinho, motivo, tudo. Ele pode ser apagado por quem escreve: nesse caso ligamos por proximidade, porque o clique fica registrado com hora e a mensagem chega segundos depois. Na dúvida, o bot pergunta em vez de adivinhar.
O erro que parece uma boa ideia
A tentação é escrever o botão assim: «Você tem 15% de desconto no seu carrinho». É seditor e está errado por duas razões diferentes.
A primeira é mecânica: o ?text= pré-preenche a caixa dela. Uma mensagem que anuncia um desconto seria ela a dizer-nos que tem 15% — não faz sentido nenhum. O texto tem de ser o bilhete de entrada dela: «quero guardar a minha sacola».
A segunda é a que interessa mais: pôr o desconto no botão é dá-lo a toda a gente que ia clicar de qualquer maneira. É o «exit intent → 10%» que este documento inteiro existe para matar. Na resposta, já sabemos que ela abriu o WhatsApp e podemos decidir se precisa mesmo de 15%, de 5%, ou só do prazo de entrega. O clique é informação nova — desperdiçá-la a confirmar um desconto já prometido é caro.
botão: «Você tem 15% no seu carrinho»
→ todos os que clicam já levam o desconto
→ inclusive quem ia comprar sem ele
→ e a margem foi-se antes da conversa começar
botão: «Guardar minha sacola»
→ ela escreve, abre a janela de 24 h
→ o motor lê o perfil naquele momento
→ e escolhe: prazo, prova social, 5%, 15% ou nada
De quem é o número
Corrigido
Já não é possível a Meta criar uma conta «em nome da loja» — o On-Behalf-Of foi descontinuado.
A frase que estava na Peça 6 («criamos a conta na API oficial em nome dela») descrevia exatamente esse modelo. O caminho atual é Embedded Signup a partir da nossa aplicação: a loja autentica-se com a conta Meta dela, a WABA nasce no portfolio dela, e nós ficamos como parceiro com permissão de operar. É um clique de uns quinze minutos do lado dela — e é a frase que um cliente de porte vai ler com o jurídico ao lado, por isso vale estar certa.
| Situação da loja | O que fazemos | O que ela vê e o que custa |
|---|---|---|
| Não tem WhatsApp de negócio | Embedded Signup a partir da nossa app · WABA no portfolio dela · número novo operado por nós | Um formulário de ~15 minutos, uma vez. Ela fica dona da conta e do número. É o caso mais simples e o de boa parte das lojas pequenas. |
| Usa o app WhatsApp Business no celular | Número novo dedicado ao pré-venda, ao lado do que ela já usa | Um número não pode estar no app e na API ao mesmo tempo. Migrar custa o histórico do aparelho e a rotina de quem atende — resistência garantida. O número novo evita a briga. Detectar isto no onboarding, não no dia da ativação. |
| Já tem API e plataforma de atendimento | Número dedicado dentro da WABA dela, filtrado por phone_number_id |
Não disputamos a caixa de entrada do suporte. Cada sistema filtra o webhook pelo seu phone_number_id e nunca vê o do outro. É isto que torna a regra «a conversa é da loja» arquitetura em vez de promessa. |
Repare no que as três linhas têm em comum: número dedicado, operado por nós, dentro da conta dela. Não é uma opção entre várias — é o desenho por defeito, e por uma razão que só aparece quando se junta o botão com os cenários de número.
Porque o número dedicado deixa de ser preferência e passa a ser requisito
Um botão apontado ao número do suporte entrega a conversa ao inbox do suporte — e o motor nunca a vê.
O código [#7C31] chega, mas chega a um sistema que não é nosso. Perde-se a ligação entre a identidade e a conversa, que é a única razão pela qual o botão existe. O botão e a recuperação de carrinho querem exatamente a mesma infraestrutura — e é por isso que ela vem primeiro, antes de qualquer template.
E resolve, de passagem, a objeção do «o consumidor vai ver dois números da mesma marca»: o segundo número não é um número de marketing, é o número de pré-venda, com o bot que responde prazo, tamanho, estoque e frete, e escalamento para o humano da loja. Quem escreve para lá com uma dúvida não está no sítio errado — está exatamente no sítio previsto.
Cenário 0
Há uma versão ainda mais rápida: usar o nosso número, sem pedir nada a ninguém. Vale a pena separar exatamente o que isso poupa, porque é menos do que parece.
| Fricção | De onde vem | Como se mata |
|---|---|---|
| Template aprovado, categoria, opt-in, quality rating, limites de volume | De sermos nós a iniciar | Inverter para o botão. Resolve-se sozinho, e é independente de quem é o número |
| Embedded Signup, verificação de negócio, portfolio | De ser o número da loja | Usar o nosso número — e é só aqui que se paga |
O ganho grande é o de cima, e não depende do número. Com o botão apontado ao número da loja tens exatamente o mesmo: zero templates, zero aprovações, zero limites de volume, custo zero, e o telefone amarrado ao visitor_id. O que o nosso número poupa é só a segunda linha — um clique de quinze minutos, uma vez.
E custa quatro coisas que convém dizer em voz alta:
A decisão
Nosso número como piloto declarado, com gatilho de saída definido à partida.
É a jogada certa para as primeiras lojas: prova o mecanismo em dias, sem pedir nada, e leva para a reunião seguinte conversas reais em vez de slides. Mas com duas condições escritas: sai à primeira de quality rating amarela ou à primeira loja com marca própria a sério; e o desenho assume desde o início que o número é trocável — o wa_id e o histórico ficam do nosso lado, o que muda é o phone_number_id de destino no botão.
E o argumento para a loja passar ao número dela deixa de ser técnico: «seu cliente está falando com a Pushnews sobre a sua loja; por um clique de quinze minutos, passa a falar com você, com o seu selo verde». Isso vende-se sozinho depois de ela já ver conversas a acontecer.
A ordem de venda
Vender «recuperação de carrinho por WhatsApp» é pedir a uma loja um diagnóstico de quarenta perguntas antes de lhe mostrar um número. A ordem que funciona é a inversa — cada degrau produz o dado que torna o seguinte possível.
Grátis, imediato, sem tocar no site. Resolve a identidade: o push é um identificador durável que sobrevive à limpeza de cookies, e o token assinado no link liga o dispositivo à pessoa.
custo zero · sem aprovação · começa hoje
Colhe número, consentimento e a janela de 24 horas — de uma vez, sem formulário. É o único degrau que não precisa de template aprovado, e é ele que enche a base de opt-in que o degrau seguinte exige.
custo ~zero · sem aprovação · precisa do número dedicado
Só quando a base de opt-in justificar o esforço: verificação de negócio, templates por categoria, gestão de quality rating. Aí a recuperação de carrinho por iniciativa nossa passa a fazer sentido económico.
R$ 0,30–0,60 por conversa · semanas de aprovação · depois dos outros dois
O degrau 3 tem uma pergunta em aberto que muda o modelo de receita: se formos Solution Partner, o custo da mensagem é nosso e há margem no canal; se formos Tech Provider, a mensagem cai na fatura Meta da loja — e nesse caso a console tem de mostrar custo por decisão, senão ela vê a fatura subir sem ligar isso às intervenções. É decisão de negócio, não técnica, e convém tomá-la antes do degrau 3.
E uma exceção honesta ao «cinco decisões e mais nada»
O WhatsApp é o único canal que quebra o princípio do onboarding curto.
Quem detém o portfolio, se já existe uma WABA, se o número está preso ao app do celular, se há outro parceiro ligado — nada disto se infere do site, e tudo isto muda o caminho. Vale assumi-lo em vez de fingir que cabe nas cinco perguntas: provisionamento de canal não é onboarding do lojista. São dois fluxos, e o segundo só acontece uma vez.