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

Salesforce Classic

A comprehensive guide for setting up, managing, and troubleshooting the Anedot integration with Salesforce Classic, including package installation, custom metadata, and field mapping.

Salesforce is a leading Customer Relationship Management (CRM) platform used by organizations to manage supporters, donations, processes, and communications.

Connecting Anedot to Salesforce requires a proper setup to ensure accurate and reliable data sync between the two systems. Because the process involves configuration and testing, we recommend completing the setup in both Anedot and Salesforce sandbox environments before going live.

To avoid impacting live data, all initial setup should be done in a sandbox environment.


Table of Contents


Get Started

To begin, contact our Support team. We’ll create a sandbox account for your organization in Anedot. After successful testing, we’ll enable the Salesforce integration on your live account.

Before you begin, ensure your Salesforce user profile has the Download AppExchange Packages permission enabled.


Install the Anedot Package

Follow these steps to install the Anedot package in Salesforce:

  1. Log in with 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. Choose Install for All Users.

  6. Click Install.

  7. Approve third-party access by checking
    Yes, grant access to these third-party websites, then click Continue.

    Note: This grants access to Salesforce APEX API.

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

  9. You’ll receive an email confirmation from Salesforce when installation is complete.


Configure the Anedot Package in Salesforce

  1. Open the App Launcher in Salesforce.

  2. Select Anedot.

  3. Navigate to the Anedot Settings tab.

  4. In the top-right, click New to create your Anedot Settings record.

  5. Set your default values (e.g. Opportunity Stage).

  6. Click Create when finished.

  7. Copy the Webhook URL from the settings page—this will be used to complete the connection from Anedot.


Anedot Settings

Note: These defaults are based on a standard NPSP instance. If your organization has custom stages, statuses, or record types, you’ll need to adjust mappings accordingly.

Setting Options Description
Create GAU Allocation Records Checkbox (default: checked) Automatically create General Accounting Unit records.
Default Campaign Member Status Dropdown (default: Planned) Sets default status for campaign members.
Donation Amount Field Dropdown (default: Total Donation Amount) Sets which value to use as donation amount.
Integration Error Email Text field Email address to receive integration error alerts.
Opportunity Closed-Won Stage Dropdown (default: Closed Won) Default stage for successful opportunities.
Opportunity Open Stage Dropdown (default: Prospecting) Default stage for open (future) opportunities.
Update Contact Info from Anedot Checkbox (default: checked) Updates existing contacts using matched email.
Default Campaign Campaign search Assigns all records to one campaign instead of Action Page campaigns.
Default GAU GAU search Assigns all donations to one fund.
Opportunity Closed-Lost Stage Dropdown (default: Closed Lost) Used for failed or canceled donations.
Single Donation Record Type Dropdown (default: NPSP Default) Sets record type for single donations.
Webhook URL Auto-generated Use this to connect Salesforce in Anedot.
Source Object Dropdown (NPSP or Salesforce) Defines which Salesforce platform to map to.
 

Connect Anedot to Salesforce

  1. Log in to Anedot.

  2. Open the fundraising account you wish to connect.

  3. Navigate to Settings > Integrations > Directory.

  4. Click + New Connection.

  5. Choose Salesforce from the list.

  6. Enter your Salesforce Sub-Domain (e.g. yourname if your domain is yourname.my.salesforce.com).

  7. (Optional) Add a Custom Field Mapping template.

    Example Template:

    {
    "close_date": "",
    "donation_method": "CREDIT CARD",
    "action_page_id": "ANEDOT",
    "stage": "RECEIVED",
    "name": " ",
    "prefix": "",
    "status": "Donor"
    }
  8. Click Save.

  9. You’ll be redirected to Salesforce to log in and authorize access.

Ensure the user connecting Anedot to Salesforce has Read, Write, and Edit access to the following objects:

  • Contacts 

  • Opportunities 

  • Campaigns & Campaign Members 

  • GAU Allocations

  • Accounts 

       10. Once permissions are confirmed, the connection is complete!


Data Relays

