Skip to content
  • There are no suggestions because the search field is empty.

Salesforce NPSP

A step-by-step guide to setting up, configuring, and troubleshooting the Salesforce NPSP integration with Anedot for seamless nonprofit fundraising data management.

Salesforce is a Customer Relationship Management (CRM) platform used by organizations to manage supporter relationships, sales, marketing, and communications.

Connecting Anedot (or other third-party platforms) to Salesforce involves a thorough setup process, including configuration, customization, and testing to ensure reliable data flow and performance.

To avoid affecting live data during setup, Anedot requires all integrations to be tested in a Salesforce and Anedot Sandbox environment first.

Getting Started

  1. Contact our Support team to request an Anedot Sandbox account.

  2. Test and confirm your configuration in the Sandbox.

  3. Once successful, we’ll enable Salesforce integration for your live account.

Before beginning, ensure your Salesforce user profile has the Download AppExchange Packages permission enabled. This is required to install necessary components.


Table of Contents


Install the NPSP Package

To begin, you’ll need to install the Nonprofit Success Pack (NPSP) in your Salesforce account.

Note: If NPSP is already installed, you can skip this step.

Steps to Install NPSP:

  1. Log in to your Salesforce account and go to the AppExchange.

  2. Search for Nonprofit Success Pack.

  3. Click Get It Now on the package listing.

  4. Log in to the AppExchange using your Salesforce credentials.

  5. Choose where to install the package:

    • Install in Production or

    • Install in Sandbox

  6. Select the users for whom you want to install NPSP.

  7. Click Install.

  8. If prompted, approve third-party access by checking Yes, grant access to these third-party websites, then click Continue.

  9. The installation will start. You’ll receive an email confirmation once it’s complete.

After receiving confirmation that the NPSP package is installed, you can proceed to install the Anedot Package.


Install the Anedot Package

To install the Anedot Package in Salesforce, follow these steps:

  1. Log in using your Salesforce credentials.
  2. Add the following to the end of your URL: /packaging/installPackage.apexp?p0=04t8Y000000ktYT&isdtp=p1

    Example URL:
    https://anedot.lightning.force.com/packaging/installPackage.apexp?p0=04t8Y000000ktYT&isdtp=p1
  3. You’ll be redirected to the Package Installation Details page.

  4. Review the package components.

  5. When prompted, choose Install for All Users.

  6. Click Install.

  7. If asked to approve third-party access, check
    Yes, grant access to these third-party websites, then click Continue.

    Note: This grants access to the Salesforce APEX API.

  8. Wait for the installation to complete (this may take a few minutes).

  9. You’ll receive an email confirmation from Salesforce once installation is successful.

After installation, you can proceed to configure the Anedot Package in Salesforce.


Set Up the Anedot Package in Salesforce

To configure the Anedot Package in Salesforce, follow these steps:

  1. Open the App Launcher in Salesforce (look for the grid icon below your organization’s logo).

  2. Select Anedot from the available apps.

  3. Go to the Anedot Settings tab.

  4. In the top-right corner, click New to create a new Anedot Settings record.

  5. Configure your default settings.These may vary based on your organization’s Salesforce setup. Make sure to define your Opportunity Stage defaults.

  6. Click Create once your settings are in place.

  7. On the Anedot Settings screen, copy the Webhook URL.This subdomain is required to connect Anedot to Salesforce. Refer to Step 6 in the next section for use.

You’re now ready to return to Anedot and complete the integration with your Salesforce account.


Anedot Settings

The chart is a list of the Anedot Settings we currently provide:

