The $326 Billion Question: How Are You Tracking DAF Commitments vs Actual Distributions in Beancount?

Donor-advised funds just hit $326 billion in assets at the end of 2024—up 27.5% from the year before—and 80% of nonprofits say DAFs will be more critical to their fundraising strategy in 2025. If you work with nonprofit clients like I do, you know this means one thing: tracking chaos.

The DAF Tracking Nightmare

Unlike traditional pledges with documented timelines, DAF commitments are soft promises with unpredictable timing. A board member might say “I’ll recommend a $25K grant from my Fidelity DAF sometime this quarter,” and then… crickets. Or it shows up six months later. Or never.

The problem gets worse: when the grant finally arrives, it comes from the DAF sponsor (Fidelity Charitable, Schwab Charitable, etc.), not the original donor. So you receive a wire from “Fidelity Charitable” with zero context about which donor recommended it, making stewardship and follow-up nearly impossible.

What I’m Trying to Track

For my nonprofit clients, I need a Beancount structure that handles:

  1. Expected DAF revenue (soft commitments from donor conversations)
  2. Actual DAF grants received (when they finally show up)
  3. Historical patterns (which donors give via DAF, typical timing, average amounts)
  4. Sponsor attribution (was this from Fidelity, Schwab, NPTrust?)

Right now I’m cobbling together metadata tags and separate income accounts, but it feels messy. I’m also struggling with the forecasting piece—how do you model revenue that has no legal payout requirement and 100% donor discretion?

The Identity Problem

Here’s the daily frustration: my clients receive DAF grants but often can’t identify the original donor. They need to send thank-you letters, acknowledge gifts for donor stewardship, and build relationships—but all they have is “Fidelity Charitable - $10,000” on the bank statement.

For small nonprofits without sophisticated CRM systems, this is a real problem. We end up playing detective: cross-referencing grant dates and amounts against recent donor emails, matching sizes to typical giving patterns, calling donors to ask “hey, did you happen to send us $10K via your DAF last week?”

How Are You Handling This?

For those of you tracking nonprofit finances in Beancount:

  • What account structures are you using for DAF commitments vs actuals?
  • How do you handle the uncertainty in forecasting?
  • Any clever metadata schemes for tracking sponsor names and matching gifts to donors?
  • Has anyone built importers or scripts that help with the donor identification problem?

With $64.89 billion in DAF grants flowing to nonprofits in 2024 (up 19%), we need better systems. I’d love to hear how the community is solving this.


Sources: DAF Assets Soar 30% to $326 Billion, Annual DAF Report 2025, 7 Top Takeaways from the New 2025 DAF Report

I’ll offer the perspective from the donor side since I use a DAF myself and track everything in Beancount.

How DAF Donors Track (At Least This One)

My account structure looks like:

Assets:Investments:DAF:FidelityCharitable  ; Current DAF balance
Expenses:Charitable:Recommended            ; Grants I've recommended
Expenses:Charitable:Confirmed              ; Grants actually distributed

The gap between “Recommended” and “Confirmed” can be days or weeks depending on the sponsor’s processing time. I use metadata to track:

2026-01-15 * "Recommended grant to Local Food Bank"
  Expenses:Charitable:Recommended  5000 USD
    daf-sponsor: "Fidelity"
    daf-status: "pending"
    recipient-ein: "12-3456789"
  Assets:Investments:DAF:FidelityCharitable  -5000 USD

2026-01-22 * "Grant confirmed by Fidelity"
  Expenses:Charitable:Confirmed  5000 USD
    daf-sponsor: "Fidelity"
    recipient: "Local Food Bank"
  Expenses:Charitable:Recommended  -5000 USD

What Nonprofits Should Know

According to the 2025 DAF Report, nearly 40% of all DAF distributions are now recurring or scheduled. This is huge for forecasting!

My recommendation: ask your DAF donors to set up recurring grants. Most platforms (Fidelity, Schwab, Vanguard Charitable) now make this trivial. I have monthly recurring grants set to three organizations I support consistently, and quarterly grants to two others.

For nonprofits: if you know a donor uses a DAF, explicitly invite them to schedule recurring distributions. Say something like: “If you’re giving via your donor-advised fund, did you know you can schedule automatic recurring grants? We’d love to be on your recurring list for $X/month.”

This transforms the unpredictable “soft commitment” problem into something you can actually forecast.

The payout rate data is also interesting: DAFs averaged 25.3% in 2024 (up from 24%), which is 5x higher than the 5% legally required for private foundations. But there’s massive variance—some donors drain their DAFs annually, others barely touch them.


Source: Annual DAF Report 2025

From a tax compliance perspective, there are a few critical things to remember about DAF tracking:

The No-Payout-Requirement Problem

Unlike private foundations (which must distribute 5% annually), DAFs have zero legal payout requirement. This means timing is 100% at donor discretion. From a nonprofit forecasting standpoint, this is a nightmare.

Even if a donor verbally commits “I’ll grant you $50K from my DAF this year,” they could legally change their mind, delay indefinitely, or redirect to a different charity. You have no recourse.

Compliance Requirements for Grantmaking

For DAF sponsors to release grants, the recipient must be an IRS-qualified 501(c)(3) public charity. Make sure your EIN is visible on your website donation page—DAF donors need it to complete grant recommendation forms.

Also, DAF grants cannot provide the donor with goods, services, benefits, or quid pro quo. No gala tickets, no donor dinners, no naming rights bundled with the grant. The sponsor will reject these recommendations.

Beancount Metadata Strategy

I recommend tagging all revenue by source type to analyze patterns:

2026-02-10 * "Grant from Schwab Charitable"
  Assets:Checking  25000 USD
  Income:Donations:DAF  -25000 USD
    source-type: "DAF"
    sponsor: "Schwab Charitable"
    grant-letter-ref: "SCH-2026-001234"

Then run queries like:

SELECT year, quarter, sum(position) WHERE account ~ 'Income:Donations:DAF' GROUP BY year, quarter

This reveals seasonal patterns. In my experience with nonprofit clients, DAF grants spike in Q4 (November-December) as donors clear out balances before year-end.

Forecasting Tip

Build your budget assuming DAF grants arrive 30-60 days later than promised. Treat them like accounts receivable with extended payment terms, not cash in hand.


Sources: IRS Donor-Advised Funds Guidance, NPTrust DAF Grantmaking Rules

I’ve been tracking nonprofit books in Beancount for 8 years now, and DAF grants have definitely become a bigger piece of the revenue mix. Here’s the account structure I’ve settled on:

Recommended Account Structure

Income:Donations:DAF:Committed    ; Soft pledges (not booked as revenue yet)
Income:Donations:DAF:Received     ; Actual grants received
Assets:AccountsReceivable:DAF     ; Promised but not yet received (if material)

The key insight: Don’t book DAF “commitments” as revenue until cash hits the bank. Under accrual accounting, a verbal DAF promise isn’t a legally enforceable pledge, so it shouldn’t inflate your income.

Instead, I track commitments in metadata or separate memo accounts for internal forecasting, but they stay out of official financial statements until the grant arrives.

Using Balance Assertions to Catch Gaps

Here’s a real example from a client:

A board member promised a $50K DAF grant “before the end of Q1” to help with operating cash. My client was counting on it for payroll. March 31 came and went—nothing. Checked with the donor: “Oh, I recommended it but Fidelity hasn’t processed it yet.”

Because we had balance assertions on the checking account and were running weekly cash flow projections, we caught the shortfall in time to adjust spending and avoid a crisis. Two weeks later the grant finally showed up.

Lesson: DAF forecasting is art, not science. Build in uncertainty. If someone says “I’ll grant $X,” assume:

  • 70% chance it happens
  • 50% chance it happens on time
  • 30% chance the amount is different than stated

Metadata Example

2026-01-05 ! "Board member indicated \$50K DAF grant expected Q1"
  Income:Donations:DAF:Committed  -50000 USD
    donor: "John Smith"
    promised-date: "2026-03-31"
    confidence: "medium"
    notes: "Verbal commitment, no written documentation"
  Assets:AccountsReceivable:DAF  50000 USD

2026-04-12 * "DAF grant received from Fidelity Charitable"
  Assets:Checking  50000 USD
  Income:Donations:DAF:Received  -50000 USD
    donor: "John Smith (confirmed via follow-up)"
    sponsor: "Fidelity Charitable"

2026-04-12 * "Clear out committed amount"
  Assets:AccountsReceivable:DAF  -50000 USD
  Income:Donations:DAF:Committed  50000 USD

The ! flag marks the commitment transaction as “pending” so it doesn’t clear balance assertions.

Hope this helps! The donor identification problem @accountant_alice mentioned is still tough—I usually rely on old-fashioned detective work (matching grant amounts to donor conversations).


Tracking nonprofit finances since 2018 • Beancount evangelist • Still learning

The donor identification problem is my daily headache. Let me share the painful reality for small nonprofits:

What Actually Happens

Monday morning:

  • Bank statement shows: “WIRE TRANSFER - FIDELITY CHARITABLE - $10,000”
  • Executive Director emails me: “Bob, who sent this? I need to send a thank-you letter by end of day.”
  • Me: “…no idea. Let me investigate.”

The detective work:

  1. Search email for “donor-advised” or “DAF” in the past 30 days
  2. Check CRM notes for donors who mentioned Fidelity
  3. Look for donors whose typical gift amount is ~$10K
  4. Cross-reference grant date with recent donor conversations
  5. Sometimes just call/email top donors: “Hey, did you send us $10K via your DAF last week?”

This is embarrassing and inefficient. Imagine calling a donor and saying “we got money but don’t know who it’s from” :grimacing:

My Current Beancount Workaround

When a DAF grant arrives with no donor info:

2026-03-10 * "DAF grant - donor unknown"
  Assets:Checking  10000 USD
  Income:Donations:DAF:Unidentified  -10000 USD
    sponsor: "Fidelity Charitable"
    ref-number: "FID-20260310-7392"
    investigation-status: "pending"

Then once I identify the donor (usually 1-3 days later):

2026-03-12 * "Identified donor for 3/10 grant via email confirmation"
  Income:Donations:DAF:Identified  -10000 USD
    donor: "Sarah Johnson"
    donor-id: "D-00234"
    sponsor: "Fidelity Charitable"
  Income:Donations:DAF:Unidentified  10000 USD
    investigation-completed: "2026-03-12"

This lets me track:

  • How many “mystery grants” we receive each month
  • How long donor identification takes on average
  • Which DAF sponsors are worst for donor attribution

Has Anyone Automated This?

Serious question: has anyone built a tool or importer that helps match DAF grants to donors?

What would help:

  • Script that searches email/CRM for DAF mentions when mystery grants arrive
  • Integration with DAF sponsor APIs (if they even exist?) to get donor names
  • Machine learning to match grant amounts/timing to historical donor patterns

For tiny nonprofits like my clients (1-2 staff), this manual detective work consumes hours every month. There has to be a better way.

If you’ve solved this or even partially automated it, please share! The $64.89 billion flowing through DAFs in 2024 deserves better tracking than “call everyone and ask.”


Bookkeeper for 3 small nonprofits • Beancount user since 2023 • Always learning