Skip to main content
Version: Next

Salesforce NPSP

Anedot now offers a direct integration with Salesforce NPSP 🎉! Salesforce is a Customer Relationship Management (CRM) platform, typically used by organizations to manage relationships with supporters, sales, marketing, and content.

​

Creating a connection between Anedot (or other third-party platforms) and Salesforce can take up to 1-3 months of configuration to ensure expected data relays and performance. Customization and testing will be necessary before connections function optimally for your organization. To ensure a smooth connection and configuration process without impacting live data in production accounts, Anedot requires each organization to test and configure in an Anedot and Salesforce Sandbox environment.

To get started, please contact our Support team here , and we will create an Anedot Sandbox account for your organization. After testing and confirming your configuration is successful in the Sandbox environment, we will enable Salesforce as an available integration for your account.

To ensure your connection from Anedot to Salesforce NPSP is successful, first verify that you have the Download AppExchange Packages permission enabled in your Salesforce profile.


Initial Setup Instructions

Install NPSP Package​

To get started, you will need to install the Nonprofit Success Pack (NPSP) within your Salesforce account.

Note: If you already have the NPSP package installed, you can skip this step.

To install the Nonprofit Success Pack (NPSP) successfully, follow the steps below:

  1. Within your Salesforce account, navigate to the AppExchange .
  2. Use the Search Bar to search for Nonprofit Success Pack .
  3. Select Get It Now on the Nonprofit Success Pack listing.
  4. This will prompt you to log in to the AppExchange . Use your Salesforce credentials to log in successfully.
  5. Follow the prompts to install the NPSP package. Choose Install in Production or Install in Sandbox , depending on your needs.
  6. Select the users you want to install the NPSP for.
  7. Click Install .
  8. You may be asked to approve third-party access. Check Yes, grant access to these third-party website , then click Continue .
  9. The installation will begin. Once completed, you will receive an email confirmation from Salesforce.

Once you have received the confirmation that the installation is complete, continue to install the Anedot Package .


Install the Anedot Package​

To install the Anedot Package within Salesforce, follow the steps below:

  1. Within your internet browser, open a new tab and enter the following URL to access the Anedot Salesforce Package :

https://login.salesforce.com/packaging/installPackage.apexp?p0=04t8Y0000011nY8 2. Accessing the URL above will prompt you to log in . Use your Salesforce credentials to log in successfully. 3. Once you have logged in, you will be redirected to the Package Installation Details page. 4. Review the components of the package that will be installed. 5. You will be asked to select the users you want to install the package for. Select Install for All Users . 6. Click Install . 7. You may be asked to approve third-party access. Check Yes, grant access to these third-party websites , then click Continue . Note: The third-party access you are allowing is to the Salesforce APEX API. 8. The installation may take a few minutes to complete. 9. Once the installation is complete, you will receive an email confirmation from Salesforce.

Once the Anedot Package has been installed successfully, continue set up the Anedot Package within Salesforce.


Anedot Package Setup​

