Skip to content

Givebutter Overview

What is the Givebutter integration? ​

The Givebutter integration is the primary integration for NOMA's donor management. It handles:

  • Event registration & tickets (e.g., "Not One More Rally")
  • Peer-to-peer fundraising (fundraiser pages)
  • General donations (one-time and recurring)
  • Campaign-to-fund mapping (Givebutter campaigns → LGL funds)

What Gets Synced ​

Givebutter DataLGL FieldNotes
Transaction (donation/ticket)GiftAmount, date, payment method
Supporter (donor/registrant)ConstituentName, email, phone, address
Campaign (event/fundraiser)Fund/CampaignMapped via dashboard Mappings page
Custom Fields (shirt size, etc.)LGL Custom FieldsConfigured per campaign
Payment MethodGift TypeAuto-detected (credit card, cash, check)

How It Works ​

Real-Time Webhook Flow ​

Backup Polling (Safety Net) ​

Every 15 minutes, NOMA Sync polls Givebutter API for transactions from the last 24 hours. If webhook was missed, polling catches it and syncs.

Campaign Mapping ​

Problem: Givebutter uses "campaigns" (events, fundraisers), LGL uses "funds" (restricted, unrestricted). They don't auto-match.

Solution: Map Givebutter campaigns to LGL funds in the Mappings page.

Mapping Rules ​

  1. Type Default - All donations of a specific type go to a default fund

    • Example: "General Donation" → "Unrestricted Fund"
  2. Campaign Override - Specific Givebutter campaign overrides the default

    • Example: "Not One More Rally 2026" → "Event Fund"
  3. Fallback - If no mapping exists, uses LGL default fund

Example Mappings ​

Givebutter Transaction TypeDefault LGL FundCampaign Overrides
donationUnrestricted Fund"End of Year Campaign" → Restricted Fund
ticketEvent Fund"Rally 2026" → Rally Fund
peer_to_peerGeneral Fund—

Custom Fields ​

Givebutter collects custom form fields (shirt size, dietary restrictions, etc.). NOMA Sync maps these to LGL custom fields. Mapping is configured in campaign overrides or in code (apps/worker/src/lib/campaign-mapping.ts and LGL adapter).

Payment Method Detection ​

NOMA Sync auto-detects payment method from the transaction payload and maps to LGL "Gift Type" (e.g. credit card, cash, check). See lib/payment-type-auto-detect.ts.

Supported Events ​

The Givebutter integration listens for:

  • transaction.succeeded - New donation/ticket
  • ticket.created - Event ticket purchase
  • Polling backs up any missed webhooks

Error Handling ​

Common errors:

  • LGL constituent duplicate - Uses existing, logs warning
  • Invalid campaign mapping - Uses fallback fund, logs error
  • LGL API timeout - Retries 3x, then logs error for manual resync

All errors appear in Syncs page with full details.

Dashboard Features ​

Syncs Page ​

  • Filter by "Givebutter" source
  • View full transaction details
  • Resync failed transactions
  • Resolve errors

Mappings Page ​

  • Configure type defaults (donation → fund)
  • Add campaign overrides (specific Givebutter campaign → fund)
  • Refresh Givebutter campaign cache

Performance ​

  • Average sync time: 300-500ms
  • Webhook → LGL delay: 5-10 seconds
  • Polling frequency: Every 15 minutes
  • Reliability: 99.9% (webhooks + polling)

Next Steps ​