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 SEGMENTSCOMMUNICATIONSCAMPAIGNS 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