Emacs Org-Gcal Package

https://github.com/emacsmirror/org-gcal

Google API Setup

https://console.cloud.google.com/

Create a new project, Enable Google Calendar API, Create OAuth 2.0 Credentials

(setq org-gcal-client-id "unique-id"
      org-gcal-client-secret "client-secret"
      org-gcal-fetch-file-alist
      '(("rc.upcsa@gmail.com" . "~/org/gcal.org"))) ;; Google Calendar ID

(setq plstore-cache-passphrase-for-symmetric-encryption t)

Org File Created in /home/yal/org

org-gcal-post-at-point - Pushes single entries in Org to your Google Calendar

org-gcal-fetch - org-gcal-fetch to download Google Calendar events into your Org-mode files using the Google Calendar API

org-gcal-sync does what org-gcal-fetch does, but also runs org-gcal-post-at-point on all events that you’ve edited in Org mode to update the corresponding events in Google Calendar.

It's best to create your entries in Google Calendar and fetch them into Org. However, you can create Org entries provided they have the right format:

,* TODO Electrician
,SCHEDULED: <2025-09-12 Fri 10:00>
,:PROPERTIES:
,:calendar-id: rc.upcsa@gmail.com
,:END:

(setq org-capture-templates
      '(("n" "NOTE" entry
         (file "~/.emacs.d/org-agenda/notes.org")
         "* %^{Title} :%^{Tags}:\n%i\n%?"
         :immediate-finish t
         :empty-lines-before 1
         :jump-to-captured t)
        ("k" "ChecKbox" checkitem
         (file "~/.emacs.d/org-agenda/checkbox.org")
         "- [ ] %?"
         :jump-to-captured t)
        ("t" "TODO to GCal" entry
         (file "/home/yal/org/gcal.org")
         "* TODO %^{Task}\nSCHEDULED: %^t%i%?\n:PROPERTIES:\n:calendar-id: rc.upcsa@gmail.com\n:END:\n"
         :prepend t
         :jump-to-captured t)
        ;; :immediate-finish t)
        ("c" "Context task" entry
         (file "~/.emacs.d/org-agenda/inbox.org")
         "* TODO %?\n  Created: %U\n  Context: %a"
         :prepend t)))