AI Policy & Safeguards

How DonorConnect uses AI responsibly to assist, not replace, nonprofit staff.

🤖 AI-Powered Feature: Donor Summaries

DonorConnect includes an AI-powered donor summary feature that helps nonprofit staff quickly understand donor relationships and personalize outreach. This feature is designed to augment human decision-making, not replace it.

How It Works:

  1. Staff clicks the "AI Summary" button on a donor's profile page
  2. Server validates the request and fetches donor data (organization-scoped)
  3. A minimal summary payload is sent to OpenAI (no raw PII)
  4. AI generates an 80-100 word actionable summary with risk assessment
  5. Summary is displayed to staff with suggested next actions

📡 AI Model & API Used

ModelOpenAI GPT-4o-mini
API EndpointPOST /api/ai/summarize-donor
ProviderOpenAI API (api.openai.com)
Max Tokens200 tokens
Temperature0.4 (low creativity, high consistency)

🛡️ How We Use AI Responsibly

✅ What We DO

  • Use AI for summaries and suggestions only
  • Keep API keys server-side only
  • Validate organization access before AI calls
  • Send minimal, aggregated data (not raw records)
  • Give users control via opt-in button
  • Return user-friendly error messages

❌ What We DON'T Do

  • Expose API keys to the client
  • Send full addresses, phone numbers, or SSNs
  • Allow AI to make decisions (only recommendations)
  • Train models on user data

📊 Data Sent to AI

We minimize data exposure by sending only aggregated metrics, never raw PII:

{
  "name": "John Doe",           // First + Last name only
  "status": "ACTIVE",           // Donor status enum
  "retentionRisk": "MEDIUM",    // Calculated risk level
  "totalAmount": 1250.00,       // Lifetime giving total
  "totalGifts": 5,              // Number of donations
  "lastGiftDate": "2025-12-15", // Most recent gift
  "notes": "Prefers email...",  // Staff notes for personalization
  "recentDonations": [          // Last 10 gifts only
    { "amount": 100, "date": "2025-12-15" }
  ]
}

NOT sent: Full address, phone number, email address, payment details, or raw donation records.

✍️ Prompt Engineering

We crafted prompts to generate concise, factual, and actionable summaries:

System Prompt:

"Be concise, factual, and actionable. Do not invent data."

User Prompt:

"You are a donor success assistant. Summarize this donor in 80-100 words max with risk assessment and suggested next action. Use any notes about the donor to personalize the recommendation."

Prompt Design Principles:

  • Length constraint (80-100 words) prevents verbose, unfocused output
  • "Do not invent data" instruction reduces hallucination risk
  • Actionability focus ensures output is useful for staff decisions
  • Low temperature (0.4) prioritizes consistency over creativity
  • Personalization via notes lets staff guide AI recommendations

🚀 How AI Improves DonorConnect

Without AI

  • Staff manually reviews donation history
  • Risk assessment is subjective and inconsistent
  • Personalized outreach takes significant time
  • New staff lack context on donor relationships

With AI

  • Instant donor summary with one click
  • Consistent risk assessment based on data
  • AI suggests specific next actions
  • New staff quickly understand donor context

Bottom line: AI helps small nonprofit teams act faster and more consistently, improving first-to-second gift conversion rates without requiring additional staff.

🔒 Security & Access Controls

  • Server-side only: All AI calls happen on the server. API keys are never sent to the browser.
  • Organization scoping: Donors are validated against the user's organization before any AI request. Users cannot summarize donors from other organizations.
  • Session authentication: All AI endpoints require valid session authentication via HTTP-only cookies.
  • Error handling: Failures return user-friendly messages; stack traces and API details are never exposed.
  • No data retention: OpenAI API requests are transient; we do not store or log AI conversations.

Questions about our AI usage? Review our source code on GitHub.