Skip to main content
Grain: CAMPAIGNS — one row per campaign. COMMUNICATIONS — one row per channel within a campaign. SEGMENTS — one row per recipient subgroup within a communication.
When a gift is recorded, it carries a SEGMENT_KEY that links it to the marketing chain that solicited it. Following that key up through SEGMENTS → COMMUNICATIONS → CAMPAIGNS reveals which campaign drove the gift and how much each segment raised.
Key rule: The hierarchy flows top-down at setup but is queried bottom-up from the gift. Start at GIFTS.SEGMENT_KEY, then join upward to reach campaign totals.
Solid lines — required join (FK always populated). Dotted lines — optional join (FK is nullable; always use LEFT JOIN).

Table columns

Tables on this page: CAMPAIGNS · COMMUNICATIONS · SEGMENTS · GIFTS (boundary) · CONTACTS (boundary)

CAMPAIGNS

One row per top-level marketing initiative. For all campaign-related tables including emails and events, see Campaigns — extended reference.

COMMUNICATIONS

One row per channel within a campaign (e.g. Direct Mail, Email Blast). Contains pre-aggregated performance totals.

SEGMENTS

One row per recipient subgroup within a communication. SEGMENT_KEY is the FK carried on GIFTS — it is the entry point for all campaign attribution queries.

GIFTS

GIFTS appears in this diagram as the attribution target — the transaction that carries SEGMENT_KEY back to the campaign hierarchy. The full gift structure is documented in Gifts — extended reference.

CONTACTS

CONTACTS appears in this diagram as the giving unit linked to each gift. The full contacts structure is documented in Contacts — 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