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

Virtuous

Learn how to integrate Anedot with Virtuous CRM to sync donor data from Action Pages. Includes setup instructions, segment configuration, and relay behavior.

Virtuous is a nonprofit-focused CRM designed to help organizations manage donor relationships, communications, and giving data. Anedot’s integration allows you to sync donor data from Action Pages directly into your Virtuous account.


Table of Contents


Connecting Anedot to Virtuous

To integrate your Anedot fundraising account with Virtuous:

  1. Navigate to Settings > Integrations > Directory in your Anedot account.

  2. Click the blue + New Connection button in the upper right corner.

  3. Select Virtuous from the integration directory.

  4. Choose the Action Pages you’d like to sync.

    • The default is All Pages.

    • To exclude specific pages, enter their Action Page IDs as a comma-separated list.

  5. (Optional) Scope the integration to only include Team-specific data.

  6. Enter your Virtuous API Key.
  7. (Optional) To only sync donation pages, check the "Relay donation pages only" box.
  8. Click Save to finalize setup.

You can update Action Pages, Team filters, or credentials anytime.


Data Relays

  • Relay Types:
    By default, Anedot relays both financial and non-financial page data. To limit relays to donations only, enable the “Relay donation pages only” option.

  • Supported Fields:
    • Name
    • Phone
    • Email
    • Address
  • Contact Matching:

    • Every submission triggers a "find or create contact" action in Virtuous, based on the email address.

      • If a contact exists, no new contact is created.

      • If no match is found, a new contact is added.

  • Donations:

    • Donation submissions trigger an additional "gift_designation" relay.

    • Void, full refunds (not partial), and ACH returned events are relayed once daily.

  • Relay Scheduling:

    • Gift records are imported into Virtuous once daily at midnight.

    • You can also use Virtuous’s Import Tool to manually import gift batches.

  • Retrying Relays:

    • Use Push Unsent to resend failed or unsent donations with a specified date range.


Using Segment Names with Virtuous

To properly relay segmented data to Virtuous, follow these steps:

  1. Go to Action Pages > Pages.

  2. Hover over the desired Action Page and click Actions > Edit.

  3. In the Form tab, add a Custom Hidden Field named segment_name.

  4. Then, go to Settings > Sharing > Page Specific Values and assign a value to segment_name.

  5. Click Publish to save your changes.

If the segment appears as "null" in Virtuous, it's likely due to a setup error in the hidden field or value configuration.


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 Data

Contact

Request Body

{
  "name": "Annie Dot",
  "contact_type": "Household",
  "reference_source": "Anedot",
  "contact_addresses": [{
    "city": "New Orleans",
    "state": "LA",
    "postal": "70112",
    "country": "US",
    "address1": "1340 Poydras St",
    "address2": null
  }],
  "contact_individuals": [{
    "prefix": null,
    "suffix": null,
    "last_name": "Dot",
    "first_name": "Annie",
    "middle_name": null,
    "contact_methods": [{
      "type": "Home Email",
      "value": "admin@anedot.com",
      "is_opted_in": false
    }, {
      "type": "Home Phone",
      "value": "12252501301",
      "is_opted_in": false
    }]
  }]
}

Response Body

