Skip to main content
Grain: GIFTS — one row per posted gift transaction. GIFT_DESIGNATIONS — one row per project split within a gift (a gift can have multiple rows).
GIFTS is the central financial fact table. This page maps every table that connects to it — how money arrives (recurring commitments, pledges), where it goes (designations to projects), and what is attached to it (grant records, tributes, premium fulfillments, entry batches).
Solid lines — required join (FK always populated). Dotted lines — optional join (FK is nullable; always use LEFT JOIN).

Table columns

Tables on this page: GIFTS · GIFT_DESIGNATIONS · PROJECTS · GIFT_BATCHES · GIFT_ASKS · PLEDGES · PLEDGE_PAYMENTS · RECURRING_GIFTS · RECURRING_GIFT_PAYMENTS · RECURRING_GIFT_DESIGNATIONS · GRANTS · TRIBUTES · GIFT_PREMIUMS

GIFTS

One row per posted gift transaction. The amount on GIFTS is the total; split across projects via GIFT_DESIGNATIONS.
ColumnTypeNotes
GIFT_KEYTEXTPrimary key
CONTACT_KEYTEXTFK → CONTACTS — the giving unit
CONTACT_INDIVIDUAL_KEYTEXTFK → CONTACT_INDIVIDUALS (optional) — specific person if recorded at entry
SEGMENT_KEYTEXTFK → SEGMENTS (optional) — campaign attribution entry point
GIFT_ASK_KEYTEXTFK → GIFT_ASKS (optional) — the ask this gift fulfills
GIFT_BATCH_KEYTEXTFK → GIFT_BATCHES (optional) — entry batch this gift was part of
GRANT_KEYTEXTFK → GRANTS (optional) — linked grant record
TRIBUTE_KEYTEXTFK → TRIBUTES (optional) — in-honor-of or in-memory-of tribute
GIFT_DATE_UTCTIMESTAMPDate the gift was made
RECEIPT_DATE_UTCTIMESTAMPDate the gift was receipted
THANK_YOU_DATE_UTCTIMESTAMPDate a thank-you was sent
AMOUNTNUMBERTotal gift amount
GIFT_TYPENUMBERPayment method — decode with TYPE_REFERENCES (Entity: Gift, Property: GiftType)
FAIR_MARKET_VALUENUMBERFair market value of any premium received — typically non-tax-deductible
CHECK_NUMBERTEXTCheck number for check gift types
ACCOUNTING_CODETEXTExternal accounting code
TRANSACTION_SOURCETEXTSource platform name (e.g. third-party processor)
CREDIT_CARD_TYPETEXTCredit card type for credit gifts
CURRENCY_CODETEXTCurrency code
TICKER_SYMBOLTEXTStock ticker symbol (stock gifts)
NUMBER_OF_SHARESNUMBERShares received (stock gifts)
CRYPTOCOIN_TYPETEXTCryptocurrency type (crypto gifts)
GIFT_IS_DELETEDBOOLEANSoft delete flag — always filter WHERE GIFT_IS_DELETED = FALSE
GIFT_IS_PRIVATEBOOLEANGift is marked private
GIFT_IS_TAX_DEDUCTIBLEBOOLEANGift is tax-deductible

GIFT_DESIGNATIONS

One row per project split within a gift. A single gift can have multiple designation rows. AMOUNT_DESIGNATED across all rows for a gift sums to GIFTS.AMOUNT.
ColumnTypeNotes
GIFT_DESIGNATION_KEYTEXTPrimary key
GIFT_KEYTEXTFK → GIFTS
PROJECT_KEYTEXTFK → PROJECTS — the fund this portion goes to
AMOUNT_DESIGNATEDNUMBERAmount allocated to this project
CURRENCY_CODETEXTCurrency code
GIFT_DESIGNATION_IS_DELETEDBOOLEANSoft delete flag — always filter WHERE GIFT_DESIGNATION_IS_DELETED = FALSE

PROJECTS

One row per fund or program. The destination for gift designations and recurring gift designations.
ColumnTypeNotes
PROJECT_KEYTEXTPrimary key
NAMETEXTProject name
DESCRIPTIONTEXTExtended description
TYPETEXTProject type
REVENUE_ACCOUNTING_CODETEXTAccounting code for revenue recognition
EXTERNAL_ACCOUNTING_CODETEXTExternal system accounting code
BEGINNING_BALANCENUMBEROpening balance
CURRENT_BALANCENUMBERCurrent running balance
START_DATETIMESTAMPProject start date
END_DATETIMESTAMPProject end date
PROJECT_IS_ACTIVEBOOLEANWhether the project is currently active
PROJECT_IS_DEFAULTBOOLEANWhether this is the default project for unspecified designations
PROJECT_IS_DELETEDBOOLEANSoft delete flag
PROJECT_IS_TAX_DEDUCTIBLEBOOLEANGifts to this project are tax-deductible

