Account Cloud Inc
Fund Accounting

Contributions vs. Exchange Transactions: Getting Revenue Recognition Right Under ASC 958

The same $50,000 check can be a contribution or an exchange transaction depending on what the funder gets back. Getting the classification wrong changes your revenue recognition, your net asset classes, and your audit. Here's how to tell the difference.

Luke Loescher · August 4, 2026 · 6 min read

A city government sends your nonprofit $50,000. Is that a contribution or is it revenue from a contract? The check looks identical either way. But the accounting is completely different, and getting it wrong doesn’t just misstate one line item — it can cascade into the wrong net asset classification, revenue recognized in the wrong period, and an audit adjustment that shows up in a management letter your board reads.

This is one of the most common points of confusion in nonprofit accounting, and it trips up experienced bookkeepers as often as new ones — not because the rule is obscure, but because the answer depends on facts specific to each agreement, not on who the funder is or what the money is called.

The Question That Actually Matters

Under ASC 958-605 (as clarified by ASU 2018-08), the test isn’t “is this a government grant” or “is this from a foundation.” The test is: is the resource provider receiving commensurate value in return?

If yes — if the funder is essentially purchasing a specific good or service for its own direct benefit, at a value roughly equal to what it’s paying — that’s an exchange transaction, governed by ASC 606, the same revenue standard used by for-profit companies selling anything else.

If no — if the payment is a nonreciprocal transfer, given to advance the organization’s mission or benefit the public rather than the funder itself — that’s a contribution, governed by ASC 958-605.

The same $50,000 can land on either side of that line depending on the terms of the specific agreement. A city paying you to run a workforce training program it designed, for outcomes it will use directly, looks like an exchange. A city awarding you a grant to run a workforce training program that serves the public, where the city receives no direct commensurate benefit beyond the general public good, looks like a contribution — even though both involve “government money for a training program.”

Why This Isn’t Just a Technicality

Getting this classification wrong has real consequences, not just a bookkeeping preference:

  • Timing. Exchange revenue is recognized as you satisfy performance obligations under ASC 606 — often ratably as services are delivered. Contribution revenue, if unconditional, is recognized immediately upon the promise; if conditional, it’s deferred until the condition is substantially met. These can produce very different revenue recognition patterns for the same dollar amount.
  • Net asset classification. Contributions can carry donor restrictions and land in “net assets with donor restrictions.” Exchange revenue doesn’t get restricted in the GAAP sense at all — it’s just revenue, full stop, regardless of what the contract says the money is “for.”
  • Presentation. Exchange transactions and contributions appear differently on your Statement of Activities, and misclassifying a large grant can distort ratios (like program efficiency) that board members and funders actually look at.

The Two-Part Test for Conditional Contributions

Once you’ve established that a payment is a contribution (not an exchange), the next question is whether it’s conditional. This matters because conditional contributions can’t be recognized as revenue until the condition is substantially met — cash received in advance sits as a refundable advance liability, not revenue, until then.

A contribution is conditional only if the agreement includes both:

  1. A barrier the organization must overcome — a measurable performance target, a matching requirement, or reimbursement tied to specific qualifying costs incurred.
  2. A right of return or right of release — the funder can reclaim unspent funds, or is released from its obligation to pay, if the barrier isn’t met.

Both elements have to be present. A grant agreement that says “please use this for youth programming” with no measurable target and no clawback right isn’t conditional — it’s an unconditional, purpose-restricted contribution, recognized as revenue immediately (and released from restriction as spent on youth programming). A cost-reimbursement grant, on the other hand — where you submit qualifying expenses and get reimbursed, and unspent or non-qualifying amounts revert to the funder — is almost always conditional. Revenue follows the barrier, not the cash. If you’re recognizing that grant as revenue when the check arrives rather than as qualifying costs are incurred, that’s a common and material error.

Where Organizations Get This Wrong

The pattern shows up most often in three places:

Government cost-reimbursement grants recorded as revenue on receipt. These are conditional almost by definition — there’s a barrier (qualifying costs) and a right of return (unspent funds go back). Recording the full award as revenue when the check arrives, instead of as qualifying costs are incurred, overstates revenue in the period received and understates it later.

Fee-for-service contracts treated as unrestricted contributions. If a funder is paying for a specific deliverable it will use directly — a training curriculum built to its specification, a report it commissioned for internal use — that’s likely an exchange transaction under ASC 606, not a contribution with a purpose restriction. Calling it a “restricted grant” doesn’t change what it actually is.

Membership dues and sponsorships blended together without looking at what’s actually exchanged. A sponsorship that gives the sponsor logo placement, event tickets, and marketing exposure roughly commensurate with the payment has an exchange component. A sponsorship that’s really a disguised gift, with only nominal benefits back, is closer to a contribution. Many organizations need to split a single payment into its exchange and contribution components rather than picking one category for the whole thing.

The Practical Fix

Don’t classify by funder type or by what the payment is called in the agreement. Read the actual terms every time a new grant or contract comes in, and ask two questions in order: Is the funder getting commensurate value back (exchange) or not (contribution)? If it’s a contribution, is there a real barrier plus a real right of return (conditional) or not (unconditional)?

Build this into your grant intake process — the classification should happen once, when the agreement is signed, documented in writing, and then applied consistently as transactions post. Waiting until year-end close or audit fieldwork to work out whether a grant was conditional means restating months of entries under time pressure.

The Bottom Line

The check doesn’t tell you the answer — the agreement does. Every new grant or contract deserves a deliberate classification: exchange or contribution, and if contribution, conditional or unconditional. Get that right at intake and the rest of the accounting — revenue timing, net asset classification, and the release from restriction — follows correctly. Get it wrong, and it’s an audit adjustment waiting to happen.

Compliance check: ASC 958/ASU 2018-08 framework applied ✓ · exchange vs. contribution resolved via commensurate-value test ✓ · conditional vs. unconditional resolved via barrier + right-of-return test ✓ · net asset classification kept to the two current GAAP classes ✓ · thresholds and fact patterns flagged as agreement-specific — confirm classification with your auditor on any grant with unusual terms.

Account Cloud Unity lets you tag each grant and contract at intake — exchange or contribution, conditional or unconditional — so the classification drives revenue recognition automatically instead of being re-derived at close. If your team is still deciding this transaction-by-transaction from memory, it’s worth a look.

More on Fund Accounting