Skip to main content
Grain: CONTACTS — one row per giving unit (household or organization). CONTACT_INDIVIDUALS — one row per person within a contact.
CONTACTS is the giving unit — every gift, pledge, and recurring commitment belongs to a contact. This page maps all tables that hang off the contact: the people within it, stewardship activity, memberships, engagement statistics by segment, and receipting history.
Key rule: Gifts belong to CONTACTS, not CONTACT_INDIVIDUALS. Email is 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 · CONTACT_MEMBERSHIPS · MEMBERSHIPS · CONTACT_SEGMENT_STATISTICS · RECEIPTS · RECEIPTING_STATEMENT_RUNS

CONTACTS

One row per giving unit. Pre-aggregated giving totals (LIFE_TO_DATE_GIVING, YEAR_TO_DATE_GIVING) are maintained by Virtuous and do not require joining to GIFTS.
ColumnTypeNotes
CONTACT_KEYTEXTPrimary key
CONTACT_TYPETEXTCustomizable type — base types are Household, Foundation, Organization
BASE_CONTACT_TYPENUMBERNumeric base type — decode with TYPE_REFERENCES (Entity: Contact, Property: BaseContactType)
NAMETEXTContact display name
INFORMAL_NAMETEXTInformal or nickname-based display name
PRIMARY_CITYTEXTCity from primary address
PRIMARY_STATE_CODETEXTState from primary address
PRIMARY_POSTALTEXTPostal code from primary address
PRIMARY_COUNTRY_CODETEXTCountry code from primary address
LIFE_TO_DATE_GIVINGNUMBERPre-aggregated total giving (all time)
YEAR_TO_DATE_GIVINGNUMBERPre-aggregated total giving (current calendar year)
FIRST_GIFT_AMOUNTNUMBERAmount of the first gift
FIRST_GIFT_DATE_UTCTIMESTAMPDate of the first gift
LAST_GIFT_AMOUNTNUMBERAmount of the most recent gift
LAST_GIFT_DATE_UTCTIMESTAMPDate of the most recent gift
LARGEST_GIFT_AMOUNTNUMBERLargest single gift amount
LARGEST_GIFT_DATE_UTCTIMESTAMPDate of the largest gift
AVERAGE_GIFT_AMOUNTNUMBERAverage gift amount
GIFTS_PER_YEARFLOATAverage number of gifts per calendar year
GIFT_ASK_AMOUNTNUMBERCurrent gift ask amount on the contact record
FINANCIAL_SCORENUMBERVirtuous-calculated score based on giving amount, frequency, and recency
WEBSITETEXTContact’s website
DESCRIPTIONTEXTFree-text description
ANNIVERSARY_DATETIMESTAMPWedding anniversary date
CONTACT_IS_DELETEDBOOLEANSoft delete flag — always filter WHERE CONTACT_IS_DELETED = FALSE
CONTACT_IS_PRIVATEBOOLEANContact is marked private
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
MIDDLE_NAMETEXTMiddle name
LAST_NAMETEXTLast name
PREFIXTEXTName prefix (Mr., Dr., etc.)
SUFFIXTEXTName suffix
GENDER_NAMETEXTGender
PRIMARY_EMAILTEXTPrimary email address
PRIMARY_PHONETEXTPrimary phone number
BIRTH_DATETIMESTAMPFull date of birth
DECEASED_DATETIMESTAMPDate of death (if applicable)
PASSIONTEXTAreas of interest logged on the individual
FIRST_EMAIL_SENT_UTCTIMESTAMPDate of the first email sent to this individual
LAST_EMAIL_SENT_UTCTIMESTAMPDate of the most recent email sent
FIRST_EMAIL_OPENED_UTCTIMESTAMPDate of the first email opened
LAST_EMAIL_OPENED_UTCTIMESTAMPDate of the most recent email opened
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)
TIME_SPENTNUMBERTime spent (in minutes) if logged
IMPORTANTBOOLEANNote is flagged as important
NOTE_IS_PRIVATEBOOLEANNote is private
NOTE_IS_DELETEDBOOLEANSoft delete flag

TASKS

One row per action item on a contact. Can be linked to a gift ask. TASK_STATUS is a numeric code.
ColumnTypeNotes
TASK_KEYTEXTPrimary key
CONTACT_KEYTEXTFK → CONTACTS
CONTACT_INDIVIDUAL_KEYTEXTFK → CONTACT_INDIVIDUALS (optional)
GIFT_ASK_KEYTEXTFK → GIFT_ASKS (optional) — linked gift ask
NAMETEXTTask name or title
DESCRIPTIONTEXTExtended task description
DUE_DATE_TIME_UTCTIMESTAMPTask due date
RESOLUTION_DATE_TIME_UTCTIMESTAMPDate the task was completed or dismissed
NOTIFICATION_DATE_TIME_UTCTIMESTAMPDate a reminder notification is set
TASK_STATUSNUMBERCurrent status — decode with TYPE_REFERENCES (Entity: Task, Property: TaskStatus)
RESOLUTION_TYPENUMBERHow the task was closed — decode with TYPE_REFERENCES (Entity: Task, Property: ResolutionType)
MILESTONE_TYPENUMBERIf system-generated, the milestone that triggered it — decode with TYPE_REFERENCES (Entity: Task, Property: MilestoneType)
TASK_IS_DELETEDBOOLEANSoft delete flag

