# Cara membangun daftar email pra-peluncuran untuk peluncuran di Product Hunt

> Kumpulkan daftar peluncuran berminggu-minggu sebelum Product Hunt, tandai setiap pendaftaran per channel, dan kirim email hari-H dalam dua gelombang mengikuti reset waktu Pasifik.

Terbit 2026-10-25 · https://ikiform.com/id/guides/waitlist/product-hunt

Mulai kumpulkan email di halaman Anda sendiri empat sampai enam minggu sebelum peluncuran, dengan field sumber tersembunyi agar Anda tahu dari channel mana setiap pendaftaran datang. Minta orang menyetujui email di hari peluncuran, lalu ekspor daftarnya seminggu sebelumnya dan bagi menjadi dua pengiriman: satu tepat setelah hari Product Hunt dimulai pukul 12.01 dini hari waktu Pasifik, dan satu untuk wilayah Amerika di pagi hari mereka.

Peluncuran di Product Hunt punya tanggal tetap dan jendela 24 jam. Orang yang paling mungkin mencoba produk Anda dan meninggalkan komentar yang bermakna adalah mereka yang meminta dikabari, jadi daftarnya lebih penting daripada postingan peluncuran. Halaman ini membahas apa yang berubah ketika daftar dibangun untuk satu hari itu.

## Apa bedanya daftar untuk Product Hunt

- **Tenggatnya tetap.** Daftar tunggu biasa bisa menunggu sampai produk siap. Di sini, daftar harus diekspor, dibersihkan, dan dimuat ke tool email Anda sebelum tanggal yang Anda pilih berminggu-minggu lalu.
- **Harinya mengikuti waktu Pasifik.** Peluncuran tayang pukul 12.01 dini hari PT dan bersaing untuk peringkat hari itu. Daftar Anda tersebar di semua zona waktu, jadi satu pengiriman di satu jam akan menemui setengahnya sedang tidur.
- **Yang diminta adalah masukan, bukan vote.** Aturan Product Hunt melarang meminta upvote, dan melakukannya bisa membuat peluncuran didiskualifikasi. Minta daftar Anda mencoba produknya dan berkomentar tentang apa yang ingin mereka ubah. Ini sesuai aturan, dan komentar lebih menarik dibaca daripada sekadar angka.
- **Hari peluncuran membawa lonjakan.** Pengunjung Product Hunt mendarat di situs Anda dan mendaftar dalam hitungan menit satu sama lain. Batas formulir yang tidak pernah berpengaruh selama berminggu-minggu bisa berpengaruh selama beberapa jam.

Diagram: Daftar peluncuran Product Hunt dari pendaftaran pertama hingga sehari setelahnya

1. Empat sampai enam minggu sebelumnya, halaman tayang dengan formulir, dan setiap channel tempat Anda membagikannya mendapat nilai ref sendiri.
2. Seminggu sebelumnya, ekspor daftar, hapus duplikat, dan bagi orang yang menyetujui menjadi dua gelombang berdasarkan negara.
3. Sehari sebelumnya, naikkan batas untuk seluruh formulir agar trafik peluncuran tidak ditolak.
4. Pukul 12.01 dini hari waktu Pasifik, peluncuran tayang.
5. Beberapa menit kemudian, kirim gelombang 1 ke semua orang di luar wilayah Amerika, tempat saat itu pagi atau siang.
6. Sekitar pukul 06.00 waktu Pasifik, kirim gelombang 2 ke wilayah Amerika.
7. Keesokan harinya, ucapkan terima kasih ke daftar dan bandingkan nilai ref mana yang membawa orang yang mendaftar dan bertahan.

Ikiform mencatat negara setiap pendaftaran, jadi pembagian ini tidak butuh pertanyaan tambahan di formulir. Negara yang tidak diketahui masuk ke gelombang kedua.

## Formulirnya

