TLDR
FASB ASC 958-605 requires nonprofits to recognize grant revenue based on donor-imposed restrictions — a requirement your CRM cannot support if it was configured without fund codes mapped before donor import. The seven mistakes below are the ones that cause organizations to finish a CRM implementation and discover, weeks later, that their grants manager is still using the same Excel spreadsheet they used before go-live.
FASB ASC 958-605 requires your organization to track grant revenue by restriction type — yet most CRM implementations begin with a donor import that contains zero fund code information. The seven mistakes below are what cause organizations to complete a CRM go-live and find their grants manager still working in Excel two months later.
Mistake 1: Not Mapping Restricted Fund Codes Before Import
The mistake: Your development director or consultant imports 8,000 donor records and their gift histories from the old system — or directly from a spreadsheet — without first establishing a fund code taxonomy in the new CRM. Gift records arrive without any designation indicating which gifts are restricted, which fund they belong to, or which grant they are attributed to.
Why it happens: The import feels like a technical step, not a configuration step. The person managing the migration focuses on getting donor names, addresses, and gift amounts across correctly. Fund codes feel like an accounting concern, not a CRM concern — and the grants manager is not in the room when the import is planned.
The consequence: Your CRM cannot produce accurate restricted vs. unrestricted gift histories, which means it cannot generate the funder-required financial reports that show how restricted grant funds were spent. Under FASB ASC 958-605, you are required to recognize revenue in the correct net asset class, but your CRM data does not support that classification. Your grants manager continues maintaining a parallel spreadsheet. You have paid for a system that your grants function cannot use.
The fix: Before any data import, build your complete fund code taxonomy in the CRM — one code per active restricted fund, one code per open grant, and a default code for unrestricted gifts. Export your existing gift data, add a fund code column, and clean the data before import. This step adds two to four days to the implementation timeline and eliminates the six-month parallel-system problem.
Mistake 2: Importing Donors Without Gift Designation History
The mistake: Your import file contains donor names and aggregate giving totals — “Jane Smith, lifetime giving $12,400” — but not individual transaction-level gift records with dates, amounts, designation, and solicitation source.
Why it happens: Gift-level data is harder to export from old systems, especially legacy platforms that store giving history in a proprietary format. Consultants under time pressure sometimes opt for summary-level import to hit the go-live date.
The consequence: Your major gifts officer cannot see which funds Jane Smith has historically supported, so their first cultivation conversation starts from scratch. Your grants manager cannot pull a donor-restricted gift ledger to reconcile against a specific grant fund. If your auditor requests a gift register for a restricted fund covering a prior fiscal year, the data does not exist in the system. Reconstructing transaction-level history from paper receipts or bank records costs 20–100 staff hours depending on your gift volume.
The fix: Require transaction-level gift import as a non-negotiable specification before signing the implementation contract. If your current system cannot export gift-level data in a usable format, budget a data cleaning engagement before the migration begins. Every gift record in the new system should include: gift date, gift amount in cents (per your accounting policy), fund designation, payment method, and the donor record ID.
Mistake 3: Setting Up the CRM Without a Grant Intake Workflow
The mistake: Your CRM is configured as a donor management system — contact records, gift entry, acknowledgment letters — but no one builds the grant intake workflow that captures award amounts, reporting deadlines, allowable cost categories, and fund codes when a new grant is received.
Why it happens: CRM implementations are typically driven by development staff who are focused on donor cultivation and gift tracking. Grant compliance is a separate workflow that involves the grants manager and finance staff, who are rarely included in CRM configuration decisions.
The consequence: When a new grant arrives, the grants manager logs the award in a separate spreadsheet because the CRM has no place to record a reporting deadline, an indirect cost rate election, or a list of allowable cost categories. The CRM becomes a donor-only system. The grants manager’s spreadsheet becomes the system of record for grant compliance — a role it was never designed to fulfill — and your two systems are immediately out of sync.
The fix: Before go-live, build a grant record type in the CRM that captures: award amount, period of performance start and end dates, all reporting deadlines with assigned staff, fund code, allowable/unallowable cost categories, and the indirect cost rate or de minimis rate election under 2 CFR 200.414(f) for any federal award. Assign the grants manager as the primary owner of this configuration step.
Mistake 4: Skipping Integration Testing With the Accounting System
The mistake: The CRM is configured, staff are trained, and gifts are being entered — but no one has tested whether gift records actually flow to the accounting system correctly. The integration is assumed to work because the vendor listed it as a feature.
Why it happens: Integration testing requires staff from both the development team and the finance team to be in the room at the same time, testing real transactions. That coordination is hard to schedule during an implementation when both teams are busy.
The consequence: Your gift entries in the CRM create duplicate or incorrectly coded journal entries in QuickBooks or Sage Intacct. Restricted fund revenue posts to the wrong account. Your finance director discovers the errors during month-end close — three months after go-live — and must manually reconcile every gift entered since the launch date. The correction work frequently runs 40–80 hours of staff time. In organizations subject to Single Audit (federal expenditures exceeding $1,000,000, raised from $750,000 for fiscal years ending September 30, 2025 or later), misclassified restricted revenue can trigger a finding under the allowable costs/cost principles compliance requirement.
The fix: Before go-live, run an integration test with 50 real gift records across different fund types — at minimum one unrestricted gift, one restricted gift, one in-kind donation, and one grant payment. Verify the resulting general ledger entries against your chart of accounts before you train any staff. Document the expected mapping between CRM fund codes and accounting software account codes, and give that document to your finance director.
Mistake 5: Training Only Development Staff, Not Grants Managers
The mistake: CRM training is delivered to development staff — the major gifts officer, the annual fund manager, the development director — but the grants manager either does not receive training or receives a 30-minute overview instead of workflow-specific instruction.
Why it happens: CRM implementations are budgeted and managed by development. Grants managers are perceived as finance-adjacent staff whose primary tools are accounting software and spreadsheets. The assumption is that the CRM is a development tool, not a compliance tool.
The consequence: Your grants manager does not use the system for grant tracking. They continue using a spreadsheet. Six months after go-live, your CRM contains accurate donor giving history but zero usable grant compliance data. When a program officer asks for a report showing expenditures against a specific budget line item, the grants manager produces the spreadsheet — not a CRM-generated report — and the funder’s confidence in your organization’s systems is unchanged from before you bought the software.
The fix: Include the grants manager in CRM configuration from day one, not just training. They should define what a grant record looks like, what reporting deadlines need to be tracked, and what output formats funders require. Their training should be workflow-specific: entering a new award, setting deadline reminders, running a fund balance report, and pulling the grant financial report template for your largest funder.
Mistake 6: Choosing a CRM on Price Without Evaluating Grant Reporting Output Formats
The mistake: The selection committee compares CRM pricing tiers, evaluates donor-facing features like email marketing integration and online giving pages, and selects the lowest-cost platform that covers the donor management use case. No one asks whether the platform can produce the financial report formats your funders require.
Why it happens: Funder report formats feel like a future problem. The immediate pressure is to replace the current system before the annual fund campaign. The grants manager is not on the selection committee, or if they are, they don’t know what to ask.
The consequence: Your new CRM can track gifts and run acknowledgment letters, but it cannot produce the narrative + budget + expenditure report format that your three largest institutional funders require. Your grants manager exports raw data to Excel and rebuilds the funder report manually every quarter. You have purchased a donor management system, not a grant management system — and the distinction costs your grants manager 10–20 hours per reporting cycle.
The fix: During CRM evaluation, bring your three most complex grant reporting requirements to vendor demos. Ask each vendor to show you, specifically, how their system produces the output — not a generic sample report, but the actual format with the actual data fields your funder’s template requires. If the vendor cannot demonstrate it live, assume it does not exist. Add grant reporting capability as an explicit evaluation criterion, weighted equally with donor management features.
Mistake 7: Failing to Set Up Duplicate Detection Before Bulk Import
The mistake: Your organization imports 8,000 donor records without configuring duplicate detection rules first. The import creates duplicate donor records — the same person appearing as multiple contacts — because the system’s default deduplication settings match only on exact name strings, not on email addresses, phone numbers, or mailing addresses.
Why it happens: Duplicate detection feels like a cleanup step that can happen after import. Implementation timelines compress, and pre-import data cleaning is skipped in favor of hitting the go-live date.
The consequence: Development staff enter gifts against duplicate records. One donor has three records with giving spread across all three. Your donor retention calculations are wrong — the system shows 40% retention because it cannot identify that “William Johnson,” “Bill Johnson,” and “W. Johnson, Jr.” are the same person. When you run your year-end giving summary for the board, your total donors and total giving both show inflated numbers. Deduplication after the fact requires a merge process that can corrupt gift histories if not executed carefully, and in most platforms requires staff to review and approve each merge manually — a process that runs 1–3 minutes per record at scale.
The fix: Before bulk import, configure matching rules that check email address, phone number, and mailing address — not just name — as deduplication criteria. Run a deduplication report on your import file before it enters the system. Tools like OpenRefine can cluster near-duplicate records for review at no cost. Establish a policy that any bulk import of more than 100 records requires a pre-import deduplication report reviewed by the development director.
Free resource
Get the Nonprofit Grant Compliance Checklist
A practical checklist for post-award grant compliance: restricted funds, reporting cadence, audit prep, and common failure points. Delivered by email.
Q&A
Why does it matter if restricted fund codes aren't in the CRM before donor import?
Under FASB ASC 958-605, revenue from conditional and restricted contributions must be recognized in the correct net asset class — either with donor restrictions or without donor restrictions. If your CRM does not carry fund codes on gift records, your system cannot produce the restricted vs. unrestricted gift history that your accountant needs to prepare the Statement of Activities or that a program officer expects to see in a grant financial report. Importing 10,000 gift records without fund designations means retroactive cleanup — every gift must be manually assigned to a fund, a process that typically takes 40–80 staff hours depending on your gift volume and history depth. Most organizations skip the cleanup and end up maintaining parallel spreadsheets for grant tracking, which defeats the purpose of the CRM.
Q&A
What integration testing should happen before a CRM go-live?
Before go-live, run a full end-to-end test with real data: export 50 gifts from your current system, enter or import them into the CRM, and push them through to your accounting software — either QuickBooks Online, Sage Intacct, or whatever your general ledger is. Verify that the fund designation, gift date, gift amount, and donor record all arrive in the general ledger correctly. Then test a grant expense allocation: post a program expense in accounting and confirm it appears against the correct grant budget in the CRM. If your accounting integration does not pass this test before go-live, it will not pass it after. Waiting until after staff training to discover the integration does not work means retraining staff after the fix is deployed, which doubles your training cost.
Frequently asked