AutomationFlowsAI & RAG › Automate AI Upwork Proposal Generation with Apify, Google Gemini & Sheets

Automate AI Upwork Proposal Generation with Apify, Google Gemini & Sheets

ByIntuz @intuz on n8n.io

Community nodes are used, and template can only be used on self-hosted n8n instances.

Event trigger★★★★☆ complexityAI-powered25 nodes@Apify/N8N Nodes ApifyGoogle SheetsGmailGoogle Gemini ChatOutput Parser StructuredChain Llm
AI & RAG Trigger: Event Nodes: 25 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Apifyn8N Nodes Apify → 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": "h7kye1TyifE8jVpQ",
  "name": "Live-Automate AI Upwork Proposal Generation with Apify, Google Gemini & Sheets",
  "tags": [],
  "nodes": [
    {
      "id": "6de5e3c9-fbef-4fbb-863f-2f100e802601",
      "name": "When clicking \u2018Execute workflow\u2019",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -256,
        240
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "ac26904f-2ee9-4417-bf60-3f059686c0be",
      "name": "Run Upwork Actor for Listed Jobs",
      "type": "@apify/n8n-nodes-apify.apify",
      "position": [
        64,
        240
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "c86c636f-e414-4ba9-98d1-26a2f2a26175",
      "name": "Get the Dataset from Upwork Actor",
      "type": "@apify/n8n-nodes-apify.apify",
      "position": [
        288,
        240
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "78dd55ae-37a3-4178-9e70-167dd21666c2",
      "name": "Add the Extracted Data in Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        656,
        240
      ],
      "parameters": {},
      "typeVersion": 4.6
    },
    {
      "id": "eb2586a4-6bb2-4302-acf5-5efe6e495076",
      "name": "Count the New Jobs",
      "type": "n8n-nodes-base.summarize",
      "position": [
        1008,
        240
      ],
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "6906f045-15e7-4bab-a0a4-97bcd6466257",
      "name": "Send Email Notification",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1360,
        240
      ],
      "parameters": {},
      "typeVersion": 2.1
    },
    {
      "id": "06bbaf29-c309-484e-a711-0d6c3f7c3140",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        -48
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "d1013079-63ff-4c95-8974-fdf077c5412d",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        576,
        96
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "e9ccf231-e7cd-42b6-a4ec-774e7a375c61",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        928,
        112
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "c9f81e8f-c955-47bc-9f63-963b7c8de3b6",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1280,
        96
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "070434c0-5503-455d-9e69-90522afac0e5",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        32,
        560
      ],
      "parameters": {},
      "typeVersion": 2.2
    },
    {
      "id": "42496b60-1d0a-41b7-be95-262981058f6a",
      "name": "Google Gemini Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        464,
        976
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "efee4d21-e839-4b5f-8c87-6234c6e44f11",
      "name": "Structured Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        624,
        976
      ],
      "parameters": {},
      "typeVersion": 1.3
    },
    {
      "id": "963eef64-a1d1-4a1e-9266-93984739f118",
      "name": "Get row(s) in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -256,
        560
      ],
      "parameters": {},
      "typeVersion": 4.6
    },
    {
      "id": "a84799f2-70ef-4980-81c3-afc7a8b51c91",
      "name": "Edit Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        848,
        560
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "9a168243-ebcf-4b0d-9761-cdec750908ff",
      "name": "Send a message",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1664,
        560
      ],
      "parameters": {},
      "typeVersion": 2.1
    },
    {
      "id": "1723dd54-0806-4d3e-bf2e-53ddc5acd929",
      "name": "Summarize",
      "type": "n8n-nodes-base.summarize",
      "position": [
        1376,
        560
      ],
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "e3573056-1527-43b7-b724-03ac0f693dad",
      "name": "Append or update row in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1184,
        560
      ],
      "parameters": {},
      "typeVersion": 4.6
    },
    {
      "id": "e42d7f08-c1ab-4e08-bf9e-bc97d842de4b",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -640,
        528
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "df087f1e-c45a-4363-a076-b28bfd0606cf",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -80,
        688
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "33a8cdb2-5908-4201-ba34-9f52b641aaa4",
      "name": "Proposal Crafting",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        464,
        816
      ],
      "parameters": {},
      "typeVersion": 1.7
    },
    {
      "id": "26408e94-bf72-493d-8123-583aace9921f",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        816,
        720
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "ebeb68c3-ac91-4bd0-91e4-03272cdf8c50",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1536,
        400
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "492bac5d-11ce-45a1-9e57-2475b8895b85",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1136,
        736
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "5d88a224-02ac-4c9d-8861-bd860673ce66",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        352,
        496
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "72a480b8-38e5-4c96-b924-d07bad552e18",
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "Proposal Crafting",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Summarize": {
      "main": [
        [
          {
            "node": "Send a message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields": {
      "main": [
        [
          {
            "node": "Append or update row in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Proposal Crafting": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Count the New Jobs": {
      "main": [
        [
          {
            "node": "Send Email Notification",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get row(s) in sheet": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Email Notification": {
      "main": [
        [
          {
            "node": "Get row(s) in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Proposal Crafting",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Proposal Crafting",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Append or update row in sheet": {
      "main": [
        [
          {
            "node": "Summarize",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add the Extracted Data in Sheets": {
      "main": [
        [
          {
            "node": "Count the New Jobs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Run Upwork Actor for Listed Jobs": {
      "main": [
        [
          {
            "node": "Get the Dataset from Upwork Actor",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get the Dataset from Upwork Actor": {
      "main": [
        [
          {
            "node": "Add the Extracted Data in Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \u2018Execute workflow\u2019": {
      "main": [
        [
          {
            "node": "Run Upwork Actor for Listed Jobs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

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

About this workflow

Community nodes are used, and template can only be used on self-hosted n8n instances.

Source: https://n8n.io/workflows/8015/ — 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 contains community nodes that are only compatible with the self-hosted version of n8n.

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

Automate your lead intake, scoring, and outreach pipeline. This workflow collects leads from forms, enriches and scores them using Relevance AI, routes them by quality, and triggers the right follow-u

Form Trigger, HTTP Request, Chain Llm +6
AI & RAG

This workflow creates a sophisticated, self-improving customer support system that automatically handles incoming emails. It's designed to answer common questions using an AI-powered knowledge base an

Text Classifier, Chain Llm, Gmail Trigger +4
AI & RAG

Perfect for use cases such as: 💼 Finance teams managing vendor invoices 📊 Bookkeeping workflows 🔄 Automating monthly reconciliation

Output Parser Structured, HTTP Request, Gmail Trigger +4
AI & RAG

Stop manually exporting CSVs and start automating your marketing insights.

Gmail, Chain Llm, Google Sheets +4