Send tailored Upwork job proposals with Gemini, Slack, Gmail, Drive and ClickUp

Go to Workflow
0 views
Built by Rahul Joshi Rahul Joshi
Created on September 04, 2026

Description

Quick overview
This workflow runs every 2 minutes, monitors new Upwork job posts forwarded to Slack, pulls candidate resumes and a company deck from Google Drive, uses the Google Gemini API to generate tailored proposals, then sends them via Gmail, posts an update to Slack, and creates ClickUp tasks for tracking.

How it works
Runs every 2 minutes on a schedule and reads recent messages from a specified Slack channel where Upwork jobs are forwarded.
Deduplicates Slack messages using n8n static workflow data and continues only when it finds new, job-like posts.
Lists candidate resume PDFs in a Google Drive folder, downloads each file, and extracts text from the PDFs to build candidate profiles with Drive links.
Searches Google Drive for a matching company deck file and picks its share link to include as context.
Combines the new job posts, candidate profiles, and deck link into a structured prompt and sends it to the Google Gemini API to generate a JSON array of proposals (or skipped jobs).
Parses and validates the Gemini response, then either emails the proposal package via Gmail and posts a summary to Slack while creating one ClickUp task per proposal, or flags the batch for manual review in Slack if no proposals are produced.

Setup
Add Slack OAuth2 credentials and set the correct channel IDs for the job intake channel and the proposal/alerts channel.
Add Google Drive OAuth2 credentials, then update the Drive folder ID used to list resume PDFs and the Drive search query used to find the company deck.
Add a Google Gemini API key and ensure the Gemini HTTP request node is authorized to call the Generative Language API endpoint.
Add Gmail OAuth2 credentials and update the recipient list used for sending proposal emails.
Add ClickUp credentials and set the target ClickUp list ID where proposal tasks should be created.

Nodes Used (5)

Code
n8n-nodes-base.code
Gmail
n8n-nodes-base.gmail
Google Drive
n8n-nodes-base.googleDrive
HTTP Request
n8n-nodes-base.httpRequest
Slack
n8n-nodes-base.slack