GIFT_BATCHES

One row per entry batch — a named group of gifts entered together. Useful for reconciliation and audit workflows.
ColumnTypeNotes
GIFT_BATCH_KEYTEXTPrimary key
BATCHTEXTBatch reference ID or name
TOTALNUMBERTotal gift count or amount in the batch
GIFT_BATCH_IS_DELETEDBOOLEANSoft delete flag

GIFT_ASKS

One row per formal solicitation made to a contact. Linked optionally to GIFTS (when the ask is fulfilled) and PLEDGES (when the ask results in a pledge).
ColumnTypeNotes
GIFT_ASK_KEYTEXTPrimary key
CONTACT_KEYTEXTFK → CONTACTS — the contact being solicited
PROJECT_KEYTEXTFK → PROJECTS — project the ask is for
SEGMENT_KEYTEXTFK → SEGMENTS (optional) — campaign segment for this ask
ASK_DATETIMESTAMPDate the ask was made
EXPECTED_FULFILLMENT_DATETIMESTAMPExpected date the ask will be fulfilled
ASK_AMOUNTNUMBERAmount requested
ASK_TYPETEXTType of ask (e.g. Major Gift, Annual Fund)
PROBABILITY_TO_CLOSENUMBERLikelihood of fulfillment (0–100)
STATUSTEXTCurrent status text
DECLINEDBOOLEANTrue if the ask was declined
GIFT_ASK_IS_DELETEDBOOLEANSoft delete flag

PLEDGES

One row per pledge commitment. A pledge can exist without a gift ask — always use LEFT JOIN when connecting to GIFT_ASKS. Track fulfillment via PLEDGE_PAYMENTS.
ColumnTypeNotes
PLEDGE_KEYTEXTPrimary key
CONTACT_KEYTEXTFK → CONTACTS
GIFT_ASK_KEYTEXTFK → GIFT_ASKS (optional) — the ask that generated this pledge; always LEFT JOIN
PROJECT_KEYTEXTFK → PROJECTS
PLEDGE_DATETIMESTAMPDate the pledge was made
EXPECTED_FULFILLMENT_DATETIMESTAMPExpected date pledge will be fully paid
CANCEL_DATE_TIME_UTCTIMESTAMPDate the pledge was cancelled
WRITE_OFF_DATE_TIME_UTCTIMESTAMPDate the pledge was written off
AMOUNT_PLEDGEDNUMBERTotal commitment amount
BALANCENUMBERRemaining unfulfilled amount
FREQUENCYNUMBERPayment schedule — decode with TYPE_REFERENCES (Entity: Pledge, Property: Frequency)
STATUSNUMBERCurrent status — decode with TYPE_REFERENCES (Entity: Pledge, Property: Status)
WRITE_OFF_AMOUNTNUMBERAmount written off
WRITE_OFF_REASONTEXTReason for write-off
PLEDGE_IS_DELETEDBOOLEANSoft delete flag — always filter WHERE PLEDGE_IS_DELETED = FALSE

PLEDGE_PAYMENTS

One row per scheduled installment against a pledge. A null GIFT_KEY means the installment was expected but not yet received.
ColumnTypeNotes
PLEDGE_PAYMENT_KEYTEXTPrimary key
PLEDGE_KEYTEXTFK → PLEDGES
GIFT_KEYTEXTFK → GIFTS (nullable) — null = installment expected but not received
EXPECTED_PAYMENT_DATETIMESTAMPDate the installment was expected
FULFILL_PAYMENT_DATE_TIME_UTCTIMESTAMPDate the installment was actually paid
EXPECTED_AMOUNTNUMBERAmount expected for this installment
ACTUAL_AMOUNTNUMBERAmount actually received
PLEDGE_PAYMENT_IS_DELETEDBOOLEANSoft delete flag

RECURRING_GIFTS

One row per standing recurring commitment — the amount, frequency, and current status. Individual payment instances are tracked in RECURRING_GIFT_PAYMENTS.
ColumnTypeNotes
RECURRING_GIFT_KEYTEXTPrimary key
CONTACT_KEYTEXTFK → CONTACTS
SEGMENT_KEYTEXTFK → SEGMENTS (optional) — campaign attribution
RECURRING_GIFT_DATETIMESTAMPDate the recurring gift was established
NEXT_EXPECTED_PAYMENT_DATETIMESTAMPDate of the next scheduled payment — key field for lapse detection
LAST_PAYMENT_DATETIMESTAMPDate of the most recent received payment
CANCEL_DATE_TIME_UTCTIMESTAMPDate the recurring gift was cancelled
AMOUNTNUMBERPer-payment commitment amount
BALANCENUMBERRunning balance (if applicable)
FREQUENCYNUMBERPayment schedule — decode with TYPE_REFERENCES (Entity: RecurringGift, Property: Frequency)
STATUSNUMBERCurrent status — decode with TYPE_REFERENCES (Entity: RecurringGift, Property: Status)
AUTOMATED_PAYMENTSBOOLEANPayments are processed automatically
CANCELLATION_REASONTEXTReason for cancellation
RECURRING_GIFT_IS_DELETEDBOOLEANSoft delete flag — always filter WHERE RECURRING_GIFT_IS_DELETED = FALSE

