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
To set up the integration:
-
In your Anedot account, go to Settings > Integrations > Direcotyr.
-
Click the blue + New Connection button.
-
Select DonorPerfect from the directory.
-
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.
-
-
(Optional) Limit the integration to a specific Team.
-
Paste your DonorPerfect API Key.
-
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 on your Action Pages:
-
gl_code
(General Ledger Code / Fund Name) -
solicit_code
-
sub_solicit_code
-
campaign
-
gift_narrative
-
gift_type
-
gfname
-
glname
-
receipt_delivery_g
-
donor_rcpt_type
-
Blank or
I
= Individual -
C
= Consolidated
-
How to Set Custom Field Values
-
Page-Level: Go to Settings > Sharing > Page Specific Values in the Page Builder.
-
Global Value: Set this in the Form > Custom Hidden Field section.
-
URL Parameters: Click here for instructions on using URL parameters.
All custom 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.
-
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.
-
Gifts Tab: See a complete history of donations from that donor.
Field Mapping
Donor Relay
This is related to the SaveDonor Template.
Anedot Field | DonorPerfect Field |
---|---|
“0” | donor_id |
firstName | first_name |
lastName | last_name |
middleName | middle_name |
suffix | suffix |
title | title |
title (or if not present, firstName) | salutation |
N/A | prof_title |
N/A | opt_line |
address {line1} | address |
address {line2} | address2 |
address {city} | city |
address {region} | state |
address {postal_code} | zip |
address {country} | country |
N/A | address_type |
N/A | home_phone |
N/A | business_phone |
N/A | fax_phone |
phone | mobile_phone |
“N” | org_rec |
“IN” | donor_type |
“N” | nomail |
N/A | nomail_reason |
N/A | narrative |
*donor_rcpt_type (otherwise “I”) | donor_rcpt_type |
“Anedot” | user_id |
*Custom Hidden Fields must be added to the Anedot Donation Page in order to be relayed.
Donation Relay
This is related to the SaveGift Template
Anedot Field | DonorPerfect Field |
---|---|
“0” | gift_id |
donor_id ( from Donor Relay’s Response ) | donor_id |
“G” (or “M” for multi-fund) | record_type |
created_at | gift_date |
total_amount_processed (supports total charge amount, import for DPF) | amount |
*gl_code | gl_code |
*solicit_code | solicit_code |
*sub_solicit_code | sub_solicit_code |
*campaign | campaign |
*gift_type | gift_type |
“N” (or “Y” for multi-fund) | split_gift |
“N” (for one-time donations) “Y” (for pledges/commitments) |
pledge_payment |
(Donation) id or (Submission) id (for multi-fund) |
reference |
N/A | transaction_id |
N/A | memory_honor |
*gfname | gfname |
*glname | glname |
0 | fmv |
0 | batch_no |
*gift_narrative | gift_narrative |
N/A | ty_letter_no |
DonorPerfect gift ID (for the first multi-fund donation, main gift, otherwise blank) |
glink |
DonorPerfect pledge ID (for pledges/commitments) |
plink |
“N” | nocalc |
N/A | old_amount |
“USD” | currency |
N/A | gift_aid_date |
N/A | gift_aid_amt |
N/A | gift_aid_eligible_g |
“N” | receipt |
*receipt_delivery_g (for non-split/single fund gifts and for main gift on split/multi-fund gifts, otherwise “N”) |
receipt_delivery_g |
“3DD” | acknowledgepref |
“Anedot” | user_id |
*Custom Hidden Fields must be added to the Anedot Donation Page in order to be relayed.
Pledge Relay
This is related to the SavePledge Template (commitments and recurrences).
Anedot Field | DonorPerfect Field |
---|---|
“0” | gift_id |
donor_id (from Donor Relay’s Response) |
donor_id |
created_at | gift_date |
(Commitment) schedule_start | start_date |
“0” | total |
N/A | bill |
(Commitment) first letter of frequency (“A”, “S”, “Q”, “M”) |
frequency |
“Y” | reminder |
*gl_code | gl_code |
*solicit_code | solicit_code |
“N” | initial_payment |
*sub_solicit_code | sub_solicit_code |
N/A | writeoff_amount |
N/A | writeoff_date |
“Anedot” | user_id |
*campaign | campaign |
N/A | membership_type |
N/A | membership_level |
N/A | membership_enr_date |
N/A | membership_exp_date |
N/A | membership_link_id |
N/A | address_id |
*gift_narrative | gift_narrative |
N/A | ty_letter_no |
N/A | vault_id |
N/A | receipt_delivery_g |
N/A | contact_id |
*Custom Hidden Fields must be added to the Anedot Donation Page in order to be relayed.
Payload Data
Donor Contact Details
Request Body (Find Donor)
"select donor_id, first_name, last_name, address, city, state, zip from dp where email = 'admin@anedot.com'"
Request Body (Create Donor)
"@donor_id=0, @first_name='Annie', @last_name='Dot', @middle_name='E', @suffix=null, @title='Mrs', @salutation=null, @prof_title=null, @opt_line=null, @address='123 Test Road', @address2=null, @city='New Orleans', @state='LA', @zip='70112', @country='US', @address_type=null, @home_phone=null, @business_phone=null, @fax_phone=null, @mobile_phone='12015551234', @email='annie@anedot.com', @org_rec='N', @donor_type='IN', @nomail='N', @nomail_reason=null, @narrative=null, @donor_rcpt_type='I', @user_id='Anedot'"
Response Body (No Donor Found)
{
"result": null
}
Response Body (Create Donor)
{
"result": {
"record": {
"field": {
"id": "",
"name": "",
"value": "35609"
}
}
}
}
Response Body (Donor Found)
{
"result": {
"record": {
"field": [{
"id": "donor_id",
"name": "donor_id",
"value": "30689"
}, {
"id": "first_name",
"name": "first_name",
"value": "Annie"
}, {
"id": "last_name",
"name": "last_name",
"value": "Dot"
}, {
"id": "address",
"name": "address",
"value": "1340 Poydras Street"
}, {
"id": "city",
"name": "city",
"value": "New Orleans"
}, {
"id": "state",
"name": "state",
"value": "LA"
}, {
"id": "zip",
"name": "zip",
"value": "70112"
}]
}
}
}
Response Body (Failure)
{
"result": {
"field": {
"id": "success",
"name": "success",
"value": "false",
"reason": "login failed"
}
}
}
Donation Details
Request Body
"@gift_id=0, @donor_id=34524, @record_type='G', @gift_date='6/22/23', @amount=50.0, @gl_code=null, @solicit_code=null, @sub_solicit_code=null, @campaign=null, @gift_type=null, @split_gift='N', @pledge_payment='Y', @reference='dd5e83ad6fe6294e460d2', @transaction_id=null, @memory_honor=null, @gfname=null, @glname=null, @fmv=0, @batch_no=0, @gift_narrative=null, @ty_letter_no=null, @glink=null, @plink=143377, @nocalc='N', @old_amount=null, @currency='USD', @gift_aid_date=null, @gift_aid_amt=null, @gift_aid_eligible_g=null, @receipt='N', @receipt_delivery_g='N', @acknowledgepref='3DD', @user_id='Anedot'"
Response Body (Success)
{
"result": {
"record": {
"field": {
"id": "",
"name": "",
"value": "120169"
}
}
}
}
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=""