Constituent Data Mapping
This page details the field-level mapping between WeGive donor/company records and Blackbaud Raiser’s Edge NXT constituent records.Object Overview
WeGive Donor Object
- Purpose: Represents individual donors and organizations in the WeGive platform
- Types:
individualandcompany - Unique Identifier: WeGive donor ID, correlated to Blackbaud via the
raisers_edge_idcolumn
Blackbaud Constituent Object
- Purpose: Represents individuals and organizations in Raiser’s Edge NXT
- API Endpoint:
constituent/v1/constituents - Unique Identifier: Blackbaud constituent ID
Household constituents aren’t part of this integration — see Configuration Options.
Individual Constituent Mapping
email_1, email_2, email_3) and a preferred_email selector (personal/work/alternate). On push, exactly one email is sent — the one matching preferred_email (defaulting to email_1/“Email Primary” if unset). On pull, only one email comes back from Blackbaud and is written to email_1, with preferred_email set based on the returned email’s type (work if the type contains “Business”, otherwise personal).
Phone
Similarly, WeGive hasmobile_phone, home_phone, and office_phone. On push, one phone is sent, prioritized mobile → home → office. On pull, one phone comes back and is routed to the matching field based on its Blackbaud type (Cell/Mobile → mobile_phone, Business/Work → office_phone, otherwise → home_phone).
Address
WeGive’s mailing address is pushed as a single Blackbaud address object (typeHome for individuals, Business for companies). State values in the form "SK - Saskatchewan" are parsed down to just the code (SK) before sending.
Organization (Company) Constituent Mapping
Companies use the same single email/phone/address handling described above, with company-specific defaults (
office_phone → “Phone Business”, address type Business).
Fields like organization type, tax ID, website, industry, and SIC/NAICS codes aren’t part of this mapping — there’s no corresponding code path for them.
What Isn’t Mapped
The following aren’t synced by this integration in either direction — there’s no corresponding field mapping or transformation logic for them:- Custom fields, tags, or notes — no Attribute Category / Constituent Code / Notes handling exists
- Communication preferences (email/SMS/mail opt-in) — no
do_not_email/do_not_call/do_not_mailsync - Household relationships — see Configuration Options
- Job title, employer, or occupation
- Suffix, title (Mr./Mrs./Dr.), or nickname
Duplicate Handling
Because matching is strictly byraisers_edge_id, a constituent created directly in Blackbaud (outside this integration) has no way to be recognized as the same person on a later WeGive push — it will be created as a new constituent rather than matched or merged. A Redis-backed lock prevents the integration itself from creating duplicate constituents when two pushes for the same new donor race each other.
Create vs. Update Payloads
- Create (no
raisers_edge_idyet): sends the full compiled payload — name, email, phone, address, birthdate, gender. - Update (
raisers_edge_idalready set): sends only email and phone, viaPATCH— name, address, birthdate, and gender aren’t re-sent on update.
Error Handling
A failed constituent push raises an exception, which is logged to the integration’s sync log and surfaces as a failed sync entry — there’s no separate manual-review queue or automated conflict-resolution step beyond that.Getting Help
- WeGive Support: [email protected]
- Blackbaud Sky API Constituent Docs: Sky API Constituent Documentation