Skip to main content
Grain: CONTACTS — one row per giving unit (a household or organization). CONTACT_INDIVIDUALS — one row per person within a contact.
CONTACTS is the central entity in Virtuous — it represents the giving unit (a household or organization). This diagram shows the tables that make up a contact’s profile: the people within it (CONTACT_INDIVIDUALS) and the stewardship activity around it.
Key concept: A CONTACT is the giving unit. A CONTACT_INDIVIDUAL is a person within that contact. Gifts belong to the contact; emails are sent to individuals. Always join to CONTACT_INDIVIDUALS when you need a person’s name or email address.
Solid lines — required join (FK always populated). Dotted lines — optional join (FK is nullable; always use LEFT JOIN).

Table columns

Tables on this page: CONTACTS · CONTACT_INDIVIDUALS · NOTES · TASKS · RECEIPTS · GIFTS (boundary)

CONTACTS

One row per giving unit. LIFE_TO_DATE_GIVING and YEAR_TO_DATE_GIVING are pre-aggregated giving totals — no join to GIFTS required. For all contact-related tables, see Contacts — extended reference.
ColumnTypeNotes
CONTACT_KEYTEXTPrimary key
NAMETEXTContact display name
CONTACT_TYPETEXTCustomizable type — base types are Household, Foundation, Organization
PRIMARY_CITYTEXTCity from primary address
PRIMARY_STATE_CODETEXTState from primary address
LIFE_TO_DATE_GIVINGNUMBERPre-aggregated total giving (all time)
YEAR_TO_DATE_GIVINGNUMBERPre-aggregated total giving (current calendar year)
LAST_GIFT_AMOUNTNUMBERAmount of the most recent gift
LAST_GIFT_DATE_UTCTIMESTAMPDate of the most recent gift
CONTACT_IS_DELETEDBOOLEANSoft delete flag — always filter WHERE CONTACT_IS_DELETED = FALSE
CONTACT_IS_ARCHIVEDBOOLEANContact is archived

CONTACT_INDIVIDUALS

One row per person within a contact. Filter CONTACT_INDIVIDUAL_IS_PRIMARY = TRUE to get the main person. Email and phone live here, not on CONTACTS.
ColumnTypeNotes
CONTACT_INDIVIDUAL_KEYTEXTPrimary key
CONTACT_KEYTEXTFK → CONTACTS
FIRST_NAMETEXTFirst name
LAST_NAMETEXTLast name
PRIMARY_EMAILTEXTPrimary email address
PRIMARY_PHONETEXTPrimary phone number
BIRTH_DATETIMESTAMPFull date of birth
CONTACT_INDIVIDUAL_IS_PRIMARYBOOLEANTrue for the primary person on the contact
CONTACT_INDIVIDUAL_IS_DECEASEDBOOLEANIndividual is deceased
CONTACT_INDIVIDUAL_IS_GLOBALLY_UNSUBSCRIBEDBOOLEANIndividual has globally unsubscribed from email
CONTACT_INDIVIDUAL_IS_DELETEDBOOLEANSoft delete flag

NOTES

One row per stewardship note logged against a contact or individual. PLAIN_TEXT_VALUE contains the note content without formatting.
ColumnTypeNotes
NOTE_KEYTEXTPrimary key
CONTACT_KEYTEXTFK → CONTACTS
CONTACT_INDIVIDUAL_KEYTEXTFK → CONTACT_INDIVIDUALS (optional) — individual the note is about
DATE_TIME_UTCTIMESTAMPDate and time the note was recorded
VALUETEXTNote content (may include HTML formatting)
PLAIN_TEXT_VALUETEXTNote content as plain text
CONTACT_NOTE_TYPETEXTNote type (e.g. Meeting, Call, Email)
IMPORTANTBOOLEANNote is flagged as important
NOTE_IS_PRIVATEBOOLEANNote is private
NOTE_IS_DELETEDBOOLEANSoft delete flag

TASKS

One row per action item on a contact. TASK_STATUS is a numeric code.
ColumnTypeNotes
TASK_KEYTEXTPrimary key
CONTACT_KEYTEXTFK → CONTACTS
CONTACT_INDIVIDUAL_KEYTEXTFK → CONTACT_INDIVIDUALS (optional)
NAMETEXTTask name or title
DESCRIPTIONTEXTExtended task description
DUE_DATE_TIME_UTCTIMESTAMPTask due date
RESOLUTION_DATE_TIME_UTCTIMESTAMPDate the task was completed or dismissed
TASK_STATUSNUMBERCurrent status — decode with TYPE_REFERENCES (Entity: Task, Property: TaskStatus)
TASK_IS_DELETEDBOOLEANSoft delete flag

RECEIPTS

One row per receipt issued to a contact. For the full receipts hub including receipted gifts and statement runs, see Receipts — extended reference.
ColumnTypeNotes
RECEIPT_KEYTEXTPrimary key
CONTACT_KEYTEXTFK → CONTACTS
RECEIPT_TYPENUMBERType of receipt — decode with TYPE_REFERENCES (Entity: Receipt, Property: ReceiptType)
RECEIPT_MEDIUMNUMBERDelivery medium — decode with TYPE_REFERENCES (Entity: Receipt, Property: ReceiptMedium)
YEARNUMBERTax year for the receipt
RECEIPT_IS_AVAILABLE_TO_DONORBOOLEANReceipt is visible in the donor portal
RECEIPT_IS_DELETEDBOOLEANSoft delete flag

GIFTS

GIFTS appears in this diagram as the transaction linked to a contact. The full gift structure is documented in Gifts — extended reference.
ColumnTypeNotes
GIFT_KEYTEXTPrimary key
CONTACT_KEYTEXTFK → CONTACTS
GIFT_DATE_UTCTIMESTAMPDate the gift was made
AMOUNTNUMBERTotal gift amount
GIFT_IS_DELETEDBOOLEANSoft delete flag
Data freshness: These tables sync continuously from Virtuous CRM. Typical lag is under 4 hours. To check when a record was last updated, inspect the SF__ROW_SYNCED_DATE_TIME_UTC column on any table.
Last modified on May 22, 2026