AI Insights
Generate a summary and suggested tags for this post.
Manajer atau bos kamu minta laporan penjualan harian setiap pagi? Alih-alih buka Sheets, filter tanggal, dan tulis email rekap manual tiap hari — bikin Google Apps Script yang lakukan semuanya otomatis jam 07:00 pagi.
Kamu tinggal buka HP, cek email, kopi hangat di tangan. Data sudah rapih di inbox. ☕

Apa Saja yang Bisa Direkap?
| Bidang | Contoh Laporan |
|---|---|
| Penjualan | Total omzet, jumlah transaksi, produk terlaris |
| Absensi | Karyawan hadir/absen, jam masuk-pulang |
| Stok Barang | Item hampir habis, item baru masuk |
| Support Tiket | Tiket baru, tiket terselesaikan, backlog |
| Website Traffic | Kunjungan dari Google Sheets export analytics |
| Keuangan | Pemasukan-pengeluaran harian, saldo kas |
Langkah 1: Struktur Data Sumber
Misal Sheets bernama "Transaksi" dengan struktur:
| Tanggal | Produk | Jumlah | Total |
|---|---|---|---|
| 2025-05-20 | Kopi Susu | 12 | 180.000 |
| 2025-05-20 | Nasi Goreng | 8 | 200.000 |
| 2025-05-20 | Kopi Susu | 10 | 150.000 |
Langkah 2: Script Rekap Harian
Buka Extensions → Apps Script → paste:
function laporanHarian() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Transaksi");
const data = sheet.getDataRange().getValues();
const kemarin = new Date();
kemarin.setDate(kemarin.getDate() - 1);
const target = Utilities.formatDate(kemarin, "GMT+7", "yyyy-MM-dd");
let totalOmzet = 0;
let jumlahTx = 0;
const produkCount = {};
for (let i = 1; i < data.length; i++) {
const [tanggal, produk, jumlah, total] = data[i];
const dl = Utilities.formatDate(new Date(tanggal), "GMT+7", "yyyy-MM-dd");
if (dl !== target) continue;
totalOmzet += Number(total);
jumlahTx += 1;
produkCount[produk] = (produkCount[produk] || 0) + Number(jumlah);
}
const produkTerlaris = Object.entries(produkCount)
.sort((a, b) => b[1] - a[1])[0]?.[0] ?? "-";
const html = `
<div style="font-family:Arial;color:#333">
<h2 style="color:#FF6B35">📊 Laporan Harian - ${target}</h2>
<table style="border-collapse:collapse;margin-top:12px">
<tr><td style="padding:8px 16px;background:#f5f5f5"><b>Total Penjualan</b></td>
<td style="padding:8px 16px">Rp${totalOmzet.toLocaleString("id-ID")}</td></tr>
<tr><td style="padding:8px 16px;background:#f5f5f5"><b>Jumlah Transaksi</b></td>
<td style="padding:8px 16px">${jumlahTx}</td></tr>
<tr><td style="padding:8px 16px;background:#f5f5f5"><b>Produk Terlaris</b></td>
<td style="padding:8px 16px">${produkTerlaris}</td></tr>
</table>
<p style="margin-top:16px;color:#666">Laporan otomatis oleh sistem.</p>
</div>`;
GmailApp.sendEmail("manajer@perusahaan.com",
`Laporan Harian - ${target}`, "", { htmlBody: html });
}Ganti manajer@perusahaan.com dengan email penerima laporan.
Langkah 3: Preview Hasil

Setelah Save → Run, cek inbox manajer. Email masuk berisi:
- Judul: Laporan Harian - 2025-05-20
- Isi: Total penjualan, jumlah transaksi, produk terlaris
- Format HTML rapi dengan warna brand
Langkah 4: Pasang Trigger Harian

Supaya jalan otomatis tiap pagi:
- Editor Apps Script → ikon ⏰ Triggers.
- Add Trigger.
- Function:
laporanHarian. - Event source: Time-driven → Day timer → 6am-7am.
- Save.
Selesai. Setiap hari jam 6-7 pagi, email otomatis masuk ke manajer — selamanya.
Variasi Frekuensi Laporan
Kamu bisa duplikat trigger untuk pola berbeda:
| Frekuensi | Setting Trigger | Cocok Untuk |
|---|---|---|
| Harian | Day timer → 7am | Penjualan, absensi, stok |
| Mingguan | Week timer → Senin 8am | Rekap performa cabang |
| Bulanan | Month timer → Tanggal 1 | Laporan keuangan, target vs realisasi |
| Real-time (on edit) | On Edit trigger | Notif saat ada order baru masuk |
Tips Membuat Laporan yang Berguna
- Highlight angka penting — pakai warna orange/merah untuk KPI utama.
- Bandingkan dengan kemarin/minggu lalu — kasih persentase naik/turun.
- Kirim ke > 1 email — pisah dengan koma di parameter
GmailApp.sendEmail. - Lampirkan PDF full data — untuk audit trail, pakai
getBlob()+.getAs("application/pdf"). - Warning saat anomali — kalau omzet turun > 30%, tambahkan alert merah di email.
Contoh Advanced: Bandingkan dengan Hari Sebelumnya
const omzetKemarin = 1500000;
const omzetHariIni = 1200000;
const selisih = ((omzetHariIni - omzetKemarin) / omzetKemarin) * 100;
const trend = selisih >= 0
? `<span style="color:green">▲ ${selisih.toFixed(1)}%</span>`
: `<span style="color:red">▼ ${Math.abs(selisih).toFixed(1)}%</span>`;Kesimpulan
Laporan harian otomatis adalah quick win paling populer di kantor — sekali setup 30 menit, kamu:
- Hemat 15-30 menit/hari untuk selamanya.
- Tidak lupa/telat kirim laporan ke atasan.
- Data lebih akurat karena tidak ada copy-paste manual.
- Bisa dikembangkan ke weekly, monthly, atau bahkan notifikasi realtime.
Cocok untuk cafe, toko online, agency, freelancer — pokoknya siapa saja yang punya data harian yang perlu dilaporkan.
Selamat mengotomatisasi laporan! 📊
