Automate Upwork outreach
Installation Guide HERE
What This Skill Does
You tell Claude Code something like "find me AI automation jobs on Upwork" and it does everything:
- Scrapes Upwork jobs matching your keywords
- Figures out the client's first name from the job description
- Writes a ~300 word personalized proposal with a visual flowchart
- Creates a formatted Google Doc with the proposal + embedded diagram
- Writes a 35-word cover letter that links to the doc
- Builds a one-click apply link
- Puts it all in a Google Sheet
How to Use
Just talk to Claude Code naturally:
/upwork-jobs "AI automation"
Or be more specific:
"Find me AI automation jobs on Upwork"
"Scrape appointment setter gigs from the last 3 days"
"Look for voice agent projects, expert level only"
"Find n8n jobs with budget over $1000"
Claude interprets your request, picks the right search parameters, runs the scraper, generates proposals, and gives you the Google Sheet link.
The Pipeline (What Happens Behind the Scenes)
Step 1: Job Scraping
The scraper searches Upwork and collects for each job:
- Title, full description, URL
- Budget (fixed or hourly)
- Required skills and experience level
- Client info: country, total spend, rating, hire rate
- Questions the client wants answered
- When it was posted
Four search modes available:
- Standard keyword search (default)
- "Any word" search (broad - at least one keyword must match)
- Exact phrase search (narrow)
- Title-only search
Plus filters: max age, experience level, location, budget minimum, verified payment.
Step 2: Contact Name Discovery
For every job, Claude reads the description and tries to find the poster's name:
- Signatures at the end ("Thanks, John")
- Self-introductions ("My name is..." or "I'm Mike...")
- Company names (infers founder/CEO)
Three confidence levels:
- High (name is explicit) - "Hey John"
- Medium (inferred from company) - "Hey John (if I have the right person)"
- None found - "Hey"
This makes the proposal feel like you actually read the posting.
Step 3: Proposal Generation
Claude generates a ~300 word personalized proposal for each job. It reads the full description, skills, budget, and client questions.
The proposal follows this structure:
Hey [name].
I spent ~15 minutes putting this together for you. In short, it's how I would create your [thing] end to end.
[Your pitch from your config]
Here's a step-by-step, along with my reasoning at every point:
My proposed approach
- [Step + why]
- [Step + why]
- [Step + why]
- [Step + why]
What you'll get
- [Deliverable 1]
- [Deliverable 2]
Timeline
[Estimate]
Conversational, first person. No filler, no "I'm excited to apply."
Step 4: Visual Diagram
The AI generates a flowchart (max 6 nodes) showing your proposed approach visually. This gets converted to an image and embedded in the Google Doc. Clients see your plan at a glance.
Step 5: Google Doc + Cover Letter
Each proposal becomes a formatted Google Doc with bold headers, bullets, and the embedded diagram. Then a separate 35-word cover letter gets generated:
"Hi. I work with [short paraphrase] daily and just built a [thing]. Free walkthrough: [LINK]"
The link goes to your full proposal doc. The client clicks through and sees your complete plan.
Step 6: Google Sheet Output
Everything lands in a Google Sheet with columns for: Title, URL, Budget, Experience, Skills, Client Country, Client Spent, Client Rating, Applicants, Contact Name, Apply Link, Cover Letter, and Proposal Doc link.
New batches append below existing rows - the sheet grows as you run more searches.
Personalizing Your Proposals
During installation, you set up a config.yaml with your identity. This is what makes proposals sound like you:
- Your name and agency name
- What you specialize in (your pitch line)
- Case studies (client results you can reference)
The AI weaves your case studies into proposals naturally when they're relevant to the job.
You can also pass extra context per run. Create a text file with niche-specific experience and the AI incorporates it:
"We built an AI appointment setter for a coaching business. Results: went from $60k/month to $140k/month in 6 months. The AI handles all Instagram DM conversations 24/7."
Pass it as context when running and the proposals reference those results.
Cost Per Run
Scraping 20 jobs: ~$0.07
Claude per proposal: ~$0.35-0.50
Google Sheets/Docs: Free
Total for 20 jobs: ~$7-10
Processing time: ~5-8 minutes for 20 jobs.
Tips
- Start with a small batch (10-20 jobs) to test your search terms
- Review proposals before applying - they're drafts, not auto-submissions
- Add niche-specific case studies for better proposals
- Broader keywords = more results. "AI automation" finds more than "AI voice agent for dental offices"
- If no jobs found, broaden your keywords or increase the max age filter