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.py Last 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.py

This 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:

  1. Read the pre-written email out loud (if you wouldn’t reply to it, tweak it)
  2. Open Gmail, paste the email
  3. Adjust the personalized first line if you have extra context
  4. Send
  5. 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,EIN5

This 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.

DayActionNotes
1Initial emailFrom today’s brief
4Follow-up emailShorter, reference first email
8Phone callIf phone is available
12Final emailBrief, offer to close the loop
15LinkedIn requestIf 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:

  1. Google the foundation name
  2. Find their website → note it
  3. Check the contact page for email/phone
  4. Update the CSV or Baserow with discovered contacts
  5. 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,B scrapes 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 --status

How 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 --combine

Step 2: Regenerate daily briefs from expanded data

python generate_daily_outreach.py --status   # See new numbers
python generate_daily_outreach.py            # Generate tomorrow's brief
PriorityGroupStatesWhy
1Mountain WestUT, WY, NM, AZ, MT, ID, NVNeighbors, same time zone, “regional” angle
2PlainsNE, KS, ND, SD, IA, MNUnderserved, friendly, low consultant competition
3Mid-sizeOR, WA, TN, IN, WI, MO, OKEnough foundations, less saturated markets
4Large (later)TX, FL, PA, IL, OH, GA, NC, VA, MAHigh 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):

  1. Has email (can reach directly)
  2. Higher prospect score (better fit)
  3. Has phone (backup channel)

Domain Safety Recap

RuleWhy
Max 5-10 emails/day from solanasis.comProtect primary domain reputation
Plain text onlyHTML triggers spam filters
No attachments in first emailMention the one-pager; send on reply
Space sends 2+ hours apartLooks human, not automated
Foundation + MSP counts combinedTotal daily limit is 5-10, not each
Stop if any bounces/complaintsInvestigate before resuming

Tracking Without Overthinking

The outreach_tracker.json file handles state locally. Baserow is the CRM of record.

Weekly review (Friday, 5 min):

  1. python generate_daily_outreach.py --status to see totals
  2. Update Baserow for any replies, meetings, or status changes
  3. 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:

  1. Warm up solanashq.com for higher volume
  2. Consider GMass or Saleshandy for sequencing
  3. Expand to Tier 3/4 states
  4. Add the MSP pipeline in parallel

Until then: 5 emails, every morning, from the daily brief. That’s the whole system.