Anedot Setting Field Options Notes
Create GAU Allocation Records Checkbox(default: checked ) When enabled, creates GAU (General Account Unit) Allocation Records.
Default Campaign Member Status* Dropdown (default: Planned ) Status Campaign Members (page submitters) default to.
Donation Amount Field Dropdown (default: Total Donation Amount ) Default amount used to track donations.
Integration Error Email Address text input for email (default: Salesforce admin email ). Email that receives notices of errors with the integration.
Opportunity Closed-Won Stage* Dropdown (default: Closed Won ) Default opportunity stage for successfully relayed submissions.
Opportunity Open Stage* Dropdown (default: Prospecting ) Stage open opportunities (e.g. future opportunities for commitments) default to.
Update Contact Info from Anedot Checkbox(default: checked ) Update existing contacts with Anedot data (based on email matching).
Default Campaign* Campaign search field (default: none ) Relayed submissions (opportunities, contacts, etc) are linked to a default campaign instead of Action Page specific campaigns.
Default GAU* General Account Units (GAU) search field (default: none ) Relayed donations are always linked to the same GAU (fund) instead of the Anedot/relayed fund.
Opportunity Closed-Lost Stage* Closed Lost Default opportunity stage for lost opportunities (used for future opportunities linked to canceled commitments).
Single Donation Record Type Dropdown (default: NPSP Default ) Default record type for new relays.
URL for webhook Instance-specific Instance-specific URL, used for the Salesforce URL when configuring the Salesforce integration in Anedot.
Source Object Dropdown (default: None ) Salesforce application we are mapping objects for (options - NPSP, Salesforce). For customers using NPSP, they should select NPSP ; for those using Salesforce CRM, they should use Salesforce

* The instructions above are based on a standard, uncustomized NPSP (Nonprofit Success Pack) instance. Certain object-specific settings—such as Campaign Member Status or Opportunity Stage—may differ depending on how your Salesforce environment has been customized.

By default, Anedot maps to standard NPSP/Salesforce fields (e.g., status, stage) when those fields are available. If your organization uses custom values or alternative configurations, it is your responsibility to update and map those settings accordingly to ensure proper data handling.


Connect Anedot to Salesforce

Follow the steps below to link your Anedot fundraising account with Salesforce:

