PDF Invoice Extraction from Gmail to Google Sheets
Overview
This workflow automates the extraction of invoice data from PDF attachments received via email and writes the structured data into Google Sheets. It uses Cradl AI for intelligent document parsing with built-in human-in-the-loop validation, making it ideal for accounting teams that need to process invoices without manual data entry.
How It Works
The workflow is triggered whenever a new email with an invoice PDF arrives in Gmail. It filters only PDF attachments, sends the file to Cradl AI for extraction, splits out individual line items, and appends each line to a Google Sheet. The email is also marked as read to avoid reprocessing.
Node-by-Node Breakdown
- Gmail Trigger (OAuth2) — Polls Gmail every minute for unread emails matching
has:attachment subject:invoice. Downloads all attachments from matching emails. Configured to poll continuously. - Filter PDF attachments (No auth required) — A JavaScript code node that iterates over all binary attachments and keeps only those with
fileExtension === "pdf". Passes the PDF binary data to the next nodes. - Mark a message as read (OAuth2) — Marks the original email as read using the message ID from the trigger, preventing re-processing.
- Extract invoice details with AI (API Key auth) — Sends the PDF binary to Cradl AI (an AI agent configured to extract invoice fields). The node outputs a JSON object containing invoice-level data and an array of invoice lines.
- Split out each invoice line (No auth required) — Uses n8n's built-in
SplitOutnode to split thebody.output.invoice_linesarray into separate workflow items, one per line item. - Add invoice line to Google Sheets (OAuth2) — Appends each invoice line as a new row to a chosen Google Sheets document and sheet. The field mapping is determined by the user when configuring the node.
Setup Instructions
- Gmail: You need a Google account with Gmail enabled. During workflow activation, connect n8n to Gmail via OAuth2 (n8n will guide you through the authorization).
- Cradl AI: Create a free account at Cradl AI and follow the setup to create an invoice extraction agent. Copy your agent ID and API key, then configure the Extract invoice details with AI node with these credentials.
- Google Sheets: Prepare a Google Sheet with columns matching the extracted fields (e.g., Invoice Number, Date, Line Item, Amount, etc.). Authorize n8n to access your Google Drive/Sheets via OAuth2.
Customization
- Email filters: Modify the Gmail Trigger's
qparameter to match other senders, subjects, or labels (e.g.,from:[email protected]). - Field mapping: After extraction, you can use an Item Lists node or Code node to transform the Cradl output before writing to Sheets.
- Destination: Swap the Google Sheets node for Xero or QuickBooks nodes (if available) to post invoices directly to accounting software.
- Validation: In your Cradl AI account, you can add human reviewers to approve or correct extracted data before it is exported.
Use Cases and Variations
- Accounts payable automation: Streamline the processing of vendor invoices, reducing manual entry.
- Multi-company mailboxes: Add
to:[email protected]to the filter to process invoices sent to a shared inbox. - Expense reports: Adapt the Cradl agent to extract expense receipt data and write to a budgeting sheet.
- Alerting: Insert a Telegram or Slack node after extraction to notify the team when high-value invoices arrive.
Workflow JSON
{
"id": "YNjXTXnvpFdWW1Ao",
"name": "PDF invoice data extraction with human-in-the-loop from GMail to Google Sheets",
"tags": [],
"nodes": [
{
"id": "9473a15a-fc6f-4df3-978a-4c79612d37c8",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
16,
16
],
"parameters": {
"width": 416,
"height": 784,
"content": "### How it works\n1. Invoices are imported from GMail \n2. Data is extracted with Cradl AI \n3. The extracted data is then written to Google Sheets \n\n### Setup\n* **Cradl AI action**. Click [here](https://rc.app.cradl.ai/login?redirect=signup&template=n8n%2Finvoices-gmail-to-sheets.json) to create a free Cradl AI account. Choose _n8n_ when prompted for integrations, then follow the setup instructions in the node. \n* **GMail trigger**. Connect with GMail and customize email filters. For example, if you have a shared mailbox where you receive inboxes you may want to add `to:[email protected]` to the _Search filter_ parameter. \n* **Google Sheets action**. Connect your credentials and map the extracted fields from the Cradl AI output to Google Sheets. \n\n### Customize\n* The fields that are extracted can be easily customized by logging into your Cradl AI account and updating your agent definition. \n* Validation rules and reviewers (e.g. from your accounting team) can be added as **human-in-the-loop validators** directly in your Cradl AI account.\n\n### Tutorial\n\n@[youtube](yjVJ8w2U1_M)\n\n"
},
"typeVersion": 1
},
{
"id": "e6bfed03-8f7e-445c-957a-15751fd28472",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
448,
16
],
"parameters": {
"color": 7,
"width": 480,
"height": 528,
"content": "### Pull invoices from GMail\nThis trigger starts the workflow by getting your invoice file. You can easily swap it with other triggers that fetch files (PDFs or images) from sources like Gmail, webhooks, or cloud storage."
},
"typeVersion": 1
},
{
"id": "9c70a3ee-8624-44a2-af98-357e239ec196",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1392,
16
],
"parameters": {
"color": 7,
"width": 464,
"height": 368,
"content": "### Export invoice to Google Sheets\nYou can easily swap this out for other destinations, such as accounting tools like Xero or QuickBooks, or a database or data warehouse."
},
// ... truncated (copy to see full JSON)How to Import This Workflow
- 1Copy the workflow JSON above using the Copy Workflow JSON button.
- 2Open your n8n instance and go to Workflows.
- 3Click Import from JSON and paste the copied workflow.
Don't have an n8n instance? Start your free trial at n8nautomation.cloud
Related Templates
AI-Powered Auto-Healing for Failed n8n Workflows
High-Level Summary This workflow automates the entire overdue invoice recovery process using an AI agent. It runs daily on a schedule, reads unpaid invoices from a Google Sheet, and for each invoice uses OpenAI's GPT-4o-mini to analyze the situation and generate a personalized, context-aware recovery email. The email is sent via Gmail, and if the AI determines the account requires escalation (legal or collections), an internal alert is emailed to your legal team. The workflow then updates the invoice sheet with the new escalation level and appends a detailed log row to a separate recovery sheet for full auditability. Slack alerts notify the team if no invoices are found or if the AI encounters an error. Nodes and Their Functions Below is every node in the workflow, listed in execution order, with its type, authentication method, and key configuration. Daily Invoice Check (Schedule Trigger, No auth) — Fires the workflow every 24 hours. Configured with an interval rule of 24 hours. Read Overdue Invoices (Google Sheets, OAuth2) — Reads all rows from the "invoices" tab of your Google Sheet. Requires a Google Sheets OAuth2 credential and the spreadsheet ID. Any Overdue Invoices? (If, No auth) — Checks if the field is not empty. If invoices exist, the workflow proceeds to the AI agent; otherwise, it triggers a Slack alert. Slack: No Invoices Found Alert (Slack, OAuth2) — Sends a message to a specified Slack channel when no overdue invoices are found. Uses Slack OAuth2 credential. AI Recovery Agent (LangChain Agent, uses OpenAI API key via sub-node) — The core AI node. It receives each invoice row and a system prompt instructing it to act as an AR recovery specialist. It outputs a JSON object with escalation level, subject, email body, payment plans, and escalation action. The agent is connected to the GPT-4o-mini Language Model node. GPT-4o-mini Language Model (OpenAI Chat Model, API Key) — Provides the language model for the AI agent. Uses the model. Requires an OpenAI API key credential. Parse & Structure AI Response (Code, No auth) — A JavaScript code node that cleans and parses the AI's raw output into a structured JSON object. It also merges the original invoice data (invoice number, client name, etc.) into the output. Send Recovery Email to Client (Gmail, OAuth2) — Sends the personalized recovery email to the client. Uses the and from the AI response. The recipient email is taken from the original invoice row. Requires a Gmail OAuth2 credential. Needs Escalation? (If, No auth) — Checks if the field from the AI response is not "none". If escalation is needed, the workflow sends an internal alert; otherwise, it skips directly to logging. Send Escalation Alert to Legal Team (Gmail, OAuth2) — Sends an HTML email to a predefined legal team address with details about the high-risk invoice. The email includes client name, invoice number, amount due, days overdue, escalation level, and AI summary. Requires a Gmail OAuth2 credential. Update Invoice Status in Sheet (Google Sheets, OAuth2) — Updates the original invoice row in the "invoices" tab with the new escalation level and AI summary. Uses the row number to match the correct row. Append Row to Recovery Log (Google Sheets, OAuth2) — Appends a new row to the "Recovery sheet" tab with a full log of the action taken, including invoice details, AI subject, summary, escalation level, and Gmail label IDs. Slack: AI Error Alert (Slack, OAuth2) — Triggered if the AI Recovery Agent node encounters an error. Sends a Slack message with the invoice number and a request to check execution logs. Additionally, there are several Sticky Notes (Overview, Section: Trigger, Section: AI Agent, Section: Email, Section: Logging, Section: Security) that serve as documentation and visual guides within the editor. Setup Instructions To use this workflow, you need the following accounts and credentials: Google Sheets — A spreadsheet with two tabs: - : Columns should include Invoice, Client, Email, Amount, Due Date, Days Overdue, Level, Reminders Sent, and optionally row_number. - : Columns for logging (Invoice, Client, Amount, Days Overdue, Level, Email, escalation_level, summary, subject, labelIds). Create a Google Sheets OAuth2 credential in n8n and connect it to both Google Sheets nodes. Gmail — A Gmail account for sending recovery emails and escalation alerts. Create a Gmail OAuth2 credential in n8n. Update the escalation email recipient address () to your legal or collections team's email. OpenAI — An OpenAI API key with access to the model. Create an OpenAI API credential in n8n. Slack — A Slack workspace and a channel for alerts. Create a Slack OAuth2 credential in n8n. Replace with the actual channel ID. After connecting credentials, update the Google Sheet ID in the "Read Overdue Invoices", "Update Invoice Status in Sheet", and "Append Row to Recovery Log" nodes. Also update the Slack channel IDs and the legal team email address. Then activate the workflow. Use Cases and Variations Custom Escalation Rules — Modify the AI prompt or the "Needs Escalation?" condition to use different criteria (e.g., amount threshold, client tier). Multi-language Support — Adjust the AI prompt to generate emails in different languages. Integration with Accounting Software — Replace the Google Sheets nodes with API calls to QuickBooks, Xero, or other invoicing platforms. Different AI Models — Swap the GPT-4o-mini model for another OpenAI model or use a different provider via the LangChain integration. SMS or Other Channels — Add Twilio or other nodes to send reminders via SMS in addition to email. Dashboard & Reporting — Extend the logging sheet to feed into a BI tool for real-time recovery metrics.
Extract,Save Invoice Data from Google Drive and send to Sheets using AI
This workflow automates the extraction of structured invoice data from PDF files placed in a Google Drive folder and saves the results into a Google Sheet. It uses Dumpling AI's document extraction API to parse key fields like order number, line items, totals, and addresses. This is ideal for accounting teams, procurement departments, or anyone handling a high volume of supplier invoices. Node Breakdown Google Drive Trigger – Watch Folder for New Files (Google Drive Trigger) — OAuth2. Polls a specified Google Drive folder every minute and triggers the workflow when a new file is created. Download Invoice File (Google Drive) — OAuth2. Downloads the newly created file from Drive using its file ID (). Convert invoice File to Base64 (Extract From File) — No auth. Converts the downloaded file binary to a base64 string for API submission. Send file to Dumpling AI for Data Extraction (HTTP Request) — Header Auth. Sends a POST request to with a JSON body containing the base64 file and a prompt instructing the AI to extract order number, document date, PO number, shipping/sold-to details, line items, and total amounts. The API key is passed via an HTTP header credential. Parse Dumpling AI JSON Response (Code) — No auth. Executes JavaScript to parse the field from the API response (a JSON string) into a structured object. Split line Items from Invoice (Split Out) — No auth. Splits the array into separate items so each line item becomes a row in the spreadsheet. Save Data to Google Sheet (Google Sheets) — OAuth2. Appends a row to the target sheet with all extracted fields mapped to columns (Order number, Document Date, PO number, Sold to/Ship to names and addresses, Model, Description, Quantity, Unit Price, Total Price). Setup Instructions Google Services: You need a Google account with access to Google Drive and Google Sheets. Create a Google Drive folder for incoming invoices and a Google Sheet (with headers matching the column names above). In n8n, use OAuth2 credentials for both the Google Drive and Google Sheets nodes. Dumpling AI: Sign up for a Dumpling AI account and obtain an API key. In n8n, create an HTTP Header Auth credential with the key name (e.g., ) and value (e.g., ). Workflow Configuration: Update the folder ID in the Google Drive Trigger node, the document ID and sheet name in the Google Sheets node, and ensure the Dumpling AI endpoint and prompt are correct. The prompt can be customized to extract different fields. Use Cases and Variations Accounts Payable Automation: Automatically capture invoice details and post them to accounting software like QuickBooks, Xero, or ERP systems. Multi-format Support: Dumpling AI can handle PDFs, images, and other document types. Modify the prompt to extract data from purchase orders, receipts, or contracts. Error Handling: Add an error workflow or a Slack notification if extraction fails, or route failed invoices to a separate review sheet. Batch Processing: Replace the trigger with a scheduled poll or manual upload event to process existing invoices retroactively.
AI Expense Tracker: Save Chat Messages to Google Sheets via n8n Chat
Overview This workflow turns your natural language expense entries into structured data and saves them to a Google Sheet. When you send a chat message like "car wash; 59.3 usd; 25 jan 2024" via the built-in n8n chat interface, the AI agent (powered by OpenAI) parses the text, extracts cost, description, and date, then triggers a sub-workflow that appends a new row in a Google Sheet. This is perfect for quick, conversational expense logging without manual data entry. Node Breakdown When chat message received (Chat Trigger) — No auth (n8n built-in webhook) — Listens for incoming chat messages from the n8n chat interface. No external credentials needed. AI Agent (@n8n/n8n-nodes-langchain.agent) — Uses the OpenAI Chat Model (API Key auth) and Window Buffer Memory (no auth). It receives the chat input, uses a system message instructing it to use the "saveexpensein_db" tool, and responds with a confirmation message. OpenAI Chat Model (OpenAI) — API Key auth — Connects to OpenAI's GPT model to process the chat message. Configured with default options. Window Buffer Memory (Memory) — No auth — Maintains conversation context across messages (buffer window). Parse msg and save to Sheets (Tool Workflow) — No auth (calls the same workflow as sub-workflow) — This is a tool that the AI agent can call. It passes the chat input to the sub-workflow's input trigger. The tool name is "saveexpensein_db". Workflow Input Trigger (Execute Workflow Trigger) — No auth — Receives the input from the tool call and passes it to the next node. Expense text to JSON parser (Information Extractor) — Uses OpenAI Chat Model1 (API Key auth) — Extracts structured data from the input text. It defines attributes: cost (number), desc (string), date (date). The prompt instructs to convert the expense text to JSON. OpenAI Chat Model1 (OpenAI) — API Key auth — Provides the language model for the information extractor. Save expense into Google Sheets (Google Sheets) — OAuth2 auth — Appends a new row to a Google Sheet. The sheet is specified by document ID and sheet name. Columns are mapped: msg (original input), cost, date, desc. Uses append operation. Sticky Note — No auth — Contains setup instructions for the user. Setup Instructions **Google Sheets: Create a copy of the expense template (File → Make a copy). Note the new spreadsheet ID. OpenAI API Key: Obtain an API key from OpenAI and add it as a credential in n8n for the OpenAI Chat Model nodes. Google Sheets Credential: Set up OAuth2 credential in n8n for Google Sheets with access to the spreadsheet. Sub-workflow reference: Open the "Parse msg and save to Sheets" node and ensure the workflow dropdown points to this same workflow (it should auto-select the current workflow). Activate the workflow to enable the chat trigger. Then send a message like "car wash; 59.3 usd; 25 jan 2024" to the chat interface. You'll receive a confirmation and a new row will appear in your Google Sheet. Use Cases & Variations Personal expense tracking: Log daily expenses on the go via chat. Team expense reports: Modify the Google Sheet to include employee names or categories. Multi-language support: The AI can parse expenses in different languages. Add receipt images: Extend the workflow with an image-to-text node to extract data from photos. Integrate with accounting software: Replace Google Sheets with a database or API call to QuickBooks, Xero, etc.