ResTail automatically scrapes job listings and tailors your resume to each job using AI. It runs entirely on your computer - nothing is sent to any server except the Anthropic API for AI processing.
- Scrapes LinkedIn, Indeed, Dice, Glassdoor, Interstride and Handshake for entry-level to senior-level jobs matching your titles.
- Filters by location priority, date (last 7 days).
- For each job: gathers company intelligence (domain, tech stack, culture signals, sponsorship verdict) then tailors your resume using 6 AI passes (tailor → grammar → verify → calibrate → validate → ATS audit).
- Produces a formatted
.docxresume for every passing job. - Lets you paste job URLs you found yourself to bypass scraping
- Lets you paste job description you found yourself to bypass scraping.
- Lets you run ATS scan.
- Automatically identifies H1B-friendly employers using USCIS records to filter or flag opportunities based on historical data.
- Detects visa sponsorship language in job descriptions and cross-references employers against USCIS H1B records, E-Verify participation data, and H1B Grader to flag or filter sponsorship-unlikely companies.
- Python 3.10 or higher
- Git
- An Anthropic API key (get one free at console.anthropic.com)
Windows: Download from git-scm.com and install with all defaults.
Mac: Open Terminal and run:
xcode-select --installLinux (Ubuntu/Debian):
sudo apt update && sudo apt install git -yVerify:
git --versionWindows: Download Python 3.11 from python.org/downloads. During install, tick "Add Python to PATH".
Mac:
brew install pythonIf you don't have Homebrew: brew.sh
Linux:
sudo apt install python3 python3-pip -yVerify:
python --version # Windows
python3 --version # Mac/Linuxgit clone https://github.com/Hamju1999/AIResumeTailor.git
cd AIResumeTailorWindows:
pip install -r requirements.txtMac/Linux:
pip3 install -r requirements.txtIf you see a permissions error on Mac/Linux:
pip3 install --user -r requirements.txt- Go to console.anthropic.com
- Sign up or log in
- Click API Keys in the left sidebar
- Click Create Key
- Copy the key (starts with
sk-ant-...) - you will only see it once, save it somewhere safe
The API key is charged per use. A typical run of 10 jobs costs approximately $0.30–$0.60.
Windows:
cd AIResumeTailor
python app.pyMac/Linux:
cd AIResumeTailor
python3 app.pyOpen your browser and go to: http://localhost:5000
On first run, the setup wizard opens automatically.
The wizard asks for:
| Field | What to enter |
|---|---|
| Full Name | Your full legal name as it should appear on the resume |
| City & State | e.g. Chicago, IL or London, UK |
| Phone | Your phone number |
| Your email address | |
| LinkedIn URL | Your full LinkedIn profile URL |
| GitHub URL | Your GitHub profile URL (or leave blank) |
| Portfolio URL | Your portfolio website (or leave blank) |
| Master Resume | Your complete professional record file (see below) |
| Format Template | The resume format description file (see below) |
| Locations | Cities to search, in priority order |
| Job Titles | Job titles to search for |
| API Key | Your Anthropic API key |
| Experience level | Entry level / Mid / Senior - controls which jobs are scraped and how the resume is framed |
| Visa sponsorship | Off / Flag / Filter - uses USCIS public H1B data to label or remove unlikely sponsors |
After saving, your config is stored in user_config.json locally. You never need to fill this in again unless you want to change something.
What it is: Your complete professional record - every job, every project, every skill, every certification you have ever had. The AI uses this as the only source of truth. Nothing is invented - everything in the output must trace back to this file.
Format: Plain text file (.txt) is recommended. PDF works only if it has a text layer (not a scanned image).
What to include:
PERSONAL INFORMATION
Full name, city, phone, email, LinkedIn, GitHub, Portfolio
EDUCATION
institution:
Institution name, city, country
Degree name - Graduation date
GPA (if above 3.5), honors, awards (Dean's List, Silver Medalist, etc.)
PROFESSIONAL EXPERIENCE
For each role:
Job title - Company name, City, State | Start date - End date
What you did:
- Describe every significant task, tool used, and outcome
- Include specific technologies, frameworks, libraries, APIs
- Include numbers where you have them (records processed, files handled, % improvement)
- Include the scope (team size, dataset size, time frame)
Write freely and in detail - the AI will select and condense.
More detail is better than less.
ACADEMIC PROJECTS
For each project:
Project name
What it was:
- What problem it solved
- What you personally built or contributed
- What technologies, tools, libraries you used
- What the outcome or result was
- Dataset sizes, record counts, performance metrics if applicable
TECHNICAL SKILLS
List every tool, language, framework, library, and method you have used.
Group them however you like - the AI will regroup them by relevance.
Be exhaustive - do not leave skills out.
CERTIFICATIONS
For each certification:
Certification name - Issuing organisation - Year completed
AWARDS AND RECOGNITION (if any)
Award name - Issuing body - Year
Important: Write naturally and in detail. The AI reads this file to understand what you have actually done. Vague entries like "used Python" produce vague resumes. Specific entries like "built a Python ETL pipeline to process 5.7 million CSV records across 12 monthly files" produce specific, credible resumes.
What it is: A description of the 1-page resume format you want. The AI follows this when structuring the output.
Format: Plain text file (.txt).
What to include:
RESUME FORMAT SPECIFICATION
Page: US Letter (8.5 x 11 inches), 1 page maximum
Margins: 0.55 inches all sides
Font: Calibri
SECTIONS AND ORDER:
1. Name - bold, 16pt, centered, ALL CAPS
2. Contact line - 10pt, centered (City | Phone | Email | LinkedIn | GitHub | Portfolio)
3. Summary - 2 sentences, first-person
4. Technical Skills - 3 lines grouped as you like:
Programming & Engineering: [tools]
Applied AI & NLP: [tools]
Analytics & Visualization: [tools]
5. Professional Experience - role header bold 12pt, then 4-5 bullet points
6. Academic Projects - project title bold 12pt with colon, then 3 bullet points each
7. Education - institution bold 12pt, degree 11pt
8. Certifications - bulleted list, top 3 most relevant only (if applicable)
BULLET FORMAT:
- Each bullet starts with an action verb
- No first-person "I"
- 15 words maximum per bullet
- One idea per bullet
TONE:
Clear, specific, and readable. Avoid buzzwords and abstraction.
Describe what was built and how it works.
You can customise this to match your preferred format. The AI will follow whatever structure you describe.
- Open http://localhost:5000
- Click Full scrape
- Set a limit (e.g. 3 for a test run, 0 for all jobs)
- Optional before clicking Start:
- Check Include certifications if the role values formal certifications
- Set Visa sponsorship targeting to Flag or Filter if you need sponsorship
- Click Start
- Watch the live log stream while it runs
- Download resumes from the Results panel when done
- Find a job on LinkedIn, Indeed, or any job board
- Copy the URL
- Go to the My job links tab
- Paste the URL and click Add
- Add more URLs if needed
- Optional before clicking Start:
- Check Include certifications if the role values formal certifications
- Set Visa sponsorship targeting to Flag or Filter if you need sponsorship
- Click Start
This skips scraping entirely and goes straight to AI tailoring. Useful for jobs posted hours ago.
- Go to the Job Description tab
- Enter the company name and job title
- Paste the full job description text
- Optional before clicking Start:
- Check Include certifications if the role values formal certifications
- Set Visa sponsorship targeting to Flag or Filter if you need sponsorship
- Click Start
The AI uses the pasted text directly. Useful for JavaScript-rendered pages (Ashby, Greenhouse) that the scraper cannot access.
Every run is saved. Click History to download resumes from previous runs.
To update your name, files, locations, job titles, or API key:
- Go to http://localhost:5000
- Visit http://localhost:5000/setup
- Edit whatever you want to change
- Click Save Configuration
Files you don't re-upload are kept as-is.
When the repo owner pushes updates:
cd AIResumeTailor
git pullThen restart:
python app.py # Windows
python3 app.py # Mac/LinuxYour user_config.json and uploaded files are preserved across updates.
"No module named X" error:
pip install -r requirements.txt # Windows
pip3 install -r requirements.txt # Mac/Linux"401 Invalid authentication credentials":
Your API key is wrong or missing. Go to /setup and re-enter it.
"All jobs failed": Open the manifest JSON in output/manifest_*.json and check the failures array for the specific reason. Common causes: JSON parse error (Claude output reasoning instead of JSON - rerun), rate limit timeout, or verification failure.
App won't start - port already in use:
Something else is running on port 5000. Either stop it, or change the port in app.py (last line: port=5000).
Jobs scrape but no resumes produced: Check the live log for "Verification FAILED" or "Validation FAILED" messages with the specific reason.
AIResumeTailor/
├── app.py ← Start here: python app.py
├── config.py ← Reads from user_config.json
├── pipeline.py ← Orchestrates all AI phases per job
├── scraper.py ← Scrapes 6 job boards
├── tailor.py ← Resume tailoring agent
├── verifier.py ← Factual accuracy checker
├── validator.py ← Format rules checker
├── calibrator.py ← Tone and credibility calibrator
├── grammar_fixer.py ← Grammar and punctuation pass
├── format_parser.py ← Reads format template dynamically
├── company_intel.py ← Gathers company context before tailoring
├── visa_sponsors.py ← H1B / STEM OPT / E-Verify checks
├── ats_scorer.py ← Dynamic ATS keyword scoring
├── resume_builder.py ← Renders .docx from tailored resume
├── llm_client.py ← Anthropic SDK wrapper with rate limiting
├── models.py ← Pydantic data models
├── prompts.py ← All LLM system prompts
├── pdf_reader.py ← Extracts text from PDF uploads
├── main.py ← CLI entry point
├── user_config.json ← Your personal settings (gitignored)
├── master_resume.txt ← Your resume source file (uploaded in setup)
├── format_template.txt ← Format spec (uploaded in setup)
├── output/
│ ├── resumes/<run_id>/ ← .docx files per run
│ ├── manifest_*.json ← Full run audit trail
│ └── job_links_*.csv ← Job links per run
├── templates/
│ ├── index.html ← Main UI
│ └── setup.html ← Setup wizard
└── requirements.txt ← Python dependencies
- Everything runs on your computer
- Your master resume never leaves your machine except in API calls to Anthropic
user_config.jsonis gitignored - it is never pushed to GitHub- The app is only accessible at
localhost:5000- not visible to anyone else on the internet
Use --limit 3 or the limit field in the UI to test before running large batches.
python app.py # start web UI
python main.py --dry-run # scrape only, no API cost
python main.py --limit 5 # test with 5 jobs
python main.py # full run without UIMIT © 2026 Mohammad Hamza Piracha
Mohammad Hamza Piracha | Data Scientist & Applied AI Engineer | LinkedIn | hamzapiracha@live.com