Case Study · Membership / Nonprofit

A defensible answer to a simple question: how many members do we really have?

As lead data consultant to the CEO of a national association, I turned hundreds of fragmented source files into a reconciled, trustworthy view of the membership — and corrected a headline number leadership had been planning around.

ClientNational Association of Flight Instructors
RoleLead Data & Migration Consultant (to the CEO)
Scope16,500+ member profiles
StackPython · pandas · Excel

Overview

Fragmented systems, one number leadership couldn't trust.

The National Association of Flight Instructors was moving between membership platforms (Tovuti to Member365) and, in the process, needed something more fundamental than a data move: a version of its membership it could actually believe. Records lived across hundreds of CSV and Excel exports covering 16,500+ member profiles — user records, subscriptions, transactions, coursework, and Stripe payments — and the systems didn't agree with one another.

I served as the primary data lead to the CEO, with Board-level visibility, responsible for turning that fragmented picture into reconciled, decision-ready information.

The Challenge

A reported ~8,000 active members that the evidence didn't support.

Leadership had been operating on a reported figure of roughly 8,000 active members. But "active" in the source system was a status label — not proof of a current, paid membership. Subscription end dates and transaction history frequently told a different story: members marked active whose payments had lapsed, duplicate identities inflating counts, conflicting identifiers across systems, and missing renewal or payment fields.

For an association, that number isn't cosmetic. It drives revenue expectations, budgeting, and how leadership represents the organization. A count that can't be defended is a decision waiting to go wrong.

My Role

Owning the data from raw exports to a number leadership could stand behind.

  • Served as primary data lead to the CEO, translating a technical reconciliation into executive-level findings and recommendations.
  • Consolidated hundreds of CSV and Excel source files across users, subscriptions, transactions, coursework, and Stripe payments.
  • Engineered identity-matching and source-of-truth controls to resolve duplicates, conflicting identifiers, and payment discrepancies.
  • Investigated the active-member discrepancy and produced a defensible, evidence-backed count.
  • Prepared reconciled data for migration and performed post-migration quality assurance.

Approach

Reconcile identity first, then let evidence define "active."

Rather than trust any single system's status field, I rebuilt the membership picture from evidence:

  • Unified identity. Matched members across systems on email, member number, and other identifiers to collapse duplicates and link records that belonged to the same person.
  • Established a source of truth. Defined which system won for each field when they conflicted, and documented the rule so the logic was reviewable.
  • Redefined "active" by evidence. Treated a member as verifiably active only when subscription dates and transaction/payment history actually supported it — not merely because a status column said so.
  • Reconciled and validated. Cross-checked subscriptions against Stripe transactions to surface lapsed-but-labeled-active members, missing payments, and gaps needing review.
  • Documented everything so leadership could see not just the number, but why it was the number.

Key Findings

The real base of verified payers was materially smaller.

1

The active count was overstated

Against a reported ~8,000 active members, roughly 6,000 could be verified as recent payers on the evidence — a material gap with direct budget implications.

2

Status labels masked lapsed members

Members appeared active in one system while subscription end dates and transaction history showed they were lapsed or inactive.

3

Duplicates and conflicts inflated the picture

Duplicate emails, conflicting identifiers, and incomplete payment histories distorted counts until identity was resolved across sources.

4

The data became migration-ready

Reconciled, deduplicated records with documented source-of-truth logic could move into the new platform with confidence and post-migration QA.

Business Impact

From a number nobody could defend to one leadership could act on.

The engagement gave NAFI's leadership a defensible basis for decisions during a high-stakes platform transition. Instead of planning around an inflated status-based count, they had an evidence-backed view of true, paying membership — plus a documented, repeatable method for maintaining it.

~6,000

verified recent payers established from the evidence, replacing a reported ~8,000 that the underlying data did not support.

Beyond the headline number, the work left the organization with cleaner data, resolved duplicates, and stronger foundations for renewal tracking, revenue analysis, and future reporting.

Tools & Methods

How it was done.

PythonpandasExcelIdentity resolutionRecord matchingMulti-source reconciliationSource-of-truth controlsSubscription & payment analysisData-quality investigationPost-migration QAExecutive reporting

Confidentiality note: This public summary describes the business problem, methods, and outcomes only. It contains no private member data, payment details, or sensitive operational records.

Messy data, high stakes?

This is the kind of problem I solve.

Reconciliation, data quality, and a number your leadership can actually defend.