2026-05-07
Complete Guide: n8n Workflow for Obsidian Daily Notes Setup
Learn how to build an automated n8n workflow for Obsidian daily notes setup. Step-by-step guide to generating templates, syncing tasks, and saving time.
Editor summary
Obsidian Daily Notes Setup with n8n transforms manual morning preparation into a fully automated workflow. The Schedule Trigger node runs at a specified time each day, pulling calendar events and unfinished tasks from external APIs before formatting everything into a structured Markdown template. I find this separation of concerns particularly valuable: n8n handles heavy API integration and data processing independently, keeping your Obsidian vault lightweight and focused on reading and writing. The trade-off worth noting is timezone configuration—incorrect settings can generate notes a day early or late, disrupting internal linking. Whether you self-host locally or use n8n Cloud with synced storage, this approach ensures your daily note awaits you fully populated before you even open the application.
Complete Guide: n8n Workflow for Obsidian Daily Notes Setup
Quick Answer: Setting up an n8n workflow for Obsidian daily notes involves creating a scheduled trigger in n8n, pulling data from your calendar and task managers via APIs, structuring that data into your preferred Markdown template, and pushing the final file directly into your Obsidian vault using local file nodes or the Obsidian Local REST API. This automation ensures your daily note is ready with context before you even open your vault.
Managing a digital brain requires consistency, and nothing anchors a personal knowledge management system quite like the daily note. However, manually creating these notes, copying over unfinished tasks from yesterday, checking your calendar, and logging the weather can quickly become a tedious chore that detracts from actual focused work. When friction increases, the habit breaks.
This is where the intersection of Obsidian and n8n becomes incredibly powerful. Obsidian provides the ultimate local-first canvas for your thoughts, while n8n acts as the tireless engine working behind the scenes. By building a custom n8n workflow, you can automate the entire daily note creation process. Imagine opening Obsidian every morning to find your daily note already populated with your schedule, high-priority tasks from Todoist or TickTick, and a structured template waiting for your input.
This guide details the exact steps required to execute an n8n workflow for Obsidian daily notes setup. We will cover the prerequisites, the node-by-node construction, handling data formatting, and securely pushing the finalized markdown document into your local or synced vault.
Why Automate Obsidian with n8n?
Obsidian is intentionally designed as a local-first application, relying on flat Markdown files. While plugins like Templater and Periodic Notes are excellent for local generation, they typically require you to open the application and trigger an action. They also struggle when trying to aggregate complex data from multiple external APIs simultaneously without writing custom JavaScript inside your vault.
n8n solves this by operating independently of your Obsidian application. Whether you self-host n8n on a home server, run it via Docker, or use n8n Cloud, it can run on a schedule while you are asleep. Because n8n has hundreds of built-in integrations and a highly flexible HTTP Request node, it can fetch data from Google Calendar, Microsoft Outlook, Todoist, Notion, or OpenWeatherMap, transform that JSON data into a clean Markdown string, and deposit the file exactly where Obsidian expects to find it.
This separation of concerns means your Obsidian vault remains lightweight, secure, and focused entirely on reading and writing, while n8n handles the heavy lifting of API integrations and data processing.
Prerequisites for the Automation
Before opening the n8n canvas, you need to ensure your environment is configured to bridge the gap between web-based APIs and your local file system.
First, you need a running instance of n8n. If you intend to write directly to your local file system where your Obsidian vault lives, running n8n locally via Docker or Node.js on the same machine is the most straightforward path. If you are using n8n Cloud or a remote VPS, you will need a mechanism to sync the generated files back to your local machine, such as Obsidian Sync, Google Drive, Dropbox, or Syncthing.
Second, you need API access to the services you want to pull data from. For this setup, we will assume you are connecting Google Calendar for events and Todoist for tasks. You will need to authenticate these credentials within the n8n credentials manager.
Third, if you are running n8n remotely and want to push directly to a running instance of Obsidian, you will need the Obsidian Local REST API plugin installed and configured, alongside a reverse proxy like Cloudflare Tunnels or Tailscale to securely expose that local API to your n8n instance. For this guide, we will focus on the most reliable method: generating the Markdown text and writing it as a file directly into the synced vault folder.
Step 1: Setting up the Schedule Trigger
Every automated daily notes workflow begins with a trigger. In n8n, this is the Schedule Trigger node.
Add the Schedule Trigger node to your canvas. You want your daily note to be ready before you start your day. Configure the rule to run every day at a specific time, such as 4:00 AM or 5:00 AM.
It is crucial to ensure that your n8n instance is operating in the correct timezone. By default, n8n might run in UTC depending on your Docker configuration. Check your environment variables (specifically GENERIC_TIMEZONE) to ensure it matches your local timezone (e.g., America/New_York or Europe/London). If the timezone is incorrect, your note might generate a day early or late, throwing off the internal linking in your Obsidian vault.
Once the schedule is set, add a Date & Time node. This node will capture the current date when the workflow runs and format it into the standard Obsidian naming convention. Most Obsidian users utilize the YYYY-MM-DD format for daily notes. Configure the Date & Time node to output a string like 2026-05-07. We will use this variable later to dynamically name the file and set the primary H1 header inside the note.
Step 2: Fetching External Data
The true value of this automation lies in data aggregation. We will branch our workflow to fetch data from our chosen external services.
Integrating Calendar Events
Add a Google Calendar node and connect your credentials. Set the operation to “Get Many” and select the calendar you use for daily planning. The critical step here is filtering the events so you only retrieve today’s schedule.
Use expressions to set the “Time Min” to the start of the current day (e.g., {{ $now.startOf('day') }}) and the “Time Max” to the end of the current day (e.g., {{ $now.endOf('day') }}). Limit the results to ensure you don’t pull recurring events that have been cancelled.
Next, route the output of the Google Calendar node into an Item Lists node or a Code node to format the raw JSON into a clean Markdown list. You want to extract the event summary, the start time, and the end time. A simple JavaScript snippet in the Code node can iterate through the items and map them to a string array like - [09:00] Team Standup or - [14:00 - 15:30] Deep Work Block.
Pulling Unfinished Tasks
Add a Todoist node to fetch your tasks. Set the operation to “Get Many” and filter by a specific project, or simply pull everything due today and overdue. Use the filter query due before: tomorrow.
Just like the calendar data, route this JSON payload into a Code node. Iterate over the tasks and format them into standard Markdown task syntax: - [ ] {{task_content}}. If your task manager supports priorities, you can add logic to prepend emojis or tags based on priority levels, pushing your highest priority tasks to the top of the generated list.
Step 3: Formatting the Daily Note Template
Now that we have our date, our calendar events, and our tasks formatted as Markdown strings, we need to bring them together into a single, cohesive daily note.
Add a Code node or an Edit Fields (Set) node to act as the template aggregator. In this node, we will create a string variable called daily_note_content.
Here is where you define your standard Obsidian daily note structure. You will construct a template literal using the variables passed down from the previous nodes. A robust structure looks like this:
# {{ $json.formatted_date }}
<< [[{{ $json.yesterday_date }}]] | [[{{ $json.tomorrow_date }}]] >>
## Agenda
{{ $json.calendar_markdown_list }}
## Tasks for Today
{{ $json.tasks_markdown_list }}
## Log
- [ ]
## Notes
Ensure your YAML frontmatter is also included at the very top of this string if you use properties in Obsidian to track metadata like mood, energy, or tags. Because n8n allows for rich JavaScript evaluation, you can easily calculate yesterday and tomorrow’s dates based on the trigger execution time to populate your internal link navigation cleanly.
Step 4: Pushing the File to Obsidian
The final step is delivering the payload to your Obsidian vault. The method you choose depends heavily on where n8n is hosted relative to your vault.
Method A: Local File Node (Self-Hosted on Same Machine)
If n8n has direct access to the file system where your Obsidian vault lives, this is incredibly simple. Add a Read/Write Files node. Set the operation to “Write”.
For the file path, construct the exact directory path to your daily notes folder. For example: /Users/username/Documents/ObsidianVault/Daily Notes/{{ $json.formatted_date }}.md. Map the file content to the daily_note_content variable you generated in the previous step. Ensure you enable the option to append to the file if it exists, or overwrite it, depending on your preference for handling manual notes created before the automation runs.
Method B: Cloud Storage Sync (Remote n8n)
If your n8n instance is remote but your vault syncs via Google Drive or Dropbox, use the respective n8n integration node for that service.
Add a Google Drive node, select “Upload”, and specify the exact folder ID corresponding to your daily notes directory. Pass the formatted date string as the file name with the .md extension, and upload the daily_note_content as the file data. When your local desktop sync client runs, the file will quietly drop into your Obsidian vault.
Method C: Obsidian Local REST API
For advanced users keeping their vaults strictly local but routing remote requests via secure tunnels, use the HTTP Request node. Make a POST request to the Obsidian Local REST API endpoint: http://localhost:27123/vault/Daily Notes/{{ $json.formatted_date }}.md. Send the markdown content in the body of the request. Note that this requires the Obsidian application to be open and running on the target machine for the request to succeed.
Practical Advice and Workflow Optimization
When building an n8n workflow for Obsidian daily notes setup, stability and edge-case handling dictate long-term success.
Handle Empty States Gracefully: Some days you will have zero calendar events or zero tasks. If your Code node tries to map an empty array, it might throw an error and halt the workflow. Always include fallback logic. If calendar_events.length === 0, output a string like *No events scheduled today.* instead of failing.
Avoid Overwriting Manual Work: A common failure point is waking up early, manually creating the daily note, taking notes, and then having the 5:00 AM n8n schedule overwrite your work. To prevent this, use the Read/Write Files node to check if the file YYYY-MM-DD.md already exists before attempting to create it. If the file exists, you can either skip the generation entirely or use a Code node to append the fetched tasks and calendar events to the bottom of the existing file without destroying your early morning thoughts.
Tagging and Properties: Leverage Obsidian’s properties (YAML frontmatter) aggressively in your template. Have n8n automatically insert the day of the week, the current phase of a project, or predefined tags. This ensures that even automatically generated notes surface correctly in Dataview queries across your vault.
Modularity: Do not cram all API calls and formatting into a single giant Code node. Keep your n8n canvas clean. Have one node fetch calendar data, one node format calendar data, one node fetch tasks, and one node merge them. This visual separation makes it significantly easier to debug when an API structure changes or an authentication token expires.
Conclusion
Implementing an n8n workflow for Obsidian daily notes setup fundamentally shifts how you interact with your personal knowledge management system. By removing the friction of manual data entry and template generation, you preserve your cognitive energy for actual deep work, writing, and thinking. Whether you rely on local file generation or cloud-synced handoffs, the combination of n8n’s robust API orchestration and Obsidian’s future-proof plain text architecture provides an unmatched foundation for daily productivity. Start with a simple template and calendar integration, ensure your timezone settings are solid, and gradually expand the workflow to encompass all the data you need to execute your day effectively.
Frequently Asked Questions
What happens if my n8n server goes offline during the scheduled trigger time?
If n8n is offline when the schedule trigger is supposed to fire, the workflow will simply not run for that day. You will need to manually create your daily note. To mitigate this, you can build a manual webhook trigger alongside your schedule trigger, allowing you to trigger the automation manually via a browser bookmark if you notice the automated run failed.
Can I pull in data from Apple Reminders or Apple Calendar?
Directly pulling from Apple ecosystems into n8n is notoriously difficult due to closed APIs. The best workaround is to sync your Apple Calendar to Google Calendar, and use a third-party bridge or an app like Todoist to handle tasks, allowing n8n to interface with those more accessible APIs instead.
Does n8n need to be running on the same computer as my Obsidian vault?
No, it does not. While running n8n locally allows direct file system access, a remote n8n server can push the markdown file into a cloud storage folder (like Google Drive, Dropbox, or OneDrive) that is actively syncing with your local Obsidian vault directory.
How do I prevent n8n from creating duplicate tasks in my daily note?
If you are pulling tasks from Todoist, n8n only reads the data; it does not check off the task. To avoid duplicates, ensure your Todoist filter query strictly requests due before: tomorrow. Alternatively, you can have n8n append a unique tag to tasks it imports, and filter those out in subsequent runs, though strict date filtering is usually sufficient.
Why is my daily note generating with yesterday’s date?
This is almost always a timezone mismatch. Ensure that the GENERIC_TIMEZONE environment variable in your n8n instance matches your actual location, and verify that the Date & Time node is specifically configured to output the date in your local timezone, rather than defaulting to UTC server time.