FaizBlog LogoFaizBlog
Back to all articles
Google Apps ScriptLaporanGoogle SheetsOtomatisasiReport

Cara Membuat Laporan Harian Otomatis dari Google Sheets ke Email

Panduan lengkap bikin script rekap data harian dari Google Sheets otomatis terkirim ke email manajer tiap pagi. Cocok untuk laporan penjualan, absensi, stok, dan support tiket.

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

Cara kerja laporan otomatis

Apa Saja yang Bisa Direkap?

BidangContoh Laporan
PenjualanTotal omzet, jumlah transaksi, produk terlaris
AbsensiKaryawan hadir/absen, jam masuk-pulang
Stok BarangItem hampir habis, item baru masuk
Support TiketTiket baru, tiket terselesaikan, backlog
Website TrafficKunjungan dari Google Sheets export analytics
KeuanganPemasukan-pengeluaran harian, saldo kas

Langkah 1: Struktur Data Sumber

Misal Sheets bernama "Transaksi" dengan struktur:

TanggalProdukJumlahTotal
2025-05-20Kopi Susu12180.000
2025-05-20Nasi Goreng8200.000
2025-05-20Kopi Susu10150.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

Preview email laporan

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

Jadwal trigger laporan

Supaya jalan otomatis tiap pagi:

  1. Editor Apps Script → ikon ⏰ Triggers.
  2. Add Trigger.
  3. Function: laporanHarian.
  4. Event source: Time-driven → Day timer → 6am-7am.
  5. Save.

Selesai. Setiap hari jam 6-7 pagi, email otomatis masuk ke manajer — selamanya.

Variasi Frekuensi Laporan

Kamu bisa duplikat trigger untuk pola berbeda:

FrekuensiSetting TriggerCocok Untuk
HarianDay timer → 7amPenjualan, absensi, stok
MingguanWeek timer → Senin 8amRekap performa cabang
BulananMonth timer → Tanggal 1Laporan keuangan, target vs realisasi
Real-time (on edit)On Edit triggerNotif 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! 📊