13 scrapers · AI-powered scoring · Email extraction · Daily curation · Beautiful dashboard
Quick Start · Features · Scrapers · Setup AI · Add a Scraper · Contributing
You're a developer looking for freelance projects or remote jobs. Your current workflow:
- Open LinkedIn → scroll → nothing good
- Open Reddit r/forhire → scroll → mostly spam
- Check Remotive → few results
- Try Craigslist gigs → sketchy posts
- Repeat across 10+ sites daily
- Waste 2+ hours and find nothing
DevHunt scrapes 13 platforms simultaneously, extracts contact emails, uses AI to score every listing, and serves you the 20 best opportunities on a beautiful dashboard — fully automated, every day.
You run one command. DevHunt does the rest.
| Feature | Description |
|---|---|
| 🔍 13 Job Scrapers | Reddit, LinkedIn, Twitter/X, Hacker News, Craigslist, Remotive, Arbeitnow, Working Nomads, Golang Jobs, Contra, FreelancerMap, Discord, Google |
| 🤖 AI Scoring | Every job gets scored 1-10 by LLaMA 70B based on YOUR skills profile — scams get auto-rejected |
| 📧 Email Extraction | Automatically finds contact emails, Reddit DM links, and apply URLs |
| 🎯 Daily Curation | Top 20 picks delivered daily — 10 with direct contact, 10 apply-only |
| 🖥️ Beautiful Dashboard | Dark-mode UI with score rings, verdict badges, skill tags, red flag warnings |
| 🔄 Auto-Pipeline | Runs every 24 hours automatically. One-click manual refresh |
| 🛡️ Spam Filter | AI auto-rejects IT support, data entry, MLM, crypto scams, and non-dev work |
| 📊 Browse All Jobs | Searchable, filterable database of every job ever scraped |
| 🔌 REST API | Full JSON API for building your own integrations |
| 🆓 100% Free | No paid APIs required. AI scoring works with free NVIDIA NIM tier |
Get DevHunt running in 60 seconds:
# 1. Clone
git clone https://github.com/naeemsabir1/DevHunt.git
cd DevHunt
# 2. Install
python -m venv venv
venv\Scripts\activate # Windows
# source venv/bin/activate # macOS/Linux
pip install -r requirements.txt
# 3. Configure
cp .env.example .env
# Edit .env with your settings (see below)
# 4. Launch
python app.pyOpen http://localhost:8000 — DevHunt starts scraping immediately.
💡 No API key? DevHunt still works! Without an AI key, it uses built-in heuristic scoring. Add a key later for premium AI-powered scoring.
| # | Source | Type | What It Scrapes |
|---|---|---|---|
| 1 | Social | r/forhire, r/freelance_forhire, r/hiring + 18 more subreddits | |
| 2 | Professional | Freelance developer job listings worldwide | |
| 3 | Twitter/X | Social | Tweets from people looking to hire developers |
| 4 | Hacker News | Tech | "Who's hiring" threads, freelance project posts |
| 5 | Craigslist | Classifieds | Computer gigs from 35 cities across US, UK, Canada, Australia |
| 6 | Google Search | Meta-search | Finds hiring posts on Facebook, Instagram, and across the web |
| 7 | Discord | Community | Developer freelance channels and server posts |
| 8 | Remotive | Job board | Remote developer jobs (free API, no auth) |
| 9 | Arbeitnow | Job board | EU + remote developer positions (free API) |
| 10 | Working Nomads | Job board | Curated remote-only jobs (free API) |
| 11 | Golang Jobs | Niche | Go developer positions (RSS feed) |
| 12 | Contra | Freelance | Independent professional project opportunities |
| 13 | FreelancerMap | Freelance | IT freelance projects from Europe |
Want more? Add your own scraper in 5 minutes or request one.
DevHunt uses NVIDIA NIM (free tier) to AI-score every job. Here's how to set it up:
- Go to build.nvidia.com
- Sign up (free)
- Generate an API key
NVIDIA_API_KEY=nvapi-your-key-hereEdit the USER_PROFILE in your .env to match YOUR skills:
USER_PROFILE=React/Next.js developer with 3 years experience. Looking for frontend freelance projects. Skills: TypeScript, React, Next.js, Tailwind, Node.js. Minimum $1000 per project.The AI uses your profile to score jobs — the more specific you are, the better the results.
| Score | Verdict | Meaning |
|---|---|---|
| 9-10 | ✅ APPLY | Perfect match — real project, good pay, matches your skills |
| 7-8 | ✅ APPLY | Good match — likely legit, decent pay |
| 5-6 | Okay — might be worth checking, some concerns | |
| 3-4 | ❌ SKIP | Weak — low pay, vague scope, or questionable |
| 1-2 | ❌ SKIP | Auto-rejected — scam, spam, non-dev, or irrelevant |
Auto-rejected categories: IT support, helpdesk, data entry, virtual assistant, content writing, SEO-only, telemarketing, MLM, crypto scams.
┌─────────────────────────────────────────────────────┐
│ DevHunt Pipeline │
├──────────┬──────────┬──────────┬───────────┬────────┤
│ Step 1 │ Step 2 │ Step 3 │ Step 4 │ Serve │
│ SCRAPE │ PARSE │ SCORE │ CURATE │ UI │
├──────────┼──────────┼──────────┼───────────┼────────┤
│ 13 async │ Extract │ AI score │ Top 20 │FastAPI │
│ scrapers │ pay,type │ each job │ picks/day │ + │
│ run in │ extract │ (1-10) │ 10 email │ Jinja2 │
│ parallel │ emails │ + verdict│ 10 apply │ HTML │
└──────────┴──────────┴──────────┴───────────┴────────┘
↓ ↓ ↓ ↓
┌──────────────────────────────────────────────┐
│ SQLite Database (jobs.db) │
│ Auto-dedup · Full-text search · Indexed │
└──────────────────────────────────────────────┘
DevHunt exposes a full REST API:
| Endpoint | Method | Description |
|---|---|---|
/api/curated |
GET | Today's AI-curated top 20 jobs |
/api/jobs?page=1&source=reddit&search=react |
GET | Browse all jobs with filters |
/api/job/{id} |
GET | Single job detail with AI analysis |
/api/refresh |
POST | Trigger pipeline manually |
/api/status |
GET | Pipeline status + stats |
/api/sources |
GET | List all active sources |
DevHunt is designed to be extended. Here's a complete example:
# scrapers/myplatform.py
from .base import BaseScraper
class MyPlatformScraper(BaseScraper):
name = "myplatform"
async def scrape(self) -> list[dict]:
# BaseScraper gives you: self.fetch_json(), self.fetch()
# with automatic retries, backoff, and user-agent rotation
data = await self.fetch_json("https://api.example.com/jobs")
return [{
"source": "myplatform",
"external_id": item["id"],
"title": item["title"],
"company": item.get("company", ""),
"description": item.get("description", ""),
"url": item["url"],
"pay": "",
"job_type": "Remote",
"tags": ["myplatform"],
} for item in (data or [])]Then register it in scrapers/__init__.py — done! The pipeline handles everything else.
DevHunt/
├── app.py # FastAPI server + scheduler
├── config.py # All settings (loaded from .env)
├── curator.py # Daily pipeline orchestrator
├── database.py # SQLite async database layer
├── ai_scorer.py # AI scoring engine (NVIDIA NIM)
├── email_finder.py # Email/contact extraction
├── parser.py # Pay/type extraction heuristics
├── requirements.txt # Python dependencies
├── .env.example # Environment variable template
├── scrapers/
│ ├── base.py # BaseScraper with retries + backoff
│ ├── reddit.py # Reddit (21 subreddits)
│ ├── linkedin.py # LinkedIn jobs
│ ├── nitter.py # Twitter/X posts
│ ├── hackernews.py # Hacker News threads
│ ├── craigslist.py # Craigslist gigs (35 cities)
│ ├── google_search.py# Google meta-search
│ ├── discord_scraper.py # Discord channels
│ ├── remotive.py # Remotive API
│ ├── arbeitnow.py # Arbeitnow API
│ ├── workingnomads.py# Working Nomads API
│ ├── golangjobs.py # Golang Jobs RSS
│ ├── contra.py # Contra opportunities
│ └── freelancermap.py# FreelancerMap projects
├── templates/
│ ├── index.html # Curated dashboard
│ └── all_jobs.html # Browse all jobs
└── static/
├── style.css
└── app.js
Contributions are what make DevHunt better for everyone. See CONTRIBUTING.md for details.
The easiest way to contribute: add a new scraper! Check the contributing guide for a step-by-step template.
DevHunt is open source under the MIT License. Use it, modify it, build on it — just give credit.
If DevHunt helps you find work, give it a ⭐
Built with ❤️ by developers, for developers