AutomationFlowsAI & RAG › Automated Post-purchase Product Delivery & Upsell with Jotform, Gdrive, Gemini

Automated Post-purchase Product Delivery & Upsell with Jotform, Gdrive, Gemini

Byiamvaar @iamvaar on n8n.io

Explanation video: https://youtu.be/QjbA-tFYCFE?si=--C36KlSgABzteoB

Event trigger★★★★☆ complexityAI-powered8 nodesJot Form TriggerGoogle DriveGoogle SheetsAgentGoogle Gemini ChatGmailOutput Parser Structured
AI & RAG Trigger: Event Nodes: 8 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Agent → Gmail 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
{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "4272efa5-4d7d-40e5-b600-369d09de57fb",
      "name": "JotForm Trigger",
      "type": "n8n-nodes-base.jotFormTrigger",
      "position": [
        -1168,
        -560
      ],
      "parameters": {
        "form": "252855528344060"
      },
      "credentials": {
        "jotFormApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "2f4a728e-c663-4cef-a138-ad855df84cd4",
      "name": "Share file",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -944,
        -560
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "list",
          "value": "1u73RpV-HJhNPtJHIwPZH3NPnjeaeFqAFbkgP_fRvkZM",
          "cachedResultUrl": "https://docs.google.com/document/d/1u73RpV-HJhNPtJHIwPZH3NPnjeaeFqAFbkgP_fRvkZM/edit?usp=drivesdk",
          "cachedResultName": "n8n workflow json"
        },
        "options": {},
        "operation": "share",
        "permissionsUi": {
          "permissionsValues": {
            "role": "reader",
            "type": "user",
            "emailAddress": "={{ $json['Email Address'] }}"
          }
        },
        "authentication": "serviceAccount"
      },
      "credentials": {
        "googleApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "c77f8cd7-2d5c-417f-b962-8349982e043a",
      "name": "Append or update row in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -736,
        -560
      ],
      "parameters": {
        "columns": {
          "value": {
            "name": "={{ $('JotForm Trigger').item.json['Full Name'].first }} {{ $('JotForm Trigger').item.json['Full Name'].last }}",
            "email": "={{ $('JotForm Trigger').item.json['Email Address'] }}",
            "phone": "={{ $('JotForm Trigger').item.json['Phone Number'].full }}",
            "products": "={{ $('JotForm Trigger').item.json['My Products'].products[0].productName }}",
            "amount of sale": "={{ $('JotForm Trigger').item.json['My Products'].products[0].subTotal }} {{ $('JotForm Trigger').item.json['My Products'].products[0].currency }}"
          },
          "schema": [
            {
              "id": "name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "phone",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "phone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "products",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "products",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "amount of sale",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "amount of sale",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "email"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1-obvaY2DHnSBXloq8zLr8Ky0sSuBgGNF8eOF9fv8ucE/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1-obvaY2DHnSBXloq8zLr8Ky0sSuBgGNF8eOF9fv8ucE",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1-obvaY2DHnSBXloq8zLr8Ky0sSuBgGNF8eOF9fv8ucE/edit?usp=drivesdk",
          "cachedResultName": "Sales - n8n workflow"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "33166744-7cac-4448-99d3-3f1c5abaafdc",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -528,
        -560
      ],
      "parameters": {
        "text": "=Create a subject line and email body for a post-purchase thank you email. The email body must be in HTML.\n\nInstructions:\n\nSubject Line: Write a warm and inviting subject line that thanks the customer for their order and hints at a community invitation.\n\nEmail Body (in HTML):\n\nCreate a visually appealing and well-structured HTML email body.\n\nStart with a personalized greeting using the placeholder {{ $json.name }}.\n\nAcknowledge their recent purchase of {{ $json.products }}.\n\nExpress excitement for them and invite them to join an exclusive community on Discord.\n\nInclude a prominent, clickable HTML <a> tag or button for the Discord invitation link: https://discord.gg/sARWmykk.\n\nExplain the benefits of joining the Discord server (e.g., connecting with other users, getting tips, receiving support).\n\nEnd with a friendly closing.\n\nThe overall tone should be appreciative, friendly, and enthusiastic.\n\nAND SIGN THE NAME WITH \"IAMVAAR\" INSTEAD OF ANY RANDOM COMPANY\n\nExpected JSON Output Example:\n\n{\n  \"subject\": \"Thank you for your order, Jane Doe! You're invited!\",\n  \"body\": \"<!DOCTYPE html>\\n<html>\\n<head>\\n<style>\\n  body { font-family: sans-serif; color: #333; }\\n  .container { max-width: 600px; margin: 0 auto; padding: 20px; border: 1px solid #eee; border-radius: 8px; }\\n  .header { font-size: 24px; font-weight: bold; margin-bottom: 15px; }\\n  .button { background-color: #5865F2; color: white; padding: 12px 25px; text-decoration: none; border-radius: 5px; display: inline-block; font-weight: bold; }\\n  .footer { margin-top: 20px; font-size: 12px; color: #777; }\\n</style>\\n</head>\\n<body>\\n  <div class=\\\"container\\\">\\n    <p class=\\\"header\\\">Thanks for your purchase, Jane Doe!</p>\\n    <p>We're so excited for you to receive your new products: <strong>The Ultimate Gadget, Super-Fast Charger</strong>. We know you're going to love them!</p>\\n    <p>As a thank you, we'd like to invite you to join our exclusive Discord community. It's the best place to connect with other users, get tips & tricks, and receive dedicated support from our team.</p>\\n    <p style=\\\"text-align: center; margin: 30px 0;\\\">\\n      <a href=\\\"https://discord.gg/sARWmykk\\\" class=\\\"button\\\">Join the Discord Server</a>\\n    </p>\\n    <p>We can't wait to see you there!</p>\\n    <p class=\\\"footer\\\">Best regards,<br>The Team</p>\\n  </div>\\n</body>\\n</html>\"\n}\n",
        "options": {},
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "fd1a518f-8f04-4b9a-935e-2752c3b341cb",
      "name": "Google Gemini Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        -528,
        -352
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "25f19e5c-c843-4fc6-9008-0966d8fde407",
      "name": "Send a message",
      "type": "n8n-nodes-base.gmail",
      "position": [
        -176,
        -560
      ],
      "parameters": {
        "sendTo": "={{ $('Append or update row in sheet').item.json.email }}",
        "message": "={{ $json.output.body }}",
        "options": {},
        "subject": "={{ $json.output.subject }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "2a0d43d2-5c81-4459-9899-a48978593212",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1232,
        -816
      ],
      "parameters": {
        "width": 1264,
        "height": 656,
        "content": "### This automation handles what happens right after a customer makes a purchase on your online form. It automatically shares a document with them, records the sale in a spreadsheet, uses AI to write a personalized thank-you email, and then sends it to their inbox.\n\n* A customer completes a purchase on a JotForm, which triggers the automation.\n* The system automatically shares the digital product from Google Drive and logs the sale in a Google Sheet.\n* An AI agent then crafts a personalized thank-you email based on the customer and their order.\n* Finally, the custom-written email is sent to the customer's inbox directly from your Gmail account."
      },
      "typeVersion": 1
    },
    {
      "id": "74832848-4bf5-4743-985e-9433eac7283e",
      "name": "Structured Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        -352,
        -352
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"subject\": \"Thank you for your order, Jane Doe! You're invited!\",\n  \"body\": \"<!DOCTYPE html>\\n<html>\\n<head>\\n<style>\\n  body { font-family: sans-serif; color: #333; }\\n  .container { max-width: 600px; margin: 0 auto; padding: 20px; border: 1px solid #eee; border-radius: 8px; }\\n  .header { font-size: 24px; font-weight: bold; margin-bottom: 15px; }\\n  .button { background-color: #5865F2; color: white; padding: 12px 25px; text-decoration: none; border-radius: 5px; display: inline-block; font-weight: bold; }\\n  .footer { margin-top: 20px; font-size: 12px; color: #777; }\\n</style>\\n</head>\\n<body>\\n  <div class=\\\"container\\\">\\n    <p class=\\\"header\\\">Thanks for your purchase, Jane Doe!</p>\\n    <p>We're so excited for you to receive your new products: <strong>The Ultimate Gadget, Super-Fast Charger</strong>. We know you're going to love them!</p>\\n    <p>As a thank you, we'd like to invite you to join our exclusive Discord community. It's the best place to connect with other users, get tips & tricks, and receive dedicated support from our team.</p>\\n    <p style=\\\"text-align: center; margin: 30px 0;\\\">\\n      <a href=\\\"https://discord.gg/sARWmykk\\\" class=\\\"button\\\">Join the Discord Server</a>\\n    </p>\\n    <p>We can't wait to see you there!</p>\\n    <p class=\\\"footer\\\">Best regards,<br>The Team</p>\\n  </div>\\n</body>\\n</html>\"\n}"
      },
      "typeVersion": 1.3
    }
  ],
  "connections": {
    "AI Agent": {
      "main": [
        [
          {
            "node": "Send a message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Share file": {
      "main": [
        [
          {
            "node": "Append or update row in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "JotForm Trigger": {
      "main": [
        [
          {
            "node": "Share file",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "AI Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Append or update row in sheet": {
      "main": [
        [
          {
            "node": "AI Agent",
            "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

Explanation video: https://youtu.be/QjbA-tFYCFE?si=--C36KlSgABzteoB

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

More AI & RAG workflows → · Browse all categories →

Related workflows

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

AI & RAG

This workflow automates the extraction and processing of invoice data from PDFs stored in a Google Drive folder. It leverages Google Drive, Google Sheets, and Gemini AI to streamline invoice managemen

Google Gemini Chat, Google Sheets, HTTP Request +5
AI & RAG

Workflow explaination video: https://youtu.be/z1grVuNOXMk

Jot Form Trigger, Agent, Google Gemini Chat +4
AI & RAG

This workflow is designed for employees who need to submit expense claims for business trips. It automates the process of extracting data from receipts/invoices, logging it to a Google Sheet, and noti

Google Drive, Google Sheets, Output Parser Structured +4
AI & RAG

Workflow explaination: https://youtu.be/ecafBTFPuvE?si=7csA1yNsaUxUG72F

Jot Form Trigger, Agent, Google Sheets +4
AI & RAG

This automation is designed to help you generate AI-powered music tracks, cover art, and fully rendered music videos — all triggered from a simple Telegram chat and managed via Google Sheets.

OpenAI Chat, Memory Buffer Window, Output Parser Structured +11