RECURRING_GIFT_PAYMENTS

One row per scheduled payment instance against a recurring gift. A null GIFT_KEY means a payment was expected but not received — the primary signal for lapsed giving.
ColumnTypeNotes
RECURRING_GIFT_PAYMENT_KEYTEXTPrimary key
RECURRING_GIFT_KEYTEXTFK → RECURRING_GIFTS
GIFT_KEYTEXTFK → GIFTS (nullable) — null = payment expected but not received
EXPECTED_PAYMENT_DATETIMESTAMPDate the payment was expected
FULFILL_PAYMENT_DATETIMESTAMPDate the payment was actually made
DISMISS_PAYMENT_DATETIMESTAMPDate the payment was dismissed (skipped intentionally)
EXPECTED_AMOUNTNUMBERAmount expected based on the commitment
ACTUAL_AMOUNTNUMBERAmount actually received
RECURRING_GIFT_PAYMENT_IS_DELETEDBOOLEANSoft delete flag

RECURRING_GIFT_DESIGNATIONS

One row per project split on a recurring gift commitment. Mirrors GIFT_DESIGNATIONS but lives on the commitment, not individual transactions.
ColumnTypeNotes
RECURRING_GIFT_DESIGNATION_KEYTEXTPrimary key
RECURRING_GIFT_KEYTEXTFK → RECURRING_GIFTS
PROJECT_KEYTEXTFK → PROJECTS
AMOUNT_DESIGNATEDNUMBERPortion of the per-payment amount allocated to this project

GRANTS

One row per grant record. Grants are linked to a gift (GIFT_KEY) when funds are received, and to a project (PROJECT_KEY) for the purpose.
ColumnTypeNotes
GRANT_KEYTEXTPrimary key
GIFT_KEYTEXTFK → GIFTS — the gift that records the received funds
PROJECT_KEYTEXTFK → PROJECTS — project the grant is for
TITLETEXTGrant title
STATUSTEXTCurrent status
GRANT_TYPENUMBERIncoming or outgoing — decode with TYPE_REFERENCES (Entity: Grant, Property: GrantType)
TOTAL_ANTICIPATED_AMOUNTNUMBERExpected total award
AWARDED_AMOUNTNUMBERActual awarded amount
AWARDED_DATE_UTCTIMESTAMPDate the grant was awarded
DUE_DATE_UTCTIMESTAMPApplication or reporting due date
SUBMISSION_DATE_UTCTIMESTAMPDate the application was submitted
AWARDED_GRANTBOOLEANTrue if the grant was awarded
DESCRIPTIONTEXTExtended description
GRANT_IS_DELETEDBOOLEANSoft delete flag

TRIBUTES

One row per tribute record — gifts made in honor of or in memory of an individual. Linked to the honoree via CONTACT_INDIVIDUAL_KEY.
ColumnTypeNotes
TRIBUTE_KEYTEXTPrimary key
CONTACT_INDIVIDUAL_KEYTEXTFK → CONTACT_INDIVIDUALS — the person being honored
TRIBUTE_TYPENUMBERIn Honor Of or In Memory Of — decode with TYPE_REFERENCES (Entity: Gift, Property: TributeType)
FIRST_NAMETEXTFirst name of the honoree
LAST_NAMETEXTLast name of the honoree
TOTAL_GIFTSNUMBERCount of gifts associated with this tribute
TOTAL_GIFT_AMOUNTNUMBERTotal giving associated with this tribute
TRIBUTE_IS_DELETEDBOOLEANSoft delete flag

GIFT_PREMIUMS

One row per premium item fulfilled as part of a gift (e.g. a thank-you gift sent to the donor). Links the gift to the premium catalog item.
ColumnTypeNotes
GIFT_PREMIUM_KEYTEXTPrimary key
GIFT_KEYTEXTFK → GIFTS
PREMIUM_KEYTEXTFK → PREMIUMS — the catalog item fulfilled
QUANTITYNUMBERNumber of items sent
TOTAL_VALUENUMBERTotal value of premiums sent
GIFT_PREMIUM_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