Tutorial n8n #10: Mengambil Data dari Form dan Menyimpannya ke Supabase
Pada tutorial #9, kita sudah memakai n8n Form Trigger dan Data Table untuk menangkap input sederhana. Di tutorial #10 ini, kita naik satu level: data dari form akan disimpan ke database eksternal, yaitu Supabase.
Bagi saya, ini adalah langkah penting dari prototype menuju sistem yang lebih rapi. Data Table cocok untuk percobaan cepat, tetapi ketika data mulai dipakai oleh aplikasi, dashboard, tim sales, atau proses analitik, database eksternal seperti Supabase memberi struktur yang lebih jelas.
Workflow yang akan kita buat:
n8n Form Trigger -> Supabase Insert
Target akhirnya sederhana: user mengisi form intake, n8n menerima submission, lalu n8n menyimpan data tersebut sebagai row baru di tabel Supabase.
1. Gambaran Arsitektur
Sebelum masuk ke langkah teknis, pahami dulu alurnya:
| Komponen | Peran |
|---|---|
| n8n Form Trigger | Membuat halaman form dan menangkap submission user |
| n8n workflow | Menjadi proses server-side yang menerima data dan menjalankan automasi |
| Supabase | Menyediakan database Postgres untuk menyimpan data |
Table lead_intake |
Tempat penyimpanan data form |
| Row | Satu submission form yang berhasil disimpan |
Alurnya seperti ini:
- User membuka form dari URL n8n.
- User mengisi
name,email, dankebutuhan. - n8n Form Trigger menerima data.
- Supabase node melakukan insert ke tabel
lead_intake. - Supabase menyimpan data sebagai row baru.
Catatan penting: jangan pernah menaruh API key, service role key, password, atau JWT di artikel, screenshot publik, atau workflow JSON yang dibagikan. Simpan secret di credential manager n8n.
2. Prasyarat
Sebelum mulai, pastikan Anda sudah punya:
- n8n yang sudah berjalan.
- Akun Supabase Cloud atau instance Supabase self-hosted.
- Akses ke dashboard Supabase.
- Hak untuk membuat table dan mengatur credential di n8n.
Placeholder yang akan kita gunakan:
| Placeholder | Arti |
|---|---|
[SUPABASE_URL] |
URL project Supabase Anda |
[REDACTED] |
Key atau secret yang tidak boleh ditampilkan |
3. Setup Supabase Cloud
Jika memakai Supabase Cloud, lakukan langkah berikut:
- Buka dashboard resmi Supabase.
- Buat account jika belum punya.
- Buat project baru.
- Pilih region dan konfigurasi project sesuai kebutuhan.
- Pilih subscription yang sesuai kebutuhan.
- Cek pricing resmi Supabase sebelum berlangganan, karena detail harga dan limit bisa berubah.
- Catat Project URL, tetapi jangan tampilkan secret di dokumentasi publik.
Contoh format yang aman untuk dicatat di dokumentasi internal:
SUPABASE_URL=[SUPABASE_URL]
SUPABASE_KEY=[REDACTED]
Jangan menulis key asli di artikel, repository publik, issue tracker, atau chat yang tidak aman.
4. Buat Tabel lead_intake
Di Supabase SQL Editor, buat tabel sederhana berikut:
create table if not exists public.lead_intake (
id uuid primary key default gen_random_uuid(),
name text not null,
email text not null,
kebutuhan text,
created_at timestamptz not null default now(),
constraint lead_intake_email_length check (char_length(email) <= 320),
constraint lead_intake_name_length check (char_length(name) <= 120),
constraint lead_intake_kebutuhan_length check (char_length(kebutuhan) <= 2000)
);
Kolom yang kita pakai:
| Kolom | Tipe | Keterangan |
|---|---|---|
id |
uuid |
Primary key otomatis |
name |
text |
Nama pengisi form |
email |
text |
Email pengisi form |
kebutuhan |
text |
Kebutuhan atau pesan dari user |
created_at |
timestamptz |
Waktu data masuk |
5. Catatan Aman tentang RLS
Supabase mendukung Row Level Security atau RLS. Untuk production, jangan menjadikan solusi permanen dengan mematikan RLS hanya supaya insert berhasil.
Ada dua pendekatan yang umum:
-
Server-side melalui n8n dengan credential manager
- n8n menyimpan credential secara aman.
- Form user tidak langsung memanggil Supabase dari browser.
- Jika memakai key dengan privilege tinggi seperti service role, pastikan hanya digunakan server-side dan tidak pernah diekspos ke client.
-
Policy minimum untuk insert
- Cocok jika Anda memakai key dengan privilege terbatas.
- Policy harus dibuat seminimal mungkin.
- Tetap butuh validasi, rate limit, dan monitoring.
Contoh policy insert sederhana jika Anda memang memilih jalur anon role untuk kebutuhan tertentu:
alter table public.lead_intake enable row level security;
create policy server_insert_leads
on public.lead_intake
for insert
to anon
with check (
name is not null
and email is not null
and char_length(name) <= 120
and char_length(email) <= 320
);
Catatan saya: policy seperti ini masih harus disesuaikan dengan model security aplikasi Anda. Untuk production yang serius, diskusikan role, key, dan policy dengan tim yang memahami Supabase dan Postgres security.
6. Opsi Self-hosted Supabase
Selain Cloud subscription, Supabase juga bisa dijalankan secara self-hosted. Namun, self-hosted bukan sekadar install lalu selesai.
Jika memilih self-hosted, tim Anda bertanggung jawab atas:
- VPS atau server.
- Docker dan konfigurasi service.
- Storage.
- Database.
- Backup.
- Patching.
- HTTPS.
- Monitoring.
- Recovery saat terjadi masalah.
Pilihan ini menarik jika Anda butuh kontrol lebih besar, tetapi konsekuensi operasionalnya juga lebih besar. Jangan hanya membandingkan dari harga awal. Pertimbangkan waktu tim, risiko downtime, backup, security, dan kemampuan recovery.
Jika ingin opsi managed self-hosted, Anda bisa berkonsultasi atau membeli layanan melalui BOC di:
https://boc.co.id/supabase.php
BOC di sini adalah opsi penyedia managed self-hosted yang diarahkan dalam konteks tutorial ini, bukan sumber resmi Supabase. Detail kapasitas, harga, SLA, backup, dan scope layanan harus dikonfirmasi langsung di halaman atau ke penyedia terkait.
7. Buat Workflow n8n
Sekarang masuk ke n8n.
Buat workflow baru dengan dua node:
- n8n Form Trigger
- Supabase
Strukturnya:
n8n Form Trigger -> Supabase Insert
8. Konfigurasi n8n Form Trigger
Tambahkan node n8n Form Trigger.
Buat field berikut:
| Field key | Label | Tipe | Wajib |
|---|---|---|---|
name |
Name | Text | Ya |
email |
Email atau Text | Ya | |
kebutuhan |
Kebutuhan | Textarea | Tidak, tetapi disarankan |
Gunakan field key yang konsisten dengan nama kolom Supabase agar mapping lebih mudah.
Saat development, gunakan Test URL dari Form Trigger. Ini membantu karena data submission bisa terlihat di editor n8n saat testing.
Setelah workflow siap untuk production:
- Simpan workflow.
- Aktifkan atau publish workflow sesuai mode deployment n8n Anda.
- Gunakan Production URL.
Perlu diingat, data dari Production URL tidak selalu tampil di editor seperti mode test. Untuk verifikasi production, cek execution log dan row di Supabase.
9. Buat Credential Supabase di n8n
Tambahkan credential Supabase di n8n.
Isi credential dengan pola aman berikut:
Host atau URL: [SUPABASE_URL]
API Key: [REDACTED]
Jangan menaruh key asli di:
- Nama node.
- Catatan workflow.
- Workflow JSON yang diekspor.
- Artikel publik.
- Screenshot.
Jika n8n Anda dipakai oleh tim, batasi siapa yang bisa melihat, mengubah, atau mengeksekusi credential.
10. Tambahkan Supabase Node untuk Insert Row
Tambahkan node Supabase setelah Form Trigger.
Konfigurasi umumnya:
| Opsi | Nilai |
|---|---|
| Credential | Credential Supabase yang baru dibuat |
| Resource | Row |
| Operation | Insert atau Create, tergantung versi node n8n Anda |
| Table | lead_intake |
Nama operation bisa sedikit berbeda antar versi n8n. Di beberapa versi, action untuk menambahkan data disebut Insert. Di versi lain, UI bisa menampilkan istilah yang mirip seperti Create. Intinya, pilih operasi yang membuat row baru di tabel.
11. Mapping Field Form ke Kolom Supabase
Map data dari Form Trigger ke kolom Supabase.
Jika field key di Form Trigger adalah name, email, dan kebutuhan, gunakan expression berikut:
| Kolom Supabase | Expression n8n |
|---|---|
name |
={{ $json.name }} |
email |
={{ $json.email }} |
kebutuhan |
={{ $json.kebutuhan }} |
Kolom id dan created_at tidak perlu diisi dari n8n karena sudah punya default value dari database.
Expected payload yang masuk ke Supabase kira-kira seperti ini:
{
"name": "Budi",
"email": "[email protected]",
"kebutuhan": "Saya ingin konsultasi automasi lead intake."
}
Contoh di atas hanya payload dummy. Jangan gunakan data pribadi asli saat menulis dokumentasi publik.
12. Uji Submission
Lakukan pengujian:
- Klik Execute Workflow atau jalankan Form Trigger dalam mode test.
- n8n akan membuka form.
- Isi data contoh.
- Submit form.
- Pastikan node Supabase berhasil dieksekusi.
- Buka Supabase Table Editor.
- Cek tabel
lead_intake.
Expected result:
- Ada satu row baru di tabel
lead_intake. - Kolom
nameterisi sesuai input form. - Kolom
emailterisi sesuai input form. - Kolom
kebutuhanterisi sesuai input form. - Kolom
created_atotomatis terisi timestamp.
Jika sudah berhasil, Anda sudah punya workflow intake sederhana yang datanya masuk ke database eksternal.
13. Troubleshooting
Berikut masalah yang sering muncul saat menghubungkan n8n ke Supabase.
| Masalah | Kemungkinan penyebab | Solusi |
|---|---|---|
| Supabase node gagal koneksi | URL salah | Pastikan memakai [SUPABASE_URL] project yang benar |
| Unauthorized atau forbidden | Key salah atau privilege tidak cukup | Cek credential di n8n dan policy Supabase |
| Insert ditolak | RLS policy belum sesuai | Jangan mematikan RLS permanen, buat policy minimum yang tepat |
| Kolom tidak ditemukan | Nama kolom berbeda | Cocokkan field mapping dengan schema tabel |
| Data kosong | Expression salah | Cek output Form Trigger dan sesuaikan {{ $json.field }} |
| Error HTTPS | Endpoint tidak memakai HTTPS atau sertifikat bermasalah | Pastikan URL Supabase valid dan HTTPS berfungsi |
| Timeout | Koneksi lambat atau server bermasalah | Cek network, resource server, dan log n8n |
| Production URL tidak terlihat di editor | Perilaku production Form Trigger | Cek execution log dan database, bukan hanya editor UI |
Tips saya: saat debugging, mulai dari mode test. Pastikan output Form Trigger benar dulu, baru cek Supabase node.
14. Security Checklist
Sebelum workflow dipakai production, cek daftar berikut:
- Terapkan least privilege untuk key dan role.
- Service role key hanya boleh digunakan server-side.
- Simpan secret di credential manager n8n.
- Jangan membagikan workflow JSON yang berisi secret.
- Gunakan HTTPS.
- Aktifkan dan desain RLS dengan benar.
- Validasi input, minimal panjang teks dan format email.
- Tambahkan rate limit jika form dibuka publik.
- Siapkan backup database.
- Cek audit log atau log akses sesuai kebutuhan compliance.
- Tentukan data retention, misalnya data lead disimpan berapa lama.
- Batasi akses dashboard Supabase dan n8n hanya untuk user yang perlu.
- Monitor error execution di n8n.
Automasi yang terlihat sederhana bisa menjadi pintu masuk data penting. Karena itu, jangan menunda urusan security sampai datanya sudah terlanjur banyak.
15. Cloud Subscription vs Self-hosted Supabase
Berikut perbandingan jujur sebelum memilih:
| Aspek | Supabase Cloud | Self-hosted Supabase |
|---|---|---|
| Setup awal | Lebih cepat melalui dashboard resmi | Lebih teknis, perlu server dan konfigurasi |
| Operasional | Banyak dikelola platform | Ditanggung tim sendiri atau penyedia managed |
| Kontrol infrastruktur | Lebih terbatas | Lebih besar |
| Backup dan recovery | Mengikuti fitur dan paket yang dipilih | Harus dirancang dan diuji sendiri |
| Security patching | Banyak bergantung pada platform | Tanggung jawab tim atau penyedia managed |
| Biaya awal | Tergantung subscription | Bisa terlihat murah, tetapi ada biaya operasional |
| Cocok untuk | Tim yang ingin fokus build produk | Tim yang butuh kontrol lebih dan siap operasional |
Saya biasanya menyarankan memilih berdasarkan kebutuhan kontrol, security, backup, dan kemampuan operasional tim, bukan hanya harga awal. Untuk banyak proyek, Cloud lebih cepat untuk mulai. Untuk kebutuhan tertentu, self-hosted bisa masuk akal jika tim siap mengelola konsekuensinya.
16. Penutup
Di tutorial ini, kita membuat workflow sederhana tetapi fondasional:
n8n Form Trigger -> Supabase Insert
Hasilnya, data form tidak lagi berhenti di workflow atau Data Table, tetapi masuk ke database eksternal yang lebih terstruktur.
Jika Anda ingin cepat mulai, Supabase Cloud bisa menjadi opsi praktis. Jika butuh kontrol lebih besar, self-hosted bisa dipertimbangkan, dengan catatan tim harus siap mengurus VPS, Docker, storage, database, backup, patching, HTTPS, monitoring, dan recovery.
Untuk pembaca yang ingin opsi managed self-hosted, Anda bisa berkonsultasi atau membeli layanan melalui BOC di https://boc.co.id/supabase.php. Pastikan semua detail kapasitas, harga, SLA, backup, dan scope layanan dikonfirmasi langsung sebelum mengambil keputusan.
Referensi
-
n8n Form, n8n Docs
Penerbit: n8n
URL: https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.formtrigger/
Tanggal publish/update sumber: tidak terverifikasi. -
Supabase node, n8n Docs
Penerbit: n8n
URL: https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.supabase/
Tanggal publish/update sumber: tidak terverifikasi. -
Getting Started, Supabase Docs
Penerbit: Supabase
URL: https://supabase.com/docs/guides/getting-started
Tanggal publish/update sumber: tidak terverifikasi. -
Supabase VPS Hosting BOC
Penerbit: BOC
URL: https://boc.co.id/supabase.php
Tanggal publish/update sumber: tidak terverifikasi.