{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "ede2cb2e-bb56-4870-94a4-c27c78509124",
      "name": "When clicking \u2018Execute workflow\u2019",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -420,
        560
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "85ff7b59-2c72-4846-953a-46ab1f50fee8",
      "name": "Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -240,
        880
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1MHVZRVo5aPs5VqRXk7lBNPVlZ2gilKqZ8J9yeg4taW4/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1MHVZRVo5aPs5VqRXk7lBNPVlZ2gilKqZ8J9yeg4taW4",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1MHVZRVo5aPs5VqRXk7lBNPVlZ2gilKqZ8J9yeg4taW4/edit?usp=drivesdk",
          "cachedResultName": "Invoices"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "e92eee15-18b1-4851-92ae-985d666b1857",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        320,
        880
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineAll"
      },
      "typeVersion": 3.2
    },
    {
      "id": "736b3314-daf7-4bd2-82e0-9e23018091b5",
      "name": "Get Invoice Template",
      "type": "n8n-nodes-base.googleDocs",
      "position": [
        100,
        800
      ],
      "parameters": {
        "operation": "get",
        "documentURL": "18n0HTqabDldi7fVbhbI1aG12qbFWsjyTXdduwDDOUu8"
      },
      "credentials": {
        "googleDocsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "97b2ea4d-4904-49f5-bb1e-ae7e71156640",
      "name": "Create New Doc",
      "type": "n8n-nodes-base.googleDocs",
      "position": [
        120,
        980
      ],
      "parameters": {
        "title": "=Invoice:  {{ $json.Invoice }}",
        "folderId": "1TnDibwPPPUm3VbmETiqWDVhtaUTLJ6mn"
      },
      "credentials": {
        "googleDocsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "86fb16bb-484b-44df-b4f5-25fde65a6c7f",
      "name": "Insert Content into Doc",
      "type": "n8n-nodes-base.googleDocs",
      "position": [
        600,
        540
      ],
      "parameters": {
        "actionsUi": {
          "actionFields": [
            {
              "text": "={{ $json.content }}",
              "action": "insert"
            }
          ]
        },
        "operation": "update",
        "documentURL": "={{ $json.id }}"
      },
      "credentials": {
        "googleDocsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "89810e9d-685e-4007-be83-0686ea779163",
      "name": "Input Invoice Details",
      "type": "n8n-nodes-base.googleDocs",
      "position": [
        800,
        940
      ],
      "parameters": {
        "actionsUi": {
          "actionFields": [
            {
              "text": "=FromCompany#",
              "action": "replaceAll",
              "replaceText": "={{ $('Google Sheets').item.json['Company From'] }}"
            },
            {
              "text": "ToCompany#",
              "action": "replaceAll",
              "replaceText": "={{ $('Google Sheets').item.json['Company To'] }}"
            },
            {
              "text": "Terms#",
              "action": "replaceAll",
              "replaceText": "={{ $('Google Sheets').item.json.Terms }}"
            },
            {
              "text": "Invoice#",
              "action": "replaceAll",
              "replaceText": "={{ $('Google Sheets').item.json.Invoice }}"
            },
            {
              "text": "Description#",
              "action": "replaceAll",
              "replaceText": "={{ $('Google Sheets').item.json.Description }}"
            },
            {
              "text": "Amount#",
              "action": "replaceAll",
              "replaceText": "={{ $('Google Sheets').item.json.Amount }}\n"
            }
          ]
        },
        "operation": "update",
        "documentURL": "={{ $('Merge').item.json.id }}"
      },
      "credentials": {
        "googleDocsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "d9d22f6b-bd25-4af5-b460-c76e9a9c527b",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -460,
        -60
      ],
      "parameters": {
        "color": 3,
        "width": 480,
        "height": 1220,
        "content": "### Step 1: **Manual Trigger**\n- Node: `When clicking \u2018Execute workflow\u2019`\n- Use this to manually execute the workflow during testing or on-demand runs.\n\n---\n\n### Step 2: **Google Sheets \u2014 Load Invoice Data**\n- Node: `Google Sheets`\n- Pulls rows from this [Google Sheet](https://docs.google.com/spreadsheets/d/1MHVZRVo5aPs5VqRXk7lBNPVlZ2gilKqZ8J9yeg4taW4/edit#gid=0)  \n- **Sheet Expectations**:\n  - Columns: `Company From`, `Company To`, `Terms`, `Invoice`, `Description`, `Amount`\n\n**Required Credentials**:\n- **Google Sheets OAuth2**  \n  Follow these steps:\n  1. Go to [Google Cloud Console](https://console.cloud.google.com/)\n  2. Enable the **Google Sheets API**\n  3. Create OAuth 2.0 credentials\n  4. Add redirect URI:  \n     ```\n     https://api.n8n.cloud/oauth2-credential/callback\n     ```"
      },
      "typeVersion": 1
    },
    {
      "id": "ad368f70-57a1-4693-9763-d7d2b8980efe",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        40,
        -60
      ],
      "parameters": {
        "color": 4,
        "width": 460,
        "height": 1220,
        "content": "### ### Step 3: `Get Invoice Template` \u2014 Load Google Doc  \nLoads a static Google Docs template containing placeholder values.\n\n- \ud83e\uddfe **Template URL**: [Copy This Template](https://docs.google.com/document/d/18n0HTqabDldi7fVbhbI1aG12qbFWsjyTXdduwDDOUu8/edit)\n- **Required Placeholders** in the document:\n  ```\n  FromCompany#\n  ToCompany#\n  Terms#\n  Invoice#\n  Description#\n  Amount#\n  ```\n\n> \ud83d\udd11 **Credentials Required**:  \n> Connect to **Google Docs OAuth2 API** in n8n.\n\n---\n\n### ### Step 4: `Create New Doc` \u2014 Make Invoice File  \nCreates a new Google Doc by duplicating the invoice template.\n\n- **Title Format**: `Invoice: {{ $json.Invoice }}`\n- **Destination Folder ID**: `1TnDibwPPPUm3VbmETiqWDVhtaUTLJ6mn`  \n  *(You can change this to your own Google Drive folder)*\n\n> \ud83d\udd10 Make sure your Google Docs credential has write access to this folder.\n\n---\n\n### ### Step 5: `Merge` \u2014 Combine Data  \nMerges the loaded document and spreadsheet row together for downstream updates.\n\n---"
      },
      "typeVersion": 1
    },
    {
      "id": "a17e1690-a974-4552-88d2-5d87b89f5045",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        520,
        -60
      ],
      "parameters": {
        "color": 5,
        "width": 480,
        "height": 1220,
        "content": "### ### Step 7: `Input Invoice Details` \u2014 Replace Fields  \nUses Google Docs API to replace all placeholders from the original template with the actual values.\n\n**Replacements:**\n\n| Placeholder    | Replaced With                |\n|----------------|------------------------------|\n| FromCompany#   | `Company From` from sheet     |\n| ToCompany#     | `Company To` from sheet       |\n| Terms#         | `Terms` from sheet            |\n| Invoice#       | `Invoice` number              |\n| Description#   | `Description` of service      |\n| Amount#        | `Amount` of invoice           |\n\n---\n\n## \ud83d\udce4 Final Output\n\nEach row from the Google Sheet results in a completed, branded Google Doc invoice stored in your Drive.\n\n---"
      },
      "typeVersion": 1
    },
    {
      "id": "9a875848-3be3-4763-8c08-05c2db7d4601",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -460,
        -180
      ],
      "parameters": {
        "width": 1460,
        "height": 100,
        "content": "## \ud83d\udcac Need Help?\n\ud83d\udce7 rbreen@ynteractive.com\n\ud83d\udd17 [LinkedIn](https://www.linkedin.com/in/robert-breen-29429625/)"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Merge": {
      "main": [
        [
          {
            "node": "Insert Content into Doc",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Sheets": {
      "main": [
        [
          {
            "node": "Create New Doc",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create New Doc": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Get Invoice Template": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Insert Content into Doc": {
      "main": [
        [
          {
            "node": "Input Invoice Details",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \u2018Execute workflow\u2019": {
      "main": [
        [
          {
            "node": "Get Invoice Template",
            "type": "main",
            "index": 0
          },
          {
            "node": "Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}