{
  "nodes": [
    {
      "id": "ab3309d9-cb3e-4b13-bb43-a214722c50b4",
      "name": "Looking for uploading file",
      "type": "n8n-nodes-base.googleDriveTrigger",
      "position": [
        1620,
        120
      ],
      "parameters": {
        "event": "fileCreated",
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "triggerOn": "specificFolder",
        "folderToWatch": {
          "__rl": true,
          "mode": "list",
          "value": "1Wjd0_fptBBBtLZySHt0qYPpZA_dBjyYi",
          "cachedResultUrl": "https://drive.google.com/drive/folders/1Wjd0_fptBBBtLZySHt0qYPpZA_dBjyYi",
          "cachedResultName": "meeting audio"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "6c7bed41-fcb2-46de-b764-f0df6bf15d72",
      "name": "Download file",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        1920,
        120
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.id }}"
        },
        "options": {},
        "operation": "download"
      },
      "typeVersion": 3
    },
    {
      "id": "e44378ed-d689-4692-abe0-e9abc251dd40",
      "name": "Transcribe the file",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        2160,
        120
      ],
      "parameters": {
        "options": {},
        "resource": "audio",
        "operation": "transcribe"
      },
      "typeVersion": 1.8
    },
    {
      "id": "b5cfacc7-59c6-47ad-8d4b-ce56f6c8b339",
      "name": "Create summary",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        2380,
        120
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1",
          "cachedResultName": "GPT-4.1"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "role": "system",
              "content": "\ud83e\udde0 System Prompt: Meeting Summarizer & Action Item Extractor\n\nYou are an intelligent meeting assistant. Your job is to carefully listen to or read through the meeting transcript and:\n\nSummarize Key Discussion Points \u2013 Highlight the main topics discussed, decisions made, issues raised, and relevant insights. Keep it concise and organized.\n\nExtract Action Items \u2013 Identify specific tasks or follow-ups. For each action item, include:\n\nTask Description\n\nAssigned Person (if mentioned)\n\nDeadline (if mentioned)\n\nPriority (if indicated or can be inferred)\n\nUse clear formatting, such as bullet points and headings, to make the output easy to scan.\n\nTone: Professional, clear, and neutral.\nAvoid: Irrelevant chatter, filler content, or personal commentary.\nFocus on: Clarity, accuracy, and actionable information."
            },
            {
              "content": "={{ $json.text }}"
            }
          ]
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "da7cec5f-301d-456b-8ca6-f6b676579e2d",
      "name": "Get date",
      "type": "n8n-nodes-base.dateTime",
      "position": [
        2760,
        120
      ],
      "parameters": {
        "options": {},
        "outputFieldName": "Date"
      },
      "typeVersion": 2
    },
    {
      "id": "b51f7dc9-2973-4f03-b160-90dc3ac0c0d2",
      "name": "Format date",
      "type": "n8n-nodes-base.dateTime",
      "position": [
        3060,
        120
      ],
      "parameters": {
        "date": "={{ $json.Date }}",
        "options": {},
        "operation": "formatDate"
      },
      "typeVersion": 2
    },
    {
      "id": "dc26f36b-7781-472f-86f4-6bd83270c95f",
      "name": "Save the summary",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        3320,
        120
      ],
      "parameters": {
        "columns": {
          "value": {
            "Date": "={{ $json.formattedDate }}",
            "Meeting Summary": "={{ $('Create summary').item.json.message.content }}"
          },
          "schema": [
            {
              "id": "Date",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Meeting Summary",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Meeting Summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Date"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_AWS_SECRET_KEY_HERE-2Nc/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_AWS_SECRET_KEY_HERE-2Nc",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_AWS_SECRET_KEY_HERE-2Nc/edit?usp=drivesdk",
          "cachedResultName": "meeting"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "cf384106-5413-4a92-9bdb-cce26b2452d4",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1560,
        0
      ],
      "parameters": {
        "color": 7,
        "width": 500,
        "height": 300,
        "content": "## Download the file \nThese two nodes are responsible for looking and downloading the uploaded file"
      },
      "typeVersion": 1
    },
    {
      "id": "a060bdea-3526-41c7-b16e-7a98bb843c98",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2120,
        0
      ],
      "parameters": {
        "color": 7,
        "width": 560,
        "height": 300,
        "content": "## Generate Summary \nThese two nodes are responsible for looking and downloading the uploaded file"
      },
      "typeVersion": 1
    },
    {
      "id": "f65f26e5-03f5-4c49-bb41-69c3dd4ac6a8",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2740,
        0
      ],
      "parameters": {
        "color": 7,
        "width": 480,
        "height": 300,
        "content": "## Get date\nThese two nodes are responsible for getting and formatting date"
      },
      "typeVersion": 1
    },
    {
      "id": "71991313-d9c3-406f-a4d8-177a5d853dd8",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        0
      ],
      "parameters": {
        "color": 4,
        "width": 1300,
        "height": 320,
        "content": "=======================================\n            WORKFLOW ASSISTANCE\n=======================================\nFor any questions or support, please contact:\n    Yaron@nofluff.online\n\nExplore more tips and tutorials here:\n   - YouTube: https://www.youtube.com/@YaronBeen/videos\n   - LinkedIn: https://www.linkedin.com/in/yaronbeen/\n=======================================\n"
      },
      "typeVersion": 1
    },
    {
      "id": "54716f9a-097b-4e6e-82a0-5fcf9ff8e27b",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        340
      ],
      "parameters": {
        "color": 4,
        "width": 1289,
        "height": 2098,
        "content": "### \ud83c\udfa4 Meeting Audio to Summary in Google Sheets\n\nAutomatically transcribe a meeting audio file, generate a concise summary using AI, and log it in Google Sheets. Perfect for:\n\u2705 Team syncs \u2014 stay aligned without rewatching recordings\n\u2705 Client calls \u2014 quick insight into discussions\n\u2705 Knowledge management \u2014 searchable summaries\n\n---\n\n### \u2699\ufe0f What's Used\n\n**n8n Nodes:**\nDrive Upload \u2192 Download File \u2192 Transcribe Recording \u2192 Create Summary \u2192 Get Date \u2192 Format Date \u2192 Append to Google Sheets\n\n**External Tools:**\n\n* **Google Drive** \u2013 Upload and host meeting recordings\n* **OpenAI / Whisper** \u2013 Audio transcription\n* **ChatGPT** \u2013 Summary generation\n* **Google Sheets** \u2013 Final summary storage\n\n---\n\n### \ud83d\udd11 Setup \u2013 Credentials Needed\n\n* **Google Drive OAuth2** \u2192 To access and download files\n* **OpenAI API Key** \u2192 For transcription & summary\n* **Google Sheets OAuth2** \u2192 To append rows to the sheet\n\n---\n\n### \ud83d\udcdd Upload Flow\n\n**Trigger:** Upload audio file to a designated Google Drive folder\n\n**Input Format:**\n\n* **Audio Type:** MP3 / WAV / M4A\n* **File Size:** Recommended < 100MB\n* **Language:** English (default; can customize for others)\n\n---\n\n### \ud83d\ude80 Workflow Steps\n\n1. **Detect File Upload:**\n   Monitor a specific Google Drive folder for new audio files\n2. **Download File:**\n   Fetch the uploaded audio file\n3. **Transcribe Audio:**\n   Use Whisper (OpenAI) to convert speech to text\n4. **Generate Summary:**\n   Pass transcript to GPT to summarize key points\n5. **Get & Format Date:**\n   Add timestamp to summary\n6. **Save Summary:**\n   Append date + summary into a Google Sheet\n\n**Sheet Example Columns:**\n`Date`, `Meeting Summary`\n\n---\n\n### \ud83e\udde0 Use Cases\n\n* **Project Managers** \u2192 Share concise updates with stakeholders\n* **Sales Teams** \u2192 Summarize discovery or demo calls\n* **Consultants** \u2192 Keep track of discussions for reporting\n\n---\n\n### \ud83d\udca1 Pro Tips\n\n* Add speaker labels to transcript if using enhanced audio models\n* Customize the prompt to tailor summaries for specific departments (e.g., sales, product)\n* Schedule the workflow to run daily/weekly with new uploads\n\n---\n\n### \ud83d\udee0\ufe0f Customize It\n\n* Use a form trigger if you want users to submit metadata with uploads\n* Add Slack integration to share summaries with the team\n* Store full transcripts alongside summaries for deeper context\n\n---\n\nThis setup gives your team an always-on assistant for meetings \u2014 listen once, never retype. Upload audio, get insight, move forward.\n"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Get date": {
      "main": [
        [
          {
            "node": "Format date",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format date": {
      "main": [
        [
          {
            "node": "Save the summary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download file": {
      "main": [
        [
          {
            "node": "Transcribe the file",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create summary": {
      "main": [
        [
          {
            "node": "Get date",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Transcribe the file": {
      "main": [
        [
          {
            "node": "Create summary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Looking for uploading file": {
      "main": [
        [
          {
            "node": "Download file",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}