AutomationFlowsData & Sheets › Summarize Dropbox Notes with Groq and Sync to Notion & Sheets

Summarize Dropbox Notes with Groq and Sync to Notion & Sheets

ByWeblineIndia @weblineindia on n8n.io

This workflow manually pulls a Markdown note from Dropbox, summarizes it with Groq Chat (OpenAI gpt-oss-20b) using a structured JSON output, saves the results to a Notion database, logs a backup row in Google Sheets, posts a Slack confirmation, and archives the processed file in…

Event trigger★★★★☆ complexityAI-powered16 nodesDropboxGroq ChatOutput Parser StructuredChain LlmNotionGoogle SheetsSlack
Data & Sheets Trigger: Event Nodes: 16 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #17526 — we link there as the canonical source.

This workflow follows the Chainllm → Google Sheets recipe pattern — see all workflows that pair these two integrations.

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 →

Download .json
{
  "id": "q6F4psysixO3bFdH",
  "name": "The Dropbox Note Sync",
  "tags": [],
  "nodes": [
    {
      "id": "4032cd45-b2be-4fff-8a12-c3604efca3ff",
      "name": "Start Workflow",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        64,
        176
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "e68895ef-ffc7-415c-9204-e0d3934518f8",
      "name": "Fetch Note from Dropbox",
      "type": "n8n-nodes-base.dropbox",
      "position": [
        288,
        176
      ],
      "parameters": {
        "path": "/Notes/sample.md",
        "operation": "download",
        "authentication": "oAuth2"
      },
      "typeVersion": 1
    },
    {
      "id": "62b0ace3-4c48-461d-be09-e6afdad5f912",
      "name": "Extract Note Content",
      "type": "n8n-nodes-base.code",
      "position": [
        512,
        176
      ],
      "parameters": {
        "jsCode": "const item = $input.first();\n\n// Safe access\nconst binary = item.binary?.data;\n\nif (!binary) {\n  throw new Error(\"No binary data found. Make sure Dropbox Download node is correct.\");\n}\n\n// Safer filename extraction\nconst fileName =\n  binary.fileName ||\n  item.json[\"File Name\"] ||\n  item.json.name ||\n  \"unknown.md\";\n\nconst mimeType = binary.mimeType;\n\n// Get file buffer\nconst binaryBuffer = await this.helpers.getBinaryDataBuffer(0, 'data');\n\n// Convert to text\nconst fileContent = binaryBuffer.toString('utf-8');\n\nreturn [\n  {\n    json: {\n      fileName,\n      mimeType,\n      fileContent,\n      timestamp: new Date().toISOString()\n    }\n  }\n];"
      },
      "typeVersion": 2
    },
    {
      "id": "e9469855-493c-451b-a3b7-db486b019d36",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        -32
      ],
      "parameters": {
        "color": 7,
        "width": 672,
        "height": 512,
        "content": "## Dropbox Note Retrieval\nManually trigger workflow to fetch new notes from Dropbox. Download the selected note file and extract its content, filename, MIME type, and timestamp to prepare it for AI processing."
      },
      "typeVersion": 1
    },
    {
      "id": "3278821e-72c4-41ac-aaa7-3dd516decc0b",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        720,
        -32
      ],
      "parameters": {
        "color": 7,
        "width": 496,
        "height": 576,
        "content": "## AI Note Summarization\nProcess the extracted note using an AI language model. Generate a concise title, informative summary, and 5 relevant tags. Strict JSON validation ensures structured output for downstream usage."
      },
      "typeVersion": 1
    },
    {
      "id": "23ddb97f-9140-4fe1-bf1d-10fedf5d7af5",
      "name": "LLM",
      "type": "@n8n/n8n-nodes-langchain.lmChatGroq",
      "position": [
        848,
        368
      ],
      "parameters": {
        "model": "openai/gpt-oss-20b",
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "c9208a11-26ab-4fb3-a15d-a47f9cbbff42",
      "name": "Validate AI Output",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        992,
        368
      ],
      "parameters": {
        "schemaType": "manual",
        "inputSchema": "{\n  \"type\": \"object\",\n  \"properties\": {\n    \"title\": {\n      \"type\": \"string\"\n    },\n    \"summary\": {\n      \"type\": \"string\"\n    },\n    \"tags\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"minItems\": 5,\n      \"maxItems\": 5\n    }\n  },\n  \"required\": [\"title\", \"summary\", \"tags\"]\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "4f9e5824-be1c-41b4-8d28-043d61a834bd",
      "name": "Generate Note Summary",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        848,
        176
      ],
      "parameters": {
        "text": "=You are an AI note assistant.\n\nAnalyze the following note and return ONLY valid JSON.\n\nOutput format:\n{\n  \"title\": \"short and meaningful title\",\n  \"summary\": \"summary\",\n  \"tags\": [\"tag1\", \"tag2\", \"tag3\", \"tag4\", \"tag5\"]\n}\n\nRules:\n- Title must be concise (max 8 words)\n- Summary must be clear and informative\n- Tags must be relevant keywords\n- Always return exactly 5 tags\n- Do NOT include any explanation\n- Do NOT include markdown formatting\n- Return ONLY valid JSON\n\nNote:\n{{ $json.fileContent }}",
        "batching": {},
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.8
    },
    {
      "id": "943a778b-13e8-451f-9496-b8592e9776b8",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1264,
        -32
      ],
      "parameters": {
        "color": 7,
        "width": 640,
        "height": 512,
        "content": "## Structuring & Saving Note Data\nMap AI-generated fields into structured properties. Push the processed note into Notion database and append an entry in Google Sheets for backup and tracking."
      },
      "typeVersion": 1
    },
    {
      "id": "7887ce94-2af5-41d1-9e59-9b27997750b7",
      "name": "Format Note Data",
      "type": "n8n-nodes-base.set",
      "position": [
        1312,
        176
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "44b21572-8ac3-4050-aef9-898eb371800e",
              "name": "Title",
              "type": "string",
              "value": "={{ $json.output.title }}"
            },
            {
              "id": "f9f0e182-ebc0-4d81-a929-fa6916a4377a",
              "name": "Summary",
              "type": "string",
              "value": "={{ $json.output.summary }}"
            },
            {
              "id": "f2969c67-f12d-4362-9ab8-230b83ab55ec",
              "name": "Tags",
              "type": "array",
              "value": "={{ $json.output.tags }}"
            },
            {
              "id": "666293f2-789f-4d8a-896d-298d8dcc9536",
              "name": "Timestamp",
              "type": "string",
              "value": "={{ $('Extract Note Content').item.json.timestamp }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "36193a38-8527-4de3-8b95-51aad15e4b7d",
      "name": "Save to Notion",
      "type": "n8n-nodes-base.notion",
      "position": [
        1536,
        176
      ],
      "parameters": {
        "title": "={{ $json.Title }}",
        "options": {},
        "resource": "databasePage",
        "databaseId": {
          "__rl": true,
          "mode": "list",
          "value": "33402716-a3df-80dd-a8a3-c3278ceffb77",
          "cachedResultUrl": "https://www.notion.so/33402716a3df80dda8a3c3278ceffb77",
          "cachedResultName": "Notes"
        },
        "propertiesUi": {
          "propertyValues": [
            {
              "key": "File name|rich_text",
              "textContent": "={{ $('Extract Note Content').item.json.fileName }}"
            },
            {
              "key": "Summary|rich_text",
              "textContent": "={{ $json.Summary }}"
            },
            {
              "key": "Tags|multi_select",
              "multiSelectValue": "={{ $json.Tags }}"
            },
            {
              "key": "Title|title",
              "title": "={{ $json.Title }}"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "4c0f8aca-18ed-432a-ad3c-7e2a0a40295d",
      "name": "Log in Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1744,
        176
      ],
      "parameters": {
        "columns": {
          "value": {
            "Tags": "={{ $json.property_tags }}",
            "Title": "={{ $json.name }}",
            "Summary": "={{ $json.property_summary }}",
            "FileName": "={{ $json.property_file_name }}",
            "TimeStamp": "={{ $json.property_timestamp }}"
          },
          "schema": [
            {
              "id": "TimeStamp",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "TimeStamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "FileName",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "FileName",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Title",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Summary",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Tags",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Tags",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1xKCSepURmB4AhcvV2KQPHPaXT3MuEisWVwgoVRthKUI/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1xKCSepURmB4AhcvV2KQPHPaXT3MuEisWVwgoVRthKUI",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1xKCSepURmB4AhcvV2KQPHPaXT3MuEisWVwgoVRthKUI/edit?usp=drivesdk",
          "cachedResultName": "The Dropbox Note Sync"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "228f0ee4-2017-4043-b4b0-7c46f469ee09",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1952,
        -32
      ],
      "parameters": {
        "color": 7,
        "width": 512,
        "height": 512,
        "content": "## Notification & Archiving\nSend a Slack notification confirming note processing with summary and Notion link. Move the original note in Dropbox from /Notes/ to /Processed/ to mark it as completed."
      },
      "typeVersion": 1
    },
    {
      "id": "247afd01-ff41-4aa7-8bb4-27e9a6d302e9",
      "name": "Slack Alert",
      "type": "n8n-nodes-base.slack",
      "position": [
        2016,
        176
      ],
      "parameters": {
        "text": "=File Processed: {{ $json.FileName }}\n\nAI Summary:  {{ $json.Summary }}\n\nNotion Page:  {{ $('Save to Notion').item.json.name }}\n\nStatus: Success",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C0AQS47TGQ0",
          "cachedResultName": "all-dropbox-note-sync"
        },
        "otherOptions": {}
      },
      "typeVersion": 2.4
    },
    {
      "id": "d6ccd4fd-7f76-4e68-b26d-a81e1e39852b",
      "name": "Archive Processed Note",
      "type": "n8n-nodes-base.dropbox",
      "position": [
        2224,
        176
      ],
      "parameters": {
        "path": "=/Notes/{{ $('Log in Google Sheets').item.json.FileName }}",
        "toPath": "=/Processed/{{ $('Log in Google Sheets').item.json.FileName }}",
        "operation": "move",
        "authentication": "oAuth2"
      },
      "typeVersion": 1
    },
    {
      "id": "7d2521f5-f501-4be9-ae6f-fbfce2bb58e9",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -784,
        -288
      ],
      "parameters": {
        "width": 736,
        "height": 768,
        "content": "## Workflow Overview\n\nThis workflow automates the complete lifecycle of processing Markdown notes stored in Dropbox. It retrieves a note, extracts its content, and uses AI to generate a meaningful title, concise summary, and five relevant tags. The processed note is then saved to Notion, logged in Google Sheets for tracking, and a Slack notification is sent to confirm successful processing. Finally, the original file is moved to a Processed folder in Dropbox, ensuring each note is handled only once while maintaining an organized and searchable knowledge base.\n\n### Workflow Highlights:\n\n- Downloads Markdown notes from a Dropbox folder.\n- Uses AI to generate a title, summary, and 5 relevant tags.\n- Validates AI output with a structured JSON schema.\n- Stores processed notes in a Notion database.\n- Logs note details to Google Sheets for backup and reporting.\n- Sends a Slack notification after successful processing.\n- Archives processed notes by moving them to a Dropbox Processed folder.\n- Creates an automated, searchable note management workflow with minimal manual effort.\n\n### Quick Setup:\n\n- Connect your Dropbox, Groq (LLM), Notion, Google Sheets, and Slack credentials.\n- Update the Dropbox source and processed folder paths.\n- Select your Notion database and Google Sheets document.\n- Choose the Slack workspace and channel for notifications.\n- Review or customize the AI prompt and model (optional).\n- Run the workflow to verify everything is working, then activate it for regular use."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "versionId": "414ab9e2-3a7b-43b8-9996-f82be613c502",
  "nodeGroups": [],
  "connections": {
    "LLM": {
      "ai_languageModel": [
        [
          {
            "node": "Generate Note Summary",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Slack Alert": {
      "main": [
        [
          {
            "node": "Archive Processed Note",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save to Notion": {
      "main": [
        [
          {
            "node": "Log in Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Start Workflow": {
      "main": [
        [
          {
            "node": "Fetch Note from Dropbox",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Note Data": {
      "main": [
        [
          {
            "node": "Save to Notion",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Validate AI Output": {
      "ai_outputParser": [
        [
          {
            "node": "Generate Note Summary",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Extract Note Content": {
      "main": [
        [
          {
            "node": "Generate Note Summary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Log in Google Sheets": {
      "main": [
        [
          {
            "node": "Slack Alert",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Note Summary": {
      "main": [
        [
          {
            "node": "Format Note Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Note from Dropbox": {
      "main": [
        [
          {
            "node": "Extract Note Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow manually pulls a Markdown note from Dropbox, summarizes it with Groq Chat (OpenAI gpt-oss-20b) using a structured JSON output, saves the results to a Notion database, logs a backup row in Google Sheets, posts a Slack confirmation, and archives the processed file in…

Source: https://n8n.io/workflows/17526/ — original creator credit. Request a take-down →

More Data & Sheets workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Data & Sheets

This n8n workflow automates the transformation of spreadsheet data into professional charts and graphs using AI-driven analysis. Triggered via Slack, it processes uploaded files (Excel, CSV, Google Sh

Agent, Postgres, HTTP Request +8
Data & Sheets

This workflow monitors a Gmail inbox for PDF invoices, uses Groq (Llama 3.3) to extract structured invoice fields, validates the invoice against Purchase Orders in Google Sheets and tax rules in Notio

Chain Llm, Output Parser Structured, Groq Chat +6
Data & Sheets

This workflow responds to incoming WhatsApp inquiries by extracting event details with Groq, checking availability in Google Calendar, looking up rates in Google Sheets, and then sending either a quot

WhatsApp Trigger, Chain Llm, Groq Chat +5
Data & Sheets

This workflow routes incoming WhatsApp home-service requests by using Groq to classify urgency and extract key details, logs every request to Supabase, and either alerts an on-call technician for emer

Chain Llm, Groq Chat, Output Parser Structured +4
Data & Sheets

• Multi-Layer Message Analysis - Every customer interaction passes through three specialized AI classifiers: privacy detection (identifies sensitive data and security requirements), intent recognition

OpenAI, OpenAI Chat, Tool Think +13