A Mac app that sources leads, researches them with AI, and writes personalized cold emails.
I built the first version of this during my freshman fall semester. I was cold emailing finance firms for internships and the bottleneck was research. Finding the right person, reading their site, digging for a real deal to mention, then writing something that did not sound like a template. Doing that by hand for one firm took half an hour, and I needed to reach a lot of firms.
So I wrote a tool to do the boring parts. It pulled the contacts, scraped the research, and drafted the email with an actual hook in it. I ran my own outreach through it that semester and it landed interviews and coffee chats I would not have gotten otherwise.
The original was hardcoded to me, my school, my resume, the whole thing. Dossier is that tool cleaned up and made general, so anyone recruiting can point it at their own targets and send in their own voice.
Point Dossier at the kind of firms you want (private equity, venture capital, investment banking, M&A advisory, growth equity, private credit) and it runs the outreach pipeline for you:
- Source decision-makers from Apollo with filters for titles, seniority, industry, headcount, revenue, and email-verification status.
- Research each company and person from their website, LinkedIn, and Google (via Serper) to find named deals, funds, portfolio companies, and career moves.
- Qualify every lead with an LLM that flags firms doing real deals and skips platforms, media, and
$0 AUMshops. - Write a personalized cold email for each lead using the best research hook available, in your voice.
- Track everything in an Excel workbook and send through your own Gmail.
The default config targets finance recruiting, but the firm filters, qualification rules, and email prompt are all editable for any B2B outreach.
- Tiered hook system. Person-specific hooks rank above company hooks, which rank above generic descriptions, so every email leads with the most specific thing you know.
- Deal-execution filter. An LLM qualifier that separates firms doing deals from firms only writing about them.
- Bring your own keys. API keys go in the macOS Keychain. They never touch the repo or sit on disk as plaintext.
- Your profile, your voice. Name, descriptor, credentials, and signature are set in the app and pulled into every email. None of it is hardcoded.
- Excel-native. Writes leads to a spreadsheet and leaves your existing formula columns alone.
- Gmail OAuth send. Sends from your account with your resume attached and a greyed signature like Gmail's.
You need Python 3.10+ (python3 --version). If you don't have it: brew install python or grab it from python.org.
git clone https://github.com/ManiForoughi2/Dossier.git
cd Dossier
./run.shOn first launch run.sh creates a local virtual environment, installs dependencies, and opens the app. After that it just launches.
Prefer to do it by hand?
python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt python main.py
The onboarding wizard walks you through it, or open Settings any time:
| You'll need | Where to get it | Required? |
|---|---|---|
| Apollo API key | apollo.io → Settings → Integrations → API | Yes |
| OpenAI or Anthropic key | platform.openai.com / console.anthropic.com | Yes (one of) |
| Serper key | serper.dev (free tier) | Optional, improves research |
| Gmail OAuth | A gmail_credentials.json from a Google Cloud OAuth client |
Optional, only for sending |
Fill in Your Profile in Settings (name, how you describe yourself, credentials, signature, resume path) so generated emails sound like you.
To package a double-clickable macOS app bundle:
pip install -r requirements-build.txt
./build.shThe signed .app lands in dist/Dossier.app.
| Dashboard | Leads | Email Generator |
|---|---|---|
![]() |
![]() |
![]() |
Apollo search ─▶ web research ─▶ LLM qualify ─▶ email generation ─▶ Excel + Gmail
(site/LinkedIn/Serper) (per-lead hooks)
app.py Main window, sidebar nav, shared AppState
config.py Constants, paths, prompt templates
core/
apollo_client.py Apollo people/org search + enrichment
web_researcher.py Site + LinkedIn scraping, Serper fallback
qualifier.py LLM deal-execution classifier
llm_client.py OpenAI / Anthropic wrapper
email_generator.py Hook-tiered cold email writer
excel_manager.py Reads/writes the leads workbook
gmail_sender.py Gmail API OAuth send
keychain.py macOS Keychain for API keys
ui/ customtkinter frames and components
- API keys are stored in the macOS Keychain, not in files.
- Preferences and the leads cache live in
~/Library/Application Support/Dossier/. - Nothing is sent anywhere except the APIs you configure (Apollo, your LLM provider, Serper, Gmail).
Issues and pull requests welcome. The codebase is plain Python and customtkinter with no build step for development. Clone, run ./run.sh, and edit.
MIT. Do what you want, no warranty.
Dossier is an independent project and is not affiliated with Apollo, OpenAI, Anthropic, Google, or Serper.