1. Set Up the Integration in Anedot

  1. Log in to your Anedot account.

  2. Navigate to the fundraising account you want to connect to Salesforce.

  3. From the main menu, go to:
    Settings > Integrations > Directory

  4. Click the + New Connection button in the upper-right corner.

  5. In the Integration Directory, choose Salesforce.

  6. Enter the Sub-Domain URL of your Salesforce instance.
    For example, if your instance is anedot.my.salesforce.com, enter anedot (exclude https://).

  7. (Optional) Add a template for Custom Field Mapping in the Metadata field.

    1. Example: 
      {
        "close_date": "",
      "donation_method": "CREDIT CARD",
      "action_page_id": "ANEDOT",
      "stage": "RECEIVED",
      "name": " ",
      "prefix": "",
      "status": "Donor"
      }

      8. Click Save.

2. Authorize the Connection in Salesforce

  1. You’ll be redirected to log in to your Salesforce account.

  2. Upon login, grant Anedot access to required permissions by clicking Allow.

Important: The user connecting the integration must have appropriate permissions in Salesforce to enable data relay successfully.

3. Required Salesforce Permissions

The connecting user must have Read, Write, and Edit access to:

  • Recurring Donations (NPSP only)

  • Contacts (NPSP, Classic Salesforce)

  • Opportunities (NPSP, Classic Salesforce)

  • Campaigns & Campaign Members (NPSP, Classic Salesforce)

  • GAU Allocations (NPSP, Classic Salesforce)

  • Accounts (NPSP, Classic Salesforce)

Once access is granted and permissions are confirmed, your integration setup is complete!


Data Relays 

Anedot automatically syncs data from Donations and Lead Pages into Salesforce. Here’s how key data elements are handled:

Campaigns

  • All Action Pages are converted into Campaigns in Salesforce.

  • A default Campaign can be set under Anedot Settings.

    • Useful for grouping data by initiative or vendor (e.g., all Facebook donations under one Campaign).

    • Example: Set the default campaign field in Anedot Settings to Anedot.
      Data Relays - Default Campaign


Funds / GAUs

  • In NPSP, funds are mapped to General Accounting Units (GAUs).

  • By default, Anedot will create or update GAUs for each fund submitted.

  • GAU creation can be disabled, or a default GAU can be set in Anedot Settings.

    • Example: To send all donations to “General Fund,” set this as the default GAU in Anedot Settings > General Fund.
      GAU


Contacts

  • Contacts are created/linked from Action Page submissions.

  • Matching is done using email or phone number (based on NPSP Contact Matching rules).

  • Campaign Member records are also created and linked.

    • Can be customized in Anedot Settings.
      Contacts


Donations

  • One-time donations are logged as Closed-Won Opportunities.
    One-time Donation

With Commitment Events Enabled

  • Recurring donations create:

    • A Recurring Donation object.

    • Open Opportunities for future payments.

  • Commitment updates (e.g., amount, frequency) sync to both Recurring Donation and Opportunity records.

  • Canceled/deactivated commitments will update all remaining open (future) Opportunity records as "Closed Lost" and close all Recurring Donation records. 
  • If a commitment ends or fails, the Recurring Donation is marked as "Fixed," and the Open Ended Status field is set to "None."
    salesforce-npsp-image-11-82fdb4bc4cb2ece37ca35b13366be1a7

Without Commitment Events

  • Recurring donations are logged as individual Opportunities, similar to one-time donations.


Submissions

  • Anedot matches Submissions to Salesforce Contact records by email (or NPSP settings).
    Submissions

    Requires NPSP.


Reversed Transactions

  • Reversals (refunds, chargebacks, voids) are logged as Anedot Donation Exceptions.

  • Common event labels that trigger exceptions:

    • commitment_failed_to_process

    • donation_chargeback_reversed

    • donation_partially_refunded

    • donation_refunded

    • donation_voided

  • Exceptions are shown in the Anedot Donation Exceptions tab and linked to the related Opportunity in Salesforce.

Salesforce will not auto-update Opportunity stage when a donation is reversed. 


Gift of Any Amount Products

  • To relay “Gift of Any Amount” products, use a custom Anedot mapping.

  • Reference the submission_created event and use Salesforce product fields as needed.


Event Type: donation_completed, commitment_created, submission_created, action_page_created, and action_page_updated

Object Type: Contact, Opportunity, Recurring Donation, Campaign Member


 

Create Custom Metadata in Salesforce

  1. Go to Setup > Custom Metadata Types in Salesforce.

  2. Click Anedot Field.
    Metadata 2

  3. Next, click Manage Anedot Fields.
    Metadata 3
  4. Select New to create a custom mapping.
    Metadata 4

  5. Fill in the following required fields:
    Metadata 5

    • Label: Friendly name (e.g., custom_prefix_label)

    • Field Name: API-compliant name (e.g., custom_prefix)

    • Data Type: Type of field (Text, Number, etc.)

    • Object Type: Target object (e.g., Opportunity)

    • Field Type: Source data field (e.g., title, created_at)

Examples

For a Contact Field

Label Field Name Field Type Object Type
prefix_label custom_prefix title submission_created

For a Donation Field

Label Field Name Field Type Object Type
close_date custom_close_date created_at donation_completed

Request Headers

{
"User-Agent": "Anedot-Hookshot/00b1d64",  
"X-Request-Id": "1c8927de-1e2f-1234-a8ea-babe5a588869",  
"X-Integration-Id": "1125f2f7-7852-419d-9d3e-0c5895d65605",  
"X-Integration-Event": "submission_created",  
"X-Request-Signature": "123480d84c67a050316ec647416598259cea6f0934806a59bb0eb95bc288942f"  
}

Submissions

{
"event": "submission_created",  
"payload": `{`  
"id": "7c7d869c-436b-429b-ac68-69658f1d12eb",  
"email": "[[email protected]](/cdn-cgi/l/email-protection)",  
"phone": "2252501301",  
"title": "",  
"suffix": "",  
"referrer": "https://qa2.secure.anedot.com/space-force/d3b0000e-4bde-4474-9a85-67627c323752",  
"utm_term": "",  
"card_type": "master",  
"donations": [{
"id": "d5ea20f9421b0fb55499c",  
"fees": {  
"anedot_fees": {
"amount": "4.30"  
},  
"vendor_fees": [ ]  
},  
"fund": {
"id": "75bb50a0-69f3-4f98-8f6b-ac67fc1b1764",  
"name": "General Fund",  
"identifier": "1001"  
},  
"product": { },  
"net_amount": "95.70",  
"gross_amount": "100.0",  
"fees_paid_by_donor": "false"  
}],  
"last_name": "Dote",  
"created_at": "2023-05-22 21:28:27 UTC",  
"first_name": "Anna",  
"ip_address": "65.158.47.175",  
"occupation": "Occupation 1",  
"product_id": "",  
"updated_at": "2023-05-22 21:28:28 UTC",  
"utm_medium": "",  
"utm_source": "",  
"account_uid": "a7229820277fe1a0aeaec",  
"middle_name": "",  
"source_code": "",  
"utm_content": "",  
"account_name": "City Food Pantry",  
"address_city": "New Orleans",  
"product_code": "",  
"product_name": "",  
"utm_campaign": "",  
"employer_name": "Occupation 1",  
"product_value": "",  
"action_page_id": "469627e5-adac-4348-8191-080a060e2379",  
"address_line_1": "123 Anedot Way",  
"address_line_2": "4567",  
"address_region": "LA",  
"address_country": "US",  
"card_expiration": "12/2022",  
"donation_amount": "$100.00",  
"action_page_name": "General Fund",  
"card_last_digits": "5454",  
"donor_profile_id": "",  
"referrer_to_form": "",  
"created_at_iso8601": "2023-05-22T21:28:27Z",  
"currently_employed": "false",  
"updated_at_iso8601": "2023-05-22T21:28:28Z",  
"address_postal_code": "99999",  
"payment_method_type": "credit_card",  
"custom_field_responses": `{``}`,  
"communications_consent_email": "false",  
"communications_consent_phone": "false"  
}
}

