The Google Simple Tasks plugin was created for my personal use to automatically (or manually) one-way sync Google Tasks to Obsidian and to (manually) send locally created tasks from Obsidian to Google Tasks.
It all began in July of 2025 when I created my first personal Obsidian plugin that I called Add to Google Tasks. The plugin let me create a standard, markdown checkbox “task” in Obsidian and send it to any of my Google Tasks lists via a hotkey. Once sent, the task disappeared from wherever I had added it locally and showed up the correct list in Google Tasks.
Like many do, I started with the Obsidian sample plugin available on GitHub. I had additional help from claude.ai, who, while saving me some time, also frequently frustrated me by randomly rewriting my perfectly working code (cheeky bot). I developed the plugin for use with the desktop version of Obsidian on Mac OS. In my particular case, I am on the latest beta version and have the basic Catalyst license which gives access to beta app versions and Obsidian Bases.
After creating Add to Google Tasks, I decided to go on to create a two-way syncing plugin which I initially called Google Tasks Aller-Retour, designed to work independently from the first plugin. While it ended up working pretty well, there were issues with timing and delays that made me nervous about which location was up to date. After messing with it for a month, I decided that I would let Google Tasks be the “source of truth” for managing the actual tasks, so I added the first plugin to this newer version, changed the sync to create individual task “notes” (rather than the original one note for each list) and renamed it Google Simple Tasks. It would still allow me to capture local tasks but not worry about accidentally overwriting or missing changes as was sometimes the case in the original two-way sync.
The why
What motivated me to create this revised version of my original two plugins was the move to Obsidian from ClickUp and Notion, and a desire to stop paying for external task managers. I needed a simple way to turn emails into tasks, since that is where most of my tasks began, but I also wanted to be able to create tasks locally and add them to my different Google Tasks lists.
After years of using third-party task managers, I found that Google Tasks had gotten pretty good – an email becomes a task with a simple click, without adding plugins to Gmail. And the Google Tasks page view also lets you arrange lists in a kanban-like setting and drag and drop tasks (active, billable, etc.) between lists. Pretty simple. I was not time-tracking my work, nor do I collaborate with other workers, so most popular task managers were overkill for me.
So… in September 2025, after a lot of experimenting and learning, Google Simple Tasks was “reborn”. We’ll see where it goes from here.
Features
On sync (Google Tasks to Obsidian), task lists are imported as folders and each task as a note inside the list folder
Manual or automated syncing (up to once per hour) from Google Tasks to Obsidian desktop
Ability to create a standard checkbox task anywhere in Obsidian and send it to Google Tasks, to the task list of your choice
Ability to add a due date and time to any task you send to Google Tasks
Locally added task is deleted upon a successful send to Google Tasks, appearing in next sync
Set custom hotkeys in Obsidian settings to trigger sending and syncing
Date format option in Settings
Compatible with Dataview plugin queries to display and sort tasks to taste
Compatible with Bases core database plugin (as of September 2025)
Requirements
Obsidian desktop installed on your computer (I have only tested this on Mac)
Your own Google API credentials (Client ID and Client Secret) – see OAuth documentation on Installation page
Node.js and npm installed (for building the plugin) in the code editor of your choice (VS Code, etc.)
Screenshots
Click on an image to enlarge it.
Activate plugin
Send to Google Tasks
Plugin settings (1)
Plugin settings (2)
Task folder structure and task note
Task line in note
Tasks in Bases
Requirements
Obsidian desktop version installed on your computer (currently only tested on Mac)
Your own Google API credentials (Client ID and Client Secret) – see OAuth documentation below
Node.js and npm installed (for building the plugin) in the code editor of your choice (VS Code, etc.)
Create your Google App credentials
You can create one app and use the same credentials for any Obsidian plugins that require credentials. You’ll need a paid Google Account to do this.
Create or select a project – Click on the project dropdown at the top, click “New Project” and enter a project name, then click “Create”
Enable required APIs – In the left sidebar, go to “APIs & Services” > “Library”. Search for and enable APIs, then locate and enable the Google Tasks API.
Create credentials – Go to “APIs & Services” > “Credentials”. Click “Create Credentials” at the top. Choose your credential type (OAuth 2.0 Client IDs for user authentication).
Configure OAuth client – Choose desktop application type and external use and click “Create”
Download credentials – Click the download icon next to your new credentials; save the JSON file securely (be careful not to commit this file to a public repository)
Set up the OAuth consent screen – Go to “OAuth consent screen” and fill in required app information. Add test users if in development mode
Your credentials are now ready to use in your application.
Download and install the plugin
Download the latest version of Google Simple Tasks for Obsidian desktop. An installation guide is included (or visit the Docs tab).
Because this plugin uses (your own) OAuth credentials, it is not currently mobile-compatible and making it so is way beyond my skill level. This hasn’t been a big issue for me since I am using Obsidian Sync and mainly only look at my tasks on my phone and tablet (where I can always see the latest sync). Maybe some brave soul will take what I’ve done here and expand on it. I’m still too shy to put this on GitHub!
Configure the plugin
Open Obsidian Settings → Google Simple Tasks
Paste your Client ID and Client Secret
Run the command Authenticate with Google from the command palette
Follow the authentication flow :
– Click the link to open Google authentication
– Grant permissions to access your Google Tasks
– Copy the authorization code
– Paste it back in Obsidian
The plugin will automatically start syncing and you’ll see status messages.
Customize Settings
Tasks Folder – Root folder for all task notes (default – Tasks)
Sync Interval – How often to sync automatically in minutes (default 5, max once per hour)
Due Date Icon – Icon or text to display before due dates (default – 📅)
Completed Icon – Icon or text to display before completion dates (default – ✅)
Show Source List – Toggle display of the source Google Tasks list name
Date Format – Choose between Dataview format (YYYY-MM-DD), short (M/D/YYYY), or long (Mon DD, YYYY)
Usage
Receiving tasks from Google
Tasks automatically sync based on your configured interval. For manual sync:
Open the command palette (Ctrl/Cmd + P)
Run Sync Google Tasks to Obsidian
Tasks will be organized into subfolders by list name
Completed tasks go to the Archived subfolder
Sending tasks to Google
Method 1 : From any note
Write a task in checkbox format: `- [ ] Task title`
Place your cursor on that line
Run Send task to Google Tasks command (assign a hotkey for quick access)
Select which Google Tasks list to add it to
Optionally set a due date
The task is created in Google Tasks and the local task is removed
After auto-sync, a new note will appear in the appropriate subfolder
Method 2 : Update existing synced tasks
Open any task note that was synced from Google Tasks
Edit the title in the checkbox line or check/uncheck the box
Run Send task to Google Tasks command (or your custom hotkey) to push your changes
Changes are sent to Google Tasks
The note updates after the next sync
Important – If you don’t manually send local updates, the next automatic sync from Google will overwrite your local changes
Task note structure
Each task note includes :
Frontmatter metadata
google_task_id – Unique identifier for syncing
list_id and list_title – Source Google Tasks list
status – Current status (needsAction or completed)
due_date – Formatted due date (if set)
completed_date – Formatted completion date (if completed)
notes – Task notes from Google Tasks (supports multi-line)
tags – Extracted hashtags from notes
parent_task – ID of parent task (for subtasks)
Body
Task title as heading
Interactive checkbox with formatted dates
Task notes section
Last sync timestamp
Folder structure
Tasks/ ├── [List Name 1]/ │ ├── Task Title 1.md │ └── Task Title 2.md ├── [List Name 2]/ │ └── Task Title 3.md └── Archived/ └── Completed Task.md
Bases integration
This plugin was designed with Obsidian Bases in mind. Filter and sort tasks by list, status, due date, tags and more. Use properties and formulas to control display and use Obsidian links and tags in Google Tasks to enable querying and search. Task title in .base files automatically link to the locally synced Google Task note.
Dataview integration
Use of Obsidian links and tags in Google Tasks enables querying and search. Use inline Dataview (community plugin) syntax to customize results.
dataview TASK WHERE due WHERE !completed SORT due ASC
Query by list
dataview TABLE due_date, status FROM "Tasks/Work Tasks" WHERE !completed SORT due_date
Find overdue tasks
dataview TASK FROM "Tasks/List-folder-name" WHERE due < date(today) AND !completed
Tips
Assign a hotkey to “Send task to Google Tasks” for quick capture and updates
Push changes immediately – if you check/uncheck tasks in Obsidian, use the send command right away or they’ll be overwritten on next sync
Google Tasks is the source of truth – automatic sync always overwrites local changes
Use hashtags in Google Tasks notes – they’ll be extracted as Obsidian tags
Edit task notes freely – add your own content below the sync metadata (won’t be sent to Google)
Link tasks to projects by adding wiki-links in your notes
Organize with subfolders – tasks automatically organize by list name
Archive completed tasks automatically move to the Archived folder
Privacy & Security
Your Google credentials are stored locally in Obsidian’s data
The plugin only requests access to your Google Tasks (no other data)
Authentication uses OAuth 2.0 with refresh tokens for security
No data is sent to third parties
Troubleshooting
Authentication fails
Ensure you’ve enabled the Google Tasks API in Google Cloud Console
Try revoking access in your Google Account settings and re-authenticating
Check that you’re using “Desktop app” credentials
Tasks not syncing
Verify your refresh token is set in settings
Check the console (Ctrl/Cmd + Shift + I) for error messages
Try manually running the sync command
Task updates not working
Ensure you’re editing a synced task note (has google_task_id in frontmatter)
Check that the checkbox line format is correct – - [ ] Task title
Verify you have a valid connection (try manual sync first)
Changes in Obsidian get overwritten
This is expected behavior – automatic sync always pulls from Google Tasks
You must manually use the “Send task to Google Tasks” command to push local changes
Assign a hotkey for quick access when you make changes
Support
For issues, feature requests, or questions – dana@vizou.com