Skip to main content
Virtuous
Updated over 3 months ago

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:

  1. Access the Settings>Integrations>Directory tab within your fundraising account

  2. Click + New Connection

  3. Select Virtuous from the list of available integrations

  4. Next, select the Action Pages you would like connected to Virtuous.

  5. Optional: Select a Team from the dropdown list to scope the connection to only send team-specific data to Virtuous

  6. Apply your Virtuous API Key

  7. 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.

  8. 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), and ach_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

email

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

Did this answer your question?