---
title: DonorPerfect
description: Connect Anedot to DonorPerfect to automatically relay donation data, including fund allocations and hidden custom fields, with flexible setup options for Action Pages, Teams, and recurring gifts.
---

[Skip to content](https://help.anedot.com/knowledge/donorperfect#main-content)

[![anedot-logo](https://help.anedot.com/hubfs/anedot-logo.svg)](https://help.anedot.com/knowledge?hsLang=en)

Open main navigation

Close main navigation

- [Get Support ⤴](https://www.anedot.com/getsupport)

[Get Support ⤴](https://www.anedot.com/getsupport)

 Here to help 👋

- There are no suggestions because the search field is empty.

1. [Public Help Center](https://help.anedot.com/knowledge?hsLang=en)
2. [Integrations](https://help.anedot.com/knowledge/integrations?hsLang=en)
3. [CRM & Donor Management Systems](https://help.anedot.com/knowledge/integrations?hsLang=en#crm-donor-management-systems)

# DonorPerfect

## Connect Anedot to DonorPerfect to automatically relay donation data, including fund allocations and hidden custom fields, with flexible setup options for Action Pages, Teams, and recurring gifts.

DonorPerfect is a donor management platform used by nonprofits for fundraising, marketing, automation, and integrations.

#### How It Works

Anedot relays **financial data** from Donation Pages directly to DonorPerfect, enabling seamless tracking and donor record updates.

---

### Table of Contents

- [Connecting Anedot to DonorPerfect](https://help.anedot.com/knowledge/donorperfect#connect)
- [Data Relays](https://help.anedot.com/knowledge/donorperfect#data) 
    - [Custom Hidden Field](https://help.anedot.com/knowledge/donorperfect#hidden)
    - [Single vs. Multi-Fund Donations](https://help.anedot.com/knowledge/donorperfect#single)
    - [Viewing Data in DonorPerfect](https://help.anedot.com/knowledge/donorperfect#viewing)
- [Field Mapping](https://help.anedot.com/knowledge/donorperfect#field)
- [Payload Data](https://help.anedot.com/knowledge/donorperfect#payload-data)
- [Payload Templates](https://help.anedot.com/knowledge/donorperfect#payload-templates)

---

### Connecting Anedot to DonorPerfect

To set up the integration:

1. In your Anedot account, go to **Settings \> Integrations \> Directory**.
2. Click the blue **+ New Connection** button.
3. Select **DonorPerfect** from the directory.
4. Choose which **Action Pages** to sync:
   
     - All pages are selected by default.
     - To exclude specific pages, enter a comma-separated list of Action Page IDs.
5. *(Optional)* Limit the integration to a specific **Team**.
6. Paste your **DonorPerfect API Key**.
7. Click **Save** to complete the setup.

*You can edit Action Pages, Team scope, and credentials at any time after setup.*

---

### Data Relays

#### Custom Hidden Field

Anedot supports the following **Custom Hidden Fields**, which must be configured within the Action Page Builder under Form \> Hidden Fields:

Donation Relay

- `solicit_code`
- `sub_solicit_code`
- `campaign`
- `gift_aid_date`
- `gift_aid_amt`
- `gift_aid_eligible_g`
- `gift_type`
- `gift_narrative`
- `gfname`
- `glname`
- `memory_honor`
- `old_amount`
- `receipt_delivery_g`
- `acknowledgepref`
- `transaction_id`
- `ty_letter_no`

Pledge Relay

- `solicit_code`
- `sub_solicit_code`
- `campaign`
- `gift_narrative`
- `receipt_delivery_g`
- `ty_letter_no`
- `vault_id`

`receipt_delivery_g` Response Codes:

- L - Letter
- E - Email
- B - Both
- N - Do not acknowledge

**Set Up Custom Hidden Field Values**

Hidden field values can be configured as **Global Values**, **Page-Level Values**, or by using **URL Parameters**.

- **Global Values** allow the same hidden field and value to be reused across multiple pages. This value can be set when the hidden field is created.
- **Page-Level Values** allow the same hidden field to be used across multiple pages while assigning a **different value for each page**. To configure this, leave the **Global Value** field blank, then go to **Settings → Sharing → Page Specific Values** to set the value for each page.
- **URL Parameters** can also be used to apply a **Page-Specific Value** dynamically. [Click here for instructions on using URL parameters.](https://help.anedot.com/knowledge/url-parameter?hsLang=en)

*All custom hidden field values are included in both one-time and recurring donation payloads.*

---

#### Single vs. Multi-Fund Donations

- **Single Fund:** Uses `@split_gift='N'` and sends one relay.
- **Multi-Fund:** Uses `@split_gift='Y'` and sends one relay per fund:
  
    - One **main gift** relay with `@record_type='M'`
    - One relay per fund with `@record_type='G'`

---

#### Viewing Data in DonorPerfect

- **New or existing donor records** are matched using the email address.
- Use **Quick Search** to find donor records by email.  
  ![CleanShot 2025-06-05 at 08.20.45@2x](https://help.anedot.com/hs-fs/hubfs/CleanShot%202025-06-05%20at%2008.20.45@2x.png?width=670&height=423&name=CleanShot%202025-06-05%20at%2008.20.45@2x.png)
- The **Created Date** shows when the record was added; the **Modified Date** reflects the most recent successful relay.

---

#### Where to View Donations:

- **Donor Record:** View contact info and most recent donation.  
  ![CleanShot 2025-06-05 at 08.22.14@2x](https://help.anedot.com/hs-fs/hubfs/CleanShot%202025-06-05%20at%2008.22.14@2x.png?width=670&height=410&name=CleanShot%202025-06-05%20at%2008.22.14@2x.png)
- **Gifts Tab:** See a complete history of donations from that donor.  
  ![CleanShot 2025-06-05 at 08.22.38@2x](https://help.anedot.com/hs-fs/hubfs/CleanShot%202025-06-05%20at%2008.22.38@2x.png?width=670&height=410&name=CleanShot%202025-06-05%20at%2008.22.38@2x.png)

---

### Field Mapping<https://anedot.help/integrations/donorperfect?hsLang=en#field-mapping>

#### Donor Relay<https://anedot.help/integrations/donorperfect?hsLang=en#donor-relay>

> *This is related to the **SaveDonor Template**.*

| Anedot Field | Value from Anedot | DonorPerfect Field |
| --- | --- | --- |
| donor\_id | "0" | donor\_id |
| firstName | firstName | first\_name |
| lastName | lastName | last\_name |
| middleName | middleName | middle\_name |
| suffix | suffix | suffix |
| title | title | title |
| title | title (or, if not present, firstName) | salutation |
| N/A | "" | prof\_title |
| N/A | "" | opt\_line |
| address.line1 | address {line1} | address |
| address.line2 | address {line2} | address2 |
| address.city | address {city} | city |
| address.region | address {region} | state |
| address.postal\_code | address {postal\_code} | zip |
| address.country | address {country} | country |
| N/A | "" | address\_type |
| N/A | "" | home\_phone |
| N/A | "" | business\_phone |
| N/A | "" | fax\_phone |
| phone | phone | mobile\_phone |
| email | email | email |
| N/A | "N" | org\_rec |
| N/A | "IN" | donor\_type |
| N/A | "N" | nomail |
| N/A | "" | nomail\_reason |
| N/A | "" | narrative |
| \*donor\_rcpt\_type  | *donor\_rcpt\_type (otherwise "I")* | donor\_rcpt\_type |
| N/A | "Anedot" | user\_id |

*\*Custom Hidden Fields must be added to the Action Page in order to be relayed.*

#### Donation Relay

> *This is related to the **SaveGift Template***

| Anedot Field | Value from Anedot | DonorPerfect Field |
| --- | --- | --- |
| donor\_id | donor\_id (from Donor Relay’s Response) | donor\_id |
| gift\_id | "0" | gift\_id |
| created\_at | created\_at | gift\_date |
| total\_amount / processed total | amount | amount |
| gl\_code | gl\_code | gl\_code |
| \*solicit\_code | solicit\_code | solicit\_code |
| \*sub\_solicit\_code  | sub\_solicit\_code | sub\_solicit\_code |
| \*campaign  | campaign | campaign |
| \*gift\_type  | gift\_type | gift\_type |
| split\_gift | split\_gift | split\_gift |
| initial\_payment | pledge\_payment | pledge\_payment |
| reference | reference | reference |
| \*transaction\_id  | transaction\_id | transaction\_id |
| \*memory\_honor  | memory\_honor | memory\_honor |
| \*gfname | gfname | gfname |
| \*glname  | glname | glname |
| batch\_no | batch\_no | batch\_no |
| \*gift\_narrative  | gift\_narrative | gift\_narrative |
| \*ty\_letter\_no | ty\_letter\_no | ty\_letter\_no |
| gift\_rk | gift\_rk | gift\_rk |
| plink | plink | plink |
| nocalc | nocalc | nocalc |
| \*old\_amount | old\_amount | old\_amount |
| currency | currency | currency |
| \*gift\_aid\_amt  | gift\_aid\_amt | gift\_aid\_amt |
| \*gift\_aid\_eligible\_g  | gift\_aid\_eligible\_g | gift\_aid\_eligible\_g |
| \*gift\_aid\_date  | gift\_aid\_date | gift\_aid\_date |
| receipt | receipt | receipt |
| \*receipt\_delivery\_g  | receipt\_delivery\_g | receipt\_delivery\_g |
| \*acknowledgepref  | acknowledgepref | acknowledgepref |
| "Anedot" | "Anedot" | user\_id |

*\*Custom Hidden Fields must be added to the Action Page in order to be relayed.*

#### Pledge Relay<https://anedot.help/integrations/donorperfect?hsLang=en#pledge-relay>

> This is related to the **SavePledge Template** *(commitments and recurrences)*.

| Anedot Field | Value from Anedot | DonorPerfect Field |
| --- | --- | --- |
| donor\_id | donor\_id (from Donor Relay’s Response) | donor\_id |
| created\_at | created\_at | gift\_date |
| commitment\_schedule\_start | start\_date | start\_date |
| total | total | total |
| bill | bill | bill |
| commitment\_frequency | frequency | frequency |
| reminder | reminder | reminder |
| gl\_code | gl\_code | gl\_code |
| \*solicit\_code  | solicit\_code | solicit\_code |
| initial\_payment | initial\_payment | initial\_payment |
| \*sub\_solicit\_code  | sub\_solicit\_code | sub\_solicit\_code |
| writeoff\_amount | writeoff\_amount | writeoff\_amount |
| writeoff\_date | writeoff\_date | writeoff\_date |
| \*campaign  | campaign | campaign |
| membership\_type | membership\_type | membership\_type |
| membership\_level | membership\_level | membership\_level |
| membership\_enr\_date | membership\_enr\_date | membership\_enr\_date |
| membership\_exp\_date | membership\_exp\_date | membership\_exp\_date |
| membership\_link\_id | membership\_link\_id | membership\_link\_id |
| address\_id | address\_id | address\_id |
| \*gift\_narrative  | gift\_narrative | gift\_narrative |
| \*ty\_letter\_no  | ty\_letter\_no | ty\_letter\_no |
| \*vault\_id  | vault\_id | vault\_id |
| \*receipt\_delivery\_g  | receipt\_delivery\_g | receipt\_delivery\_g |
| contact\_id | contact\_id | contact\_id |
| "Anedot" | "Anedot" | user\_id |

*\*Custom Hidden Fields must be added to the Action Page in order to be relayed.*

---

### Payload Data

#### **Donor Contact Details**

#### Request Body (Find Donor)

```
{  "query": "select donor_id, first_name, last_name, address, city, state, zip from dp where email = 'annie@anedot.com'"}
```

#### Request Body (Create Donor)

```
{  "first_name": "Annie",  "last_name": "Dote",  "middle_name": "",  "suffix": "",  "title": "",  "salutation": "",  "prof_title": "",  "opt_line": "",  "address": "123 Washington St",  "address2": "",  "city": "New York",  "state": "NY",  "zip": "10011",  "country": "US",  "address_type": "",  "home_phone": "",  "business_phone": "",  "fax_phone": "",  "mobile_phone": "2252501301",  "email": "annie@anedot.com",  "org_rec": "N",  "donor_type": "IN",  "nomail": "N",  "nomail_reason": "",  "narrative": "",  "donor_rcpt_type": "I",  "user_id": "Anedot"}
```

#### Response Body (No Donor Found)

```
{  "result": null}
```

#### Response Body (Create Donor)

```
{  "result": {    "record": {      "field": {        "id": "donor_id",        "name": "donor_id",        "value": "12345"      }    }  }}
```

#### Response Body (Donor Found)

```
{  "result": {    "record": {      "field": [        {          "id": "donor_id",          "name": "donor_id",          "value": "12345"        },        {          "id": "first_name",          "name": "first_name",          "value": "Annie"        },        {          "id": "last_name",          "name": "last_name",          "value": "Dote"        },        {          "id": "address",          "name": "address",          "value": "123 Washington St"        },        {          "id": "city",          "name": "city",          "value": "New York"        },        {          "id": "state",          "name": "state",          "value": "NY"        },        {          "id": "zip",          "name": "zip",          "value": "10011"        }      ]    }  }}
```

#### Response Body (Failure)

```
{  "result": {    "field": {      "id": "success",      "name": "success",      "value": "false",      "reason": "login failed"    }  }}
```

#### **Donation Details**

#### Request Body

```
{  "gift_id": 0,  "donor_id": 12345,  "record_type": "G",  "gift_date": "3/24/26",  "amount": 100.00,  "gl_code": "UD",  "split_gift": "N",  "pledge_payment": "Y",  "reference": "Online Gift",  "fmv": 0,  "batch_no": 0,  "glink": "",  "plink": "",  "nocalc": "N",  "currency": "USD",  "receipt": "N",  "user_id": "Anedot",  "solicit_code": "",  "sub_solicit_code": "",  "campaign": "",  "gift_aid_date": "",  "gift_aid_amt": "",  "gift_aid_eligible_g": "",  "gift_type": "ANEDOT",  "gift_narrative": "",  "gfname": "",  "glname": "",  "memory_honor": "",  "old_amount": "",  "receipt_delivery_g": "N",  "acknowledgepref": "",  "transaction_id": "",  "ty_letter_no": ""}
```

#### Response Body (Success)

```
{  "result": {    "record": {      "field": {        "id": "gift_id",        "name": "gift_id",        "value": "67890"      }    }  }}
```

 

#### **Pledge Details (Recurring/Commitment)**

**Request Body**

```
{  "gift_id": 0,  "donor_id": 12345,  "gift_date": "3/24/26",  "start_date": "3/24/26",  "total": 0,  "bill": null,  "frequency": "M",  "reminder": "Y",  "initial_payment": "N",  "gl_code": "UD",  "writeoff_amount": null,  "writeoff_date": null,  "user_id": "Anedot",  "membership_type": null,  "membership_level": null,  "membership_enr_date": null,  "membership_exp_date": null,  "membership_link_id": null,  "address_id": null,  "contact_id": null,  "solicit_code": "",  "sub_solicit_code": "",  "campaign": "",  "gift_narrative": "",  "receipt_delivery_g": "N",  "ty_letter_no": "",  "vault_id": ""} 
```

#### Response Body (Success)

```
{  "result": {    "record": {      "field": {        "id": "gift_id",        "name": "gift_id",        "value": "67891"      }    }  }}
```

---

### Payload Templates

#### SaveDonor

```
    @donor_id=0,    @first_name= resource_first_name,    @last_name= resource_last_name,    @middle_name= resource_middle_name,    @suffix= resource_suffix,    @title= resource_title,    @salutation="",    @prof_title="",    @opt_line="",    @address= resource_address_line_1,    @address2= resource_address_line_2,    @city= resource_address_city,    @state= resource_address_region,    @zip= resource_address_postal_code,    @country= resource_address_country,    @address_type="",    @home_phone="",    @business_phone="",    @fax_phone="",    @mobile_phone= resource_phone,    @email= resource_email,    @org_rec='N',    @donor_type='IN',    @nomail='N',    @nomail_reason="",    @narrative="",    @donor_rcpt_type='I',    @user_id='Anedot'
```

#### SaveGift

```
      @gift_id=0,      @donor_id=<queried from DP>,      @record_type='G',      @gift_date=resource created_at,      @amount=resource total_amount,      @gl_code="",      @solicit_code="",      @sub_solicit_code="",      @campaign="",      @gift_type="",      @split_gift='N',      @pledge_payment='N' or 'Y',      @reference=resource id,      @transaction_id="",      @memory_honor="",      @gfname="",      @glname="",      @fmv=0,      @batch_no=0,      @gift_narrative="",      @ty_letter_no="",      @glink="",      @plink=<pledge_id queried from dp>,      @nocalc='N',      @old_amount="",      @currency='USD',      @gift_aid_date="",      @gift_aid_amt="",      @gift_aid_eligible_g="",      @receipt='N',      @receipt_delivery_g='N',      @acknowledgepref='3DD',      @user_id='Anedot'
```

#### SavePledge

```
      @gift_id=0,      @donor_id=<donor_id queried from DP>,      @gift_date=resource created_at,      @start_date=resource commitment schedule,      @total=0,      @bill="",      @frequency=commitment frequency --> ('A', 'Q', 'M', or 'S'),      @reminder='Y',      @gl_code="",      @solicit_code="",      @initial_payment='N',      @sub_solicit_code="",      @writeoff_amount="",      @writeoff_date="",      @user_id='Anedot',      @campaign="",      @membership_type="",      @membership_level="",      @membership_enr_date="",      @membership_exp_date="",      @membership_link_id="",      @address_id="",      @gift_narrative="",      @ty_letter_no="",      @vault_id="",      @receipt_delivery_g="",      @contact_id=""
```

- [Get Started](https://help.anedot.com/knowledge/get-started?hsLang=en#main-content)

    - [Anedot 101](https://help.anedot.com/knowledge/get-started?hsLang=en#anedot-101)
    - [Apply for an Account](https://help.anedot.com/knowledge/get-started?hsLang=en#apply-for-an-account)
    - [Security](https://help.anedot.com/knowledge/get-started?hsLang=en#security)
- [Action Pages](https://help.anedot.com/knowledge/action-pages?hsLang=en#main-content)

    - [Action Page Basics](https://help.anedot.com/knowledge/action-pages?hsLang=en#action-page-basics)
    - [Page Builder](https://help.anedot.com/knowledge/action-pages?hsLang=en#page-builder)
    - [Advanced Features](https://help.anedot.com/knowledge/action-pages?hsLang=en#advanced-features)
    - [State Specific Pages](https://help.anedot.com/knowledge/action-pages?hsLang=en#state-specific-pages)
- [Finance](https://help.anedot.com/knowledge/finance?hsLang=en#main-content)

    - [Management & Reporting](https://help.anedot.com/knowledge/finance?hsLang=en#management-reporting)
    - [Internal Processing](https://help.anedot.com/knowledge/finance?hsLang=en#internal-processing)
- [Integrations](https://help.anedot.com/knowledge/integrations?hsLang=en#main-content)

    - [CRM & Donor Management Systems](https://help.anedot.com/knowledge/integrations?hsLang=en#crm-donor-management-systems)
    - [Email Marketing & Communication Tools](https://help.anedot.com/knowledge/integrations?hsLang=en#email-marketing-communication-tools)
    - [Integration & Automation Tools](https://help.anedot.com/knowledge/integrations?hsLang=en#integration-automation-tools)
    - [Political Campaign Tools](https://help.anedot.com/knowledge/integrations?hsLang=en#political-campaign-tools)
    - [E-commerce, Financial, and Membership Tools](https://help.anedot.com/knowledge/integrations?hsLang=en#e-commerce-financial-and-membership-tools)
    - [Relay Data & Troubleshooting](https://help.anedot.com/knowledge/integrations?hsLang=en#relay-data-troubleshooting)
- [Settings](https://help.anedot.com/knowledge/settings?hsLang=en#main-content)

    - [Access](https://help.anedot.com/knowledge/settings?hsLang=en#access)
    - [Configuration](https://help.anedot.com/knowledge/settings?hsLang=en#configuration)
    - [Finance](https://help.anedot.com/knowledge/settings?hsLang=en#finance)
    - [Setup](https://help.anedot.com/knowledge/settings?hsLang=en#setup)
    - [Other Actions](https://help.anedot.com/knowledge/settings?hsLang=en#other-actions)
- [Donor Support](https://help.anedot.com/knowledge/donor-support?hsLang=en#main-content)

    - [Getting Started with Your Donor Account](https://help.anedot.com/knowledge/donor-support?hsLang=en#getting-started-with-your-donor-account)
    - [Manage Your Giving](https://help.anedot.com/knowledge/donor-support?hsLang=en#manage-your-giving)
    - [Donor FAQ](https://help.anedot.com/knowledge/donor-support?hsLang=en#donor-faq)

[![Chill listening crop-3](https://help.anedot.com/hubfs/623c96e00d0d93f7d3a66f2e_Anedot_Typemark_Blue.svg "Chill listening crop-3")](https://www.anedot.com/)

<https://facebook.com/anedot> <https://x.com/anedot> <https://instagram.com/anedot> <https://www.youtube.com/@Anedot> <https://open.spotify.com/show/7fK8maOMuj87AeAotVDZRF> [mailto:help@anedot.com](mailto:help@anedot.com)

Copyright © 2025, Anedot, Inc.