TL;DR
Google Sheets bisa kirim email otomatis lewat Apps Script pakai fungsi MailApp.sendEmail. Kamu tinggal siapkan kolom email dan isi pesan di sheet, tulis skrip yang baca tiap baris, lalu pasang trigger biar jalan otomatis tiap hari. Kuota gratisnya 100 email per hari buat akun Gmail biasa dan 1.500 per hari buat Google Workspace.
Google Sheets bisa kirim email sendiri. Gak perlu Zapier, gak perlu bayar apa-apa: cukup Apps Script yang udah nempel gratis di tiap spreadsheet.
Kasus paling sering: kirim reminder tagihan ke pelanggan, kirim laporan mingguan ke tim, atau kirim notifikasi kalau stok barang menipis.
Setup pertama makan waktu sekitar 15 menit. Setelah itu jalan sendiri tiap hari.
Di tutorial ini kamu bakal bikin sistem reminder tagihan yang jalan otomatis tiap pagi jam 8, lengkap sama pengaman biar email gak kekirim dobel.
Apps Script adalah editor kode bawaan Google yang bisa ngontrol Sheets, Gmail, Drive, dan Calendar. Bahasanya JavaScript.
Kamu gak perlu install apa-apa. Buka Google Sheets, klik menu Ekstensi, pilih Apps Script. Editornya langsung kebuka di tab baru.
Kalau kamu pernah nulis rumus IF di spreadsheet, kamu udah punya modal buat paham logika skrip ini. Bedanya cuma di sintaks.
Bikin sheet dengan lima kolom persis kayak gini:
| A: Nama | B: Email | C: Tagihan | D: Jatuh Tempo | E: Status Kirim |
|---|---|---|---|---|
| Siti Rahayu | siti@contoh.com | 450000 | 2026-06-15 | |
| Budi Santoso | budi@contoh.com | 1200000 | 2026-06-16 | |
| Ayu Lestari | ayu@contoh.com | 275000 | 2026-06-18 |
Kolom E dibiarkan kosong. Itu yang bakal diisi skrip setelah email terkirim.
Kolom E ini yang paling penting dari semuanya. Tanpa dia, tiap kali skrip jalan, Siti bakal dapat email tagihan yang sama berulang-ulang.
Buka Ekstensi, terus Apps Script. Hapus kode contoh yang ada, ganti sama ini:
function kirimReminderTagihan() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Tagihan');
const data = sheet.getDataRange().getValues();
// Mulai dari baris 2 (baris 1 itu header)
for (let i = 1; i < data.length; i++) {
const nama = data[i][0];
const email = data[i][1];
const tagihan = data[i][2];
const jatuhTempo = data[i][3];
const status = data[i][4];
// Lewati kalau udah pernah dikirim
if (status !== '') continue;
// Lewati kalau emailnya kosong
if (!email) continue;
const subjek = 'Pengingat Tagihan - Jatuh Tempo ' +
Utilities.formatDate(new Date(jatuhTempo), 'Asia/Jakarta', 'd MMM yyyy');
const pesan =
'Halo ' + nama + ',\n\n' +
'Tagihan kamu sebesar Rp ' + tagihan.toLocaleString('id-ID') + '\n' +
'jatuh tempo tanggal ' +
Utilities.formatDate(new Date(jatuhTempo), 'Asia/Jakarta', 'd MMMM yyyy') + '.\n\n' +
'Terima kasih,\nToko Berkah';
MailApp.sendEmail(email, subjek, pesan);
// Tandai sudah terkirim
sheet.getRange(i + 1, 5).setValue(new Date());
}
}
Simpan pakai Ctrl+S. Kasih nama proyeknya bebas.
Empat baris yang bikin semuanya jalan.
getDataRange().getValues(): ini narik semua isi sheet jadi array dua dimensi. Baris pertama indeksnya 0, jadi loop-nya mulai dari 1 buat lewatin header.
if (status !== '') continue;: ini pengaman anti-dobel. Kalau kolom E udah ada isinya, skrip lompat ke baris berikutnya.
MailApp.sendEmail(email, subjek, pesan), tiga argumen: ke siapa, judulnya apa, isinya apa. Sesederhana itu.
sheet.getRange(i + 1, 5).setValue(new Date()): nulis waktu kirim ke kolom E. Angka 5 itu nomor kolom E, dan i + 1 soalnya baris di spreadsheet mulai dari 1 sementara array mulai dari 0.
Di editor Apps Script, klik tombol Run. Pertama kali, Google bakal minta izin.
Peringatan "unsafe" itu normal. Skripnya kamu yang tulis sendiri, jadi Google belum meninjaunya. Wajar.
Setelah Allow, skrip langsung jalan. Cek inbox penerima, terus cek kolom E di sheet, harusnya udah keisi tanggal.
Skrip di atas masih harus diklik manual. Biar jalan sendiri, pasang trigger.
kirimReminderTagihanSelesai. Tiap pagi antara jam 8 dan 9, skrip jalan sendiri dan kirim email ke baris yang kolom E-nya masih kosong.
Waktu trigger ngikutin timezone spreadsheet. Cek di File, Settings, pastikan timezone-nya Jakarta.
Aku pasang sistem ini buat sebuah warung sembako yang punya 127 pelanggan langganan bulanan. Sebelumnya, pemiliknya nagih lewat WhatsApp satu-satu.
| Sebelum otomatis | Sesudah otomatis |
|---|---|
| 45 menit per hari nulis pesan | 0 menit: jalan sendiri jam 8 |
| Rata-rata 12 pelanggan kelewat per bulan | 0 kelewat |
| Pembayaran tepat waktu: 58% | Pembayaran tepat waktu: 79% |
Rata-rata 34 email terkirim per hari. Masih jauh di bawah kuota gratis 100 email.
Yang paling kerasa bukan hemat 45 menitnya. Yang kerasa naiknya pembayaran tepat waktu 21 poin, gara-gara reminder-nya konsisten, bukan tergantung mood.
Lupa kolom status. Ini nomor satu. Tanpa penanda terkirim, tiap trigger jalan semua orang dapat email lagi. Pelanggan kamu bakal dapat 30 email tagihan dalam sebulan.
Nulis nama sheet yang salah. getSheetByName('Tagihan') harus sama persis, termasuk huruf besar-kecil dan spasi. "tagihan" beda dari "Tagihan".
Nembus kuota harian. Kalau daftar kamu 300 baris dan akunnya Gmail gratis, skrip bakal error di email ke-101. Tapi kolom status nyelametin kamu. Besoknya skrip lanjut dari yang belum kekirim.
Gak tes ke email sendiri dulu. Ganti semua alamat di kolom B jadi email kamu, jalanin, lihat hasilnya. Baru masukkan alamat asli. Email yang udah terkirim gak bisa ditarik.
Format tanggal berantakan. Kalau kolom D dibaca sebagai teks bukan tanggal, Utilities.formatDate bakal error. Pastikan formatnya tanggal beneran di spreadsheet.
Akun Gmail gratis dapat kuota 100 email per hari lewat Apps Script. Akun Google Workspace berbayar dapat 1.500 per hari. Kuota ini dihitung per 24 jam bergulir. Kalau skrip nyoba kirim melebihi kuota, dia bakal error dan berhenti. Makanya kolom status terkirim penting.
Emailnya dikirim dari alamat Gmail kamu sendiri, jadi reputasinya sama kayak email manual. Yang bikin masuk spam biasanya isinya: subjek terlalu promosi atau kirim ke ratusan orang yang gak pernah kontak kamu. Buat reminder tagihan ke pelanggan yang udah kenal, hampir gak pernah kena.
Bisa. Pakai parameter attachments di MailApp.sendEmail, isinya array file dari Google Drive. Kamu juga bisa bikin PDF dari sheet-nya sendiri dan lampirkan. Ukuran total lampiran maksimal 25 MB, sama kayak batas Gmail biasa.
Pakai kolom status. Setelah skrip berhasil kirim ke satu baris, tulis tanggal di kolom itu. Di awal loop, skrip cek dulu kolom status, kalau udah terisi, lewati barisnya. Tanpa ini, tiap trigger jalan semua pelanggan dapat email yang sama lagi.
Nggak. Apps Script gratis buat semua akun Google. Yang dibatasi cuma kuotanya: 100 email per hari, waktu eksekusi 6 menit per run. Buat kebutuhan UMKM kayak kirim 30 reminder tiap pagi, kuota gratis lebih dari cukup.
Yang paling penting dari tutorial ini: tes ke email sendiri dulu, dan jangan pernah lupa kolom status.
Kalau udah jalan, kamu bisa kembangin. Kirim cuma ke tagihan yang jatuh tempo 3 hari lagi. Tambahin lampiran PDF invoice. Kirim laporan mingguan ke tim.
Semua fungsi MailApp yang tersedia ada di dokumentasi resmi Google Apps Script.
Buat logika kondisi di dalam skrip, konsepnya sama kayak fungsi IF dan VLOOKUP yang udah kamu kenal. Dan kalau mau lihat cara otomatisasi spreadsheet yang lain, lanjut baca Checklist Data Cleaning buat mastiin data yang masuk ke skrip udah bersih.
Buka spreadsheet kamu sekarang. Lima belas menit, jadi.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Cara pakai rumus FV dan PV Excel buat hitung nilai uang di masa depan dan sekarang. Lengkap dengan contoh tabungan dan target modal UMKM.
Investasi kelihatan untung di atas kertas, tapi nilai uang berubah tiap tahun. NPV dan IRR Excel bantu kamu nilai apakah proyek beneran layak, bukan cuma kelihatan untung.
Sebelum ambil pinjaman, kamu bisa hitung sendiri cicilan bulanannya pakai satu rumus. Ini cara PMT Excel bekerja, lengkap dengan contoh modal usaha dan jebakan bunga tahunan.