> ## Documentation Index
> Fetch the complete documentation index at: https://docs.virtuous.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Pledges & Gift Asks

> The commitment pipeline — from a gift ask through a pledge to the payments that fulfill it.

<Note>
  **Grain:** `PLEDGES` — one row per commitment to give. `PLEDGE_PAYMENTS` — one row per installment against a pledge (null `GIFT_KEY` means the payment is expected but not yet received).
</Note>

A `GIFT_ASK` is a specific solicitation made to a contact for a project. When a contact commits to giving, a `PLEDGE` is created — optionally linked back to the ask. `PLEDGE_PAYMENTS` track each scheduled installment, and when payment arrives, it is recorded as a `GIFT`.

> **Key rule:** A pledge can exist without a gift ask (contact committed without a formal ask). Always use a `LEFT JOIN` when connecting `PLEDGES` to `GIFT_ASKS`.

```mermaid theme={null}
flowchart TD
    PLEDGES:::hub

    CONTACTS -->|"CONTACT_KEY"| PLEDGES
    CONTACTS -->|"CONTACT_KEY"| GIFT_ASKS
    PLEDGES -.->|"GIFT_ASK_KEY"| GIFT_ASKS
    PLEDGES -->|"PLEDGE_KEY"| PLEDGE_PAYMENTS
    PLEDGE_PAYMENTS -.->|"GIFT_KEY"| GIFTS
    PLEDGES -->|"PROJECT_KEY"| PROJECTS
    GIFT_ASKS -->|"PROJECT_KEY"| PROJECTS

    classDef hub fill:#00A3E0,color:#ffffff,stroke:#081F2C
    classDef entity fill:#CEE7F2,color:#243746,stroke:#41B6E6
    class CONTACTS,GIFT_ASKS,PLEDGE_PAYMENTS,GIFTS,PROJECTS entity
```

> **Solid lines** — required join (FK always populated). **Dotted lines** — optional join (FK is nullable; always use `LEFT JOIN`).

## Table columns

