This article provides a detailed data mapping configuration between Raiser's Edge NXT and Momentum platforms. The table below outlines how fields from Raiser's Edge NXT align with their corresponding fields in Momentum, accompanied by specific notes to clarify mapping rules and any necessary transformations. This mapping ensures seamless data integration and consistency between the two systems.
Momentum Field | Blackbaud Field | Notes |
|---|---|---|
| first_name | first | Direct copy or "". |
| last_name | last | Direct copy or "". |
| name | (first + " " + last) | Concatenated and .strip(). |
| preferred_name | preferred_name | Direct copy or "". |
| company_name | name | Only when type == "Organization"; set "" for Individuals. |
| donor_type | type | "Organization"→ORGANIZATION, "Individual"→INDIVIDUAL. |
| email.address | Only if email present. | |
| do_not_email | email.do_not_email / requests_no_email | Boolean OR of both flags. |
| phone_number | phone.number | Only if phone present. |
| do_not_call | phone.do_not_call | Boolean copy if phone present. |
| do_not_mail | address.do_not_mail | Only set when donor.mailing_address exists. |
| birthday | birthdate | Parsed via parse_fuzzy_date(...) if present. |
| deceased | deceased | True→DECEASED, False→ALIVE, else UNKNOWN. |
| spouse_first_name | spouse.first | Default "". |
| spouse_last_name | spouse.last | Default "". |
| head_of_household_status | spouse.is_head_of_household | Inverted: True→NOT_HEAD_OF_HOUSEHOLD, False→HEAD_OF_HOUSEHOLD, else UNKNOWN. |
| profile_picture_url | profile_picture_url | Direct copy or "". |
| address_line1 | address_lines (line 1) | Splits on "/n"; first segment to line1. |
| address_line2 | address_lines (rest) | Remaining segments joined with "\n". |
| city | city | Direct copy or "". |
| state | state | Direct copy or "". |
| zip | postal_code | Direct copy or "". |
| country | country | Direct copy or "". |
| title | summary | Truncated to 255 chars. |
| description | description | Cleared to "" if equal to title. |
| action_created_at | date_added | isoparse(...). |
| action_updated_at | date_modified | isoparse(...). |
| is_completed | completed | Boolean copy. |
| completed_date | completed_date | isoparse(...).replace(tzinfo=UTC) if present. |
| category | category | "Email"→EMAIL, "Mailing"→LETTER, "Meeting"→MEETING, "Phone call"→CALL, else OTHER. |
| outcome | outcome | "Successful"→SUCCESSFUL, "Unsuccessful"→UNSUCCESSFUL. |
| location | location | Direct copy or "". |
| priority | priority | "Low"/"Normal"/"High"→LOW/NORMAL/HIGH. |
| amount | amount.value | Cast to Decimal(f"{value:.2f}"). |
| date | date | Parsed with datetime.strptime(...,"%Y-%m-%dT%H:%M:%S").date(); logs error on failure. |
| gift_type | type | "Donation"/"PledgePayment"/"MatchingGiftPayment" & amount0→ONE_TIME; "GiftInKind"→IN_KIND; "RecurringGiftPayment"→RECURRING; else OTHER. |
| acknowledgement_status | acknowledgements[].status | Any "DoNotAcknowledge"→DO_NOT_ACKNOWLEDGE; else if any "Acknowledged"→ACKNOWLEDGED; otherwise unchanged. |
| notes | reference | Direct copy or "". |
| title | description | Direct copy or "". |
| name | description | Direct copy or "". |
| type | — | Constant: BB_CUSTOM_FIELDS. |
| data | (custom fields dict) | For each category != "__donor_id__": { "value": field.value, "comment": field.comment }. |
| type | — | Constant: BB_CUSTOM_FIELDS. |
| data | (custom fields dict) | For each category != "__gift_id__": { "value": field.value, "comment": field.comment }. |
| type | — | Constant: BB_CONSTITUENT_CODES. |
| data | (codes dict) | For each description != "__donor_id__": { "active": not code.inactive }. |
| first_name | first | Direct copy or "". |
| last_name | last | Direct copy or "". |
| name | name | Direct copy or "". |
| name | description | Direct copy or "". |
| ask_amount | expected_amount.value | Direct copy (numeric). |
| ask_date | ask_date | Parsed via _isodate_from_source_data. |
| crm_created_at | date_added | Parsed via _isodate_from_source_data. |
| crm_updated_at | date_modified | Parsed via _isodate_from_source_data. |
| expected_amount | expected_amount.value | Direct copy (numeric). |
| expected_date | expected_date | Parsed via _isodate_from_source_data. |
| probability_of_success | opportunity_likelihood_name | Direct copy or "". |
| title | name | Direct copy or "". |
| summary | summary | Direct copy or "". |
| text | text | Direct copy or "". |
| note_created_at | date_added | isoparse(...). |
| note_updated_at | date_modified | isoparse(...). |
| date | date | Parsed via parse_fuzzy_date(...). |
| name | name | Direct copy or "". |
| comment | comment | Direct copy or "". |
| relationship_created_at | date_added | _isodate_from_source_data(...). |
| relationship_updated_at | date_modified | _isodate_from_source_data(...). |
| started_at | start | Parsed via parse_fuzzy_date(...). |
| ended_at | end | Parsed via parse_fuzzy_date(...). |
| is_organization_contact | is_organization_contact | Boolean copy. |
| is_primary_business | is_primary_business | Boolean copy. |
| is_spouse | is_spouse | Boolean copy. |
| is_spouse_head_of_household | is_spouse_head_of_household | Boolean copy. |
| is_constituent_head_of_household | is_constituent_head_of_household | Boolean copy. |
| position | position | Direct copy or "". |
| name | name | Direct copy or "". |
| is_public | is_public | Boolean copy (default False). |
| name | name | Direct copy or "". |
| start_date | start_date | Parsed to date; logs debug and sets None on failure. |
| end_date | end_date | Parsed to date; logs debug and sets None on failure. |
| location | location | Direct copy or "". |
| attended_count | attended_count | Direct copy. |
| attending_count | attending_count | Direct copy. |
| crm_url | crm_url | Direct copy or "". |
| invitation_status | invitation_status | Direct copy or "". |
| rsvp_status | rsvp_status | Direct copy or "". |
| attended | attended | Boolean copy (default False). |