AI-POWERED OUTREACH ENGINE · 2026

Internship outreach,
end to end.

InternGuide transforms structured company data into a complete internship outreach pipeline — discovering relevant contact channels, generating context-aware AI drafts, and routing every message through human approval before delivery.

REACT + EXPRESS WEB SCRAPING OPENAI API GMAIL OAUTH SMTP
internguide / live-pipeline PRIVATE BUILD
SYSTEM ONLINE
HUMAN-IN-THE-LOOP
INPUT 48 COMPANIES STRUCTURED COMPANY DATA
01
DISCOVER Public contact channels
0PAGES SCANNED
02
PROCESS Filter + deduplicate
TRACEABLESOURCE EVIDENCE
03
GENERATE Context-aware AI drafts
0DRAFTS QUEUED
CONTROL WAITING APPROVAL Explicit human decision required before delivery

THE PROBLEM

Internship outreach is usually a chain of repetitive manual tasks.

Students repeatedly collect company lists, search contact and career pages, remove irrelevant addresses, research each company, write similar emails, and track what was sent. InternGuide turns that fragmented process into one observable workflow while keeping the final decision with the applicant.

01 — THE COMPLETE WORKFLOW

One pipeline. Two tools. One controlled outcome.

The scraper and outreach modules operate as connected stages. Structured company metadata stays attached to each recipient from import through generation and delivery.

01INPUT

Company CSV

Name, website, and company category.

02DISCOVER

Public Contacts

Career and contact paths are scanned.

03PROCESS

Filter + Dedup

Useful addresses remain with evidence.

04GENERATE

AI Draft Queue

Context-aware subject and body.

05CONTROL

Human Approval

Approve and send, or reject.

02 — DISCOVERY ENGINE

Structured company data enters. Traceable contacts come out.

dataset / validated48 DOMAINS
Validated company CSV ready for scraping
01

Validate the company dataset

The scraper accepts a CSV containing company name, website, and business category. Rows are normalized, duplicate domains are removed, and invalid entries are isolated before any network work begins.

  • CSV schema validation
  • Domain normalization
  • Metadata preservation
  • Duplicate removal
02

Scan public pages concurrently

Each domain is processed through prioritized career, application, job, internship, and contact paths. Live polling exposes the current domain, page, progress, and latest logs while independent failures cannot stop the run.

  • Concurrency-limited processing
  • Timeout and reset handling
  • Domain-level failure cutoff
  • Background run execution
scraper / active-runLIVE
Live scraping progress and logs
Scraper run metrics including domains scanned, pages checked, emails found, and failed domains
03

Filter, deduplicate, and preserve evidence

The same normalized address is kept once per company while every discovery source is merged. Technical, privacy, billing, support, placeholder, and asset-like addresses are filtered conservatively.

3raw discoveries
1normalized email
3sources retained
results / searchable-tableSOURCE EVIDENCE
Searchable scraper result table with source evidence
SCRAPER OUTPUTcompany + context + recipient
OUTREACH INPUTgeneration-ready queue

03 — OUTREACH PIPELINE

Applicant context becomes company-specific internship drafts.

04

Configure the applicant and delivery channel

The applicant supplies a name, a concise background summary, and the target language. A connected Gmail OAuth account or verified SMTP provider becomes the controlled delivery channel.

  • Applicant name + 150-character context
  • Turkish, English, or German
  • Gmail OAuth 2.0
  • Custom SMTP verification
outreach / applicant-contextCONFIGURED
Applicant name, applicant information, mail language, and email account setup
provider / smtpVERIFIED
Custom SMTP configuration interface
openai / draft-runRUNNING
OpenAI draft generation queue with live progress
05

Generate drafts through a backend queue

Every recipient is processed independently. Company metadata, recipient type, applicant information, selected language, and a strict static rubric are sent through the backend to produce structured subject and body fields.

  • OpenAI Responses API
  • Structured JSON output
  • Backend-only rubric and API key
  • Failure-isolated generation queue
06

Require explicit approval before delivery

No generated email is sent automatically. Each message enters WAITING_APPROVAL. The applicant can approve and send it through the active provider or reject it permanently. There is no silent bulk-send path.

WAITING_APPROVALAPPROVE & SENDorREJECT
draft / human-reviewCONTROLLED
Generated email waiting for explicit approval or rejection

04 — ENGINEERING DECISIONS

More than a scraper and a prompt.

01

Background Runs

Long-running scraping and AI work returns immediately and reports progress through polling endpoints.

02

Atomic Persistence

Active state lives in memory. Debounced cloned snapshots are fsynced to unique temp files and atomically renamed.

03

Grounded Generation

A strict backend rubric limits drafts to supplied company context and applicant information, reducing unsupported claims.

04

Provider Abstraction

Delivery supports both Google OAuth architecture and verified custom SMTP without exposing secrets to the frontend.

$ internguide --architectureLOCAL-FIRST
FRONTENDReact / Vite
BACKENDNode.js / Express
SCRAPINGAxios / Cheerio
AIOpenAI API
EMAILGmail OAuth / SMTP
STATEMemory + Atomic JSON

PROJECT SCOPE

Built privately. Documented publicly.

InternGuide is a private, local-first engineering project developed for personal internship outreach workflows and limited use by a small number of friends. The system processes publicly accessible company pages and is not designed to bypass authentication, CAPTCHAs, access controls, or restricted resources.

PRIVATE REPOSITORYLOCAL RUNTIMENON-COMMERCIAL

05 — CONTACT

Questions about the architecture or workflow?

InternGuide is not publicly distributed, but technical questions about the system are welcome.

egeaksoy@ug.bilkent.edu.tr ↗