An intelligent automation tool that helps you apply to internships faster using AI and web automation.
- π€ Automated Form Filling: Intelligently detects and fills form fields
- π Resume Parsing: Extracts information from PDF and DOCX resumes
- π― Smart Field Detection: Recognizes common fields (name, email, education, etc.)
- π Application Tracking: Tracks all applications with pandas DataFrames
- πΌοΈ Screenshots: Captures screenshots at each step for review
- π Batch Processing: Apply to multiple jobs in sequence
- β‘ Fast & Reliable: Built with Playwright for modern web applications
ktphacks/
βββ src/
β βββ profile_manager.py # Manages user profile data
β βββ resume_parser.py # Parses resumes (PDF/DOCX)
β βββ browser_automation.py # Core Playwright automation
β βββ form_filler.py # Detects and fills forms
β βββ application_tracker.py # Tracks applications
β βββ application_bot.py # Main orchestrator
βββ data/
β βββ user_profile.json # Your profile data
β βββ applications.csv # Application history
β βββ screenshots/ # Screenshots from applications
βββ example_usage.py # Usage examples
βββ requirements.txt # Python dependencies
pip install -r requirements.txtplaywright install chromiumOption A: Interactive Setup (Recommended)
python setup_profile.pyOption B: Manual Setup
Edit example_usage.py to add your information:
from src.profile_manager import ProfileManager
profile = ProfileManager()
# Add your personal info
profile.update_personal_info(
first_name="Your Name",
last_name="Last Name",
email="your.email@university.edu",
phone="(555) 123-4567",
linkedin="https://linkedin.com/in/yourprofile",
github="https://github.com/yourusername"
)
# Add education
profile.add_education(
school="Your University",
degree="Bachelor of Science",
major="Computer Science",
gpa=3.8,
start_date="2022-09",
end_date="2026-05"
)
# Add experience, projects, skills, etc.
profile.save_profile()NEW: Simple CLI Interface
Just run:
python apply.pyThe bot will:
- Ask for the internship application URL
- Detect if account creation is needed
- Automatically create username/password
- Fill out the entire application form
- Take screenshots for your review
Advanced: Programmatic Usage
import asyncio
from src.profile_manager import ProfileManager
from src.application_bot import InternshipApplicationBot
async def main():
profile = ProfileManager()
bot = InternshipApplicationBot(profile, headless=False)
await bot.start()
result = await bot.apply_to_job(
company="Google",
position="Software Engineering Intern",
url="https://careers.google.com/jobs/...",
submit=False # Set True to actually submit
)
await bot.close()
asyncio.run(main())jobs = [
{
"company": "Google",
"position": "SWE Intern",
"url": "https://careers.google.com/..."
},
{
"company": "Meta",
"position": "Software Engineer Intern",
"url": "https://metacareers.com/..."
}
]
results = await bot.apply_to_multiple_jobs(
job_list=jobs,
submit=False,
delay=5000 # Wait 5s between applications
)- Profile Management: Stores your information in structured JSON format
- Navigation: Uses Playwright to navigate to application pages
- Account Detection: Automatically detects login/signup pages
- Account Creation: Generates secure username/password and creates accounts
- Credential Storage: Saves credentials securely in your profile for future use
- Form Detection: Scans the page for input fields, textareas, and selects
- Smart Matching: Matches form fields to your profile data using pattern recognition
- Auto-Fill: Fills detected fields with appropriate information
- Review: Takes screenshots for manual review
- Tracking: Logs all applications to CSV for tracking
The bot automatically:
- Detects if you need to create an account or login
- Generates secure username (based on your name + random suffix)
- Creates strong passwords (16 characters, meets all requirements)
- Stores credentials in your profile for future logins
- Reuses credentials when you apply to the same company again
The bot automatically detects and fills common fields:
- Account: Username, password, email verification
- Personal: First name, last name, email, phone, address
- Education: University, degree, major, GPA, graduation date
- Professional: LinkedIn, GitHub, portfolio
- Documents: Resume, cover letter, transcript uploads
- Experience: Work history, projects, skills
By default, the bot runs in preview mode (submit=False):
- Fills out forms
- Takes screenshots
- Does NOT click submit
- Allows you to review before actual submission
Set submit=True only when you're confident the bot is working correctly.
All applications are tracked in data/applications.csv:
# Get statistics
stats = bot.get_statistics()
print(f"Total: {stats['total_applications']}")
print(f"Success rate: {stats['success_rate']}%")
# Get recent applications
recent = bot.get_recent_applications(limit=10)
print(recent)Screenshots are automatically saved at:
data/screenshots/{application_id}_initial.png- Before fillingdata/screenshots/{application_id}_filled.png- After fillingdata/screenshots/{application_id}_error.png- If error occurs
- CAPTCHAs: Cannot handle CAPTCHAs (requires manual intervention)
- Custom Questions: Doesn't answer open-ended questions yet (needs AI integration)
- Complex Forms: May struggle with unusual form layouts
- Rate Limiting: Some sites may block rapid applications
- Always run in preview mode first
- Review screenshots before enabling submit
- Don't spam applications - space them out
- Customize responses for each company
- Check Terms of Service for automation policies
- Only use for legitimate applications
- Don't submit false information
- Respect site Terms of Service
- Some platforms explicitly prohibit automation
- AI integration for answering custom questions (Claude/GPT)
- CAPTCHA solving (manual intervention workflow)
- Multi-page application support
- Custom field mapping configuration
- Email confirmation tracking
- Browser session persistence
- Proxy support for rate limiting
Make sure to create the data/ and data/screenshots/ directories:
mkdir -p data/screenshotsInstall Playwright browsers:
playwright install chromiumCheck the screenshot to see what fields were detected. You may need to customize the field detection patterns in form_filler.py.
This is a hackathon project. Feel free to extend and customize for your needs!
MIT License - Use at your own risk. Always verify applications before submission.