Appearance
The Three Integrations
NOMA Sync Engine connects three external platforms to Little Green Light. Each connects a platform to LGL via a dedicated webhook endpoint.
Givebutter (Primary Donor Source)
| Aspect | Details |
|---|---|
| Source | Givebutter |
| Purpose | Donations, event registration, peer-to-peer fundraising |
| Webhook | POST /webhooks/givebutter |
| Key events | transaction.succeeded, ticket.created, campaign.created |
| Syncs to LGL | Constituents, gifts, campaign/fund mapping, custom fields |
| Backup | Polling every 15 minutes for missed transactions |
| Dashboard | Syncs (filter by Givebutter), Mappings (campaign overrides) |
Givebutter is NOMA's primary donor and event platform. All donation and ticket data flows through the Givebutter integration into LGL. Campaign mapping (Givebutter campaign → LGL fund) is configured in the Mappings page.
Square (E-Commerce)
| Aspect | Details |
|---|---|
| Source | Square |
| Purpose | Online store orders (merchandise, products) |
| Webhook | POST /webhooks/square |
| Key events | order.created, order.updated |
| Syncs to LGL | Constituents (or default constituent), gifts, campaign by location |
| Backup | Same 15-minute polling when Square token is set |
| Dashboard | Syncs, Mappings (Square type default), Square Orders (list, resync), Settings (default constituent) |
Square orders are synced when state is COMPLETED or OPEN with payment. Per-location campaign overrides map Square locations to LGL funds. Orders with no customer use the default constituent (configured in Settings).
Mailchimp (Newsletter)
| Aspect | Details |
|---|---|
| Source | Mailchimp |
| Purpose | Newsletter signups, unsubscribes, list/tag management |
| Webhook | POST /webhooks/mailchimp |
| Key events | Unsubscribe, cleaned |
| Syncs to LGL | Constituent updates (unsubscribe → remove tag), list/tag rules |
| Dashboard | Mailchimp Settings (list mapping, tag rules), Syncs |
Mailchimp webhook notifies NOMA Sync when someone unsubscribes or is cleaned. The Worker finds the constituent in LGL and updates tags (e.g. remove "Newsletter" tag). List and tag rules are configured in Mailchimp Settings.
Comparison at a Glance
| Integration | Primary data | Idempotency key | Config location |
|---|---|---|---|
| Givebutter | Donations, tickets | givebutter_{transaction_id} | Mappings (campaign overrides) |
| Square | Orders | square_order_{order_id} | Mappings (type + location), Settings (default constituent) |
| Mailchimp | Unsubscribes, list events | Event-based | Mailchimp Settings (lists, tag rules) |
Codebase Reference
- Givebutter:
apps/worker/src/handlers/givebutter-webhook.ts,adapters/givebutter-client.ts,lib/campaign-mapping.ts - Square:
apps/worker/src/handlers/square-webhook.ts,lib/square-to-lgl.ts,adapters/square-client.ts - Mailchimp:
apps/worker/src/handlers/mailchimp-webhook.ts,lib/contact-sync.ts,lib/mailchimp-list-mapper.ts,lib/mailchimp-tag-rules.ts
All sync events are logged to the sync_log table and visible in the dashboard Syncs page.

