Skip to main content
Tampilan dashboard sistem absensi digital berbasis Google Apps Script dengan GPS tracking

Sistem Absensi Digital Gratis dengan GPS Pakai Google Apps Script

5 min 921 words

Tim yang tersebar itu masalahnya bukan orang-orangnya. Masalahnya adalah catatan.

Siapa hadir hari ini? Siapa WFH? Si A kemarin kunjungan klien ke mana — dan sudah selesai apa? Pertanyaan-pertanyaan ini wajar. Tapi kalau jawabannya masih bergantung pada laporan WhatsApp atau spreadsheet yang diisi manual setelah hari kerja berakhir, akurasi datanya diragukan sejak awal.

Saya sudah coba beberapa pendekatan sebelum akhirnya membangun ini — dan yang berhasil ternyata bukan aplikasi berbayar yang canggih. Justru sebaliknya.


Kenapa Google Apps Script, Bukan Aplikasi Absensi Berbayar?

Aplikasi absensi berbayar itu bagus — kalau memang anggarannya ada dan fiturnya dipakai semua. Kenyataannya, banyak tim kecil dan menengah hanya butuh tiga hal: siapa hadir, jam berapa, dan sedang kerjakan apa.

Google Apps Script menjawab ketiga itu dengan modal nol rupiah.

Alasannya konkret. GAS berjalan langsung di infrastruktur Google — tidak butuh VPS, tidak butuh domain khusus, tidak ada tagihan bulanan. Database-nya Google Sheets yang sudah familiar. Frontend-nya HTML biasa yang bisa dikustomisasi sebebas apapun. Dan yang paling penting: data tersimpan di akun Google sendiri, bukan di server orang lain.

Dari beberapa proyek yang saya kerjakan dengan pendekatan ini, resistensi paling umum dari klien adalah: “Apa ini tidak terbatas?” Jawabannya — untuk kebutuhan absensi tim hingga ratusan orang, kuota gratis Google lebih dari cukup.


Apa Saja yang Dibangun

Sistem ini bukan sekadar form absensi. Ada empat lapisan yang bekerja bersama.

Lapisan pertama — Absensi dengan GPS. Karyawan membuka URL di browser HP, pilih status kehadiran (WFO, WFH, Izin, atau Sakit), dan sistem langsung merekam jam masuk beserta koordinat GPS jika izin diberikan. Begitu juga saat pulang. Koordinat tersimpan di Sheets dan bisa dibuka langsung di Google Maps — satu klik dari tabel rekap.

Lapisan kedua — Input kegiatan harian. Ini yang paling sering diminta klien tapi paling jarang ada di aplikasi absensi standar. Setiap anggota tim bisa mencatat aktivitas kerja lengkap: jenis kegiatan, detail pekerjaan, waktu mulai-selesai, status progres, nama instansi, PIC, bahkan kendala yang dihadapi. Bukan cuma “hadir atau tidak” — tapi “hadir dan mengerjakan apa.”

Lapisan ketiga — Manajemen role. Tiga level: User (hanya lihat dan input data sendiri), Admin (kelola user dan kategori kegiatan), Owner (lihat semua data semua orang). Validasi role jalan di server — tidak bisa di-bypass dengan modifikasi tampilan.

Lapisan keempat — Statistik publik. Halaman yang bisa diakses tanpa login, menampilkan jumlah kehadiran hari ini dan grafik tren 7 hari. Saya pernah pasang ini di TV ruang kantor klien. Efeknya kecil tapi nyata — tim jadi lebih aware soal kehadiran kolektif.


Struktur Data yang Terjaga

Empat sheet, masing-masing dengan tugas yang jelas:

  • Users — akun, password hash SHA-256, role, status aktif
  • Absensi — satu baris per orang per hari, berisi jam masuk, jam pulang, status kehadiran, dan dua pasang koordinat GPS
  • Input Aktivitas — 14 kolom per baris kegiatan
  • Referensi — daftar jenis kegiatan yang bisa dikelola Admin kapan saja

