Virtuous is a CRM software used by nonprofits to manage their data.
The Virtuous Integration supports Action Pages with name, phone, email, and address fields on the form.
To connect your Anedot fundraising account to Virtuous, follow the steps below:
Access the Settings>Integrations>Directory tab within your fundraising account
Click + New Connection
Select Virtuous from the list of available integrations
Next, select the Action Pages you would like connected to Virtuous.
Optional: Select a Team from the dropdown list to scope the connection to only send team-specific data to Virtuous
Apply your Virtuous API Key
Optional: To relay data from Donation Pages only, check the Relay donations pages only box. If this box is unchecked, Lead Pages data will also relay.
Click Save!
Note: The Action Pages, Team, and credentials can be modified at any time post-setup.
Data Relays
By default, Anedot will relay both financial and non-financial page data. However, if you only want to receive relays for financial pages, you can check the "Only relay donation page data" checkbox when creating or editing the integration's credentials.
Every submission results in a relay to "find or create contact" in Virtuous based on email.
If there is no matching contact, one is created.
If there is a matching contact, no relay is generated.
Additionally, if it is a donation submission, there is an additional "gift_designation" relay for the donation data.
In order to relay the segment properly, you will need to set up a hidden field called "segment_name" and set the appropriate segment value for that field (which can be set through URL parameters, as a global value, or as a page-specific value). The instructions are listed below.
If the "segment" field is relayed as "null" it is most likely due to a setup issue.
Anedot relays
void
,refunds
(only full refunds, not partial), andach_returned
events (sent once a day).Push Unsent (failed donations, all donations) + date range for relays works for all Action Pages.
Gift records are imported once daily at midnight by Virtuous.
Access the Import Tool within Virtuous to import the Gift batch manually.
Check out the following guide provided by Virtuous here for further instructions.
Adding a Virtuous Segment Name
To assign the Virtuous segment_name to an Action Page, access the Action Page Builder within the Action Pages>Pages tab. Next, hover over the Action Page you would like to apply the segment_name to and click Actions>Edit.
Within the Builder, access the Form tab. Within the Form tab, you can add a custom Hidden Field to apply segment_name.
Next, access the Settings>Sharing>Page Specific Values tab to add a custom segment_name.
Be sure to click Publish before exiting the Builder!
Field Mapping
Contact Individual Info
Anedot Field Name | Field Name in Virtuous |
firstName lastName | name |
Household | contact_type |
Anedot | reference_source |
title | prefix |
suffix | suffix |
first_name | firstName |
last_name | lastName |
middle_name | middleName |
Contact Method
Anedot Field Name | Field Name in Virtuous |
Home Email | type |
value | |
communication_consent_email | isOptedIn |
"Home Phone" | type |
phone | value |
communication_consent_phone | isOptedIn |
Contact Address
Anedot Field Name | Field Name in Virtuous |
line_1 | address1 |
line_2 | address2 |
city | city |
region | stateCode |
postal_code | postal |
country | countryCode |
Action Pages Fund/Project
Anedot Field Name | Field Name in Virtuous |
name | name |
public_description | description |
Ongoing | financialNeedType |
OngoingNeed | financialNeedType |
annually | financialNeedFrequency |
identifier | revenueAccountingCode |
Unspecified | location |
Not Allocated | inventoryStatus |
Default | type |
TRUE | isActive |
FALSE | enableSync |
Gift
Anedot Field Name | Field Name in Virtuous |
"Donation" | transactionSource |
submissionId | transactionId |
created_at | giftDate |
payment_type | giftType |
total_amount | amount |
frequency | frequency |
card_type | creditCardType |
segment_name | segment |
Payload Examples
Contacts
Request Body
{
"name": "Organization Name",
"contact_type": "Organization",
"reference_source": "Anedot",
"contact_addresses": [{
"city": "Washington",
"state": "DC",
"postal": "20001",
"country": "US",
"address1": "123 Apple Road",
"address2": null
}],
"contact_individuals": [{
"prefix": null,
"suffix": null,
"last_name": "last_name",
"first_name": "first_name",
"middle_name": null,
"contact_methods": [{
"type": "Home Email",
"value": "[email protected]",
"is_opted_in": false
}, {
"type": "Home Phone",
"value": "5555555555",
"is_opted_in": false
}]
}]
}
Response Body
{
"id": 2259,
"name": "Organization name",
"tags": [],
"address": {
"id": 1784,
"city": "Washington",
"label": "Primary Address",
"state": "TX",
"endDay": 31,
"postal": "20001",
"country": "United States",
"address1": "123 Apple Road",
"address2": null,
"endMonth": 12,
"startDay": 1,
"isPrimary": true,
"startMonth": 1,
"canBePrimary": false,
"createdByUser": "Paul's Key",
"modifiedByUser": "Paul's Key",
"createDateTimeUtc": "2022-12-27T20:06:00.8420246Z",
"modifiedDateTimeUtc": "2022-12-27T20:06:01.6110025Z"
},
"website": null,
"isPrivate": false,
"contactType": "Organization",
"description": null,
"giftAskType": null,
"customFields": [],
"informalName": "Organization name",
"lastGiftDate": "Unavailable",
"createdByUser": "Paul's Key",
"giftAskAmount": "$0",
"maritalStatus": null,
"originSegment": null,
"anniversaryDay": null,
"contactTagsUrl": "/api/ContactTag/ByContact/2259",
"lastGiftAmount": "$0",
"modifiedByUser": "Paul's Key",
"anniversaryYear": null,
"contactGiftsUrl": "/api/Gift/ByContact/2259",
"contactNotesUrl": "/api/ContactNote/ByContact/2259",
"originSegmentId": null,
"anniversaryMonth": null,
"lifeToDateGiving": "$0",
"primaryAvatarUrl": null,
"yearToDateGiving": "$0",
"contactReferences": [],
"createDateTimeUtc": "2022-12-27T20:06:00.8107998Z",
"customCollections": [],
"contactIndividuals": [{
"id": 3329,
"gender": null,
"prefix": null,
"suffix": null,
"passion": null,
"birthDay": null,
"lastName": "last_name",
"avatarUrl": null,
"birthDate": "",
"birthYear": null,
"contactId": 2259,
"firstName": "first_name",
"isPrimary": true,
"birthMonth": null,
"isDeceased": false,
"middleName": null,
"isSecondary": false,
"canBePrimary": false,
"customFields": [],
"createdByUser": "Paul's Key",
"approximateAge": null,
"canBeSecondary": false,
"contactMethods": [{
"id": 4187,
"type": "Home Email",
"value": "[email protected]",
"isOptedIn": false,
"isPrimary": true,
"canBePrimary": false,
"createdByUser": "Paul's Key",
"modifiedByUser": "Paul's Key",
"createDateTimeUtc": "2022-12-27T20:06:00.8107998Z",
"modifiedDateTimeUtc": "2022-12-27T20:06:01.6266287Z"
}, {
"id": 4188,
"type": "Home Phone",
"value": "4444444222",
"isOptedIn": false,
"isPrimary": true,
"canBePrimary": false,
"createdByUser": "Paul's Key",
"modifiedByUser": "Paul's Key",
"createDateTimeUtc": "2022-12-27T20:06:00.8420246Z",
"modifiedDateTimeUtc": "2022-12-27T20:06:01.6266287Z"
}],
"modifiedByUser": "Paul's Key",
"createDateTimeUtc": "2022-12-27T20:06:00.8107998Z",
"customCollections": [],
"modifiedDateTimeUtc": "2022-12-27T20:06:01.6110025Z"
}],
"organizationGroups": [],
"mergedIntoContactId": null,
"modifiedDateTimeUtc": "2022-12-27T20:06:01.6110025Z",
"contactPlannedGiftsUrl": "/api/PlannedGift/ByContact/2259",
"contactRelationshipsUrl": "/api/Relationship/ByContact/2259",
"contactImportantNotesUrl": "/api/ContactNote/Important/ByContact/2259",
"contactRecurringGiftsUrl": "/api/RecurringGift/ByContact/2259",
"contactPassthroughGiftsUrl": "/api/Gift/Passthrough/ByContact/2259"
}
โ
Gifts
Request Body
{
"amount": 11.0,
"contact": {
"id": 2260,
"name": "Organization name",
"email": "[email protected]",
"phone": "5555555555",
"title": null,
"suffix": null,
"address": {
"city": "Washington",
"state": "DC",
"postal": "20001",
"country": "US",
"address1": "123 Apple Road",
"address2": null
},
"last_name": "last_name",
"first_name": "first_name",
"middle_name": null
},
"segment": null,
"frequency": null,
"gift_date": "12/27/2022",
"gift_type": "Credit",
"designations": [{
"code": "1001",
"name": "General Fund",
"amountDesignated": 11.0
}],
"transaction_id": "19f23b8c-ae1b-45fb-a4a7-3302e72e88ec",
"credit_card_type": "Visa",
"transaction_source": "Donation",
"recurring_gift_transaction_id": null
}
Response Body
{}
Donation Reversal (void, refund, ach return)
Request Body
{
"notes": "",
"giftDate": "2023-12-22T00:00:00",
"reversedGiftId": 21728
}
Response Body (Success)
{
"id": 21734,
"batch": null,
"grant": null,
"notes": "",
"amount": -55,
"giftUrl": "/api/Gift/21734",
"grantId": null,
"segment": null,
"tribute": null,
"giftDate": "2023-12-22T00:00:00",
"giftType": "ReversingTransaction",
"grantUrl": null,
"contactId": 2063,
"giftAskId": null,
"isPrivate": false,
"segmentId": null,
"tributeId": null,
"contactUrl": "/api/Contact/2063",
"segmentUrl": null,
"contactName": "Annie",
"mediaOutlet": null,
"receiptDate": null,
"segmentCode": null,
"tributeType": null,
"currencyCode": "USD",
"customFields": [],
"exchangeRate": 1,
"giftPremiums": [],
"createdByUser": "Paul Dietzel",
"mediaOutletId": null,
"transactionId": null,
"modifiedByUser": "Paul Dietzel",
"pledgePayments": [],
"reversedGiftId": 21728,
"amountFormatted": "-$55.00",
"isTaxDeductible": true,
"baseCurrencyCode": "USD",
"giftDesignations": [{
"id": 12689,
"display": "General Fund: -$55.00",
"project": "General Fund",
"projectId": 394,
"projectUrl": "/api/Project/394",
"projectCode": "1001",
"projectType": "Default",
"projectLocation": "Unspecified",
"amountDesignated": -55,
"externalAccountingCode": null
}],
"createDateTimeUtc": "2023-12-29T20:51:51.5903749Z",
"giftDateFormatted": "12/22/2023",
"giftTypeFormatted": "Reversing Transaction",
"transactionSource": null,
"cashAccountingCode": null,
"isAcknowledgedGift": false,
"acknowledgementDate": null,
"contactIndividualId": 3116,
"contactMembershipId": null,
"modifiedDateTimeUtc": "2023-12-29T20:51:51.741603Z",
"acknowledgementNotes": null,
"contactPassthroughId": null,
"receiptDateFormatted": "",
"contactPassthroughUrl": null,
"recurringGiftPayments": [],
"acknowledgeeIndividualId": null
}
Response Body (Failure)
{
"message": "The request is invalid.",
"modelState": {
"": ["Gift Transaction already exists."]
}
}
Response Body (Error)
{}
Response Status (Success)
200
Response Status (Failure)
400
Response Status (Error)
null