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.

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.

NOTES

One row per stewardship note logged against a contact or individual. PLAIN_TEXT_VALUE contains the note content without formatting.

TASKS

One row per action item on a contact. TASK_STATUS is a numeric code.

RECEIPTS

One row per receipt issued to a contact. For the full receipts hub including receipted gifts and statement runs, see Receipts — extended reference.

GIFTS

GIFTS appears in this diagram as the transaction linked to a contact. The full gift structure is documented in Gifts — extended reference.
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