Yang paling penting dari sisi teknis: setiap operasi tulis menggunakan LockService. Ini mencegah race condition — kondisi di mana dua request masuk hampir bersamaan dan menghasilkan data ganda. Kelihatannya detail kecil, tapi saya pernah lihat sistem absensi yang tidak pakai lock dan menghasilkan dua baris absensi untuk orang yang sama di hari yang sama.


Keamanan yang Tidak Berlebihan tapi Cukup

Password disimpan sebagai hash SHA-256 — bukan plain text. Ada fitur auto-upgrade: kalau ada akun lama yang passwordnya masih tersimpan plain (dari setup awal misalnya), hash dibuat otomatis saat pertama kali login. Tidak perlu migrasi manual.

Sesi berakhir otomatis setelah 6 jam tidak aktif. Ini angka yang saya pilih setelah diskusi dengan beberapa pengguna — cukup panjang untuk hari kerja penuh, tapi tidak membiarkan sesi terbuka selamanya di perangkat yang lupa dikunci.

Satu catatan yang sering terlewat: SPREADSHEET_ID ada di kode. Artinya siapa yang punya akses ke repository bisa lihat ID spreadsheet-nya. Tapi spreadsheet itu tetap terlindungi oleh pengaturan sharing Google Sheets — ID saja tidak cukup untuk membaca data kalau spreadsheetnya tidak di-share.


Setup dari Nol: Lima Langkah

  1. Buka script.google.com dan buat project baru
  2. Salin file Code.gs, Index.html, css.html, js.html, dan appsscript.json dari repository GitHub
  3. Buat Google Sheets baru, salin ID-nya (bagian panjang di URL), tempel ke baris SPREADSHEET_ID di Code.gs
  4. Jalankan fungsi setupSheets() — ini membuat keempat sheet dengan header yang benar dan dua akun default (admin / admin123 dan adminsys / admin123)
  5. Deploy sebagai web app: Deploy → New deployment → Web app → Execute as: Me → Who has access: Anyone

Selesai. URL yang muncul setelah deploy langsung bisa dibagikan ke tim.

Ganti password default segera setelah pertama kali login. Ini langkah yang sering terlewat.


Yang Perlu Dipertimbangkan

Sistem ini bukan untuk semua situasi. Beberapa batasan yang perlu disadari:

GAS punya kuota eksekusi harian — untuk penggunaan normal tim kecil-menengah ini tidak akan pernah tersentuh, tapi kalau ada ratusan user yang absen bersamaan dalam satu menit, bisa ada antrean. LockService menangani ini dengan wait timeout 10 detik.

Tidak ada notifikasi push — sistem tidak mengirim reminder absensi otomatis. Ini bisa ditambahkan dengan Google Time-Based Trigger, tapi tidak ada di versi saat ini.

Data di Sheets artinya juga bisa diedit manual oleh siapa yang punya akses editor ke spreadsheet. Kalau integritas data sangat kritis, akses editor spreadsheet perlu dikunci ketat — hanya Owner yang punya.


Apa yang Bisa Dilakukan Sekarang

Repository sudah terbuka di github.com/luthfisy/absensi-dan-input-pekerjaan. Kode bisa langsung dipakai, dimodifikasi, atau dijadikan basis untuk kebutuhan yang lebih spesifik.

Kalau tim Anda butuh tambahan — notifikasi otomatis, integrasi dengan sistem HR yang sudah ada, atau laporan bulanan yang dikirim ke email — itu semua bisa dibangun di atas fondasi yang sama. Hubungi saya kalau butuh implementasi yang disesuaikan.

Cara membangun sistem absensi dan input kegiatan harian berbasis Google Apps Script — GPS tracking, manajemen role, statistik real-time, tanpa biaya server sama sekali.