2.3 KiB
2.3 KiB
Upwork Auto-Apply Pipeline Instructions
Trigger
This pipeline runs when Clawdbot receives the wake event upwork-email-check.
It fires every 2 minutes during 8AM-11PM ET.
Step 1: Check Gmail
gog gmail search "from:donotreply@upwork.com subject:\"New job\" is:unread" --max 10 --account jake@localbosses.org --json
Step 2: For each unread email
- Read the email:
gog gmail get <MSG_ID> --account jake@localbosses.org - Extract: job URL, rate/budget, title, skills
- Pre-filter based on email content:
- SKIP if hourly max < $50 (Jake's rule)
- SKIP if fixed price < $1,000
- SKIP if no rate info and description looks low-budget
Step 3: Scrape full job details (for jobs that pass pre-filter)
Use browser automation to visit the Upwork job page and extract:
- Full description
- Client history (total spent, hire rate, reviews)
- Number of proposals already
- Required skills
- Client location
Step 4: Score the job (0-100)
Scoring factors:
- Budget/rate alignment (higher = better) — 30 pts
- Client quality (spend history, reviews, hire rate) — 25 pts
- Skill match (MCP, Claude, AI automation, full-stack) — 25 pts
- Competition (fewer proposals = better) — 10 pts
- Project clarity (well-written = better) — 10 pts
Apply threshold: score >= 60
Step 5: Build deliverables (for high-scoring jobs)
Spawn a sub-agent to:
- Create a tailored wireframe/mockup/demo relevant to the job
- Deploy to Cloudflare Pages at
{job-slug}.portfolio.mcpengage.com - Take screenshots of the deployed pages
Step 6: Write proposal
Template components:
- Hook: Reference specific details from their job post
- Proof: Link to the deployed demo/wireframe
- Experience: Relevant portfolio pieces
- Approach: Brief technical plan
- CTA: Clear next step
Step 7: Submit via browser
Use Upwork browser automation to:
- Click "Submit a Proposal"
- Fill in cover letter
- Attach screenshots
- Set rate ($50+/hr or appropriate for fixed)
- Submit
Step 8: Report
Post to Discord #pipeline:
- Job title + URL
- Score
- Rate/budget
- Proposal summary
- Demo link
- Status (submitted/skipped/failed)
Processed tracking
File: upwork-pipeline/processed.json — array of processed email message IDs
Always mark emails as processed even if skipped (to avoid reprocessing)