**Tables on this page:** [PLEDGES](#pledges) · [GIFT\_ASKS](#gift-asks) · [PLEDGE\_PAYMENTS](#pledge-payments) · [CONTACTS (boundary)](#contacts) · [GIFTS (boundary)](#gifts) · [PROJECTS (boundary)](#projects)

> `PLEDGES.STATUS` is a numeric code. Decode it using `TYPE_REFERENCES` with `ENTITY = 'Pledge'` and `PROPERTY = 'Status'`. See the [decode pattern](/queries/overview#decode-pattern-type_references).

#### **PLEDGES**

One row per pledge commitment. Tracks the total amount pledged, how much remains (`BALANCE`), and current status. Fulfillment is tracked via `PLEDGE_PAYMENTS`.

| **Column**                  | **Type**  | **Notes**                                                                                 |
| :-------------------------- | :-------- | :---------------------------------------------------------------------------------------- |
| `PLEDGE_KEY`                | TEXT      | Primary key                                                                               |
| `CONTACT_KEY`               | TEXT      | FK → CONTACTS                                                                             |
| `GIFT_ASK_KEY`              | TEXT      | FK → GIFT\_ASKS (optional) — the ask that generated this pledge; always LEFT JOIN         |
| `PROJECT_KEY`               | TEXT      | FK → PROJECTS                                                                             |
| `PLEDGE_DATE`               | TIMESTAMP | Date the pledge was made                                                                  |
| `EXPECTED_FULFILLMENT_DATE` | TIMESTAMP | Expected date pledge will be fully paid                                                   |
| `CANCEL_DATE_TIME_UTC`      | TIMESTAMP | Date the pledge was cancelled                                                             |
| `WRITE_OFF_DATE_TIME_UTC`   | TIMESTAMP | Date the pledge was written off                                                           |
| `AMOUNT_PLEDGED`            | NUMBER    | Total commitment amount                                                                   |
| `BALANCE`                   | NUMBER    | Remaining unfulfilled amount                                                              |
| `FREQUENCY`                 | NUMBER    | Payment schedule — decode with TYPE\_REFERENCES (Entity: `Pledge`, Property: `Frequency`) |
| `STATUS`                    | NUMBER    | Current status — decode with TYPE\_REFERENCES (Entity: `Pledge`, Property: `Status`)      |
| `WRITE_OFF_AMOUNT`          | NUMBER    | Amount written off                                                                        |
| `WRITE_OFF_REASON`          | TEXT      | Reason for write-off                                                                      |
| `PLEDGE_IS_DELETED`         | BOOLEAN   | Soft delete flag — always filter `WHERE PLEDGE_IS_DELETED = FALSE`                        |

#### **GIFT\_ASKS**

One row per formal solicitation made to a contact. Linked optionally to `GIFTS` (when fulfilled) and `PLEDGES` (when it results in a commitment).

| **Column**                  | **Type**  | **Notes**                                                |
| :-------------------------- | :-------- | :------------------------------------------------------- |
| `GIFT_ASK_KEY`              | TEXT      | Primary key                                              |
| `CONTACT_KEY`               | TEXT      | FK → CONTACTS — the contact being solicited              |
| `PROJECT_KEY`               | TEXT      | FK → PROJECTS — project the ask is for                   |
| `SEGMENT_KEY`               | TEXT      | FK → SEGMENTS (optional) — campaign segment for this ask |
| `ASK_DATE`                  | TIMESTAMP | Date the ask was made                                    |
| `EXPECTED_FULFILLMENT_DATE` | TIMESTAMP | Expected date the ask will be fulfilled                  |
| `ASK_AMOUNT`                | NUMBER    | Amount requested                                         |
| `ASK_TYPE`                  | TEXT      | Type of ask (e.g. Major Gift, Annual Fund)               |
| `PROBABILITY_TO_CLOSE`      | NUMBER    | Likelihood of fulfillment (0–100)                        |
| `STATUS`                    | TEXT      | Current status text                                      |
| `DECLINED`                  | BOOLEAN   | True if the ask was declined                             |
| `GIFT_ASK_IS_DELETED`       | BOOLEAN   | Soft delete flag                                         |

#### **PLEDGE\_PAYMENTS**

One row per scheduled installment against a pledge. A null `GIFT_KEY` means the installment was expected but not yet received.

| **Column**                      | **Type**  | **Notes**                                                            |
| :------------------------------ | :-------- | :------------------------------------------------------------------- |
| `PLEDGE_PAYMENT_KEY`            | TEXT      | Primary key                                                          |
| `PLEDGE_KEY`                    | TEXT      | FK → PLEDGES                                                         |
| `GIFT_KEY`                      | TEXT      | FK → GIFTS (nullable) — null = installment expected but not received |
| `EXPECTED_PAYMENT_DATE`         | TIMESTAMP | Date the installment was expected                                    |
| `FULFILL_PAYMENT_DATE_TIME_UTC` | TIMESTAMP | Date the installment was actually paid                               |
| `EXPECTED_AMOUNT`               | NUMBER    | Amount expected for this installment                                 |
| `ACTUAL_AMOUNT`                 | NUMBER    | Amount actually received                                             |
| `PLEDGE_PAYMENT_IS_DELETED`     | BOOLEAN   | Soft delete flag                                                     |

#### **CONTACTS**

`CONTACTS` appears in this diagram as the giving unit making the pledge and receiving the ask. The full contacts structure is documented in [<u>Contacts — extended reference</u>](https://github.com/jgunkelvirtuous/mintlify-virtuous-data-documentation/blob/main/data-models/reference/contacts).

| **Column**           | **Type** | **Notes**            |
| :------------------- | :------- | :------------------- |
| `CONTACT_KEY`        | TEXT     | Primary key          |
| `NAME`               | TEXT     | Contact display name |
| `CONTACT_IS_DELETED` | BOOLEAN  | Soft delete flag     |

#### **GIFTS**

`GIFTS` appears in this diagram as the transaction recorded when a pledge payment is collected. The full gift structure is documented in [<u>Gifts — extended reference</u>](https://github.com/jgunkelvirtuous/mintlify-virtuous-data-documentation/blob/main/data-models/reference/gifts).

| **Column**        | **Type**  | **Notes**              |
| :---------------- | :-------- | :--------------------- |
| `GIFT_KEY`        | TEXT      | Primary key            |
| `CONTACT_KEY`     | TEXT      | FK → CONTACTS          |
| `GIFT_DATE_UTC`   | TIMESTAMP | Date the gift was made |
| `AMOUNT`          | NUMBER    | Total gift amount      |
| `GIFT_IS_DELETED` | BOOLEAN   | Soft delete flag       |

#### **PROJECTS**

`PROJECTS` appears in this diagram as the fund the pledge and ask are associated with. The full project structure is documented in [<u>Gifts — extended reference</u>](https://github.com/jgunkelvirtuous/mintlify-virtuous-data-documentation/blob/main/data-models/reference/gifts#projects).

| **Column**           | **Type** | **Notes**                               |
| :------------------- | :------- | :-------------------------------------- |
| `PROJECT_KEY`        | TEXT     | Primary key                             |
| `NAME`               | TEXT     | Project name                            |
| `PROJECT_IS_ACTIVE`  | BOOLEAN  | Whether the project is currently active |
| `PROJECT_IS_DELETED` | BOOLEAN  | Soft delete flag                        |

> `PLEDGES.STATUS` is a numeric code. Decode it using `TYPE_REFERENCES` with `ENTITY = 'Pledge'` and `PROPERTY = 'Status'`. See the [<u>decode pattern</u>](https://github.com/jgunkelvirtuous/mintlify-virtuous-data-documentation/blob/main/queries/overview#decode-pattern-type_references).

<Tip>
  **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.
</Tip>
