Tutorial

How to Build an AI Job Search Agent

Pattern from r/hiringcafe's AI Job Search Agent. SERP + Reddit hiring threads + extract for the description, all in one agent loop.

An r/hiringcafe post launched an AI Job Search Agent matching power-user filters on a job board. This tutorial walks the data layer: SERP for ATS pages, Reddit for hiring threads, extract for the full job description.

Prerequisites

  • Python 3.10+
  • Scavio API key

Walkthrough

Step 1: Take user resume + preferences

Inputs: skills, location, salary range, remote preference.

Python
USER = {'skills': ['python', 'rust', 'mcp'], 'location': 'remote', 'min_salary': 150000}

Step 2: Generate ATS-targeted queries

site: queries find Greenhouse, Lever, Ashby pages.

Python
ATS_DOMAINS = ['greenhouse.io', 'lever.co', 'ashbyhq.com']

def queries(user):
    return [f'site:{d} {" ".join(user["skills"])} {user["location"]}' for d in ATS_DOMAINS]

Step 3: SERP across ATS domains

Scavio search per query.

Python
import requests, os
API_KEY = os.environ['SCAVIO_API_KEY']

def ats_jobs(q):
    r = requests.post('https://api.scavio.dev/api/v1/search',
        headers={'x-api-key': API_KEY}, json={'query': q}).json()
    return r.get('organic_results', [])[:20]

Step 4: Reddit hiring threads as a parallel surface

r/cscareerquestions, r/jobs, niche subs surface unannounced openings.

Python
def reddit_jobs(skills):
    return requests.post('https://api.scavio.dev/api/v1/reddit/search',
        headers={'x-api-key': API_KEY},
        json={'query': f'{" ".join(skills)} hiring 2026'}).json().get('posts', [])[:20]

Step 5: Extract full job description

ATS pages render as clean markdown.

Python
def description(url):
    r = requests.post('https://api.scavio.dev/api/v1/extract',
        headers={'x-api-key': API_KEY}, json={'url': url, 'format': 'markdown'}).json()
    return r.get('markdown', '')

Step 6: Score + rank with LLM

Match resume against full description.

Python
import anthropic
client = anthropic.Anthropic()

def score(resume, jd):
    msg = client.messages.create(model='claude-sonnet-4-6', max_tokens=200,
        messages=[{'role':'user','content':f'Score this resume vs job description 0-100 with 1-line reason. RESUME: {resume}. JD: {jd}'}])
    return msg.content[0].text

Python Example

Python
# Daily run: 3 ATS queries + 1 Reddit query + ~20 extracts = ~25 credits = $0.11.

JavaScript Example

JavaScript
// Same pattern in TS via the Anthropic SDK.

Expected Output

JSON
About 30-60 ranked jobs per day with full descriptions and 0-100 fit scores. Reddit thread surfacing catches unannounced roles 3-7 days earlier.

Related Tutorials

Frequently Asked Questions

Most developers complete this tutorial in 15 to 30 minutes. You will need a Scavio API key (free tier works) and a working Python or JavaScript environment.

Python 3.10+. Scavio API key. A Scavio API key gives you 500 free credits per month.

Yes. The free tier includes 500 credits per month, which is more than enough to complete this tutorial and prototype a working solution.

Scavio has a native LangChain package (langchain-scavio), an MCP server, and a plain REST API that works with any HTTP client. This tutorial uses the raw REST API, but you can adapt to your framework of choice.

Start Building

Pattern from r/hiringcafe's AI Job Search Agent. SERP + Reddit hiring threads + extract for the description, all in one agent loop.