To set up the Anedot Package within Salesforce, follow the steps below:

  1. Open the App Launcher in Salesforce (the icon with boxes below your organization's logo).
  2. Next, select Anedot.
  3. Access the Anedot Settings tab.
  4. In the upper right corner of the window, click New to create your Anedot Settings record.
  5. Set your default here. These options will depend on your internal Salesforce usage. Be sure to select Opportunity Stage defaults.
  6. Click Create once you have set your defaults.
  7. On the Anedot Settings screen, copy the URL for webhook address. The sub-domain will be used to create a successful connection within Anedot. See step 6 in the next set of instructions.

You are now ready to return to Anedot to complete your connection from your Anedot fundraising account to Salesforce.


Connect Anedot to Salesforce​

To connect Anedot to Salesforce, follow the steps below:

  1. Log in to Anedot.
  2. Once logged in, access the fundraising account you would like to connect to Salesforce.
  3. Within the main menu of your Anedot fundraising account, access the Settings > Integrations>Directory tab.
  4. Next, select the blue + New Connection button in the upper right corner of the page.
  5. Within the Integration Directory, select Salesforce from the list.
  6. Enter the Sub-Domain URL of your Salesforce instance. Example: If your instance is called anedot.my.salesforce.com , you would enter anedot . Do not include https:// in the sub-domain.
  7. Optionally , you may add a template for your Custom Field Mapping (Metadata). See further instructions here.

8. Click Save . 9. You will be redirected to log in to your Salesforce account. 10. Once you have logged in successfully, you will be prompted to give Anedot access to specific permissions under the current user. Important: The user setting up the connection must have specific permissions in order for relays to pass successfully.

  1. Required Permissions
  • Full Read, Write, Edit permissions for the following objects:

    1. Recurring Donations (NPSP only)
    2. Contacts (NPSP, Classic Salesforce (Sales Cloud))
    3. Opportunities (NPSP, Classic Salesforce (Sales Cloud))
    4. Campaigns, Campaign Members (NPSP, Classic Salesforce (Sales Cloud))
    5. GAU Alloactions (NPSP, Classic Salesforce (Sales Cloud))
    6. Accounts (NPSP, Classic Salesforce (Sales Cloud))
  1. Once confirmed, you are all set!

Upgrading to v1.7

Anedot’s latest version upgrade (1.7) adds increased Salesforce support.

With this version upgrade, we had to refactor much of how the application originally worked, which required removing some components used in previously released versions.

These steps are only required when upgrading from a previously released version to 1.7. If you are installing the Anedot application for the first time starting with version 1.7, you do not need to proceed with the steps below.

If you are having trouble with any of the steps below, especially around installation, please reach out to the Anedot team here .


Backup Existing Data​

Step 1: Install the Backup Anedot Package​

  1. On the current organization, add this link to the default URL:

​ /packaging/installPackage.apexp?p0=04t07000000oqCh

  1. Example:

​ https://nsenk-dev-ed.develop.lightning.force.com /packaging/installPackage.apexp?p0=04t07000000oqCh 2. You will be redirected to an installation view, where you will need to install the application for all users . 3. Launch the Backup Anedot application (via the App Launcher) once it has been successfully installed.

  1. Note: You will know it’s successful via the installation screen or via email (subject line: Package Backup Anedot Install Successful ).

Step 2: Backup your existing Anedot data​

  1. Once the Backup Anedot application has loaded, click Backup to start backing up your existing data.

    1. Once the backup is successful, you will see a success toast that says, “Batch jobs were finished” and that the Backup button is disabled.

    1. Tip: if the job feels like it’s taking too long, you can check the Apex Job queue. To do this, you will need to:

      1. Go to Setup .
      2. In the search bar on the Home tab, search for Apex Jobs.
      3. Depending on your instance's setup, you will either see a list of packages or a redirect link to Salesforce's Classic settings view (continue to Classic settings view to see the list of options).


Step 3: Install the new version of Anedot​

  1. On the current organization, navigate to this URL:

​ ​https://login.salesforce.com/packaging/installPackage.apexp?p0=04t8Y000000ktYT&isdtp=p1 (V 1.7 Release) 2. You will be redirected to an installation view, where you will need to install the application for all users (like you did with the previous install). 3. Launch the Backup Anedot application (via the App Launcher) once version 1.7 has been successfully installed.

  1. You will know it’s successful via the installation screen or via email (subject line: Package Anedot Install Successful ).

Restoring your Data​

Step 4: Restore your existing Anedot data​

  1. Once the Backup Anedot application has loaded, click Restore to start restoring your existing data (what was previously backed up here ).

    1. Once the backup is successful, you will see a success toast that says, “Batch jobs were finished” and that the Restore button is disabled.

      1. Tip: if the job feels like it’s taking too long, you can check the Apex Job queue. To do this, you will need to:

        1. Go to Setup .
        2. In the search bar on the Home tab, search for Apex Jobs.
        3. Depending on your instance's setup, you will either see a list of packages or a redirect link to Salesforce's Classic settings view (continue to Classic settings view to see the list of options).

Removing Unused Packages and Components​

Step 5: Uninstall and delete the Backup Anedot Package​

Once the data is successfully restored, we will want to uninstall and the Backup Anedot package because it's no longer needed.

  1. Go to Setup .

  2. In the search bar on the Home tab, search for Installed Packages.

  3. Depending on your instance's setup, you will either see a list of packages or a redirect link to Salesforce's Classic settings view (continue to Classic settings view to see the list of options).

  4. You should see a list of installed packages (under the "Installed Packages" section), like Nonprofit Success Pack, Anedot, and Backup Anedot with corresponding Uninstall buttons beside them. Click the Uninstall button next to the Backup Anedot package name to uninstall the package.

  5. Once the package has been successfully uninstalled, you should see the Backup Anedot package listed in the "Uninstalled Packages" section). Click the Del button next to the Backup Anedot package name to delete the package.

    1. In addition to seeing the package under the "Uninstalled Packages" section, you should receive an email once the package has been uninstalled successfully (subject line: Package "Backup Anedot Winter 2024" Uninstall Successful ).

