AutomationFlowsEmail & Gmail › Send Daily Stock and Sales Profit Reports with Google Sheets and Gmail

Send Daily Stock and Sales Profit Reports with Google Sheets and Gmail

ByFahmi Fahreza @fahmiiireza on n8n.io

This workflow runs daily at 6AM to pull yesterday’s sales, incoming goods, and inventory data from Google Sheets, update stock quantities and status in the inventory sheet, and email a profit summary via Gmail. Runs every day at 6AM on a schedule. Reads data from the Google…

Cron / scheduled trigger★★★★☆ complexity24 nodesGmailGoogle Sheets
Email & Gmail Trigger: Cron / scheduled Nodes: 24 Complexity: ★★★★☆ Added:
Send Daily Stock and Sales Profit Reports with Google Sheets and Gmail — n8n workflow card showing Gmail, Google Sheets integration

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

This workflow follows the Gmail → 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": "2BGNNNhEQP7EoCBr",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "INTERN - Franklin Jaya Daily Stock & Sales Report Automation",
  "tags": [],
  "nodes": [
    {
      "id": "fea4a7a6-4867-481f-9f77-9896936c2a3e",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -304,
        -592
      ],
      "parameters": {
        "color": 4,
        "width": 288,
        "height": 1136,
        "content": "##Retrieve daily company data\nThis node will retrieve data from 4 sheets of prepared data."
      },
      "typeVersion": 1
    },
    {
      "id": "1f663af9-8c24-4500-b4d7-de39067174fc",
      "name": "Combine Laba & Pengeluaran",
      "type": "n8n-nodes-base.merge",
      "position": [
        576,
        -352
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineByPosition"
      },
      "typeVersion": 3.2
    },
    {
      "id": "3f42747c-cebf-418b-b052-0307e2502edc",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -384,
        -1376
      ],
      "parameters": {
        "color": 6,
        "width": 1008,
        "height": 736,
        "content": "\n# \ud83d\udce6 Daily Stock & Sales Report Automation\n\nThis workflow automates the daily inventory update and financial reporting process for a retail store. It calculates inventory changes from daily transactions, updates stock records automatically, and generates a daily financial summary for the store owner.\n\nGoogle Sheets:\nPrepare Google Sheets containing [Stock of Goods](https://docs.google.com/spreadsheets/d/1zX_k5GYD3H4KutAGKQLL3ga6m8EOBT7uPQO_wtu1hw8/edit?usp=sharing), [Sales Details](https://docs.google.com/spreadsheets/d/1zX_k5GYD3H4KutAGKQLL3ga6m8EOBT7uPQO_wtu1hw8/edit?gid=910708413#gid=910708413), [Incoming Goods](https://docs.google.com/spreadsheets/d/1zX_k5GYD3H4KutAGKQLL3ga6m8EOBT7uPQO_wtu1hw8/edit?gid=1401096599#gid=1401096599), and [Invoices](https://docs.google.com/spreadsheets/d/1zX_k5GYD3H4KutAGKQLL3ga6m8EOBT7uPQO_wtu1hw8/edit?gid=125577004#gid=125577004).\n## Who's it for?\n\nFor store owners and small businesses that manage inventory and sales using Google Sheets and want to automate daily stock updates and reporting.\n\n## How it works\n\n1. Retrieves inventory, sales, incoming goods, and invoice data from Google Sheets.\n2. Filters and summarizes daily sales and incoming stock by SKU.\n3. Calculates updated inventory quantities and stock status.\n4. Updates the inventory sheet with the latest values.\n5. Generates and sends a daily financial report via email.\n\n## How to set up\n\n* Connect your Google Sheets credentials.\n* Prepare Google Sheets containing **Stock of Goods**, **Sales Details**, **Incoming Goods**, and **Invoices**.\n* Update the spreadsheet URLs in each Google Sheets node.\n* Configure the recipient email in the **Send Message** node.\n* Activate the workflow to run automatically on schedule.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "aaecb6a8-e81c-45ef-90d0-a6603d749592",
      "name": "Send Message",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1152,
        -352
      ],
      "parameters": {
        "sendTo": "user@example.com",
        "message": "=Laporan Penjualan {{ $now.minus({ days: 1 }) }}\n\nRingkasan:\n- Laba Kotor: Rp{{ $json.laporan.Laba_Kotor }}\n- Pengeluaran Restock: Rp{{ $json.laporan.Pengeluaran_Restock }}\n- Keuntungan Bersih: Rp{{ $json.laporan.Keuntungan_Bersih }}",
        "options": {},
        "subject": "=Ringkasan Laba Toko",
        "emailType": "text"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "e120d904-9f0e-4bb2-83f2-ae5a43a3e6a3",
      "name": "Start Everyday at 6AM",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -544,
        -80
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 6
            }
          ]
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "6f556b85-a3b2-4efb-8886-75d199b8545f",
      "name": "GetData From Note Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -208,
        -464
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Note"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.com/spreadsheets/d/1zX_k5GYD3H4KutAGKQLL3ga6m8EOBT7uPQO_wtu1hw8/edit?gid=598562489#gid=598562489"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "fa1bf4da-8289-4609-8571-c243d2c4a0b6",
      "name": "GetData From Incoming Goods Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -208,
        -176
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Incoming Goods"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.com/spreadsheets/d/1zX_k5GYD3H4KutAGKQLL3ga6m8EOBT7uPQO_wtu1hw8/edit?gid=598562489#gid=598562489"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "ac81a63e-f2b4-4d78-978b-9e38be883209",
      "name": "GetData From Stock of Goods Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -208,
        368
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Stock of goods"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.com/spreadsheets/d/1zX_k5GYD3H4KutAGKQLL3ga6m8EOBT7uPQO_wtu1hw8/edit?gid=598562489#gid=598562489"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "c70a0257-1ddb-463b-84fe-35f089132efe",
      "name": "GetData From SalesDetails Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -208,
        112
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Sales Details"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.com/spreadsheets/d/1zX_k5GYD3H4KutAGKQLL3ga6m8EOBT7uPQO_wtu1hw8/edit?gid=598562489#gid=598562489"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "297a4394-8fe2-4c2c-b08a-382e07dca0da",
      "name": "Format Text",
      "type": "n8n-nodes-base.code",
      "position": [
        800,
        -352
      ],
      "parameters": {
        "jsCode": "return [\n  {\n    json: {\n      laporan: {\n        Laba_Kotor: $input.first().json.sum_Total_Bayar,\n        Pengeluaran_Restock: $input.first().json.sum_Total,\n        Keuntungan_Bersih: $input.first().json.sum_Total_Bayar - $input.first().json.sum_Total\n      }\n    }\n  }\n];"
      },
      "typeVersion": 2
    },
    {
      "id": "c3a0a685-02ec-4782-aad2-d81fe3fe05c9",
      "name": "Daily Filter Note",
      "type": "n8n-nodes-base.filter",
      "position": [
        128,
        -448
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "fefb470e-a4c0-4dab-9bb6-2d507b5a6579",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ DateTime.fromFormat($json.Tanggal, 'dd/MM/yyyy').toISODate() }}",
              "rightValue": "={{ $today.minus({ days: 1 }).toISODate() }}"
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "8e4a42c6-4323-4aa2-8d5b-d986a83ad16a",
      "name": "Daily SalesDetails Filter",
      "type": "n8n-nodes-base.filter",
      "position": [
        128,
        128
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "79f25ffa-b0b1-4073-99f8-bfe1b63ef27b",
              "operator": {
                "type": "dateTime",
                "operation": "equals"
              },
              "leftValue": "={{ DateTime.fromFormat($json.Tanggal, 'dd/MM/yyyy').toISODate() }}",
              "rightValue": "={{ $today.minus({ days: 1 }).toISODate() }}"
            }
          ]
        }
      },
      "typeVersion": 2.3,
      "alwaysOutputData": true
    },
    {
      "id": "318c1409-7a2f-4736-90b1-1e2020eda104",
      "name": "Merge Data Salesdetails & Stockofgoods",
      "type": "n8n-nodes-base.merge",
      "position": [
        576,
        224
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "joinMode": "keepEverything",
        "fieldsToMatchString": "SKU"
      },
      "typeVersion": 3.2
    },
    {
      "id": "fb972892-e223-4502-ab39-38a93ec491d6",
      "name": "Sum By Quantity Incominggoods",
      "type": "n8n-nodes-base.summarize",
      "position": [
        352,
        -64
      ],
      "parameters": {
        "options": {},
        "fieldsToSplitBy": "SKU",
        "fieldsToSummarize": {
          "values": [
            {
              "field": "Qty Masuk",
              "aggregation": "sum"
            }
          ]
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "3e92363f-ff46-4247-a33c-2032a2a62c6a",
      "name": "Sum By Quantity SalesDetail",
      "type": "n8n-nodes-base.summarize",
      "position": [
        352,
        128
      ],
      "parameters": {
        "options": {},
        "fieldsToSplitBy": "SKU",
        "fieldsToSummarize": {
          "values": [
            {
              "field": "Qty",
              "aggregation": "sum"
            }
          ]
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "e4daa825-3d61-49f1-ac47-d05b408add87",
      "name": "Sum Total Daily Gross Profit",
      "type": "n8n-nodes-base.summarize",
      "position": [
        352,
        -448
      ],
      "parameters": {
        "options": {},
        "fieldsToSummarize": {
          "values": [
            {
              "field": "Total Bayar",
              "aggregation": "sum"
            }
          ]
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "7446a780-08db-4e9e-b9ba-fead88f36e6a",
      "name": "Sum By Quantity Incominggoods Total",
      "type": "n8n-nodes-base.summarize",
      "position": [
        352,
        -256
      ],
      "parameters": {
        "options": {},
        "fieldsToSummarize": {
          "values": [
            {
              "field": "Total",
              "aggregation": "sum"
            }
          ]
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "cc8cf1e6-5fd4-4bc9-8580-4f8b6b63f0bd",
      "name": "Merge Data From Incoming & Two Other Sheets",
      "type": "n8n-nodes-base.merge",
      "position": [
        800,
        128
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "joinMode": "keepEverything",
        "fieldsToMatchString": "SKU"
      },
      "typeVersion": 3.2,
      "alwaysOutputData": true
    },
    {
      "id": "c4e38edb-6faf-4b40-a903-17fee2853c07",
      "name": "Sum Total Daily Gross Profit1",
      "type": "n8n-nodes-base.summarize",
      "position": [
        880,
        -1152
      ],
      "parameters": {
        "options": {},
        "fieldsToSummarize": {
          "values": [
            {
              "field": "Total Bayar",
              "aggregation": "sum"
            }
          ]
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "91ac4698-b155-4cb6-97dc-757be0bd799a",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        688,
        -1376
      ],
      "parameters": {
        "width": 496,
        "height": 384,
        "content": "## Why needs to Summarize the Data\nSummarize is used to group transactions by SKU and add up the total number of items received or sold. This ensures each product is processed only once during stock updates, avoiding repeated calculations for the same transaction."
      },
      "typeVersion": 1
    },
    {
      "id": "f1034da1-44c4-4b63-9a52-f97afd6a6767",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        992,
        -688
      ],
      "parameters": {
        "color": 3,
        "width": 432,
        "height": 512,
        "content": "\ud83d\udce7 Send Message (Gmail)\n\nSends the daily report to the specified email address.\n\nHow to Use:\n1. Connect your Gmail OAuth2 credential.\n2. Replace the To field with the recipient's email address.\n3. Customize the Subject if needed.\n4. Edit the Message content to match your preferred report format.\n5. Activate the workflow to send the report automatically each day."
      },
      "typeVersion": 1
    },
    {
      "id": "20ad9a9c-64a7-4532-948e-fdfa25ebaba4",
      "name": "Daily FIlter IncomingGoods",
      "type": "n8n-nodes-base.filter",
      "position": [
        128,
        -160
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "79f25ffa-b0b1-4073-99f8-bfe1b63ef27b",
              "operator": {
                "type": "dateTime",
                "operation": "equals"
              },
              "leftValue": "={{\nDateTime.fromFormat($json.Tanggal, 'dd/MM/yyyy').toISODate()\n}}",
              "rightValue": "={{ $today.minus({ days: 1 }).toISODate() }}"
            }
          ]
        }
      },
      "typeVersion": 2.3,
      "alwaysOutputData": true
    },
    {
      "id": "f27cb610-575f-4fdf-b3a6-70542d7c3879",
      "name": "Format the output",
      "type": "n8n-nodes-base.code",
      "position": [
        1024,
        128
      ],
      "parameters": {
        "jsCode": "const data = $input.all();\n\nreturn data\n.filter(item => {\n    const row = item.json;\n\n    const qtyTerjual = Number(row[\"sum_Qty\"] || 0);\n    const qtyMasuk = Number(row[\"sum_Qty_Masuk\"] || 0);\n\n    return qtyTerjual > 0 || qtyMasuk > 0;\n})\n.map(item => {\n    const row = item.json;\n\n    const qtyTerjual = Number(row[\"sum_Qty\"] || 0);\n    const qtyMasuk = Number(row[\"sum_Qty_Masuk\"] || 0);\n\n    const stokLama = Number(row[\"Stok Saat Ini\"] || 0);\n\n    const stokBaru = stokLama + qtyMasuk - qtyTerjual;\n\n    let status = \"Aman\";\n\n    if (stokBaru <= 0) {\n        status = \"Habis\";\n    } else if (stokBaru <= Number(row[\"Stok Minimum\"] || 0)) {\n        status = \"Perlu Restock\";\n    }\n\n    return {\n        json: {\n            row_number: row.row_number,\n            SKU: row.SKU,\n\n            \"Total Barang Masuk\":\n                Number(row[\"Total Barang Masuk\"] || 0) + qtyMasuk,\n\n            \"Total Terjual\":\n                Number(row[\"Total Terjual\"] || 0) + qtyTerjual,\n\n            \"Stok Saat Ini\": stokBaru,\n\n            \"Status Stok\": status\n        }\n    };\n});"
      },
      "typeVersion": 2
    },
    {
      "id": "3611c93d-da63-4eff-9d8b-18a0ad349681",
      "name": "Update Inventory Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1248,
        128
      ],
      "parameters": {
        "columns": {
          "value": {
            "row_number": "={{ $json.row_number }}",
            "Status Stok": "={{ $json['Status Stok'] }}",
            "Stok Saat Ini": "={{ $json['Stok Saat Ini'] }}",
            "Total Terjual": "={{ $json['Total Terjual'] }}",
            "Total Barang Masuk": "={{ $json[\"Total Barang Masuk\"] }}"
          },
          "schema": [
            {
              "id": "SKU",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "SKU",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Nama Produk",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Nama Produk",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Kategori",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Kategori",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Satuan",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Satuan",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Stok Awal\n(1 periode lalu)",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Stok Awal\n(1 periode lalu)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Total Barang Masuk",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Total Barang Masuk",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Total Terjual",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Total Terjual",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Stok Saat Ini",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Stok Saat Ini",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Stok Minimum",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Stok Minimum",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Harga Beli",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Harga Beli",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Harga Jual",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Harga Jual",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status Stok",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Status Stok",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "row_number"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Stock of goods"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.com/spreadsheets/d/1zX_k5GYD3H4KutAGKQLL3ga6m8EOBT7uPQO_wtu1hw8/edit?gid=598562489#gid=598562489"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "callerPolicy": "workflowsFromSameOwner",
    "timeSavedMode": "fixed",
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "versionId": "9f3b3226-88cb-4771-8ce8-fdbf24cfe64f",
  "nodeGroups": [],
  "connections": {
    "Format Text": {
      "main": [
        [
          {
            "node": "Send Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Daily Filter Note": {
      "main": [
        [
          {
            "node": "Sum Total Daily Gross Profit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format the output": {
      "main": [
        [
          {
            "node": "Update Inventory Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Start Everyday at 6AM": {
      "main": [
        [
          {
            "node": "GetData From Note Sheet",
            "type": "main",
            "index": 0
          },
          {
            "node": "GetData From SalesDetails Sheet",
            "type": "main",
            "index": 0
          },
          {
            "node": "GetData From Incoming Goods Sheet",
            "type": "main",
            "index": 0
          },
          {
            "node": "GetData From Stock of Goods Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GetData From Note Sheet": {
      "main": [
        [
          {
            "node": "Daily Filter Note",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Daily SalesDetails Filter": {
      "main": [
        [
          {
            "node": "Sum By Quantity SalesDetail",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Combine Laba & Pengeluaran": {
      "main": [
        [
          {
            "node": "Format Text",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Daily FIlter IncomingGoods": {
      "main": [
        [
          {
            "node": "Sum By Quantity Incominggoods Total",
            "type": "main",
            "index": 0
          },
          {
            "node": "Sum By Quantity Incominggoods",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Sum By Quantity SalesDetail": {
      "main": [
        [
          {
            "node": "Merge Data Salesdetails & Stockofgoods",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Sum Total Daily Gross Profit": {
      "main": [
        [
          {
            "node": "Combine Laba & Pengeluaran",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Sum By Quantity Incominggoods": {
      "main": [
        [
          {
            "node": "Merge Data From Incoming & Two Other Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GetData From SalesDetails Sheet": {
      "main": [
        [
          {
            "node": "Daily SalesDetails Filter",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GetData From Incoming Goods Sheet": {
      "main": [
        [
          {
            "node": "Daily FIlter IncomingGoods",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GetData From Stock of Goods Sheet": {
      "main": [
        [
          {
            "node": "Merge Data Salesdetails & Stockofgoods",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Sum By Quantity Incominggoods Total": {
      "main": [
        [
          {
            "node": "Combine Laba & Pengeluaran",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Merge Data Salesdetails & Stockofgoods": {
      "main": [
        [
          {
            "node": "Merge Data From Incoming & Two Other Sheets",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Merge Data From Incoming & Two Other Sheets": {
      "main": [
        [
          {
            "node": "Format the output",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

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

About this workflow

This workflow runs daily at 6AM to pull yesterday’s sales, incoming goods, and inventory data from Google Sheets, update stock quantities and status in the inventory sheet, and email a profit summary via Gmail. Runs every day at 6AM on a schedule. Reads data from the Google…

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

More Email & Gmail workflows → · Browse all categories →

Related workflows

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

Email & Gmail

YOUR_ID 4. Uses gmail, googleDrive, googleSheets, httpRequest. Scheduled trigger; 53 nodes.

Gmail, Google Drive, Google Sheets +1
Email & Gmail

special-day-email-sender. Uses googleSheets, gmail. Scheduled trigger; 43 nodes.

Google Sheets, Gmail
Email & Gmail

Looking for a way to track GitHub bounty issues automatically and get notified in real time? This GitHub Bounty Tracker workflow monitors repositories for issues labeled 💎 Bounty, logs them in Google

Google Sheets, HTTP Request, WhatsApp +1
Email & Gmail

This workflow automatically sends a beautifully designed HTML newsletter every Sunday at 8 AM, featuring products currently on sale from your Algolia-powered e-commerce store.

Google Sheets, HTTP Request, Gmail
Email & Gmail

This n8n template demonstrates how to build a Auto Lead Gen & Outreach System for Local Businesses specifically designed to help businesses that don’t have a website yet.

Google Sheets, HTTP Request, Google Drive +1