Donations

{
"event": "donation_completed",  
"payload": `{`  
"date": "2023-05-22 21:28:28 UTC",  
"name": "Anna Dote",  
"email": "[[email protected]](/cdn-cgi/l/email-protection)",  
"phone": "2252501301",  
"title": "",  
"origin": "hosted",  
"source": "credit_card",  
"status": "completed",  
"suffix": "",  
"donation": {
"id": "d5ea20f9421b0fb55499c",  
"fees": {  
"anedot_fees": {
"amount": "4.30"  
},  
"vendor_fees": [ ]  
},  
"fund": {
"id": "75bb50a0-69f3-4f98-8f6b-ac67fc1b1764",  
"name": "General Fund",  
"identifier": "1001"  
},  
"products": [ ],  
"card_type": "master",  
"card_last_digits": "5454",  
"donation_project": "",  
"credit_card_expiration": "12/2023"  
},  
"referrer": "https://qa2.secure.anedot.com/space-force/d3b0000e-4bde-4474-9a85-67627c323752",  
"frequency": "once",  
"last_name": "Dote",  
"recurring": "false",  
"created_at": "2023-05-22 21:28:28 UTC",  
"first_name": "Anna",  
"ip_address": "65.158.47.175",  
"net_amount": "95.70",  
"occupation": "Occupation 1",  
"updated_at": "2023-05-22 21:28:28 UTC",  
"account_uid": "a7229820277fe1a0aeaec",  
"middle_name": "",  
"source_code": "",  
"account_name": "City Food Pantry",  
"address_city": "New Orleans",  
"check_number": "",  
"date_iso8601": "2023-05-22T21:28:28Z",  
"event_amount": "100.00",  
"employer_name": "Occupation 1",  
"submission_id": "7c7d869c-436b-429b-ac68-69658f1d12eb",  
"action_page_id": "469627e5-adac-4348-8191-080a060e2379",  
"address_line_1": "123 Anedot Way",  
"address_line_2": "4567",  
"address_region": "LA",  
"commitment_uid": "",  
"address_country": "US",  
"action_page_name": "General Fund",  
"commitment_index": "",  
"donor_profile_id": "",  
"referrer_to_form": "",  
"amount_in_dollars": "100.0",  
"payment_method_id": "a024148f-786f-44b6-8ec4-6769fdc72061",  
"created_at_iso8601": "2023-05-22T21:28:28Z",  
"currently_employed": "false",  
"updated_at_iso8601": "2023-05-22T21:28:28Z",  
"address_postal_code": "9999",  
"payment_description": "MasterCard •••• 5454",  
"custom_field_responses": { },  
"is_recurring_commitment": "false",  
"commitment_recurring_until": "",  
"communications_consent_email": "false",  
"communications_consent_phone": "false"  

}