Step 6: Delete Unused Components from the Main Anedot Package​

All unused components in the Anedot Package must be deleted in order for version 1.7 to work properly. Each field must delete them manually and individually ( see step 6 below).

  1. Go to Setup .

  2. In the search bar on the Home tab, search for Installed Packages.

  3. Depending on your instance's setup, you will either see a list of packages or a redirect link to Salesforce's Classic settings view (continue to Classic settings view to see the list of options).

  4. You should see a list of installed packages (under the "Installed Packages" section), like Nonprofit Success Pack and Anedot . Click on Anedot .

  5. Click on the View Components button at the top.

  6. Review the “Metadata Components Removed From Package” section - each field will need to be manually deleted from your organization.

    1. Click on the first field in the list.

    2. Click on the linked Object (under “Object Name” in the “Custom Field Definition Detail” section).

      1. Note: In order for the following steps to work, you will need to view the object in the classic Salesforce view's Object Manager. If you are not directed there automatically, please navigate to that view (can be found under the Build > Create > Objects in classic Salesforce).
    3. In the Object Manager view for the Object, find the field under the “Custom Fields & Relationships” section. You should see a “Del” button next to the title.

    4. Click Del , which will prompt a new modal.

    5. In the delete modal, click the “Yes, I want to delete the relationship” button, and then the Delete button.

    6. Once the field has been deleted, you will need to permanently delete it in order for the field to be properly removed from the Salesforce instance. In order to do so, click on the new “Deleted Fields” option under the “Custom Fields & Relationships” section in the Object Manager.

    7. Click Deleted Fields and then Erase , which will prompt a new modal.

    8. In the Erase modal, click “Yes, I want to permanently delete the custom field.” and the Delete button.​

  7. Repeat step 6.6 until all the fields shown in the “Metadata Components Removed From Package” section are deleted/cleared.

You are all set!


Data Relays

  • Anedot relays data from Donation and Lead Pages to Salesforce.

  • Action Pages are transferred as Campaigns in Salesforce.

  • A default Campaign for all submissions can be set via Anedot Settings .

    • Example: If you are relaying data from multiple vendors (besides Anedot), you may want to configure all Anedot donations to relay to a specific "Anedot" campaign. Within Anedot Settings, you would set the Default Campaign field to "Anedot".

  • In NPSP, Anedot Funds are set up as GAU (General Accounting Units) . By default, Anedot will create or modify GAUs for each new Fund that is relayed to Salesforce (per Action Page).

    • The creation of GAU records can be disabled, or a default GAU can be set for all donations via Anedot Settings .
    • Example: To set all Anedot donations to go to a specific Anedot - General Fund GAU record, you would set the Default GAU field in Anedot Settings to "Anedot - General Fund".

    * Contacts are added when Action Page submissions are made in Anedot. Donations are then linked to matching contact records by email or phone number (requires the Nonprofit Success Pack (NPSP)) . .

    • Contacts can also be found as "Campaign Members" for the corresponding Action Page ("Campaign").
    • Campaign Member default statuses can be set in Anedot Settings .

    * One-time Donations are logged as Closed-Won opportunities.

