Foundation Daily Outreach Ritual
Purpose: A 20-minute morning habit that turns your scored pipeline into real conversations. Companion scripts:
generate_daily_outreach.py,expand_states.pyLast updated: 2026-03-20
The Executive Coach Framing
You have a pipeline of 2,446+ scored foundation prospects (growing as you expand states). At 5 emails per day, that’s over a year of runway. The bottleneck is not leads; it’s the daily discipline of sending.
The math that matters:
- 5 emails/day x 5 days/week = 25/week
- Industry cold email reply rate for targeted B2B: 5-15%
- Expected: 1-4 replies per week, 1-2 meetings per month
- One foundation client at 7.5K pays for 6+ months of this effort
- Breakeven: 1 client from every ~500 sends (and you’ll do better than that)
The mindset: You are not “cold emailing.” You are a cybersecurity professional reaching out to organizations that handle sensitive data with inadequate protection. Every foundation in your pipeline manages donor PII, trust documents, and financial records. Most have never had an independent technology review. You are offering to help before something goes wrong. That reframe matters because it changes your energy when you sit down to write.
The Morning Ritual (20 minutes)
Before Your First Meeting, Every Weekday
Step 1: Open today’s brief (2 min)
cd solanasis-scripts/foundation-pipeline
python generate_daily_outreach.pyThis creates solanasis-docs/daily-outreach/YYYY-MM-DD.md with:
- 5 pre-written emails (personalized, template-assigned)
- Follow-up reminders for past sends
- Pipeline stats
Open the file. Scan the prospects.
Step 2: Send the emails (10-12 min)
For each prospect in today’s brief:
- Read the pre-written email out loud (if you wouldn’t reply to it, tweak it)
- Open Gmail, paste the email
- Adjust the personalized first line if you have extra context
- Send
- Wait 2+ hours before the next one (stagger across the morning)
Pro tip: Send the first one immediately. Schedule the rest via Gmail’s “Schedule Send” for later in the day (10am, 12pm, 2pm, 4pm). This spaces them out automatically and you only need one sitting.
Step 3: Check for replies (3-5 min)
- Check inbox for responses to previous sends
- Positive reply: respond personally within 2 hours, update tracker
- “Not interested”: note it, move on (this is normal)
- Bounce: note it, remove that email from future sends
Step 4: Mark as sent (1 min)
python generate_daily_outreach.py --mark-sent EIN1,EIN2,EIN3,EIN4,EIN5This updates the tracker and schedules follow-ups automatically.
Follow-Up Cadence (Built Into Daily Briefs)
The daily brief automatically surfaces follow-ups when they’re due.
| Day | Action | Notes |
|---|---|---|
| 1 | Initial email | From today’s brief |
| 4 | Follow-up email | Shorter, reference first email |
| 8 | Phone call | If phone is available |
| 12 | Final email | Brief, offer to close the loop |
| 15 | LinkedIn request | If profile exists |
The follow-up is more important than the initial send. Most replies come on touch 2 or 3. Do not skip follow-ups.
The Contact Discovery Bottleneck
Your pipeline has 570 A/B-tier prospects across 14 states. But only 6 currently have email or phone on file. IRS data tells us WHO to contact; it doesn’t tell us HOW.
The daily brief includes a Research Queue that gives you 5 prospects to Google each day. This takes 5-10 minutes:
- Google the foundation name
- Find their website → note it
- Check the contact page for email/phone
- Update the CSV or Baserow with discovered contacts
- Tomorrow, those prospects show up as sendable
At 5 researched/day, you unlock ~25 new sendable prospects per week. After 2 weeks, you’ll have a self-sustaining pipeline: research feeds sends, sends feed follow-ups.
Accelerating contact discovery:
python enrich_emails.py --run --tier A,Bscrapes websites via Jina Reader (free, 20 requests/min)- Ask Claude to do Exa MCP research on your top 50 prospects (semi-automated)
- ProPublica 990 data sometimes includes phone numbers
Expanding the Pipeline
When to Expand
Expand when your remaining A/B prospects with email drop below 50 (roughly 2 weeks of runway). Check with:
python generate_daily_outreach.py --statusHow to Expand
Step 1: Add neighboring states (5-10 min per state)
# See what's available
python expand_states.py --plan
# Start with Mountain West (UT, WY, NM, AZ, MT, ID, NV)
python expand_states.py --group mountain-west
# Or pick specific states
python expand_states.py --states ut,wy,nm
# After adding, combine everything
python expand_states.py --combineStep 2: Regenerate daily briefs from expanded data
python generate_daily_outreach.py --status # See new numbers
python generate_daily_outreach.py # Generate tomorrow's briefRecommended Expansion Order
| Priority | Group | States | Why |
|---|---|---|---|
| 1 | Mountain West | UT, WY, NM, AZ, MT, ID, NV | Neighbors, same time zone, “regional” angle |
| 2 | Plains | NE, KS, ND, SD, IA, MN | Underserved, friendly, low consultant competition |
| 3 | Mid-size | OR, WA, TN, IN, WI, MO, OK | Enough foundations, less saturated markets |
| 4 | Large (later) | TX, FL, PA, IL, OH, GA, NC, VA, MA | High volume but more competition |
Expected yields per expansion group:
- Mountain West: ~1,500-3,000 foundations, ~100-300 in 50M sweet spot
- Plains: ~1,000-2,000 foundations, ~80-200 sweet spot
- Mid-size: ~3,000-6,000 foundations, ~300-600 sweet spot
- Each group adds roughly 2-4 months of daily outreach runway
Scoring: Who Gets Contacted First
The pipeline scores prospects on signals that predict both fit and reachability:
What makes someone rise to the top:
- In the 50M sweet spot (+10 pts)
- Has a named officer we can address (+2 pts)
- Active operations with income (+2 pts)
- Website discovered (+5 pts, from enrichment)
- Phone discovered (+2 pts, from enrichment)
What drops someone down:
- No staff + small assets (-10 pts)
- Family name in foundation name (-3 pts, likely family-run)
- Declining assets (-5 pts)
Outreach readiness (the daily generator sorts by this):
- Has email (can reach directly)
- Higher prospect score (better fit)
- Has phone (backup channel)
Domain Safety Recap
| Rule | Why |
|---|---|
| Max 5-10 emails/day from solanasis.com | Protect primary domain reputation |
| Plain text only | HTML triggers spam filters |
| No attachments in first email | Mention the one-pager; send on reply |
| Space sends 2+ hours apart | Looks human, not automated |
| Foundation + MSP counts combined | Total daily limit is 5-10, not each |
| Stop if any bounces/complaints | Investigate before resuming |
Tracking Without Overthinking
The outreach_tracker.json file handles state locally. Baserow is the CRM of record.
Weekly review (Friday, 5 min):
python generate_daily_outreach.py --statusto see totals- Update Baserow for any replies, meetings, or status changes
- Note any patterns (which templates get replies, which states respond)
Monthly review (first Monday, 15 min):
- Total sends, reply rate, meetings booked
- Which template variants perform best
- Whether to adjust targeting (different tiers, different states)
- Whether to start warming solanashq.com for higher volume
When It’s Working
You’ll know the system is working when:
- You’re sending 5 emails every weekday without thinking about it
- Follow-ups go out on schedule (the brief reminds you)
- You get 1-2 replies per week (even “not interested” means your emails land)
- You book 1-2 discovery calls per month
One foundation client at 7.5K justifies the entire pipeline.
When you consistently book 2+ calls/month, that’s when to:
- Warm up solanashq.com for higher volume
- Consider GMass or Saleshandy for sequencing
- Expand to Tier 3/4 states
- Add the MSP pipeline in parallel
Until then: 5 emails, every morning, from the daily brief. That’s the whole system.