Lista de espera para um novo SaaS8 min de leitura
Como montar uma lista de e-mails pré-lançamento para um lançamento no Product Hunt
Colete uma lista semanas antes do Product Hunt, marque cada inscrição pelo canal e envie o e-mail do dia do lançamento em duas ondas, no ritmo da virada do horário do Pacífico.
Comece a coletar e-mails na sua própria página de quatro a seis semanas antes do lançamento, com um campo oculto de origem para saber de qual canal veio cada inscrição. Peça às pessoas que optem por receber um e-mail no dia do lançamento, depois exporte a lista na semana anterior e divida-a em dois envios: um logo depois que o dia do Product Hunt começa, à 0h01 no horário do Pacífico, e outro para as Américas pela manhã delas.
Um lançamento no Product Hunt tem data fixa e uma janela de 24 horas. As pessoas mais propensas a testar seu produto e deixar um comentário bem pensado são as que pediram para ter notícias suas, então a lista importa mais que o post de lançamento. Esta página mostra o que muda quando a lista é montada para esse único dia.
O que muda numa lista para o Product Hunt
- O prazo é fixo. Uma lista de espera normal pode esperar até o produto ficar pronto. Aqui, a lista precisa ser exportada, limpa e carregada na sua ferramenta de e-mail antes de uma data que você escolheu semanas atrás.
- O dia segue o horário do Pacífico. Os lançamentos entram no ar à 0h01 PT e disputam o ranking daquele dia. Sua lista está em todos os fusos horários, então um único envio num único horário pega metade dela dormindo.
- O pedido é feedback, não votos. As regras do Product Hunt proíbem pedir upvotes, e fazer isso pode desclassificar um lançamento. Peça à lista que teste o produto e comente o que mudaria. Está dentro das regras, e comentários causam melhor impressão que um número de qualquer jeito.
- O dia do lançamento traz um pico. Os visitantes do Product Hunt chegam ao seu site e se inscrevem com minutos de diferença. Limites do formulário que não importaram por semanas podem importar por algumas horas.
- De quatro a seis semanas antes, a página entra no ar com o formulário, e cada canal em que você a divulga ganha o próprio valor de ref.
- Uma semana antes, exporte a lista, remova os duplicados e divida quem optou por receber em duas ondas, por país.
- Na véspera, aumente o limite do formulário inteiro para o tráfego do lançamento não ser recusado.
- À 0h01 no horário do Pacífico, o lançamento entra no ar.
- Minutos depois, envie a onda 1 para todos fora das Américas, onde é manhã ou tarde.
- Por volta das 6h no horário do Pacífico, envie a onda 2 para as Américas.
- No dia seguinte, agradeça à lista e compare quais valores de ref trouxeram as pessoas que se cadastraram e ficaram.
O formulário
Comece pelo formulário só com e-mail do guia principal e adicione duas coisas: um checkbox que pede o e-mail do dia do lançamento e um ref oculto preenchido a partir do link pelo qual as pessoas chegaram.
<form id="launch-list" action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="post">
<label for="email">Email</label>
<input id="email" name="email" type="email" autocomplete="email" required>
<label>
<input name="launch_reminder" type="checkbox" value="true">
Email me the morning we launch on Product Hunt
</label>
<input type="hidden" name="ref" value="direct">
<input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden>
<button>Get early access</button>
</form>
<script>
const params = new URLSearchParams(location.search);
const ref = params.get("ref") || params.get("utm_source");
if (ref) {
document.querySelector('#launch-list [name="ref"]').value = ref.toLowerCase().replace(/[^a-z0-9_-]/g, "").slice(0, 40);
}
</script>- O checkbox começa desmarcado. Um e-mail no dia do lançamento é algo separado do acesso antecipado, então as pessoas optam por ele. O Ikiform armazena
trueoufalsecom o horário da inscrição. - O script copia
?ref=ou?utm_source=para o input oculto e remove tudo o que não for letra, dígito,-ou_. Sem nenhum dos dois,refcontinuadirect. - O Product Hunt costuma adicionar
ref=producthuntaos links da sua página de lançamento, então as inscrições do dia do lançamento se marcam sozinhas.
Adicione a definição de campos na aba Fields do formulário. O Ikiform passa a recusar envios sem e-mail, armazena o checkbox como true ou false de verdade e limita ref a 40 caracteres para ninguém conseguir encher o campo.
{
"version": 1,
"title": "Launch list",
"fields": [
{ "id": "email", "type": "email", "label": "Email", "required": true },
{ "id": "launch_reminder", "type": "checkbox", "label": "Email me the morning we launch on Product Hunt" },
{ "id": "ref", "type": "text", "label": "Source", "validation": { "max_length": 40 } }
]
}Um ref por canal
Defina os valores antes de divulgar o link em qualquer lugar e use-os sempre:
| Onde você divulga | Link | Ref armazenado |
|---|---|---|
| Seus posts no X ou no Bluesky | example.com/?ref=x | x |
example.com/?ref=linkedin | linkedin | |
| Um post numa comunidade, como o Indie Hackers | example.com/?ref=ih | ih |
| Sua newsletter ou blog | example.com/?utm_source=newsletter | newsletter |
| Sua página de lançamento no Product Hunt | Adicionado pelo Product Hunt | producthunt |
Prepare o formulário para o tráfego do lançamento
Os limites padrão servem para uma página de pré-lançamento tranquila. O dia do lançamento não é tranquilo. Cada visitante pode enviar 5 por minuto, o que é bastante, mas o formulário inteiro tem limite de 300 por minuto. Um lançamento na primeira página pode trazer mais inscrições do que isso num minuto movimentado.
- Na véspera, abra as configurações do formulário e escolha um limite de taxa Custom com um limite maior para o formulário. Volte ao anterior depois da semana do lançamento.
- Se você vai fazer uma demonstração num meetup ou num coworking, todo mundo compartilha um IP. Escolha Relaxed para esse dia.
- Um envio recusado recebe
429 rate_limitede um headerRetry-After. O formulário HTML simples mostra a página de erro do Ikiform com um link de volta. - Ligue a verificação humana em Spam check se o dia do lançamento trouxer bots. O formulário simples não precisa de mudança para isso; veja proteção contra spam.
Divida o e-mail de lançamento em duas ondas
Uma semana antes do lançamento, leia a lista pela API REST e divida-a. Este script mantém a inscrição mais nova por e-mail, descarta quem não marcou o checkbox e grava dois arquivos CSV pelo país que o Ikiform registrou. Ele precisa de uma chave secreta com submissions:read.
import { writeFileSync } from "node:fs";
import { createClient } from "@ikiform/sdk";
const AMERICAS = new Set(["US", "CA", "MX", "BR", "AR", "CO", "CL", "PE", "EC", "UY", "PY", "BO", "VE", "GT", "CR", "PA", "DO", "PR"]);
const ikiform = createClient({ apiKey: process.env.IKIFORM_SECRET_KEY });
const seen = new Set();
const waves = { midnight: [], morning: [] };
for await (const submission of ikiform.submissions.iterate({ formId: "frm_xxxxxxxxxxxxxxxx", status: "received", limit: 100 })) {
const email = String(submission.fields.email ?? "").trim().toLowerCase();
if (!email || seen.has(email)) continue;
seen.add(email);
if (submission.fields.launch_reminder !== true) continue;
const country = submission.meta.country ?? "";
const wave = !country || AMERICAS.has(country) ? waves.morning : waves.midnight;
wave.push([email, String(submission.fields.ref ?? "").replaceAll(",", ""), country].join(","));
}
for (const [name, rows] of Object.entries(waves)) {
writeFileSync(`wave-${name}.csv`, ["email,ref,country", ...rows].join("\n"));
console.log(`${name}: ${rows.length} people`);
}- As inscrições chegam da mais nova para a mais antiga, então uma pessoa que se inscreveu duas vezes é avaliada pela resposta mais recente. Se ela desmarcou o checkbox na segunda vez, fica de fora.
- Importe os dois arquivos na sua ferramenta de e-mail como segmentos separados e agende: a onda 1 para alguns minutos depois da 0h01 no horário do Pacífico, a onda 2 para por volta das 6h no horário do Pacífico.
- Rode mais uma vez na véspera do lançamento para pegar a última semana de inscrições.
O e-mail do dia do lançamento
Envie pela sua ferramenta de e-mail, para que descadastros e devoluções sejam tratados. Comece pelo produto, coloque o link da página de lançamento em segundo lugar e peça um comentário, não um voto:
Subject: We're on Product Hunt today
Hi,
You joined the Acme list a few weeks ago. Today we launched on Product Hunt,
and the product is open to everyone on this list first.
Try it: https://acme.example/start
Our launch page: https://www.producthunt.com/products/acme
If you have a minute, tell us on the launch page what you'd change.
Honest comments help more than anything else today.
Ada, founder of AcmeO dia seguinte
Exporte a lista de novo com Export CSV, filtrada pelos últimos 7 dias, e conte as inscrições por ref. Os canais que trouxeram pessoas que depois fizeram login são onde vai o seu próximo post de lançamento. Mande a quem entrou no dia do lançamento um agradecimento curto pela sua ferramenta de e-mail; essas pessoas encontraram você pelo Product Hunt e ainda não tiveram notícias suas.
Confira se funciona
Faça isto uma semana antes do lançamento, não na noite anterior.
- Em Allowed domains do formulário, adicione o domínio do seu site, mais
localhostenquanto desenvolve. Deixe vazio para aceitar envios de qualquer lugar. - Abra a página com
?ref=xe envie. O envio mostrarefcomoxelaunch_remindercomofalse. - Envie de novo com o checkbox marcado e sem query string.
refmostradirectelaunch_remindermostratrue. - Abra Submissions no painel. O novo envio está lá com todos os campos que você enviou.
- Rode o script das ondas e confira se cada endereço de teste está no arquivo esperado para o país dele.
- Não chegou nada? Mude o filtro de status do painel para Spam. Spam recebe a mesma resposta de sucesso de um envio real.
Pegadinhas
| Problema | O que fazer |
|---|---|
429 rate_limited | Um visitante enviou mais do que o limite de taxa do formulário permite. O Standard permite 5 por minuto por visitante. Espere o Retry-After, ou escolha Relaxed ou Custom para formulários que enviam a partir de um único IP compartilhado. |
422 com Unknown field para utm_source ou outro parâmetro | Só ref está definido. O script lê utm_source para dentro de ref em vez de enviá-lo, então confira se você não adicionou outro input oculto. |
Toda inscrição tem ref definido como direct | O script roda antes de o formulário existir, ou o id do formulário é diferente. Coloque o script depois do formulário e mantenha id="launch-list". |
| Um país está vazio na exportação | O Ikiform não conseguiu saber onde o visitante estava. O script coloca países vazios na onda da manhã, que pega as Américas acordadas e todo o resto mais tarde no dia. |
| O envio está no painel, mas nenhum e-mail ou webhook chegou | Ele foi armazenado como spam. Spam não envia nada. Abra-o no filtro Spam para ver os motivos e marque-o como não spam para enviar o e-mail e os webhooks dele. |
Perguntas
De quatro a seis semanas dão tempo para divulgar a página em alguns lugares e descobrir quais funcionam. Comece antes se você ainda não tem público; a lista cresce devagar no início.
Não. As regras do Product Hunt proíbem pedir upvotes, e fazer isso pode desclassificar um lançamento. Peça às pessoas que testem o produto e deixem um comentário sobre o que mudariam. Isso mantém você dentro das regras e dá um feedback que você pode usar.
Os lançamentos entram no ar à 0h01 no horário do Pacífico. Envie uma onda alguns minutos depois para as pessoas fora das Américas e uma segunda por volta das 6h no horário do Pacífico para as Américas, para que a maioria leia pela manhã.
Normalmente. Cada envio registra o país da conexão do visitante quando consegue, e ele aparece na API e nos webhooks como meta.country. Ele pode vir vazio, então trate-o como uma pista.
Não, não há plano gratuito. Testar é grátis: você pode enviar 50 envios de teste por mês a partir de localhost antes de pagar. Para entrar no ar, o Pro começa em US$ 6/mês para 500 envios, ou você pode pagar uma vez 10.000 envios por US$ 49 ou 50.000 envios por US$ 149, com créditos que nunca expiram.
Travou em algum passo ou quer um guia para o seu caso? Envie um e-mail para hello@ikiform.com.