Upwork Automation

Automated Upwork job-harvesting and AI proposal-drafting pipeline.

Automated Upwork job-harvesting and AI proposal-generation pipeline.

Role
Sole developer

The problem

Manually refreshing Upwork for new relevant jobs and hand-writing a tailored proposal for each one was slow and inconsistent, and the best jobs disappear fast.

The approach

Built a Laravel + Node.js pipeline that uses Puppeteer to harvest new job postings on a schedule, filters them against relevance criteria, and calls the OpenAI API to draft a tailored proposal for each match — ready for a quick human review before it goes out.

The outcome

Reduced manual Upwork checking by 80-90%; produced consistent AI-generated proposals.

Stack

  • Laravel
  • Node.js
  • Puppeteer
  • OpenAI API

How it's built

Watch the system move between operational states, and trace a single request step by step through the stack.

Upwork AI Proposal Pipeline

STAGE: HARVESTING & DRAFTING
Puppeteer HarvesterCron Schedule
Target:Fullstack Laravel Role ($4k)
Cadence:5m Headless Polling
Laravel OrchestratorFilter & Dispatch
Scoring:Budget Match • Payment Verified
Match State:Qualified (Score: 92/100)
OpenAI APISYNTHESIS
Task:Drafting Pitch
Latency:~1.8s gen
Human DeskAPPROVAL
Queue:Pending
Action:Awaiting Gen
Puppeteer intercepts a live post. Laravel qualifies the criteria and triggers OpenAI API to draft a contextual pitch.

Puppeteer harvests, OpenAI drafts, a human approves before send.

Autopilot Proposal Pipeline

STEP 1/6
Linux Cron • Laravel Scheduler
cron interval fires; Laravel dispatches REST command to Node.js scraper worker • 0 ms
Node.js • Puppeteer Engine
authenticated headless session traverses live feed; extracts job tokens and rate metadata • ~3.2 s
Laravel Core • Filter Engine
verifies budget, client spend, rating, & connects; discards low-intent posts • ~18 ms
MySQL • Laravel Mail (SMTP)
job stored into schema; notification email with match scorecard dispatched to admin
OpenAI API Engine
job context combined with user profile; dynamic prompt generates tailored proposal • ~1.4 s
Bidding Desk Ready
context-aware pitch saved to database; primed for one-click copy & submission • ready

← All projects