Salesforce Objects:
npsp__Partial_Soft_Credit__c(NPSP standard object - for Contacts)npsp__Account_Soft_Credit__c(NPSP standard object - for Accounts)OpportunityContactRole(Salesforce standard object - optional, import only)
Overview
This document describes how soft credit data syncs between WeGive and Salesforce. Soft Credits allow you to recognize individuals or organizations who influenced a donation without being the primary donor. In Salesforce NPSP, there are two soft credit objects:- Partial Soft Credits - For crediting individual Contacts
- Account Soft Credits - For crediting company Accounts
How Soft Credit Data Syncs
Direction
- Import from Salesforce - Data imports from Salesforce into WeGive only
- Export to Salesforce - Data exports from WeGive to Salesforce only
- Both Ways - Data syncs in both directions
Mapping Types
- Hard-coded - Built into the integration logic and cannot be changed. There are no mapping rules for soft credits.
Sync Configuration
Soft credit pulls and pushes are controlled by the Pull soft credits and Push soft credits toggles in Sync Configuration. Related settings:Sync Triggers
From WeGive to Salesforce (Export)
Soft Credit data is exported from WeGive to Salesforce when:- Soft Credit Created: A new soft credit is created in WeGive
- Soft Credit Updated: An existing soft credit is modified in WeGive (e.g., amount changed)
- Soft Credit Deleted: A soft credit is removed in WeGive
From Salesforce to WeGive (Import)
- Last Modified Date: WeGive polls both soft credit objects for records modified since the last sync
- Deleted Credits: With
pull_deleted_soft_credits, records withIsDeleted = truein the sync window are removed from WeGive - Contact Roles: With
pull_contact_role_soft_credits, Contact Roles whoseRoleis insoft_credit_contact_role_namesare imported; withpull_deleted_contact_role_soft_credits, deleted Contact Roles remove the soft credits they created
Sync Process Overview
Pulling Data from Salesforce
Account Soft Credits (for Accounts):- Queries
npsp__Account_Soft_Credit__c(Id,npsp__Account__c,npsp__Amount__c,npsp__Opportunity__c, the Opportunity’sCloseDate) - Loads WeGive transactions matching the Opportunity IDs
- Loads company donors matching the Account IDs that have no Contact ID (
salesforce_idempty) - Creates or updates the SoftCredit, matched by
salesforce_id
- Queries
npsp__Partial_Soft_Credit__c(Id,npsp__Contact__c,npsp__Amount__c,npsp__Opportunity__c, the Opportunity’sCloseDate) - Loads WeGive transactions matching the Opportunity IDs
- Loads individual donors matching the Contact IDs
- Creates or updates the SoftCredit, matched by
salesforce_id
transaction_date to the Opportunity’s CloseDate at 17:00:00 when it is present.
Contact Role Soft Credits:
NPSP only creates Partial Soft Credit records when credit is split among several contacts. A full soft credit to one person exists only as an OpportunityContactRole with a soft credit role. When pull_contact_role_soft_credits is enabled, the integration:
- Queries
OpportunityContactRolewhereRoleis insoft_credit_contact_role_names - Finds the individual donor matching
ContactIdand every WeGive transaction matchingOpportunityId(an Opportunity can have several whenuses_paymentsis on) - For each transaction, creates a SoftCredit for the full transaction amount with the Contact Role ID stored as
salesforce_contact_role_idandtransaction_dateset from the OpportunityCloseDate - Skips any (donor, transaction) pair that already has a soft credit, including soft-deleted ones, so intentionally deleted credits are not recreated. On an existing match, only the
transaction_dateis refreshed
IsDeleted = true within the sync window and removes the matching WeGive soft credits. Deleted Contact Roles are handled the same way, matched on salesforce_contact_role_id.
Pushing Data to Salesforce
When a SoftCredit is created, updated or deleted in WeGive, the integration:- Ensures Prerequisites Exist:
- If the donor has no Contact ID (
salesforce_id), the donor is pushed first. This check uses the Contact ID for all donor types - If the transaction has no
salesforce_id, the transaction is pushed first
- If the donor has no Contact ID (
- Determines Object Type:
- Company donors use
npsp__Account_Soft_Credit__c - All other donors use
npsp__Partial_Soft_Credit__c
- Company donors use
- Creates, Updates or Deletes:
- If the soft credit has a
salesforce_idand is deleted: DELETE in Salesforce - If it has a
salesforce_idand is not deleted: UPDATE - If it has no
salesforce_idand is not deleted: CREATE (under a per-record lock) - If it has no
salesforce_idand is deleted: nothing is sent
- If the soft credit has a
Complete Field Mapping - Partial Soft Credits (Contacts)
Complete Field Mapping - Account Soft Credits (Accounts)
Field Mapping - Contact Role Soft Credits (Import Only)
Important Notes
Two Object Types
- Company donors use
npsp__Account_Soft_Credit__c - All other donors use
npsp__Partial_Soft_Credit__c
Amount Conversion
- WeGive: cents as an integer (5000 = $50.00)
- Salesforce: dollars as a decimal (50.00)
- On export: divided by 100
- On import: multiplied by 100. Contact Role soft credits copy the transaction’s amount directly
Automatic Prerequisite Push
When pushing a soft credit, the donor is pushed first if it has no Contact ID and the transaction is pushed first if it has no Opportunity ID.The donor prerequisite check looks at the donor’s Contact ID (
salesforce_id) for every donor type. A company donor that already has an Account ID but no Contact ID will still be pushed before the soft credit.Account Soft Credit Import Restriction
On import, Account Soft Credits are matched only to company donors whose Contact ID is empty. A company donor in WeGive that also carries a Contact ID will not be matched and the record fails with “Unable to find donor”.Multiple Soft Credits
A single transaction can have multiple soft credits. There is no validation that soft credit totals match the transaction amount.Deletion Handling
When a soft credit is deleted in WeGive and has a Salesforce ID, the Salesforce record is deleted on the next push. The transaction and donor remain. When a soft credit is deleted in Salesforce andpull_deleted_soft_credits (or pull_deleted_contact_role_soft_credits for Contact Roles) is enabled, the WeGive soft credit is removed on the next pull.
Soft Credit Matching & Create/Update Logic
When WeGive Exports a Soft Credit to Salesforce
- Push the donor if it has no Contact ID; push the transaction if it has no Opportunity ID
- With a
salesforce_id: delete if the soft credit is deleted, otherwise update - Without a
salesforce_idand not deleted: create - Object chosen by donor type (company vs everything else)
When Salesforce Exports a Soft Credit to WeGive
Partial Soft Credits:- Find the transaction by
npsp__Opportunity__c; fail if not found - Find the individual donor by
npsp__Contact__c; fail if not found - Find or create the soft credit by
salesforce_id; set donor, transaction, amount, transaction date and Salesforce ID
- Find the transaction by
npsp__Opportunity__c; fail if not found - Find the company donor (with no Contact ID) by
npsp__Account__c; fail if not found - Find or create the soft credit by
salesforce_id; set donor, transaction, amount, transaction date and Salesforce ID
Required Fields
For WeGive to Salesforce (Partial Soft Credits):npsp__Opportunity__c, npsp__Contact__c, npsp__Amount__c
For WeGive to Salesforce (Account Soft Credits): npsp__Opportunity__c, npsp__Account__c, npsp__Amount__c
For Salesforce to WeGive (Both Types): Id, npsp__Opportunity__c, npsp__Contact__c or npsp__Account__c, npsp__Amount__c
Usage in WeGive
Soft Credits in WeGive are used for recognition, reporting, donor engagement, major gift attribution, matching gift tracking and household giving.Usage in Salesforce NPSP
Soft Credits in Salesforce feed NPSP rollup summaries, reports, acknowledgment letters, campaign attribution and donor scoring.Integration Rules
Soft credit field mappings are entirely hard-coded. There are no configurable mapping rules for soft credits.Troubleshooting
Soft credit not syncing:- Verify the donor has a Salesforce Contact ID and the transaction has a
salesforce_id - Ensure the integration user can access both soft credit objects
- The matching WeGive company donor must have an Account ID and no Contact ID
- NPSP stores full (100%) soft credits as Opportunity Contact Roles, not Partial Soft Credits. Enable
pull_contact_role_soft_creditsand confirm the role name is insoft_credit_contact_role_names
- Confirm
pull_deleted_soft_credits/pull_deleted_contact_role_soft_creditsare enabled - Contact Role imports never recreate a soft credit that was soft-deleted in WeGive
- Partial and Account soft credits are matched only by Salesforce ID; Contact Role soft credits are matched by Contact Role ID and by (donor, transaction) pair
Related Documentation
- Data Mapping Overview - object index and cross-cutting data conventions
- Opportunity & Payment - the transaction a soft credit is attached to
- Contact and Account - the credited donor