Commitments

{
"event": "commitment_created",  
"payload": `{`  
"id": "31fb5453-00e6-47e9-a05b-f12311180706",  
"email": "[[email protected]](/cdn-cgi/l/email-protection)",  
"phone": "2252501301",  
"title": "",  
"token": "puxBmva9joKvANBs2mKbuvQB",  
"suffix": "",  
"referrer": "https://qa2.secure.anedot.com/space-force/cf250f54-6514-473d-90b5-4746f0ffa578",  
"frequency": "monthly",  
"last_name": "Dote",  
"whodunnit": "",  
"created_at": "2023-05-03 18:16:59 UTC",  
"first_name": "Anna",  
"ip_address": "65.80.57.175",  
"occupation": "",  
"updated_at": "2023-05-03 18:16:59 UTC",  
"middle_name": "",  
"address_city": "New Orleans",  
"cancelled_on": "",  
"employer_name": "",  
"submission_id": "d81e62b3-81ca-4811-8889-41050e0430a5",  
"action_page_id": "fe8031a0-b359-4cf1-ae3d-f25d7cc3eb2c",  
"address_line_1": "123 Anedot Way",  
"address_line_2": "",  
"address_region": "LA",  
"address_country": "US",  
"next_capture_on": "2023-06-03 18:16:59 UTC",  
"action_page_name": "General Fund",  
"donor_profile_id": "848f9bbf-c553-4a6e-bf0c-7ad25800bbf0",  
"fund_allocations": [{
"fund": {  
"id": "75bb50a0-69f3-4f98-8f6b-ac67fc1b1764",  
"name": "General Fund",  
"identifier": "1001"  
`}`,  
"amount_in_dollars": "50.0"  
}],  
"referrer_to_form": "",  
"payment_method_id": "56d2dfcc-d7b2-46c0-b161-af1ee331f3bd",  
"changed_attributes": { },  
"created_at_iso8601": "2023-05-03T18:16:59Z",  
"currently_employed": "true",  
"updated_at_iso8601": "2023-05-03T18:16:59Z",  
"address_postal_code": "99999",  
"cancellation_reason": "",  
"cancelled_on_iso8601": "",  
"payment_status_message": "",  
"total_amount_in_dollars": "50.0",  
"communications_consent_email": "false",  
"communications_consent_phone": "false"  
}
}

If Data Is Not Relaying to Salesforce

If relays appear successful in Anedot but are not arriving in Salesforce, the issue may be related to your Salesforce Storage Limits.

How to Check Storage Usage

  1. Go to Setup in Salesforce.

  2. In the Quick Find bar, search for Storage.

  3. Click Storage Usage.

  4. Review your usage:

    • If storage exceeds 60%, this may prevent relays from being accepted.

    • To resolve, delete older or unnecessary records to free up space.