Quase quebrei meu SaaS no primeiro dia por causa do Claude Haiku
Lancei o Scoresu.me na terça-feira. Na quarta, quase fechei tudo.
O produto analisa perfis do LinkedIn com IA e dá um score detalhado em 6 seções: Headline, About, Experiência, Completude, Destaque e SEO. A ideia era simples, free tier com análise básica, pago com sugestões completas e textos prontos pra copiar.
No primeiro dia tive 444 análises e R$133 de receita. Parecia promissor.
O problema
No segundo dia um post no X/Twitter viralizou. 1.348 análises em um dia.
Abri o painel da Anthropic em tempo real e vi o número crescendo. Claude Haiku 4.5 no free tier estava custando $13 em um único dia.
Fiz a conta na hora: se mantivesse esse ritmo, seriam ** ~$390/mês** só pra entregar análise gratuita. Produto inviável antes de completar uma semana.
O erro foi não calcular o custo antes de lançar. Eu sabia que o Haiku era barato, mas não tinha simulado o que aconteceria com volume real.
Por que custou tanto?
O JSON completo do LinkedIn que eu mandava pro Haiku era pesado. Incluía campos inúteis pra análise:
URLs de foto em múltiplos tamanhos
moreProfiles com 30 perfis similares
IDs internos, URNs, metadados
Logos de empresas em 3 resoluções diferentes
Facilmente 6-8k tokens de input por análise. Multiplicado por 1.348 análises num dia, o custo explodiu.
A decisão
Removi o free tier completamente naquela hora e fui redefinir a estratégia.
Resultado imediato: a conversão foi de 1.9% pra 15.6%. Quem chegava no site tinha mais intenção de comprar. Mas o volume despencou — de 1.348 visitas pra 92 no dia seguinte.
Menos gente chegando, menos gente pagando no absoluto. Não era sustentável.
A solução real
Dois problemas pra resolver:
- Filtrar o JSON antes de mandar pra IA
Criei uma função que extrai só o que importa pra análise:
typescriptfunction prepareProfileForAnalysis(profile: LinkedInProfile) {
return {
headline: profile.headline,
about: profile.about,
location: profile.location?.linkedinText,
connectionsCount: profile.connectionsCount,
openToWork: profile.openToWork,
topSkills: profile.topSkills,
experience: profile.experience.slice(0, 5).map(e => ({
position: e.position,
companyName: e.companyName,
duration: e.duration,
description: e.description?.substring(0, 300),
skills: e.skills,
})),
education: profile.education.map(e => ({
schoolName: e.schoolName,
degree: e.degree,
fieldOfStudy: e.fieldOfStudy,
})),
skills: profile.skills.map(s => s.name),
languages: profile.languages.map(l => l.name),
featured: profile.featured,
};
}
Input caiu de ~7k pra ~800 tokens. Redução de 88%.
- Trocar o modelo do free tier
Troquei o Haiku 4.5 pelo GPT-4.1 Nano da OpenAI.
Comparação de custo por 1.000 análises:
| Modelo | Input/M tokens | Output/M tokens | Custo/1k análises |
|---|---|---|---|
| Claude Haiku 4.5 | $1.00 | $5.00 | ~$7.30 |
| GPT-4.1 Nano | $0.10 | $0.40 | ~$0.32 |
23x mais barato. A qualidade pra análise free — que só precisa dar scores e identificar problemas, sem sugestões detalhadas — foi suficiente.
O Opus continua pra quem paga, onde a qualidade importa de verdade.
Resultado depois dos ajustes
Custo do free tier: de 13/dia pra 0,42/dia
Projeção mensal: de ~390 pra ~12
Conversão atual: 6.3% com free tier ativo
Receita em 3 dias: R$955
O que aprendi
Calcule o custo antes de lançar. Parece óbvio, mas na empolgação do lançamento eu não simulei o que aconteceria com 1.000 análises/dia.
Filtre o payload antes de mandar pra IA. Cada campo inútil é token desperdiçado.
Use o modelo certo pra cada caso. Free tier não precisa do melhor modelo, precisa do suficiente. Reserve o modelo caro pra onde o usuário vai sentir a diferença.
Volume inesperado é uma faca de dois gumes. Viralizar antes de ter a operação ajustada pode ser mais perigoso do que não viralizar.
Se quiser trocar ideia sobre custo de IA em SaaS ou estratégia de free tier, comenta aqui.
Fonte: https://scoresu.me