About upwork-apply
A workflow for collecting Upwork job listings, generating personalized cover letters with Claude, and saving the results to Google Sheets. It is intended for applicants who want job details and generated proposals organized with application links.
Key features
- 01Scrape Upwork listings through Apify
- 02Generate personalized proposals with Claude
- 03Save job and proposal details to Google Sheets
- 04Include application links in the sheet
Use cases
- 01Collecting listings for a search query
- 02Drafting tailored cover letters for gathered jobs
- 03Organizing proposals and application links in a sheet
Install
Copy the command and run it in a terminal.
$
npx skills add https:/ / github.com/ aiagentwithdhruv/ skills --skill upwork-applyAfter installing, type/upwork-applyin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
scripts/update_sheet.pyupwork_apify_scraper.pyupwork_proposal_generator.pyDetails
From the project READMEUpwork Job Scraping & Proposal Generation
Goal
Scrape Upwork job listings and generate personalized proposals with compelling cover letters.
Scripts
./scripts/upwork_apify_scraper.py- Scrape Upwork jobs via Apify./scripts/upwork_proposal_generator.py- Generate proposals with Claude./scripts/update_sheet.py- Save to Google Sheets
Process
1. Scrape Jobs
python3 ./scripts/upwork_apify_scraper.py \
--query "AI automation" \
--limit 50 \
--output .tmp/upwork_jobs.json
2. Generate Proposals
python3 ./scripts/upwork_proposal_generator.py \
--jobs .tmp/upwork_jobs.json \
--output .tmp/proposals.json
Uses Claude Opus 4.5 for high-quality, personalized cover letters.
3. Save to Sheet
python3 ./scripts/update_sheet.py .tmp/proposals.json --title "Upwork Proposals"
Output
Google Sheet with:
- Job details (title, description, budget, client info)
- Generated proposal/cover letter
- Application link
Environment
APIFY_API_TOKEN=your_token
ANTHROPIC_API_KEY=your_key
Schema
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
query | string | Yes | Search query (e.g., 'AI automation') |
limit | integer | No | Max job listings (default: 50) |
Outputs
| Name | Type | Description |
|---|---|---|
sheet_url | string | Google Sheet with job details + generated proposals |
Credentials
| Name | Source |
|---|---|
APIFY_API_TOKEN | .env |
ANTHROPIC_API_KEY | .env |
Cost
Apify credits + Claude API
Comments
Markdown supported