Your personal internship feed — delivered straight to your Discord DMs.
PerTern scrapes 570+ company career pages every 30 minutes, filters for internships that match your background, and sends each new match directly to you via Discord DM. No server. No channels. Just you.
- 570+ companies scraped every 30 minutes across Greenhouse, Lever, Ashby, SmartRecruiters, Workday, Oracle, ADP, custom career pages, SimplifyJobs, and InternatLas
- Personalized matching — filters for roles aligned to your skills: Cybersecurity, Cloud/GCP, Data Analytics, Python, SQL, Linux, Network Security, IT Support, AI/ML
- Discord DMs only — no server required, matches land directly in your inbox
- Deduplication — never sends the same listing twice, checked by job ID, apply URL, and normalized role title; skipped jobs never resurface even if the title changes slightly (e.g. "SWE Intern Summer 2027" = "Software Engineering Internship")
- Skip memory — jobs you skip are permanently filtered from future scans across all three dedup dimensions
- 2027 filter — only surfaces Spring, Summer, and Fall 2027 internships; drops 2026 and undated listings
- Rolling deadline — when no deadline is set but the description says "rolling" or "open until filled", the embed shows ⏰ Rolling so you know to apply early
- Auto-deadline detection — scans job descriptions for deadline phrases and flags them with ⏰; embed turns orange (
⚠️ ) if ≤7 days away, red (🚨) if ≤3 days - Smart location — if the scraper returns a generic location, the title is parsed to extract the real city/state or Remote/Hybrid status
- Rotating bot status — cycling presence messages including live Raspberry Pi temperature and CPU usage
- Startup confirmation — DMs you when the bot comes online
When a match arrives you get a job embed with a compact action bar:
◀ Prev | ✅ Applied | ⏭️ Skip | ▶ Next | ••• More
Tap ••• More to expand:
🗣️ Interview | 🎉 Offer | ❌ Rejected | 💤 Snooze | ← Back
🔗 Copy Link | ⭐ Priority | 📄 Details | 🤖 Match | ⏰ Remind
🤖 Match runs the job description against your resume.txt using a local Ollama model and returns a private match score, reasons it fits, and a one-line recommendation — all ephemeral.
⏰ Remind sets a custom reminder N days out — the bot DMs you when it fires.
The browse session auto-deletes after 3 minutes of inactivity to keep your DMs clean. The summary embed updates automatically after every job you review so your counts stay current.
| Command | What it does |
|---|---|
/summary |
Summary of all unreviewed internships by category with a browse dropdown |
/find <query> |
Search indexed jobs by keyword — opens browse card navigation |
/pipeline |
Full application funnel with company names — applied, interviews, offers |
/stats |
Application pipeline stats — counts by status and response rate |
/export |
DM a CSV of all applied, interview, and offer jobs |
/setgoal <n> |
Set a weekly application target shown as a progress bar in the summary |
/check [company] |
Trigger a manual scan immediately (all companies or one by name) |
/blacklist <company> |
Permanently hide a company from your feed |
/unblacklist <company> |
Remove a company from your blacklist |
/blacklist-show |
See your full blacklist |
/setlocation <cities> |
Only receive jobs matching specific cities (comma-separated) |
/status |
Bot health — scan stats, job counts, company error report, and live Pi hardware stats |
/companies [filter] [search] |
List tracked companies filtered by active / deactivated / erroring |
/errors |
Last 15 scrape errors with timestamps |
/reactivate [company] [all] |
Reactivate deactivated companies from Discord |
/help |
Full slash command reference organized by section |
/version |
Current version, last scan time, new jobs found, and bot uptime |
/live-pi |
Live Raspberry Pi hardware monitor — CPU temp, GPU temp, RAM, disk, uptime |
/log |
Downloads a combined report — last 50 log lines and full company health table |
/clear-dm |
Delete all bot messages from your DMs for a clean slate |
PerTern filters across these categories by default. Edit MY_CATEGORIES and MY_KEYWORDS in bot.py to match your own background.
| Category | Subcategories |
|---|---|
| 🔒 Cybersecurity | Security Engineering, Network Security, Cloud Security, Pen Testing, SOC & Threat Intel, Incident Response, GRC, Cryptography |
| ☁️ DevOps & Cloud | DevOps & CI/CD, Cloud Engineering, Site Reliability, IT & Sysadmin, Automation & Scripting |
| 💻 Software Engineering | General, Frontend, Backend, Mobile, Game Dev, QA & Test Engineering |
| 📈 Data Analytics | Data Analyst, BI, Tableau, Power BI, Reporting |
| 📊 Data Science | Data Scientist, Research Analyst, Applied Scientist |
| 🔩 Data Engineering | Data Pipeline, ETL, Spark, Airflow, Database Administration |
| 🤖 AI & Machine Learning | ML Engineering, Computer Vision, NLP & Language AI |
| 💼 Business & Finance | Investment Banking, Consulting, Product Management, Finance, Sales |
| 🎨 Creative & Design | UI/UX, Graphic Design, Video & Animation, Content |
| 🔬 Science & Research | Biology, Chemistry, Physics, Aerospace, Climate |
| 🏥 Healthcare & Medicine | Clinical Research, Biotech, Public Health, Healthcare IT |
| ⚖️ Law & Policy | Legal, Public Policy, Compliance, IP Law |
| 📰 Media & Communications | Journalism, PR, Marketing, Social Media |
| 🏛️ Government & Defense | Intelligence, Defense Tech, Civil Service |
| 🎓 Education & Non-profit | Teaching, EdTech, Social Work, Non-profit |
| ⚙️ Operations & HR | Supply Chain, Project Management, HR, Customer Success |
| 🔧 Hardware & Embedded | Embedded Systems, Hardware Engineering, Robotics |
| ⛓️ Blockchain & Web3 | Smart Contracts, DeFi, Web3 Engineering |
Keyword matching includes: cybersecurity, network security, cloud security, cloud, python, sql, linux, data analyst, power bi, it support, incident response, vulnerability, siem, zero trust, and more.
git clone https://github.com/EA-1-AU/PerTern-2027-Tech-Internship-Discord-Bot.git
cd PerTern-2027-Tech-Internship-Discord-Bot
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txtcp .env.example .env
nano .envDISCORD_TOKEN=your-bot-token-here
MY_DISCORD_USER_ID=your-discord-user-id-hereGet your user ID: Discord → Settings → Advanced → enable Developer Mode → right-click your name → Copy User ID.
Bot token: discord.com/developers → your app → Bot → Reset Token. Enable Message Content Intent.
python seed_companies.py # load all 570+ companies into the database
python bot.py # start the botYou'll receive a DM confirmation when the bot is online.
sed -i 's/YOUR_USERNAME/your-actual-username/g' pertern.service
sudo cp pertern.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable pertern
sudo systemctl start pertern
# Check status / live logs
sudo systemctl status pertern
journalctl -u pertern -fgit pull
pip install -r requirements.txt
python seed_companies.py --reset-all --prune # reactivate fixed companies, remove deleted ones
sudo systemctl restart perternOpen bot.py and edit the MY_CATEGORIES and MY_KEYWORDS sets near the top to adjust what roles get sent to you.
PerTern/
├── bot.py # Main bot — scraper loop, DM delivery, slash commands
├── db.py # SQLite database layer
├── filters.py # Preference matching helpers
├── tagging.py # Auto-tags jobs: category, term, salary, deadline, location
├── scraper/
│ ├── __init__.py # run_all_scrapers() entry point with per-source rate limiting
│ └── ats.py # Fetchers: Greenhouse, Lever, Ashby, Workday, iCIMS, etc.
├── seed_companies.py # Upserts companies.csv → DB (--reset-all, --prune flags)
├── companies.csv # 570+ companies to track
├── pertern.service # systemd service file for Raspberry Pi
├── requirements.txt
└── .env.example
| Layer | Tech |
|---|---|
| Bot framework | discord.py 2.x |
| Language | Python 3.11+ |
| Database | SQLite |
| HTTP scraping | requests + BeautifulSoup |
| Concurrency | asyncio + ThreadPoolExecutor |
| Deployment | systemd on Raspberry Pi |
2027 internships · summer 2027 internships · fall 2027 internships · spring 2027 internships · tech internships 2027 · software engineering internship 2027 · cybersecurity internship 2027 · data science internship 2027 · cloud engineering internship 2027 · AI internship 2027 · Discord internship bot · internship tracker Discord · automated internship finder · Greenhouse scraper · Workday internship scraper · Lever internship · Ashby jobs · SimplifyJobs · internship alert bot · Discord DM bot · Raspberry Pi Discord bot · Python Discord bot · internship aggregator · job board scraper · 2027 SWE intern · 2027 tech recruit
Made with ☕ · Report an issue