* When Commitment Events are enabled in Anedot, Commitment Recurrences are logged as Recurring Donation objects and as open (future) Opportunities (Opportunity objects).

Commitment updates (non-cancellations) will update as follows:

  • Updates to donor details update the Salesforce Contact record (if enabled via Anedot Settings ).
  • Updates to the commitment details (e.g. amount, frequency) will update all remaining open (future) Opportunity and Recurring Donation records.
  • Cancelling/deactivating commitments will update all remaining open (future) Opportunity records as "Closed Lost" and "Close" all Recurring Donations Records.

  • If a commitment expires (cancellation reason is schedule ) and/or the commitment end date is relayed, the Recurring Donation is marked as "fixed" (the Open Ended Status field is set to None ).
  • When Commitment Events are NOT enabled in Anedot, Commitment Recurrences are logged as Opportunity objects (similar to one-time donations).

    • Commitment Recurrences are not linked to other Opportunity objects (e.g. future opportunities, or in any way link to the originating donations or other recurrences).
    • Recurring Donation object is created for the donation.
  • Submissions are linked to matching Contact records by email (or NPSP settings). Requires the Non-Profit Success Pack.

* " Reversed " transactions are logged as "Anedot Donation Exceptions".

  • If a JSON Payload is received with any of the following "Event" labels, a record of the object Anedot_Donation_Exception_c is created with the field mapping in the table below:

commitment_failed_to_process

​ - donation_chargeback_reversed

​ - donation_partially_refunded

​ - donation_refunded

​ - donation_voided

  • Each Event can be found in the Anedot Donation Exceptions ab of the Anedot app in Salesforce. Each message lists the Event, the reversal amount, and a link to the corresponding Opportunity in Salesforce (if available).

+ The corresponding Opportunity will also show linked exceptions under the "Related" > "Anedot Donation Exceptions" area.

+ Anedot does not default Opportunities with exceptions to any stage (e.g. if a donation is voided, mark the corresponding Opportunity as Closed-Lost ) since the desired stage may be different for each customer/Salesforce instance. If needed, this can be set up with custom mapping in Salesforce.

  • Custom Anedot Mapping is required to relay Gift of Any Amount products. This can be done using the product fields from submission_created event.

Field Mapping

The Anedot Fields match the Submission's Raw Data and the Salesforce Fields match the Request Body relay.


Submissions​

