Strapi como backend pra marketing: vale a pena?
Strapi promete backend headless open source pra qualquer projeto. Mas vale pra times de marketing? Casos de uso reais, setup, custo e quando não usar.
Equipe Máximo do Marketing
Máximo do Marketing
Time de marketing precisa de um formulário de captura customizado integrado ao CRM. Dev diz: “dois sprints”. A landing está pronta, o tráfego pago configurado, mas o backend não existe. Aí vem a sugestão: “usa um Typeform”. E você perde controle dos dados, da integração e da customização.
Strapi é uma das respostas pra esse gap: backend completo com painel de admin, API REST e GraphQL geradas automaticamente, código aberto, rodando na sua infraestrutura. Mas promessa de ferramenta “pra todos” geralmente esconde tradeoffs que só aparecem na prática.
Esse artigo vai direto ao ponto: o que Strapi entrega, em que contexto faz sentido pra marketing, e quando você está pagando mais do que precisava.
O que é Strapi e como funciona
Strapi é um CMS headless open source baseado em Node.js. O “headless” significa que ele cuida do backend — armazenamento, API, autenticação — e não tem opinião sobre o frontend. Você define os tipos de conteúdo (posts, formulários, produtos, landing pages), e o Strapi gera automaticamente uma API REST completa pra cada tipo.
O frontend consome essa API — seja Astro, Next.js, um app mobile ou uma landing page em React. Conteúdo e apresentação são totalmente separados.
Diferente de CMSs SaaS como Contentful ou Sanity, Strapi roda na sua infraestrutura. Você instala, configura e mantém. Vantagem: controle total sobre dados e custos. Desvantagem: responsabilidade de servidor e atualizações.
O ciclo operacional:
- Dev define tipos de conteúdo no painel admin ou em código
- Strapi gera os endpoints REST automaticamente (
/api/posts,/api/leads, etc.) - Editor cria e publica conteúdo pelo painel — sem precisar saber programar
- Frontend consome via API com autenticação JWT quando necessário
Strapi vs os concorrentes headless
Comparação direta com as alternativas mais comuns:
| Critério | Strapi | Sanity | Contentful | Directus |
|---|---|---|---|---|
| Open source | ✅ | ❌ | ❌ | ✅ |
| Self-hostable | ✅ | ❌ | ❌ | ✅ |
| Schema via interface | ✅ (ou código) | Só código (TS) | Interface | Interface + código |
| GraphQL nativo | ✅ (plugin) | SDK próprio | ✅ | ✅ |
| CDN de imagem embutido | ❌ | ✅ | ✅ | ❌ |
| Plano gratuito cloud | ❌ | 3 users + 100k docs | Muito limitado | ✅ básico |
| Self-hosted gratuito | ✅ | ❌ | ❌ | ✅ |
| Melhor pra | Backend customizável | Blog com equipe editorial | Enterprise grande | Gestão de dados |
O Sanity leva vantagem em CDN de imagem e queries GROQ. O Contentful em suporte enterprise. O Directus é similar ao Strapi mas mais focado em gestão de dados operacionais.
Strapi vence quando: você precisa de backend customizável, self-hosted, com API pronta sem escrever código de rota — e quer controle total sem pagar SaaS.
Quando Strapi faz sentido em marketing
Site com conteúdo gerenciado pelo time: Blog, landing pages, cases, seção de times — qualquer estrutura que o editor atualiza sem envolver dev. Strapi funciona bem aqui. Um desenvolvedor modela os tipos uma vez, e o time de marketing cria, edita e publica direto pelo painel.
Backend pra formulários e captura de leads: Strapi aceita dados via POST na API. Pra formulário de contato que salva no banco e dispara webhook pro CRM, você monta isso sem escrever backend do zero. Coleta de lead, download de material, inscrição em webinar — endpoint Strapi cuida de tudo.
Portal de clientes: Área com conteúdo exclusivo por cliente (relatórios, materiais, apresentações) com autenticação JWT nativa. Strapi tem sistema de usuários, roles e permissões embutido. Pra portal básico, funciona sem construir autenticação do zero.
Catálogo de produtos ou serviços: Empresa com linha de produtos filtráveis consumida por múltiplos frontends (site, app, totem de loja). Strapi como backend de catálogo tem menos fricção que montar API custom em Express.
API de dados internos: Dashboard de marketing que não depende do Looker Studio. Backend dos dados: Strapi. Frontend: React ou Next.js. Gestor atualiza métricas e metas pelo painel.
Setup inicial: o que esperar
Instalação é direta:
npx create-strapi-app@latest meu-backend
O wizard pergunta:
- Banco de dados: Quickstart (SQLite, roda na hora) ou Custom (PostgreSQL, MySQL)
- Template: em branco ou com exemplo de blog
Em desenvolvimento, SQLite é suficiente. Em produção, PostgreSQL é o recomendado — mais estável pra múltiplos acessos simultâneos.
Estrutura gerada:
meu-backend/
config/ ← banco, plugins, middlewares
src/
api/ ← tipos de conteúdo ficam aqui
extensions/ ← customizações de plugins
public/ ← uploads locais
.env ← credenciais do banco, chaves JWT
Após subir com npm run develop, o admin abre em http://localhost:1337/admin. Você cria a conta de admin e já pode modelar conteúdo.
Criar tipo “Post de Blog”: Admin → Content-Type Builder → Create new collection type → nome “Post” → adiciona campos: title (text), slug (uid), content (rich text), publishedAt (datetime), excerpt (text).
Salvar já gera automaticamente:
GET /api/posts— listagem com filtros e paginaçãoGET /api/posts/:id— por ID com relacionamentos populadosPOST /api/posts— criar novoPUT /api/posts/:id— atualizarDELETE /api/posts/:id— deletar
Permissões ficam em Settings → Roles. Você define exatamente o que é público (sem token) e o que exige autenticação.
Customizações que importam pra marketing
Hooks de lifecycle
Quer disparar webhook quando um post é publicado? Notificar Slack? Sincronizar com CRM? Strapi tem hooks de lifecycle:
// src/api/post/content-types/post/lifecycles.js
module.exports = {
async afterPublish(event) {
const { result } = event;
await fetch(process.env.WEBHOOK_URL, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ postId: result.id, title: result.title }),
});
},
};
Com isso, publicar um post no painel dispara a cadência que você quiser. Conecta direto com as automações já em uso via n8n ou Make sem nenhuma gambiarra.
Plugins que economizam tempo
| Plugin | Função |
|---|---|
strapi-plugin-seo | Campos de SEO (title, description, OG) em qualquer tipo |
strapi-plugin-slugify | Slug automático a partir do título |
strapi-plugin-sitemap | Gera sitemap.xml automaticamente |
strapi-plugin-import-export-entries | Importa/exporta conteúdo via CSV ou JSON |
strapi-plugin-email | Email transacional via SMTP, SendGrid ou Mailgun |
A maioria instala com npm install e configura no painel. Sem tocar no código base.
API customizada quando necessário
Quando os endpoints automáticos não bastam — cálculo de preço, lógica de negócio, query específica — você escreve um controller:
// src/api/orcamento/controllers/orcamento.js
module.exports = {
async calcular(ctx) {
const { servicos, desconto } = ctx.request.body;
const total = calcularOrcamento(servicos, desconto);
ctx.send({ total });
},
};
Isso é algo que Contentful e Sanity não fazem — nesses CMSs, lógica customizada vai pra uma função serverless separada. No Strapi, vive junto na mesma codebase.
Integração com frontends de marketing
Next.js com ISR (revalidação periódica):
export async function getStaticProps() {
const res = await fetch(
`${process.env.STRAPI_URL}/api/posts?sort=publishedAt:desc&populate=*`
)
const { data } = await res.json()
return { props: { posts: data }, revalidate: 60 }
}
Astro (site estático gerado no build):
---
const response = await fetch(`${import.meta.env.STRAPI_URL}/api/posts`)
const { data } = await response.json()
---
{data.map(post => (
<article>
<a href={`/blog/${post.attributes.slug}/`}>{post.attributes.title}</a>
</article>
))}
React com autenticação pra portal de clientes:
// Login retorna JWT
const { data } = await axios.post('/api/auth/local', { identifier, password })
localStorage.setItem('token', data.jwt)
// Requisições autenticadas por role
const { data: materiais } = await axios.get(
`/api/materiais?filters[cliente][$eq]=${clienteId}`,
{ headers: { Authorization: `Bearer ${token}` } }
)
Com o sistema de roles, diferentes usuários veem diferentes conteúdos — sem implementar autenticação do zero. Encaixa bem em projetos que já usam stack de marketing enxuta com custo controlado.
Hospedagem e custo real
Self-hosting: onde rodar
| Plataforma | Facilidade | Custo estimado |
|---|---|---|
| Railway | Alta (deploy via GitHub) | US$ 5-20/mês |
| Render | Alta | US$ 7-25/mês (com PostgreSQL) |
| DigitalOcean Droplet | Média | US$ 12-24/mês |
| VPS (Hetzner, Vultr) | Baixa | US$ 5-15/mês |
Pra site de marketing com tráfego médio: Railway ou Render são suficientes. Conecta GitHub, configura variáveis de ambiente, está no ar em 10 minutos.
Atenção crítica pra uploads de imagem: por padrão, Strapi salva arquivos na pasta local do servidor. Em plataformas com deploy efêmero (Railway, Render), os arquivos somem no próximo deploy. Solução obrigatória em produção: configura provider de upload externo (AWS S3, Cloudinary ou Uploadcare). É um pacote npm, instala em 15 minutos, mas não pode ignorar.
Strapi Cloud (gerenciado pela Strapi)
| Plano | Preço | Inclui |
|---|---|---|
| Starter | US$ 29/mês | 1 ambiente, 50GB storage |
| Pro | US$ 79/mês | 3 ambientes, 200GB |
| Team | US$ 149/mês | 6 ambientes, 500GB |
O Cloud resolve o problema de infra, mas é 3-5x mais caro que self-hosting. Faz sentido quando a equipe não tem ninguém pra gerenciar servidor — o custo da conveniência tem preço claro.
Comparando o total de custo com self-hosting num Railway:
- Strapi (grátis) + Railway (~US$ 15/mês) + PostgreSQL (~US$ 7/mês) = ~US$ 22/mês
- Strapi Cloud Starter = US$ 29/mês (sem PostgreSQL separado)
Diferença pequena pra times sem dev disponível.
Quando não usar Strapi
Time sem desenvolvedor: Strapi exige alguém técnico pra configurar tipos de conteúdo, resolver updates, configurar providers de upload e lidar com problemas de servidor. Sem dev disponível, é frustração garantida.
Blog editorial simples: Se o único caso é publicar posts, um CMS mais focado (Sanity, Ghost, ou mesmo WordPress headless) é mais direto. O overhead de configuração do Strapi não se justifica pra blog puro.
E-commerce com fluxo transacional: Strapi não é plataforma de e-commerce. Pedidos, carrinho, estoque, checkout — isso precisa de Shopify, WooCommerce ou solução custom. Strapi pode servir como catálogo de produtos, mas não resolve o fluxo transacional.
Muitas imagens sem S3 configurado: Strapi não tem CDN de imagem nativo — diferente do Sanity (CDN embutido com transformações por URL) e do Contentful. Performance de imagem vai ser problema se não configurar provider externo. Pra projetos onde imagens são centrais, o custo extra de configuração do S3 precisa estar no planejamento.
Alta disponibilidade sem DevOps: Strapi em produção com SLA alto exige load balancer, banco com réplica, monitoramento. Sem essa expertise internamente, o custo total (tempo + contratação) pode superar uma opção SaaS.
Strapi num projeto headless real
A maioria dos projetos de marketing headless usa uma arquitetura parecida com esta:
Strapi (backend + painel de edição)
↓ API REST / GraphQL
Next.js ou Astro (frontend)
↓ Deploy estático ou SSR
Vercel / Netlify / Railway (hosting)
Se você está montando uma arquitetura JAMstack pra marketing, Strapi cobre a camada de dados sem construir API do zero. A equipe de conteúdo edita pelo painel, o frontend consome a API, e dev só entra quando precisa de tipo novo ou lógica customizada.
Pra times que já usam a stack de APIs de marketing, Strapi serve como hub interno — outros serviços consultam a API do Strapi pra pegar conteúdo, produtos ou configurações da campanha.
Vale a pena?
Sim, quando:
- Tem ao menos um dev (mesmo que parcial) pra configurar e manter
- Precisa de backend customizável sem escrever do zero
- Quer API pronta sem pagar SaaS caro
- Tem casos de uso além de CMS puro: formulários, portais, catálogos
- Dados precisam ficar na sua infraestrutura (LGPD, preferência, compliance)
Não, quando:
- Time puramente de marketing sem dev
- Caso de uso único é blog editorial
- Não quer responsabilidade de servidor
- Volume alto de imagens sem planejamento pro S3
Strapi ocupa um nicho específico: backend pronto, open source, customizável, sem pagar US$ 300/mês num SaaS enterprise. Não é a ferramenta mais simples do mercado nem a mais poderosa — mas pra times que precisam de um backend flexível com orçamento real, é uma das opções mais sólidas disponíveis.
Quer implementar um backend headless integrado ao seu site de marketing sem depender de SaaS caros? A Máximo estrutura projetos com Strapi, Sanity e APIs headless pra times de marketing que precisam de controle sem complexidade desnecessária. Fala com a gente.
Quer aplicar isso na sua empresa?
A gente faz um diagnóstico gratuito e mostra o caminho mais curto pra você crescer com previsibilidade.
Quero meu diagnóstico