Anedot automatically sends data from Donation and Lead Pages to Salesforce.

  • Action Pages are synced as Campaigns in Salesforce.

  • You can set a default Campaign for all submissions in Anedot Settings.

    • Example: If you receive donations from multiple vendors, you may want all submissions to be routed to a dedicated “Anedot” Campaign in Salesforce.
      Data Relays - Default Campaign


Reversed Transactions

Reversed or refunded transactions are logged as Anedot Donation Exceptions in Salesforce.

  • If a payload includes any of the following event labels, a record is created in the Anedot_Donation_Exception__c object:

    • commitment_failed_to_process

    • donation_chargeback_reversed

    • donation_partially_refunded

    • donation_refunded

    • donation_voided

Each exception record includes the event type, reversal amount, and a link to the related Salesforce Opportunity, if available.

  1. Viewing Exceptions in Salesforce
    1. Find all events in the Anedot Donation Exceptions tab within the Anedot app.

    2. The related Opportunity record will also display linked exceptions under the "Related" > Anedot Donation Exceptions section.

      • Anedot does not automatically change the Opportunity stage for exceptions. For example, a voided donation will not be marked as Closed–Lost unless you set that up via custom mapping in Salesforce.


Gift of Any Amount Products

To relay Gift of Any Amount products, you'll need to create a Custom Anedot Mapping using product fields from the submission_created event.


Custom Templates

Custom Templates allow you to relay custom data fields from Anedot to Salesforce. They can be used to:

  • Rename Anedot fields so they match Salesforce field names

  • Send organization-specific data directly to Custom Metadata fields in Salesforce


Creating a Custom Template

During Step 7 of the Connect Anedot to Salesforce process, you have the option to define or override field names using a Custom Template.

  • Example Template:
    {
    "close_date": "",
    "donation_method": "CREDIT CARD",
    "action_page_id": "ANEDOT",
    "stage": "RECEIVED",
    "prefix": ""
    }

Next Steps in Salesforce

  1. For each field in your Custom Template, create a Custom Metadata record in Salesforce.

  2. After the metadata records are created, configure a corresponding Anedot Mapping in Salesforce to connect each field to its appropriate Salesforce object field.

This setup ensures your custom field data is relayed and processed correctly within Salesforce.

Continue below to learn how to create and configure Custom Metadata and Anedot Mappings.


Anedot Mapping and Custom Metadata

Anedot Mapping and Salesforce Custom Metadata give you the flexibility to map Anedot fields—especially those not included in the default setup—to custom Salesforce fields. This is essential for organizations with unique data requirements or customized Salesforce environments.

When the Anedot Package is installed, Default Anedot Fields are automatically included in Salesforce Custom Metadata. However, if you need to relay additional fields or map existing ones differently, you’ll need to:

  1. Create new Custom Metadata fields in Salesforce.

  2. Map them to your Salesforce objects using Anedot Mapping.

Event Type:
 donation_completedcommitment_createdsubmission_createdaction_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. Select New to create a custom mapping.
    Metadata 4

  4. Fill in the following required fields:

    • 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., titlecreated_at)

Examples

1. Standard Field
Mapping name from both donation_completed and submission_created:

  • Label: payload.name

  • Field Name: payload_name

  • Type: Text

  • Event Type: donation_completed, submission_created

  • Path: payload.name

2. Custom Field
Mapping a custom "T-shirt Size" field:

  • Label: payload.cf.enter_your_t-shirt_size

  • Field Name: payload_cf_enter_your_t_shirt_size

  • Type: Text

  • Event Type: donation_completed, submission_created

  • Path: payload.custom_field_responses.enter_your_t-shirt_size

3. Nested Field
Mapping a nested donation fee:

  • Label: payload.donation.fees.anedot_fees.amount

  • Field Name: payload_donation_fees_anedot_fees_amount

  • Type: Text

  • Event Type: donation_completed

  • Path: payload.donation.fees.anedot_fees.amount

Note: Nested fields are deeply embedded fields within objects inside the payload.



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.