# 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.

Publicado em 2026-10-25 · https://ikiform.com/pt-br/guides/waitlist/product-hunt

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.

Diagrama: Uma lista de lançamento no Product Hunt, da primeira inscrição ao dia seguinte

1. 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.
2. Uma semana antes, exporte a lista, remova os duplicados e divida quem optou por receber em duas ondas, por país.
3. Na véspera, aumente o limite do formulário inteiro para o tráfego do lançamento não ser recusado.
4. À 0h01 no horário do Pacífico, o lançamento entra no ar.
5. Minutos depois, envie a onda 1 para todos fora das Américas, onde é manhã ou tarde.
6. Por volta das 6h no horário do Pacífico, envie a onda 2 para as Américas.
7. No dia seguinte, agradeça à lista e compare quais valores de ref trouxeram as pessoas que se cadastraram e ficaram.

O Ikiform registra o país de cada inscrição, então a divisão não precisa de nenhuma pergunta extra no formulário. Países desconhecidos vão para a segunda onda.

## O formulário

Comece pelo formulário só com e-mail do [guia principal](https://ikiform.com/pt-br/guides/waitlist.md#form) 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.

`index.html`:

```html
<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 `true` ou `false` com 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, `ref` continua `direct`.
- O Product Hunt costuma adicionar `ref=producthunt` aos 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.

`Campos`:

```json
{
  "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` |
| LinkedIn | `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](https://ikiform.com/pt-br/docs/rate-limits.md) 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_limited` e um header `Retry-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](https://ikiform.com/pt-br/docs/spam.md#human-check).

## Divida o e-mail de lançamento em duas ondas

Uma semana antes do lançamento, leia a lista pela [API REST](https://ikiform.com/pt-br/docs/api.md#list-submissions) 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`.

`waves.mjs`:

```js
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:

`E-mail do dia do lançamento`:

```text
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 Acme
```

> O Ikiform não envia e-mail para quem preenche o formulário. Os e-mails de notificação vão só para você e sua equipe, então não há resposta automática, e-mail de confirmação nem double opt-in. Envie esses e-mails pela sua ferramenta de e-mail, disparados por um [webhook](https://ikiform.com/pt-br/docs/webhooks.md). Se você quer um e-mail de boas-vindas no momento em que alguém entra, encaminhe as inscrições por webhook para a sua ferramenta de e-mail; o [guia principal](https://ikiform.com/pt-br/guides/waitlist.md#confirm) mostra o relay.

## O 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.

1. Em **Allowed domains** do formulário, adicione o domínio do seu site, mais `localhost` enquanto desenvolve. Deixe vazio para aceitar envios de qualquer lugar.
2. Abra a página com `?ref=x` e envie. O envio mostra `ref` como `x` e `launch_reminder` como `false`.
3. Envie de novo com o checkbox marcado e sem query string. `ref` mostra `direct` e `launch_reminder` mostra `true`.
4. Abra **Submissions** no painel. O novo envio está lá com todos os campos que você enviou.
5. Rode o script das ondas e confira se cada endereço de teste está no arquivo esperado para o país dele.
6. 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

### Com quanta antecedência devo começar uma lista de espera antes de um lançamento no Product Hunt?

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.

### Posso pedir à minha lista de espera que dê upvote no Product Hunt?

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.

### A que horas devo enviar o e-mail de lançamento?

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ã.

### O Ikiform sabe de qual país veio uma inscrição?

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.

### O Ikiform é gratuito?

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.

## Mais guias

- [Lista de espera para um novo SaaS](https://ikiform.com/pt-br/guides/waitlist.md): Monte uma lista de espera pré-lançamento na sua própria landing page: o formulário, proteção contra spam, duplicados, e-mails de confirmação e uma exportação limpa no dia do lançamento.
- [Inscrição para beta com triagem](https://ikiform.com/pt-br/guides/waitlist/beta-signup.md): Um formulário de candidatura ao beta com perguntas de triagem que o servidor exige, e um script que pontua os candidatos e escolhe cada turma da lista.
- [Lista de espera em HTML puro](https://ikiform.com/pt-br/guides/waitlist/html.md): Uma página de lista de espera completa em HTML puro, sem build, que funciona com o JavaScript desligado, mostra um agradecimento na própria página quando carrega e tem plano B quando precisa.
- [Lista de espera no Framer](https://ikiform.com/pt-br/guides/waitlist/framer.md): Duas formas de coletar inscrições na lista de espera no Framer: o formulário do Framer com webhook para o Ikiform, ou um code component que mantém os limites por visitante e as verificações de spam.
- [Lista de espera para app mobile](https://ikiform.com/pt-br/guides/waitlist/mobile-app.md): Uma lista de espera pré-lançamento para um app iOS ou Android que pergunta qual celular a pessoa usa, manda testadores de iPhone ao TestFlight e preenche um teste fechado do Play.
- [Lista de espera com Next.js](https://ikiform.com/pt-br/guides/waitlist/nextjs.md): Uma lista de espera no App Router do Next.js: uma server action que encaminha as inscrições com chave secreta, useActionState, agradecimento otimista e limite por visitante.