{
  "id": 2566,
  "name": "Annie Dot",
  "tags": [],
  "address": {
    "id": 2026,
    "city": "New Orleans",
    "label": "Primary Address",
    "state": "LA",
    "endDay": 31,
    "postal": "70112",
    "country": "United States",
    "address1": "1340 Poydras St",
    "address2": null,
    "endMonth": 12,
    "startDay": 1,
    "isPrimary": true,
    "startMonth": 1,
    "canBePrimary": false,
    "createdByUser": "Paul Dietzel",
    "modifiedByUser": "Paul Dietzel",
    "createDateTimeUtc": "2023-05-25T18:27:06.0288969Z",
    "modifiedDateTimeUtc": "2023-05-25T18:27:06.7788543Z"
  },
  "website": null,
  "isPrivate": false,
  "contactType": "Household",
  "description": null,
  "giftAskType": null,
  "customFields": [],
  "informalName": "Ann",
  "lastGiftDate": "Unavailable",
  "createdByUser": "Paul Dietzel",
  "giftAskAmount": "$0",
  "maritalStatus": null,
  "originSegment": null,
  "anniversaryDay": null,
  "contactTagsUrl": "/api/ContactTag/ByContact/2566",
  "lastGiftAmount": "$0",
  "modifiedByUser": "Paul Dietzel",
  "anniversaryYear": null,
  "contactGiftsUrl": "/api/Gift/ByContact/2566",
  "contactNotesUrl": "/api/ContactNote/ByContact/2566",
  "originSegmentId": null,
  "anniversaryMonth": null,
  "lifeToDateGiving": "$0",
  "primaryAvatarUrl": null,
  "yearToDateGiving": "$0",
  "contactReferences": [],
  "createDateTimeUtc": "2023-05-25T18:27:05.9976457Z",
  "customCollections": [],
  "formalContactName": "Annie Dot",
  "contactIndividuals": [{
    "id": 3723,
    "gender": null,
    "prefix": null,
    "suffix": null,
    "passion": null,
    "prefix2": null,
    "birthDay": null,
    "lastName": "Dot",
    "nickname": null,
    "avatarUrl": null,
    "birthDate": "",
    "birthYear": null,
    "contactId": 2566,
    "firstName": "Ann",
    "isPrimary": true,
    "birthMonth": null,
    "isDeceased": false,
    "middleName": null,
    "isSecondary": false,
    "canBePrimary": false,
    "customFields": [],
    "deceasedDate": "",
    "createdByUser": "Paul Dietzel",
    "approximateAge": null,
    "canBeSecondary": false,
    "contactMethods": [{
      "id": 4715,
      "type": "Home Email",
      "value": "admin@anedot.com",
      "isOptedIn": false,
      "isPrimary": true,
      "canBePrimary": false,
      "createdByUser": "Paul Dietzel",
      "modifiedByUser": "Paul Dietzel",
      "preMarriageName": null,
      "createDateTimeUtc": "2023-05-25T18:27:05.9976457Z",
      "modifiedDateTimeUtc": "2023-05-25T18:27:06.7944799Z"
    }, {
      "id": 4716,
      "type": "Home Phone",
      "value": "12252501301",
      "isOptedIn": false,
      "isPrimary": true,
      "canBePrimary": false,
      "createdByUser": "Paul Dietzel",
      "modifiedByUser": "Paul Dietzel",
      "createDateTimeUtc": "2023-05-25T18:27:06.0288969Z",
      "modifiedDateTimeUtc": "2023-05-25T18:27:06.7944799Z"
    }],
    "modifiedByUser": "Paul Dietzel",
    "createDateTimeUtc": "2023-05-25T18:27:05.9976457Z",
    "customCollections": [],
    "modifiedDateTimeUtc": "2023-05-25T18:27:06.7944799Z"
  }],
  "organizationGroups": [],
  "mergedIntoContactId": null,
  "modifiedDateTimeUtc": "2023-05-25T18:27:06.7788543Z",
  "alternateContactName": "Annie",
  "contactPlannedGiftsUrl": "/api/PlannedGift/ByContact/2566",
  "preferredAddresseeName": "Annie Dot",
  "contactRelationshipsUrl": "/api/Relationship/ByContact/2566",
  "preferredSalutationName": "Annie",
  "contactImportantNotesUrl": "/api/ContactNote/Important/ByContact/2566",
  "contactRecurringGiftsUrl": "/api/RecurringGift/ByContact/2566",
  "contactPassthroughGiftsUrl": "/api/Gift/Passthrough/ByContact/2566"
}

Gifts

Request Body

{
  "amount": 50.0,
  "contact": {
    "id": 1739,
    "name": "Annie Dot",
    "email": "admin@anedot.com",
    "phone": "2252503501",
    "title": null,
    "suffix": null,
    "address": {
      "city": "New Orleans",
      "state": "LA",
      "postal": "70113",
      "country": "US",
      "address1": "1340 Poydras Street",
      "address2": null
    },
    "last_name": "Dot",
    "first_name": "Annie",
    "middle_name": null
  },
  "segment": null,
  "frequency": null,
  "gift_date": "2024-02-12T18:10:27.980Z",
  "gift_type": "Credit",
  "designations": [{
    "code": "1001",
    "name": "General Fund",
    "amountDesignated": 50.0
  }],
  "transaction_id": "8482b070-fca8-462f-a519-f03e4b410b2f",
  "credit_card_type": "Master",
  "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)

{
  "message": "The request is invalid.",
  "modelState": {
    "": ["Gift Transaction already exists."]
  }
}

Response Status (Success)

200

Response Status (Failure)

400

Response Status (Error)

null