{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "421fef2b-90cb-496d-8dd4-b613e10e9fe8",
      "name": "Append row in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        528,
        0
      ],
      "parameters": {
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "1f16c6d5-fc5a-4ff6-b77b-f3bcc60040fc",
      "name": "Send a message",
      "type": "n8n-nodes-base.slack",
      "position": [
        752,
        0
      ],
      "parameters": {
        "text": "=---\nInvoice date: {{ $json.invoice_date }}\nBilling to: {{ $json['billing to'] }}\nEmail: {{ $json.email }}\nTotal Amount: {{ $json.total_amount }}\nDue date: {{ $json.due_date }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C09ECEMB012",
          "cachedResultName": "invoice"
        },
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "00111f6b-fd0b-49d9-80f6-3f0ca060de18",
      "name": "Structure Output",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        312,
        224
      ],
      "parameters": {
        "jsonSchemaExample": "[{\n\t\"billing to\": \"Toshiki Hirao\",\n\t\"total_amount\": \"1000\",\n  \"invoice_date\": \"2025/04/29\",\n  \"due_date\" : \"2025/05/29\",\n  \"email\": \"user@example.com\"\n}]\n"
      },
      "typeVersion": 1.3
    },
    {
      "id": "492e5b93-bde0-4335-843e-0f63ba151b53",
      "name": "AI model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        184,
        224
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o",
          "cachedResultName": "gpt-4o"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "abc9bc40-d167-41e7-921b-1e5d8afd6810",
      "name": "Receive invoice pdf",
      "type": "n8n-nodes-base.slackTrigger",
      "position": [
        -496,
        0
      ],
      "parameters": {
        "options": {},
        "trigger": [
          "message"
        ],
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C09ECEMB012",
          "cachedResultName": "invoice"
        }
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "notesInFlow": false,
      "typeVersion": 1
    },
    {
      "id": "1be006ae-9577-413f-be7d-3b3c82945b7b",
      "name": "Fetch the pdf",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -272,
        0
      ],
      "parameters": {
        "url": "={{ $json.files[0].url_private_download }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "file"
            }
          }
        },
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "slackApi"
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "e4b2917c-dd4b-47f9-a16d-3b234b548f0d",
      "name": "Extract information from pdf",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        -48,
        0
      ],
      "parameters": {
        "options": {},
        "operation": "pdf",
        "binaryPropertyName": "=data"
      },
      "typeVersion": 1
    },
    {
      "id": "b75eb6e0-6daa-436f-a415-1c86a455cc0e",
      "name": "Extract invoice information",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        176,
        0
      ],
      "parameters": {
        "text": "=please read and understand the input data({{ $json.text }}). I would like you to extract billing to, email, total amount, invoice date and due date. ",
        "options": {
          "systemMessage": ""
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2.1
    },
    {
      "id": "54cacdd2-806a-40d5-9e3a-986b9d042dfc",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1056,
        -144
      ],
      "parameters": {
        "width": 464,
        "height": 1024,
        "content": "## How it works\n1. Receive invoice in Slack \u2013 When a PDF invoice is uploaded to a designated Slack channel, the workflow is triggered.\n2. Fetch the PDF \u2013 The file is downloaded automatically for processing.\n3. Extract data from PDF \u2013 Basic text extraction is performed to capture invoice content.\n4. AI-powered invoice parsing \u2013 An AI model interprets the extracted text and structures essential fields such as company name, invoice number, total amount, invoice date, and due date.\n5. Save to Google Sheets \u2013 The structured invoice data is appended as a new row in a Google Sheet for easy tracking and reporting.\n6. Slack confirmation \u2013 A summary of the saved invoice details is sent back to Slack to notify the team.\n\n## How to use\n1. Import the workflow into your n8n instance.\n2. Connect Slack \u2013 Authenticate your Slack account and set up the trigger channel where invoices will be uploaded.\n3. Connect Google Sheets \u2013 Authenticate with Google Sheets and specify the target spreadsheet and sheet name.\n4. Configure the AI extraction \u2013 Adjust the parsing prompt or output structure to fit your preferred data fields (e.g., vendor name, invoice ID, amount, dates).\n5. Test the workflow \u2013 Upload a sample invoice PDF in Slack and verify that the data is correctly extracted and saved to Google Sheets.\n\n## Requirements\n- An n8n instance (cloud)\n- Slack account with permission to read uploaded files and post messages\n- Google account with access to the spreadsheet you want to update\n- AI integration (e.g., OpenAI GPT or another LLM with PDF parsing capabilities)\n- A designated Slack channel for receiving invoice PDFs"
      },
      "typeVersion": 1
    },
    {
      "id": "cbb83217-4629-4870-8340-5d65ac37f3b0",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -576,
        -352
      ],
      "parameters": {
        "width": 576,
        "height": 272,
        "content": "## Workflow\nAutomate Invoice Extraction from Slack to Google Sheets with GPT Model\n\n## Introduction\nManaging invoices manually can be time-consuming and error-prone. This workflow automates the process by extracting key invoice details from PDFs shared in Slack, structuring the information with AI, saving it to Google Sheets, and sending a confirmation back to Slack. It\u2019s a seamless way to keep your financial records organized without manual data entry."
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "AI model": {
      "ai_languageModel": [
        [
          {
            "node": "Extract invoice information",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Fetch the pdf": {
      "main": [
        [
          {
            "node": "Extract information from pdf",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send a message": {
      "main": [
        []
      ]
    },
    "Structure Output": {
      "ai_outputParser": [
        [
          {
            "node": "Extract invoice information",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Append row in sheet": {
      "main": [
        [
          {
            "node": "Send a message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Receive invoice pdf": {
      "main": [
        [
          {
            "node": "Fetch the pdf",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract invoice information": {
      "main": [
        [
          {
            "node": "Append row in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract information from pdf": {
      "main": [
        [
          {
            "node": "Extract invoice information",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}