CRM Evaluation: Twenty vs. CiviCRM¶
[HYPOTHESIS] — this is an evaluation document, not a decision. No CRM is selected or deployed. Recommendations below are the best inference from what was known in 2026-05; the final choice should be tested against a real workload (see gates) before any commitment.
Why this doc¶
Big Nerd Idea is a forming non-profit (Foundation) plus a for-profit LLC, operating four projects (MPowerUP, RlivN, Toaster Chef game/sim, Second Boot / Boot Up). Across those projects and the entity work, BNI has at least three concurrent relationship-management needs:
- Donor & grant pipeline — corporate IT-equipment donors, individual donors, and grant-funder relationships (LOIs, deadlines, deliverables across federal, state, foundation, and corporate sources).
- Partner outreach — makerspaces, recovery centers, reentry programs, schools, libraries, senior centers, after-school programs.
- Program participants — enrolled cohort members with PII discipline appropriate to vulnerable populations (recovery, reentry, formerly incarcerated, elderly): attendance, module completion, device awards, post-program follow-up.
The live program records for partners and funders are not in this doc — see Boot Up partners and Boot Up grants.
This doc compares Twenty CRM and CiviCRM against those needs. A third path (Airtable / spreadsheet-as-CRM) is covered at the end as a deferral option.
Decision criteria for BNI¶
| # | Criterion | Why it matters here |
|---|---|---|
| 1 | Donor + contribution tracking | One-time and recurring contributions, tax-receipt automation, donor segmentation. Core to fundraising. |
| 2 | Grants pipeline | LOI → application → award → deliverable lifecycle, with deadlines and stakeholders. |
| 3 | Partner / B2B relationships | Orgs with multiple contacts, MOU status, named POCs, communication history. |
| 4 | Program participant data | PII discipline, role-based access, audit logging, GDPR/CCPA-style data rights. Vulnerable populations make this serious. |
| 5 | Stack fit with BNI dev practice | TypeScript-first projects; team prefers open-source. |
| 6 | Cost over 2 years | Pre-501(c)(3) budget is tight; volume small but growing. |
| 7 | Maturity / risk | A young tool means feature gaps and possible pivots; an old tool means UX debt. |
| 8 | Customization without engineering burden | 2-person team; CRM admin can't be a full-time job. |
| 9 | Hosting / ops burden | Self-host vs. managed; uptime expectations. |
| 10 | Migration path out | If the tool stops working, can BNI extract its data cleanly? |
At a glance¶
| Criterion | Twenty | CiviCRM |
|---|---|---|
| Donor + contribution tracking | ❌ Not built in (generic CRM; needs custom data model + workflow) | ✅ Native — one-time, recurring, pledges, in-kind, grant income, lifetime totals, lapsed flags |
| Grants pipeline | ❌ Custom build via objects/workflows | ✅ Grants module included |
| Tax receipt automation | ❌ Not built in | ✅ Automated mail-merge receipts |
| Partner / B2B relationships | ✅ Native (Companies + People + Opportunities) | ✅ Native (Organizations + Contacts + Relationships) |
| Program participant data + PII discipline | ⚠️ Generic permissions; younger project, fewer established nonprofit patterns | ✅ Mature role-based access; established nonprofit-PII patterns |
| Event / class / cohort management | ❌ Custom build | ✅ Native (event registration, attendance) |
| Volunteer management | ❌ Custom build | ✅ Native |
| Stack fit (BNI is TypeScript-first) | ✅ TypeScript + NestJS + React + Postgres | ❌ PHP (Drupal/WordPress/Joomla or standalone) |
| Modern UX | ✅ Kanban, modern tables, search, AI assist | ⚠️ Functional but dated; familiar to nonprofit staff |
| Cost (self-hosted) | Free + VPS ~$20–50/mo | Free + hosting (DIY) or managed $25–100/mo |
| Cost (managed/cloud) | $9–25/user/month | $25–100/mo flat (CiviHosting, Skvare) |
| Maturity | ~2 years public, 45.5k GitHub stars, actively developed | 20+ years, used by thousands of nonprofits worldwide |
| License | AGPL | GPL |
| Customization without code | ✅ Custom objects/fields/workflows via Settings UI | ⚠️ Possible via extensions; less smooth than Twenty |
| Migration path out | Standard Postgres dump | Standard MySQL dump; established export tooling |
| 501(c)(3) gating | None | None |
Legend: ✅ strong, ⚠️ workable, ❌ would require build.
Detailed comparison¶
1 · Donor & contribution tracking. CiviCRM treats this as its first-class problem: one-time/recurring contributions, pledges, in-kind, grant income, donor records with lifetime totals and lapsed flags, segmentation, automated tax receipts. Twenty has no "donation" concept — only Opportunities (a sales metaphor); receipts, recurring pledges, and lifetime-giving views would be custom workflows. Winner: CiviCRM, by a wide margin.
2 · Grants pipeline. CiviCRM ships a grants module (applications, deadlines, status, award amounts, deliverables, funder relationships) that maps cleanly to BNI's existing funder lists. Twenty would model grants as Opportunities + Tasks — workable but custom. Winner: CiviCRM.
3 · Partner / B2B relationships. Both handle this cleanly. Twenty (Companies + People + Opportunities) is the standard B2B shape with a more pleasant UI. CiviCRM (Organizations + Contacts + Relationships) adds a "Relationship Type" abstraction that fits nonprofit reality better — one person can be an employee of Org A, a board member of Org B, and a volunteer at Event C as three relationships. Winner: roughly even.
4 · Program participant data + PII discipline. This is where BNI's vulnerable-populations commitment from the Epistemic Honesty directive matters most; mishandled records cause real harm. CiviCRM has 20+ years of nonprofit-PII patterns — granular ACL roles, field-level visibility, audit-logging extensions, HIPAA-adjacent practice — and a community that knows them. Twenty has working role-based access (Organization tier or self-hosted) but is young enough that nonprofit-specific PII patterns are not published practice; BNI would assemble them itself. Winner: CiviCRM, for risk reasons more than feature reasons.
5 · Stack fit. BNI's projects are TypeScript-first. Twenty is TypeScript + NestJS + React + Postgres — same language family, lower context-switch cost. CiviCRM is PHP, adding a new toolchain. Winner: Twenty.
6 · Cost over 2 years (assume 2 users → ~5 by end of Year 2). Twenty self-hosted ≈ $600; Twenty cloud Pro ≈ $576 Y1 scaling to ~$1,440 Y2; CiviCRM self-hosted ≈ $360; CiviCRM managed (~$45/mo) ≈ $1,080; Airtable Free→Plus $0–$1,200. Winner: not decisive — both are cheap; managed CiviCRM is the slightly cheaper managed option (billed per site, not per user).
7 · Maturity / risk. Twenty: young (~2 years public), strong momentum (45.5k stars, active dev), not yet established for nonprofit production — pivot/pricing/data-model risk is real but not extreme. CiviCRM: 20+ years, near-zero project-death risk, high UX-debt frustration risk. Winner: CiviCRM on risk; Twenty on momentum.
8 · Customization without engineering burden. Twenty markets itself on this — custom objects/fields/workflows from the Settings UI, no migrations, no SQL; a non-developer can add a "Cohort" object without a ticket. CiviCRM has custom fields/data tables via UI, but custom objects often need a PHP extension; CiviRules automation is less smooth. Winner: Twenty.
9 · Hosting / ops burden. Twenty self-hosted: Docker compose, ~5-min setup, modern stack. CiviCRM self-hosted: PHP + MySQL LAMP stack, more familiar to nonprofit IT consultants. Managed Twenty bills per user; managed CiviCRM bills flat per site — better economics as user count grows. Winner: Twenty for ops simplicity; CiviCRM for managed-hosting economics.
10 · Migration path out. Both export via standard SQL dumps; neither locks data in opaquely. CiviCRM has decades of cross-CRM migration tooling; Twenty's youth means less mature tooling but a cleaner data model. Winner: roughly even.
Honest recommendation¶
[HYPOTHESIS] Based on the stated "all of the above" priority (donor + partner + participant data, equally weighted):
CiviCRM is the better technical fit for BNI's stated needs today, because —
- Donor + grant tracking is the single highest-value CRM function for a forming non-profit, and CiviCRM provides it out of box rather than as engineering work.
- Vulnerable-population PII discipline benefits from mature, documented patterns; building those from scratch in a young tool is a risk BNI's Epistemic Honesty directive arguably forbids.
- CiviCRM's UX disadvantage is real but not load-bearing for a 2-person team using the CRM a few hours a week.
Twenty has a non-trivial case if BNI wants to invest in CRM customization as a deliberate value (a nonprofit-extensions contribution could itself become a BNI Foundation open-source artifact), wants the CRM to feel like the rest of the stack, and is willing to delay nonprofit-specific features 3–6 months while custom-building them.
The third option: defer¶
For a forming non-profit at BNI's scale, an honest counter-recommendation: don't pick a real CRM yet.
- Track donors, partners, and grants in Airtable (free tier suffices for current volume).
- Track program participants — when there are some — in a separate Airtable base with restricted access.
- Revisit the CiviCRM-vs-Twenty question in 6–12 months, once:
- the 501(c)(3) determination letter is in hand (which also unlocks Salesforce Nonprofit Cloud's free 10-license tier as a third real option),
- the first cohort has actually run (revealing what participant data really needs tracking), and
- the first grants have been applied for (revealing what grant-pipeline depth is needed).
This deferral is [HYPOTHESIS] the right move for a 2-person, pre-pilot, pre-501(c)(3) org. Buying CRM complexity ahead of the data that justifies it is a common nonprofit mistake.
What to validate before committing¶
Whichever path is chosen, these gates should pass first:
- [ ] Sample-data import test — can BNI's existing donor / partner / grant records be modeled cleanly in the tool's data model?
- [ ] PII handling walkthrough — pretend a recovery-cohort participant exists; walk through what the CRM does with their record. Can a volunteer see it? Can it be redacted? Can an audit log show who viewed it? (See data-security.md.)
- [ ] Tax receipt round-trip — can the tool produce a printable tax-deductible donation receipt for a 501(c)(3)? Model the workflow even before status is granted.
- [ ] Backup + restore drill — pick a deliberate data-loss scenario; does the backup tooling restore cleanly?
- [ ] Two-person fit test — both Kevin and Corey run one realistic workflow each and report whether they'd use the tool without prompting.
Decision log¶
| Date | Decision | Rationale | Status |
|---|---|---|---|
| 2026-05-19 | Evaluation initiated | Kevin asked to compare Twenty vs. CiviCRM | [OPEN] |