DEV Community

Brad
Brad

Posted on • Edited on

I built a free tool to search every HN 'Who is Hiring?' post (with tech stack + email extraction)

Every month, thousands of companies announce they're hiring on Hacker News. The problem? There's no way to filter. You scroll through hundreds of comments looking for "Python" or "remote" or "ML engineer" and miss half of them.

I built HN Startup Hunter — a free web tool that scrapes the latest "Who is Hiring?" thread and filters by your skills. Here's what it returns:

  • Company name extracted from the first line of each comment
  • Tech stack (Python, Go, React, Kubernetes — 50+ tags detected automatically)
  • Location badge — Remote, Onsite, or Hybrid
  • Salary range if mentioned (e.g. $120k–$180k)
  • Direct email address (business emails only, personal emails filtered out)
  • HN thread link to read the full post
  • CSV export for your own tracking

How it works

The tool uses the HN Firebase API to fetch the thread's top-level comments in parallel (40 workers), then runs a series of extractors:

TECH_TAGS = [
    'Python', 'Go', 'Rust', 'TypeScript', 'React', 'Vue',
    'AWS', 'Kubernetes', 'PostgreSQL', 'Kafka', 'LLM', 'ML',
    # ... 50+ more
]

def extract_tech_tags(text):
    found = []
    for tag in TECH_TAGS:
        if re.search(r'\b' + re.escape(tag.lower()) + r'\b', text.lower()):
            found.append(tag)
    return found[:8]
Enter fullscreen mode Exit fullscreen mode

For salary:

def extract_salary(text):
    patterns = [
        r'\$[\d,]+[kK]?\s*[-–]\s*\$[\d,]+[kK]?',  # $100k-$150k
        r'\$[\d,]+[kK]',                                  # $120k
    ]
    for p in patterns:
        m = re.search(p, text)
        if m:
            return m.group(0)
    return ''
Enter fullscreen mode Exit fullscreen mode

Email extraction filters out Gmail, Yahoo, and other personal addresses — you only see business emails:

personal = {'gmail.com', 'yahoo.com', 'hotmail.com', 'proton.me', 'outlook.com'}
return [e for e in sorted(emails) 
        if e.split('@')[-1].lower() not in personal]
Enter fullscreen mode Exit fullscreen mode

Real results

Searching "python, remote, data" in the May 2026 thread returns ~40–60 companies with Python + remote roles, sorted by companies that have a direct email address (easiest to reach).

The result cards look like this:

Field Example
Company Estuary
Tech Python, Kafka, Postgres, Docker
Location 🌐 Remote
Salary $150k–$200k
Email careers@estuary.dev

Using it

  1. Go to hn-startup-hunter.onrender.com
  2. Type your skills: python, remote, machine learning
  3. Check "Remote only" if you want to filter
  4. Pick the month (last 3 HN threads available)
  5. Hit Search → wait ~10 seconds
  6. Export to CSV

It's free to use. If you want to self-host it on your own server, the source is on Gumroad for €7.

Building it

The backend is a 200-line Flask app with no database. The frontend is ~400 lines of vanilla JS and CSS. Total setup time: one evening. The whole thing runs on Render's free tier.

The tricky parts:

  • Detecting company vs job seeker posts: I look for signals like we're hiring, join our team, full-time, and reject posts that say seeking work, available for hire, etc.
  • Company name extraction: Most HN posts follow Company | Location | Role format, so splitting on |, , or - gets you the name
  • Parallel fetching: The Firebase API is reliable but slow per-request. 40 concurrent workers gets 250 comments in ~8 seconds

If you build on top of this or have suggestions, let me know in the comments. Always looking for edge cases I'm missing.


Try it: hn-startup-hunter.onrender.com


🔧 **Found this useful?* I build custom HN lead reports (20–50 companies with verified emails, tech stacks, 24h delivery) → Order done-for-you lead report — $75 | Got a workflow to automate? → 1-Hour Python Automation Audit — $39*

Top comments (0)