Mulai dari formulir yang hanya berisi email di [panduan utama](https://ikiform.com/id/guides/waitlist.md#form) dan tambahkan dua hal: checkbox yang meminta persetujuan email di hari peluncuran, dan `ref` tersembunyi yang diisi dari link tempat orang datang.

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

- Checkbox dimulai dalam keadaan tidak dicentang. Email di hari peluncuran berbeda dari akses awal, jadi orang harus menyetujuinya sendiri. Ikiform menyimpan `true` atau `false` bersama timestamp pendaftaran.
- Skrip menyalin `?ref=` atau `?utm_source=` ke input tersembunyi dan membuang apa pun yang bukan huruf, angka, `-`, atau `_`. Tanpa keduanya, `ref` tetap `direct`.
- Product Hunt biasanya menambahkan `ref=producthunt` ke link di halaman peluncuran Anda, jadi pendaftaran di hari peluncuran menandai dirinya sendiri.

Tambahkan definisi field di tab **Fields** formulir. Ikiform lalu menolak kiriman yang tidak menyertakan email, menyimpan checkbox sebagai `true` atau `false` sungguhan, dan membatasi `ref` hingga 40 karakter agar tidak ada yang bisa mengisinya berlebihan.

`Field`:

```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 } }
  ]
}
```

### Satu ref per channel

Tentukan nilainya sebelum Anda membagikan link di mana pun, dan pakai setiap kali:

| Tempat Anda membagikan | Link | Ref yang disimpan |
| --- | --- | --- |
| Postingan X atau Bluesky Anda | `example.com/?ref=x` | `x` |
| LinkedIn | `example.com/?ref=linkedin` | `linkedin` |
| Postingan komunitas, seperti Indie Hackers | `example.com/?ref=ih` | `ih` |
| Newsletter atau blog Anda | `example.com/?utm_source=newsletter` | `newsletter` |
| Halaman peluncuran Product Hunt Anda | Ditambahkan oleh Product Hunt | `producthunt` |

## Siapkan formulir untuk trafik peluncuran

Batas default cocok untuk halaman pra-peluncuran yang sepi. Hari peluncuran tidak sepi. Setiap pengunjung bisa mengirim 5 per menit, yang sudah lebih dari cukup, tetapi seluruh formulir dibatasi 300 per menit. Peluncuran yang masuk halaman depan bisa mengirim lebih banyak pendaftaran dari itu di menit yang ramai.

- Sehari sebelumnya, buka pengaturan formulir dan pilih [rate limit](https://ikiform.com/id/docs/rate-limits.md) Custom dengan batas formulir yang lebih tinggi. Kembalikan setelah minggu peluncuran.
- Jika Anda melakukan demo di meetup atau co-working space, semua orang berbagi satu IP. Pilih Relaxed untuk hari itu.
- Kiriman yang ditolak mendapat `429 rate_limited` dan header `Retry-After`. Formulir HTML biasa menampilkan halaman error Ikiform dengan link untuk kembali.
- Aktifkan pemeriksaan manusia di **Spam check** jika hari peluncuran mendatangkan bot. Formulir biasa tidak perlu diubah untuk itu; lihat [perlindungan spam](https://ikiform.com/id/docs/spam.md#human-check).

## Bagi email peluncuran menjadi dua gelombang

Seminggu sebelum peluncuran, baca daftar lewat [REST API](https://ikiform.com/id/docs/api.md#list-submissions) dan bagi. Skrip ini menyimpan pendaftaran terbaru per email, membuang siapa pun yang tidak mencentang kotak, dan menulis dua file CSV berdasarkan negara yang dicatat Ikiform. Skrip ini butuh secret key dengan `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`);
}
```

- Pendaftaran datang dari yang terbaru, jadi orang yang mendaftar dua kali dinilai dari jawaban terakhirnya. Jika mereka tidak mencentang kotak di kali kedua, mereka tidak diikutkan.
- Impor kedua file ke tool email Anda sebagai segmen terpisah dan jadwalkan: gelombang 1 beberapa menit setelah pukul 12.01 dini hari waktu Pasifik, gelombang 2 sekitar pukul 06.00 waktu Pasifik.
- Jalankan sekali lagi pada malam sebelum peluncuran untuk menangkap pendaftaran minggu terakhir.

### Email di hari peluncuran

Kirim dari tool email Anda, agar unsubscribe dan bounce tertangani. Awali dengan produknya, taruh link halaman peluncuran di urutan kedua, dan minta komentar, bukan vote:

`Email hari peluncuran`:

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

> Ikiform tidak mengirim email ke orang yang mengisi formulir. Email notifikasi hanya dikirim ke Anda dan tim Anda, jadi tidak ada autoresponder, email konfirmasi, atau double opt-in. Kirim semua itu dari tool email Anda, dipicu oleh [webhook](https://ikiform.com/id/docs/webhooks.md). Jika Anda ingin email sambutan begitu seseorang bergabung, teruskan pendaftaran lewat webhook ke tool email Anda; [panduan utama](https://ikiform.com/id/guides/waitlist.md#confirm) menunjukkan relay-nya.

## Sehari setelahnya

Ekspor daftar lagi dengan **Export CSV**, difilter ke 7 hari terakhir, dan hitung pendaftaran berdasarkan `ref`. Channel yang membawa orang yang kemudian sign-in adalah tempat postingan peluncuran Anda berikutnya. Kirim ucapan terima kasih singkat dari tool email Anda kepada orang yang bergabung di hari peluncuran; mereka menemukan Anda lewat Product Hunt dan belum pernah mendengar kabar dari Anda.

## Pastikan berfungsi

Lakukan ini seminggu sebelum peluncuran, bukan di malam harinya.

1. Di **Allowed domains** formulir, tambahkan domain situs Anda, ditambah `localhost` selama pengembangan. Biarkan kosong untuk menerima kiriman dari mana saja.
2. Buka halaman dengan `?ref=x` lalu kirim. Kiriman menampilkan `ref` sebagai `x` dan `launch_reminder` sebagai `false`.
3. Kirim lagi dengan kotak dicentang dan tanpa query string. `ref` berisi `direct` dan `launch_reminder` berisi `true`.
4. Buka **Submissions** di dashboard. Kiriman baru ada di sana dengan setiap field yang Anda kirim.
5. Jalankan skrip gelombang dan pastikan setiap alamat uji ada di file yang sesuai dengan negaranya.
6. Tidak ada yang masuk? Ubah filter status di dashboard ke **Spam**. Spam mendapat jawaban sukses yang sama dengan kiriman asli.

## Jebakan

| Masalah | Yang harus dilakukan |
| --- | --- |
| `429 rate_limited` | Satu pengunjung mengirim melebihi rate limit formulir. Standard mengizinkan 5 per menit per pengunjung. Tunggu sesuai `Retry-After`, atau pilih Relaxed atau Custom untuk formulir yang mengirim dari satu IP bersama. |
| `422` dengan Unknown field untuk `utm_source` atau parameter lain | Hanya `ref` yang didefinisikan. Skrip membaca `utm_source` ke dalam `ref` alih-alih mengirimnya, jadi pastikan Anda tidak menambahkan input tersembunyi lain. |
| Setiap pendaftaran punya `ref` bernilai `direct` | Skrip berjalan sebelum formulirnya ada, atau `id` formulirnya berbeda. Letakkan skrip setelah formulir dan pertahankan `id="launch-list"`. |
| Negara kosong di hasil ekspor | Ikiform tidak bisa mengetahui lokasi pengunjung. Skrip menaruh negara kosong di gelombang pagi, yang menjangkau wilayah Amerika saat terjaga dan semua orang lainnya di siang atau sore hari mereka. |
| Kiriman ada di dashboard tetapi tidak ada email atau webhook yang datang | Kiriman itu disimpan sebagai spam. Spam tidak memicu apa pun. Buka di filter **Spam** untuk melihat alasannya, dan tandai sebagai bukan spam untuk mengirim email dan webhook-nya. |

## Pertanyaan

### Seberapa awal saya harus memulai daftar tunggu sebelum peluncuran di Product Hunt?

Empat sampai enam minggu memberi Anda waktu untuk membagikan halaman di beberapa tempat dan mempelajari mana yang berhasil. Mulai lebih awal jika Anda belum punya audiens; daftarnya tumbuh lambat di awal.

### Bolehkah saya meminta daftar tunggu saya memberi upvote di Product Hunt?

Tidak. Aturan Product Hunt melarang meminta upvote, dan melakukannya bisa membuat peluncuran didiskualifikasi. Minta orang mencoba produknya dan meninggalkan komentar tentang apa yang ingin mereka ubah. Itu membuat Anda tetap sesuai aturan dan memberi Anda masukan yang bisa dipakai.

### Jam berapa saya harus mengirim email peluncuran?

Peluncuran tayang pukul 12.01 dini hari waktu Pasifik. Kirim satu gelombang beberapa menit kemudian ke orang di luar wilayah Amerika, dan gelombang kedua sekitar pukul 06.00 waktu Pasifik ke wilayah Amerika, agar kebanyakan orang membacanya di pagi hari mereka.

### Apakah Ikiform tahu dari negara mana sebuah pendaftaran berasal?

Biasanya ya. Setiap kiriman mencatat negara koneksi pengunjung jika memungkinkan, dan negara itu muncul di API dan webhook sebagai meta.country. Nilainya bisa kosong, jadi anggap saja sebagai petunjuk.

### Apakah Ikiform gratis?

Tidak, tidak ada paket gratis. Pengujian gratis: Anda bisa mengirim 50 kiriman uji per bulan dari localhost sebelum membayar. Untuk go live, Pro mulai $6/bln untuk 500 kiriman, atau Anda bisa bayar sekali untuk 10.000 kiriman seharga $49 atau 50.000 kiriman seharga $149, dengan kredit yang tidak pernah kedaluwarsa.

## Panduan lainnya

- [Daftar tunggu untuk SaaS baru](https://ikiform.com/id/guides/waitlist.md): Bangun daftar tunggu pra-peluncuran di landing page Anda sendiri: formulir, perlindungan spam, duplikat, email konfirmasi, dan ekspor rapi di hari peluncuran.
- [Pendaftaran beta dengan penyaringan](https://ikiform.com/id/guides/waitlist/beta-signup.md): Formulir lamaran beta dengan pertanyaan penyaringan yang ditegakkan server, dan skrip yang menilai pelamar serta memilih setiap kohort dari daftar.
- [Daftar tunggu dengan HTML biasa](https://ikiform.com/id/guides/waitlist/html.md): Halaman daftar tunggu lengkap tanpa build dengan HTML biasa yang tetap berfungsi saat JavaScript mati, menampilkan ucapan terima kasih inline saat skrip dimuat, dan punya fallback bila perlu.
- [Daftar tunggu di Framer](https://ikiform.com/id/guides/waitlist/framer.md): Dua cara mengumpulkan pendaftaran daftar tunggu di Framer: formulir Framer dengan webhook ke Ikiform, atau code component yang mempertahankan batas per pengunjung dan pemeriksaan spam.
- [Daftar tunggu aplikasi mobile](https://ikiform.com/id/guides/waitlist/mobile-app.md): Daftar tunggu pra-peluncuran untuk aplikasi iOS atau Android yang menanyakan ponsel yang dipakai, mengirim penguji iPhone ke TestFlight, dan mengisi closed test Play.
- [Daftar tunggu Next.js](https://ikiform.com/id/guides/waitlist/nextjs.md): Daftar tunggu Next.js App Router: server action yang meneruskan pendaftaran dengan secret key, useActionState, terima kasih optimistis, dan batas per pengunjung.
