Get the Upwork Auto-Apply system running in 5 minutes.
cd /Users/growthgod/.openclaw/workspace/upwork_scripting_app
# Install Python dependencies
pip install -r requirements.txt
# Copy environment template
cp .env.example .envEdit .env and add your Claude API key:
CLAUDE_API_KEY=sk-ant-xxxxxxxxxxxGet one free at: https://console.anthropic.com/
python -c "from db.database import init_db; init_db()"You should see: ✅ Database initialized at upwork.db
python main.pyYou should see:
[INFO] Uvicorn running on http://0.0.0.0:8000
In a new terminal window:
# Option A: Open in default browser
open http://localhost:8000/dashboard/index.html
# Option B: Or just navigate manually
# Visit: http://localhost:8000/dashboard/index.htmlClick "Run Cycle" button in dashboard.
You should see:
- Jobs fetched from Upwork RSS
- Jobs filtered by budget/keywords
- Proposals generated by Claude
- Go to Queue tab
- Read the generated proposal
- Click ✅ Approve or ❌ Reject
- Click Export button
- Files appear in
/exports/YYYY-MM-DD/folder - Copy proposal text
- Paste into Upwork manually
Your system is now:
- ✅ Polling Upwork feeds every 30 minutes
- ✅ Filtering jobs by budget & keywords
- ✅ Generating proposals with Claude
- ✅ Ready for you to approve & send
Edit the proposal system prompt to match YOUR background:
SYSTEM_PROMPT = """You are writing Upwork proposals for a skilled developer named [YOUR NAME].
Their background:
- [YOUR EXPERIENCE]
- [YOUR SKILLS]
...
"""Adjust budget minimums and keywords to match what you want:
BUDGET_FILTERS = {
"fixed_min": 150, # Change this
"hourly_min": 25, # Or this
}
KEYWORD_WHITELIST = [
"automation", # Add your target keywords
"python",
]Change which Upwork categories you monitor:
UPWORK_FEEDS = [
"https://www.upwork.com/ab/feed/jobs/rss?q=landing+page&sort=recency",
# Add more feeds...
]"ModuleNotFoundError: No module named 'anthropic'"
→ Run: pip install -r requirements.txt
"CLAUDE_API_KEY not set"
→ Check .env has your API key
"Database locked" → Only one backend can run at a time
Dashboard doesn't load
→ Ensure backend is running on :8000
→ Check browser console (F12) for errors
- Customize job filters for your niche
- Test 1-2 cycles and review proposal quality
- Adjust Claude prompt if tone doesn't match you
- Monitor proposals daily — review queue in dashboard
- Track which proposals get responses
- Optimize based on what works
Check the full README.md for:
- API endpoint documentation
- Database schema details
- Configuration options
- Future enhancements
Happy proposing! 🚀