The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"name": "Obsidian Sync",
"nodes": [
{
"parameters": {
"trigger": "on",
"interval": [
5,
"minutes"
]
},
"id": "schedule-trigger",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1,
"position": [
250,
300
]
},
{
"parameters": {
"method": "GET",
"url": "https://www.googleapis.com/drive/v3/files",
"qs": "q=trashed=false and mimeType contains 'document'",
"authentication": "oAuth2",
"nodeCredentialType": "googleDriveOAuth2Api"
},
"id": "list-drive-files",
"name": "List Drive Files",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4,
"position": [
450,
300
]
},
{
"parameters": {
"method": "GET",
"url": "={{ $env.SUPABASE_DB_URL }}/rest/v1/documents",
"authentication": "genericCredentialType",
"genericCredentialType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer {{ $env.SUPABASE_SERVICE_ROLE_KEY }}"
}
]
}
},
"id": "get-synced-docs",
"name": "Get Synced Documents",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4,
"position": [
650,
300
]
},
{
"parameters": {
"functionCode": "return $node['List Drive Files'].json.files.filter(file => \n !$node['Get Synced Documents'].json.some(doc => doc.google_drive_id === file.id)\n);"
},
"id": "find-new-files",
"name": "Find New Files",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [
850,
300
]
},
{
"parameters": {
"method": "POST",
"url": "={{ $env.OBSIDIAN_VAULT_API }}/sync",
"authentication": "genericCredentialType",
"genericCredentialType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer {{ $env.OBSIDIAN_API_KEY }}"
}
]
},
"bodyParametersJson": "={\n \"files\": {{ $node[\\\"Find New Files\\\"].json | json.stringify }},\n \"vault_path\": \"{{ $env.OBSIDIAN_VAULT_PATH }}\"\n}"
},
"id": "sync-to-obsidian",
"name": "Sync to Obsidian",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4,
"position": [
1050,
300
]
}
],
"connections": {
"Schedule Trigger": {
"main": [
[
{
"node": "List Drive Files",
"type": "main",
"index": 0
}
]
]
},
"List Drive Files": {
"main": [
[
{
"node": "Get Synced Documents",
"type": "main",
"index": 0
}
]
]
},
"Get Synced Documents": {
"main": [
[
{
"node": "Find New Files",
"type": "main",
"index": 0
}
]
]
},
"Find New Files": {
"main": [
[
{
"node": "Sync to Obsidian",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Obsidian Sync. Uses httpRequest. Scheduled trigger; 5 nodes.
Source: https://github.com/Busraaozkan1/n8n-project/blob/568cf19ed9a57e6b5b4444c3e62d9b9a781e6930/n8n-workflows/obsidian-sync.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
As n8n instances scale, teams often lose track of sub-workflows—who uses them, where they are referenced, and whether they can be safely updated. This leads to inefficiencies like unnecessary copies o
This workflow is an improvement of this workflow by Greg Brzezinka.
N8N-Workflow-Github-Manager. Uses github, httpRequest, n8n. Scheduled trigger; 38 nodes.
This workflow uses KlickTipp community nodes, available for self-hosted n8n instances only.
This workflow acts as an automated engagement bot. It sends a Direct Message (DM) with a link or resource to any follower who replies to your post with a specific target keyword.