Anedot FieldSalesforce Field
"submission_created"event
(Submission) idid
emailemail
phonephone
titletitle
suffixsuffix
referrerreferrer
utmCodes termutm_term
paymentMethod cardTypecard_type
- (Donation) id anedotFeeAmount (net amt in Donations -> Entries) vendorFeeAmount (net amt in Donations -> Entries) - actionPagesFund id actionPagesFund name actionPagesFund identifier - netAmount (x100) grossAmount (x100) feesPaidByDonor ("true" or "false")donations { id fees {anedot_feesamount vendor_fees} fund { id name identifier } product{ net_amount gross_amount fees_paid_by_donor `
lastNamelast_name
created_atcreated_at
firstNamefirst_name
ipAddressip_address
occupationoccupation
(Product) idproduct_id
updatedAtupdated_at
utmCodes mediumutm_medium
utmCodes sourceutm_source
account idaccount_uid
middleNamemiddle_name
sourceCodesource_code
utmCodes contentutm_content
account nameaccount_name
address cityaddress_city
Internal SKU (Product)product_code
Product Name (Product)product_name
utmCodes campaignutm_campaign
employerNameemployer_name
Product Value ( in dollars - Product)product_value
(Action Page) idaction_page_id
address {line1}address_line_1
address {line2}address_line_2
address regionaddress_region
address countryaddress_country
"paymentMethod cardMonth / paymentMethod cardYear"card_expiration
donations amount (x100)donation_amount
actionPage nameaction_page_name
paymentMethod lastDigitscard_last_digits
donorProfileIddonor_profile_id
""referrer_to_form
paymentRequests responseTimecreated_at_iso8601
currentlyEmployed ("true" or "false")currently_employed
updatedAtupdated_at_iso8601
address postalCodeaddress_postal_code
paymentMethod typepayment_method_type
customFieldResponses {multiple fields}custom_field_responses
communicationsConsentEmailcommunications_consent_email
communicationsConsentPhonecommunications_consent_phone

Donation/Commitment​

Anedot FieldSalesforce Field
"donation_created" or "commitment created"event
created_atdate
"firstName lastName"name
emailemail
phonephone
titletitle
"hosted"origin
paymentMethod typesource
"completed"status
suffixsuffix
- (Donation) id anedotFeeAmount (net amt in Donations -> Entries) vendorFeeAmount (net amt in Donations -> Entries) - actionPagesFund id actionPagesFund name actionPagesFund identifier product { multiple fields } paymentMethod cardType paymentMethod lastDigits "" "paymentMethod cardMonth / paymentMethod cardYear"donations { id fees {anedot_feesamount vendor_fees} fund { id name identifier } product{``} card_type card_last_digits donation_project credit_card_expiration}
referrerreferrer
frequencyfrequency
lastNamelast_name
recurring ("true" or "false")recurring
created_atcreated_at
firstNamefirst_name
ipAddressip_address
netAmount (x100)net_amount
occupationoccupation
updatedAtupdated_at
account idaccount_uid
middleNamemiddle_name
sourceCodesource_code
account nameaccount_name
address cityaddress_city
""check_number
created_atdate_iso8601
grossAmount (x100)event_amount
""organization
employerNameemployer_name
(Submission) idsubmission_id
(Action Page) idaction_page_id
address {line1}address_line_1
address {line2}address_line_2
address regionaddress_region
(Commitment) idcommitment_uid
address countryaddress_country
actionPage nameaction_page_name
"1"commitment_index
donorProfileIddonor_profile_id
""referrer_to_form
totalAmount (x100)amount_in_dollars
donations paymentMethodIdpayment_method_id
paymentRequests responseTimecreated_at_iso8601
currentlyEmployed ("true" or "false")currently_employed
updatedAtupdated_at_iso8601
address postalCodeaddress_postal_code
Transactions Side-drawer Payment Methodpayment_description
customFieldResponses {multiple fields}custom_field_responses
recurring ("true" or "false")is_recurring_commitment
(Commitment) schedule_untilcommitment_recurring_until
communicationsConsentEmailcommunications_consent_email
communicationsConsentPhonecommunications_consent_phone


Action Page Events​

Anedot FieldSalesforce Field
"action_page_updated" or "action_page_created"event
(Action Page) idid
actionPage namename
actionPagesFund { id name } "100"funds{ id name percentage }

Custom Field Created​

Anedot FieldSalesforce Field
"custom_field_created"event
(custom field) idid
Field Labellabel
Custom Field Typeinput_type
Internal Nameinternal_name

Custom Templates

Custom Templates are available to allow custom data points to be relayed from Anedot to Salesforce. Custom Templates can be used to rename Anedot fields, allowing the data to be relayed under the Salesforce field name (see example below) , or to relay organization-specific data directly to the Custom Metadata fields set up within Salesforce.


Create a Custom Template​

  1. Optionally, in step 7 of the Connect Anedot to Salesforce instructions, add new fields or updated field names to the Custom Template field.

    1. See example below:

      {
      "close_date": "{`created_at`}",
      "donation_method": "CREDIT CARD",
      "action_page_id": "ANEDOT",
      "stage": "RECEIVED",
      "prefix": "{`title`}"
      }

      2. `close_date` 
      - customer-specific Salesforce Custom Metadata field (
      `payload.close_date`
      in Salesforce), added to relay and maps to Anedot's
      `created_at`
      field value.
      3. `donation_method`
      - customer-specific Salesforce Custom Metadata field (
      `payload.donation_method`
      in Salesforce), added to relay with the default value “CREDIT CARD”.
      4. `action_page_id`
      - overrides Anedot's action\_page\_id field (
      `payload.action_page_id`
      in Salesforce) so that Salesforce defaults it to “ANEDOT”.
      5. `stage`
      - customer-specific Salesforce Custom Metadata field (
      `payload.stage`
      in Salesforce), added to relay so that Salesforce defaults the object stage to “RECEIVED”.
      6. `prefix`
      - customer-specific Salesforce Custom Metadata field (
      `payload.prefix`
      in Salesforce), added to relay and maps to Anedot’s
      `title`
      field value.
  2. In Salesforce, you will need to create a Custom Metadata type for each field in the template.

  3. Once Custom Metadata has been created, you will then need to setup custom Anedot Mapping in order to map each new Custom Metadata type to the corresponding Salesforce field. Continue below to learn more!


Anedot Mapping and Custom Metadata

Leverage Anedot Mapping and Custom Metadata to configure Anedot fields that are not part of the default mappings. This allows you to map Anedot fields to different Salesforce fields or enable your Salesforce instance to accommodate additional field mappings beyond the standard options provided by the Anedot integration.

Default Anedot Fields are available within Custom Metadata by default when the Anedot Package is downloaded during setup.

To map Anedot fields from the relay (payload) that are not included in the default mappings or to map them to different Salesforce fields, you will need to create an Anedot Mapping in the Anedot Salesforce application.

The Anedot Mapping tab allows you to map Anedot relay fields (available by Event Type) to specific Salesforce fields (available by Object Type) .

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

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

For Anedot fields available in the relay but not mappable, custom mapping must be set up to ensure Salesforce processes the data correctly, which is necessary for users of Custom Templates .

Continue below to learn more!


Default Anedot Fields​

donation_completed​

Available FieldField Type
payload.account_nametext
payload.account_uidtext
payload.action_page_idtext
payload.action_page_nametext
payload.address_citytext
payload.address_countrytext
payload.address_line_1text
payload.address_line_2text
payload.address_postal_codetext
payload.address_regiontext
payload.amount_in_dollarsnumber
payload.commitment_uidtext
payload.communications_consent_emailboolean
payload.communications_consent_phoneboolean
payload.created_atdatetime
payload.created_at_iso8601datetime
payload.currently_employedboolean
payload.donation.credit_card_expirationtext
payload.donation.card_last_digitsnumber
payload.donation.card_typetext
payload.donor_profile_idtext
payload.emailemail
payload.employer_nametext
payload.event_amountnumber
payload.first_nametext
payload.ip_addresstext
payload.is_recurring_commitmentboolean
payload.last_nametext
payload.middle_nametext
payload.net_amountnumber
payload.occupationtext
payload.origintext
payload.payment_method_idtext
payload.phonephone
payload.recurringboolean
payload.referrertext
payload.referrer_to_formtext
payload.source_codetext
payload.submission_idtext
payload.suffixtext
payload.titletext
payload.updated_atdatetime
payload.updated_at_iso8601datetime

commitment_created​

Available FieldField Type
payload.action_page_idtext
payload.action_page_nametext
payload.address_citytext
payload.address_countrytext
payload.address_line_1text
payload.address_line_2text
payload.address_postal_codetext
payload.address_regiontext
payload.cancellation_reasontext
payload.cancelled_ondatetime
payload.cancelled_on_iso8601datetime
payload.communications_consent_emailboolean
payload.communications_consent_phoneboolean
payload.created_atdatetime
payload.created_at_iso8601datetime
payload.currently_employedboolean
payload.donor_profile_idtext
payload.emailemail
payload.employer_nametext
payload.first_nametext
payload.frequencytext
payload.idtext
payload.ip_addresstext
payload.last_nametext
payload.middle_nametext
payload.next_capture_ondatetime
payload.occupationtext
payload.payment_method_idtext
payload.payment_status_messagetext
payload.phonephone
payload.referrertext
payload.referrer_to_formtext
payload.submission_idtext
payload.suffixtext
payload.tokentext
payload.total_amount_in_dollarstext
payload.updated_atdatetime
payload.whodunnittext

submission_created​

Available FieldField Type
payload.account_nametext
payload.account_uidtext
payload.action_page_idtext
payload.action_page_nametext
payload.address_citytext
payload.address_countrytext
payload.address_line_1text
payload.address_line_2text
payload.address_postal_codetext
payload.address_regiontext
payload.communications_consent_emailboolean
payload.communications_consent_phoneboolean
payload.created_atdatetime
payload.created_at_iso8601datetime
payload.currently_employedboolean
payload.donation_amountnumber
payload.donation.card_typetext
payload.donation.credit_card_expirationtext
payload.donor_profile_idtext
payload.emailemail
payload.employer_nametext
payload.first_nametext
payload.idtext
payload.ip_addresstext
payload.last_nametext
payload.middle_nametext
payload.occupationtext
payload.payment_method_typetext
payload.phonephone
payload.product_codetext
payload.product_idtext
payload.product_nametext
payload.product_valuetext
payload.referrertext
payload.referrer_to_formtext
payload.source_codetext
payload.suffixtext
payload.updated_atdatetime
payload.utm_campaigntext
payload.utm_contenttext
payload.utm_mediumtext
payload.utm_sourcetext
payload.utm_termtext

action_page_created and action_page_updated​

Available FieldField Type
payload.idtext
payload.nametext

Create Custom Metadata​

To create and view Custom Metadata fields, follow the steps below:

  1. Use the following Salesforce instance path to access Custom Metadata: /lightning/setup/CustomMetadata/home .
  2. Next, select the Anedot Field label to access the Anedot Field page.

3. Then select Manage Anedot Fields .

4. Within the Anedot Field page, click New to add a new mapping.

5. Use parameters that match the format from other fields. Below is a table with tips and examples for each required data field.

6. Once all required fields are completed, click Save .

FieldTips
LabelThis is how the field will appear in the relay. 1. For non-custom or *nested fields: payload.field_name 2. For custom fields: `payload.cf.`field_label OR payload_cf_field_label . 1. Enter the field label in all lowercase, using an underscore (\_) to represent spaces. 2. For hidden fields, use the `internal_name` entered within the Anedot Page Builder under the Form tab. 3. For \*nested fields: `payload.`nested_object`.`field_name
Anedot Field NameThis field is autofilled using the Label data. Periods (.) must be replaced with an underscore (_) for this field.
Data TypeThis is the type of data being relayed. 1. Text - fields with alphanumeric values (majority of Anedot fields). 2. Number - fields with numeric values (e.g. amount). 3. Boolean - fields with true/false values (e.g. communication consent fields) 4. Email - fields with email value. 5. Phone - fields with phone value. 6. Date - fields with date value (does not support time) 7. DateTime - fields with date and time value (used for Anedot date fields)
Event Typethe Anedot relay event where the field occurs (e.g. donation_completed ) ​ Use a comma (,) to include multiple event types.
PathThis field must be exact. 1. For non-custom fields (and *nested fields): must match the Label. 2. For custom fields: must appear as it does in the relay. 1. Example: payload.custom_field_responses.field label`` .

Example for Non-Custom, Non-Nested field:

Name field to be found in the donation_completed and submission_created events.

Label: payload.name   
Anedot Field Name: payload_name
Data Type: Text
Event Type: donation_completed, submission_created
Path: payload.name

Example for Custom Field:

Enter your T-shirt Size text custom field.

Label: payload.cf.enter_your_t-shirt_size  
Anedot Field Name: payload_cf_enter_your_t_shirt_size
Data Type: Text
Event Type: donation_completed, submission_created
Path: payload.custom_field_responses.enter_your_t-shirt_size

Example for *Nested Field:

Anedot Fee field to be relayed in the donation_completed event.

Label: payload.donation.fees.anedot_fees.amount  
Anedot Field Name: payload_donation_fees_anedot_fees_amount
Data Type: Text
Event Type: donation_completed
Path: payload.donation.fees.anedot_fees.amount

* Nested Fields are Anedot Fields in relays that are nested within the payload object. In the example below, Anedot Fees are typically nested in the donation object within the donation_completed payload:

"payload": `{`  
"date": "2024-08-26 17:09:05 UTC",
"name": "Annie Dote",
"email": "[[email protected]](/cdn-cgi/l/email-protection)",
"phone": "12252501301",
"title": "",
"origin": "hosted",
"source": "credit_card",
"status": "completed",
"suffix": "",
"donation": `{`
"id": "dfbeacd89f69a860fca11",
"fees": `{`
"anedotFees": `{`
"amount": "0.46"
`}`,
"vendorFees": []

Continue to the step below for further instructions on how to map Custom Metadata fields to the Salesforce Object within Anedot Mapping!


Set Up Anedot Mapping​

Once the Custom Metadata field has been created, it needs to be mapped to a Salesforce Object field. To map the Custom Metadata field to a Salesforce Object, follow the steps below:

  1. Access Anedot Mapping within the Anedot App.

  2. Next, select the Salesforce Object you would like to map to from the Target dropdown available in the top right corner.

    1. Options: Contact, Opportunity, Recurring Donation, Campaign Member.

    3. Click Create New Field Mapping .

  3. Select the Event Type used in the Custom Metadata field.

5. Under Attribute find the Path name for the field. 6. Choose the Salesforce Field that should be populated from the Custom Metadata field. 7. Click Save .

Example: The image provided below is an example of mapping payload.card_type to the Contact Description Salesforce field.


Anedot Settings

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

Anedot Setting FieldOptionsNotes
Create GAU Allocation RecordsCheckbox(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 FieldDropdown (default: Total Donation Amount )Default amount used to track donations.
Integration Error Email Addresstext 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 AnedotCheckbox(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 LostDefault opportunity stage for lost opportunities (used for future opportunities linked to canceled commitments).
Single Donation Record TypeDropdown (default: NPSP Default )Default record type for new relays.
URL for webhookInstance-specificInstance-specific URL, used for the Salesforce URL when configuring the Salesforce integration in Anedot.
Source ObjectDropdown (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 above is based on a default NPSP instance (no customization). Some object-specific settings, such as Campaign Member Status or Opportunity Stages, will have different dropdown options depending on customizations set for the organization. Our default settings map to default NPSP/Salesforce fields (i.e. status, stage, etc) where it is available. If it is not available, it is up to the organization to map the settings appropriately.


Payload Examples

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"
`}`
`}`

Action Page Events​

`{`  
"event": "action_page_updated",
"payload": `{`
"id": "469627e5-adac-1234-8191-080a060e2379",
"name": "General Fund",
"funds": [`{`
"id": "75bb50a0-69f3-4f98-8f6b-ac67fc1b1764",
"name": "General Fund",
"percentage": 100
`}`]
`}`
`}`

Custom Field Created​

`{`  
"event": "custom_field_created",
"payload": `{`
"id": "fd9e7338-9b1b-45eb-8644-1fa8fd47d18a",
"label": "Would you like to subscribe to our newsletter?",
"input_type": "question",
"internal_name": "would_you_like_to_subscribe_to_our_newsletter_"
`}`
`}`

Failure​

[`{`  
"message": "INVALID_HEADER_TYPE",
"errorCode": "INVALID_AUTH_HEADER"
`}`]

Troubleshoot

If you receive Auth Failure responses in Anedot (see error below), you may need to review your Salesforce Login History to investigate the issue more closely.

`{` "error": "Authentication failed, check username, password and security token" `}`)

To review your Salesforce Login History , follow the steps below:

  1. Access Setup in Salesforce.
  2. In Quick Find, go to Users .
  3. Select Users .
  4. Access Salesforce Classic view.
  5. Under Users, access the Login History tab.
  6. If you see something like "Username-Password Flow Disabled" - you will need to "Allow OAuth Username-Password Flows".
  7. If you see "Password Lockout" - you will either need to wait until the lockout period is done OR reset your password.

If relays are not passing to Salesforce (but you see them as successful in Anedot), it may be related to a Storage Limit issue.

To verify if you are facing a Storage Limit issue, follow the steps below:

  1. Go to Setup in Salesforce
  2. In Quick Find, search Storage .
  3. Select Storage Usage .
  4. Review the Storage Usage. If it is above 60% and you are not receiving relays, this may be the cause. To resolve the issue, delete older records.

Related Articles

Blackbaud Raiser's Edge DonorPerfect Iterable NetFile SendGrid