CONTACT_MEMBERSHIPS

One row per membership held by a contact or individual. Optionally linked to a recurring gift that funds the membership.
ColumnTypeNotes
CONTACT_MEMBERSHIP_KEYTEXTPrimary key
CONTACT_KEYTEXTFK → CONTACTS
CONTACT_INDIVIDUAL_KEYTEXTFK → CONTACT_INDIVIDUALS (optional) — if membership is held by a specific individual
MEMBERSHIP_KEYTEXTFK → MEMBERSHIPS — the membership program
RECURRING_GIFT_KEYTEXTFK → RECURRING_GIFTS (optional) — the recurring gift funding this membership
START_DATETIMESTAMPMembership start date
EXPIRATION_DATETIMESTAMPMembership expiration date
LAST_PAYMENT_DATETIMESTAMPDate of the most recent payment
LAST_PAYMENT_AMOUNTNUMBERAmount of the most recent payment
TOTAL_PAYMENTSNUMBERTotal number of payments made
CONTACT_MEMBERSHIP_IS_DELETEDBOOLEANSoft delete flag

MEMBERSHIPS

One row per membership program defined in Virtuous. Referenced by CONTACT_MEMBERSHIPS.
ColumnTypeNotes
MEMBERSHIP_KEYTEXTPrimary key
NAMETEXTMembership program name
DESCRIPTIONTEXTProgram description
COSTNUMBEROne-time cost
RECURRING_COSTNUMBERRecurring payment cost
FREQUENCYNUMBERPayment frequency — decode with TYPE_REFERENCES (Entity: Membership, Property: Frequency)
EXPIRES_IN_MONTHSNUMBERDuration in months before expiration
GRACE_PERIOD_IN_DAYSNUMBERGrace period in days after expiration
MEMBERSHIP_IS_ARCHIVEDBOOLEANProgram is archived
MEMBERSHIP_IS_DELETEDBOOLEANSoft delete flag

CONTACT_SEGMENT_STATISTICS

One row per contact per segment — pre-aggregated giving statistics scoped to a specific campaign segment. Useful for comparing a contact’s response to individual campaigns.
ColumnTypeNotes
CONTACT_SEGMENT_STATISTIC_KEYTEXTPrimary key
CONTACT_KEYTEXTFK → CONTACTS
SEGMENT_KEYTEXTFK → SEGMENTS
COMMUNICATION_KEYTEXTFK → COMMUNICATIONS
LIFE_TO_DATE_GIVINGNUMBERTotal giving to this segment (all time)
LIFE_TO_DATE_GIFT_COUNTNUMBERTotal gift count to this segment (all time)
ROLLING_YEAR_GIVINGNUMBERGiving in the past 12 months
LAST_GIFT_AMOUNTNUMBERMost recent gift amount in this segment
LAST_GIFT_DATE_UTCTIMESTAMPMost recent gift date in this segment
FIRST_GIFT_AMOUNTNUMBERFirst gift amount in this segment
FIRST_GIFT_DATE_UTCTIMESTAMPFirst gift date in this segment
LARGEST_GIFT_AMOUNTNUMBERLargest gift amount in this segment
AVERAGE_GIFT_AMOUNTNUMBERAverage gift amount in this segment
CONTACT_SEGMENT_STATISTIC_IS_DELETEDBOOLEANSoft delete flag

RECEIPTS

One row per receipt issued to a contact. RECEIPT_TYPE and RECEIPT_MEDIUM are numeric codes. Individual gifts included in the receipt are tracked in RECEIPTED_GIFTS (see Receipts — extended reference).
ColumnTypeNotes
RECEIPT_KEYTEXTPrimary key
CONTACT_KEYTEXTFK → CONTACTS
RECEIPTING_STATEMENT_RUN_KEYTEXTFK → RECEIPTING_STATEMENT_RUNS (optional) — statement batch this receipt came from
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
EMAIL_ADDRESSTEXTEmail address the receipt was sent to
RECEIPT_IS_AVAILABLE_TO_DONORBOOLEANReceipt is visible in the donor portal
RECEIPT_IS_DELETEDBOOLEANSoft delete flag

RECEIPTING_STATEMENT_RUNS

One row per annual statement run — a batch process that generates year-end tax receipts for a group of contacts.
ColumnTypeNotes
RECEIPTING_STATEMENT_RUN_KEYTEXTPrimary key
CONTACT_KEYTEXTFK → CONTACTS (optional) — populated when run is for a single contact
TITLETEXTStatement run title
STATEMENT_DATETIMESTAMPDate the statement covers
RECEIPT_FORMATNUMBEROutput format (PDF, email, etc.)
RECEIPTING_STATEMENT_RUN_IS_AVAILABLE_TO_DONORBOOLEANStatement is visible in the donor portal
RECEIPTING_STATEMENT_RUN_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