All Guides

Zeffy Member Data Migration Guide

How to Migrate Nonprofit Membership Records into Zeffy CRM Using Claude AI & Cowork Mode

Version 2February 20262,094 records migrated

1. Project Overview

This guide documents a real-world project to migrate 2,094 membership records from a legacy Excel spreadsheet into Zeffy, a free nonprofit CRM and payment platform. The entire project was completed using Claude AI through Anthropic's Cowork mode, which provides a desktop environment where Claude can read, write, and manipulate files directly on your computer.

The project involved cleaning messy data, resolving quality issues with the organization's input, generating properly formatted CSV import files, and building a comprehensive workbook with documentation tabs for audit trail and future reference.

What Was Accomplished

Project outcomes summary
MetricResult
Starting Records2,094 rows across 3 tabs, 26 columns
Final Master List2,076 rows (18 minors separated, 4 non-person rows cleared)
Payment Import Files4 CSVs (1,358 total payments across Classes A, B, CA, CS)
Contact Import Files4 CSVs (1,358 contacts with Lists and newsletter preferences)
Data Issues Resolved13 categories of issues identified and fixed
Workbook Versions9 versions (v1 through v9), all archived
Workbook Tabs15 tabs including Import Plan, Change Log, Data Quality Audit

2. What You Need Before Starting

Your Source Data

You need your membership data in an Excel file (.xlsx). Common fields include: member names, email addresses, mailing addresses, join dates, payment status, member class/type, and newsletter preferences. The data does not need to be clean — that's what this process handles.

A Zeffy Account

Create a free account at zeffy.com if you don't already have one. Zeffy is a nonprofit-focused platform that offers free CRM, payment processing, and email tools. You'll need access to the admin dashboard for the import steps.

Claude Desktop App with Cowork Mode

Claude Cowork is a feature of the Claude desktop application that gives Claude the ability to work directly with files on your computer. It runs in a secure sandbox and can read, write, and edit files in a folder you choose.

  • Download the Claude desktop app from claude.ai
  • Open a Cowork session and select the folder containing your data
  • Claude will be able to read your Excel file and create all output files in that folder

Understanding of Your Data

Before starting, know the answers to these questions, as Claude will ask:

  • What do your member class codes mean? (e.g., A, B, CA, CS)
  • What does the Newsletter field indicate? (Yes/No for opt-in?)
  • Are there shared email addresses between spouses or family members?
  • What is the standard membership dues amount?
  • Are there any minors in the data who need separate handling?

3. Setting Up Claude Cowork & The Prompts That Matter

This is the most important section of the guide. Claude is powerful but it works best when you give it clear, specific instructions upfront. In our project, many of the most useful features — the Data Quality Audit tab, version-controlled workbook tabs, the old folder structure — only happened because we explicitly asked for them. Claude won't assume you want these things.

The Opening Prompt

Your first message to Claude sets the tone for the entire project. Here is a consolidated prompt based on what actually worked in our project. You can copy and adapt this:

I have a membership Excel file that I need to import into Zeffy CRM. The file is in this folder. Here are my requirements: DATA HANDLING: - NEVER modify the original Excel file. Only read from it. - Create a working copy and make all changes there. - Version number every file (v1, v2, etc). When you make changes, bump the version and move old versions into an 'old' subfolder to keep the workspace clean. WORKBOOK TABS I NEED: - Change Log tab: track every change with date, version, and description so there is a full audit trail. - Data Quality Audit tab: list every data issue you find with severity, count of records affected, and status (OPEN/RESOLVED). We will work through these together. - Import Plan tab: step-by-step instructions for the actual Zeffy import process. - For every CSV you generate, also add a matching tab in the workbook so I can review the data without opening separate files. IMPORT FILES: - Generate Zeffy payment import CSVs (one per member class) - Generate Zeffy contact import CSVs with Lists column - Clean all data issues before generating CSVs DECISION MAKING: - When you find data issues, present them to me with options rather than guessing. I will make the call. - Research Zeffy's import requirements before building files.

Why this matters: Without these explicit instructions, Claude will clean your data and generate CSVs, but it won't create documentation tabs, won't set up version control, and won't mirror CSV data inside the workbook. These are things we had to ask for during our project, and we're giving you the consolidated version here so you get them from the start.

Prompts We Used Throughout the Project

Beyond the opening prompt, here are the specific prompts that drove key outcomes. Each one addresses something Claude would not have done on its own.

Getting the Data Quality Audit

Claude will fix obvious issues like email typos, but it won't create a formal tracking system unless you ask:

"Look at all the open items in data quality and consider how to fix them. Give me as much info as you can and ask me questions so we can resolve them all."

This prompt triggered Claude to do a deep investigation of every issue, present findings with record counts, and ask targeted questions so we could make informed decisions together.

Getting Workbook Tabs for CSVs

By default, Claude generates CSV files but doesn't add them as tabs in the workbook. We had to ask:

"For every CSV you generate, also create a matching tab in the workbook so I can see the data in one place."

This gave us tabs like "Zeffy Pay Class A," "Contact A," etc. inside the workbook, which made review much easier than opening individual CSV files.

Getting the Old Folder Structure

Claude will version files if you ask, but won't organize old versions unless told:

"Move old versions into an 'old' folder. Always do this going forward when you create a new version."

After this, Claude automatically moved superseded files to old/ every time it saved a new version.

Getting the Import Plan

"Make a new tab about the import plan and ensure all the steps are there. Now that we are doing the payments import we don't need the contacts-only import files as they are done at the same time. Move them to old and focus on making sure the remaining files are good and ready for import."

Discovering Zeffy Features via Screenshots

Some of the most important changes came from exploring Zeffy's interface and sharing screenshots. Claude immediately understood the screenshots, researched how the features worked, and updated all the import files accordingly. This back-and-forth between you exploring the tool and Claude adapting the data is a natural part of the workflow.

4. What Claude Won't Do Unless You Ask

Claude is highly capable but conservative by default. It focuses on what you explicitly request and avoids making assumptions about project management preferences. Here is a checklist of things you need to explicitly ask for:

Features requiring explicit instruction from Claude
FeatureYou Must Ask For It
Data Quality Audit tabClaude finds issues but won't create a formal tracking tab unless asked. Tell it to create a tab with columns for issue, severity, count, status, and resolution.
Change Log tabClaude makes changes but won't document them in a log tab. Ask for a Change Log with version, date, change, and detail columns.
Import Plan tabClaude knows the import steps but won't write them into the workbook. Ask for a step-by-step plan tab.
Workbook tabs for CSVsClaude generates CSVs as files but doesn't automatically mirror them as workbook tabs. Explicitly request matching tabs.
Version numberingClaude will overwrite files unless you tell it to use version numbers (v1, v2, etc.) on every file.
Old folderClaude won't create a folder structure for old versions. Tell it to move old files to an "old" subfolder after each version bump.
Never touch the originalClaude may edit the source file unless you explicitly say "never modify the original." State this in your first message.
Ask before decidingClaude may auto-fix ambiguous issues. Tell it to present options and let you decide on anything that requires judgment.

Key takeaway: The more specific your opening prompt, the less back-and-forth you'll need later. Think of it as front-loading your project requirements.

5. Phase 1: Data Assessment & Cleanup

This is the most time-intensive phase. Claude reads your Excel file, analyzes every column, and identifies issues that would cause problems during Zeffy import.

Initial Analysis

Ask Claude to examine the original file and report what it finds. Claude will read every sheet, count rows, check for blanks, and identify patterns. In our project, Claude found:

  • 187 email fields corrupted with "mailto:" prefixes (an Excel artifact)
  • Multiple email typos (missing @ signs, .com misspelled as ,com, gamil.com instead of gmail.com)
  • Names with extra whitespace, commas in last names (Jr., Sr. suffixes)
  • Mixed case in STATE fields (pa, Pa, PA)
  • 55 records with empty payment dates
  • 18 minors (under 18) who needed separate handling
  • Shared email addresses between spouses
  • Phone number fields containing dates of birth

Data Quality Audit Tab

Once Claude creates the Data Quality Audit tab (remember, you must ask for this), it tracks every issue found, its severity, how many records are affected, and the resolution. Each item starts as OPEN and gets marked RESOLVED as you work through them together. This is your checklist — you're not done until everything shows RESOLVED.

Working Through Issues Together

For each issue, Claude presents what it found and recommends a fix. You make the call. This collaborative approach is essential — Claude has the technical skills but you have the institutional knowledge. Examples from our project:

Truncated names: Two members had very short first names ("Mi" and "Ro"). Claude asked if these were typos or real names. We decided to leave them as-is since we couldn't confirm.

Wrong class code: One member had CLASS="ACT" instead of a valid class. Claude showed the member's position in the spreadsheet (alphabetically between other CS members) and recommended CS. We agreed.

Duplicate persons: Three sets of apparent duplicates turned out to be father/son pairs with different member numbers and DOBs. We kept all of them.

Spouse deduplication: When two members share an email address (typically married couples), Zeffy would create only one contact. Claude's approach: keep the male spouse's record for the email, since Zeffy needs unique emails per contact. The spouse data is still in the Master List.

Automated Fixes

Some fixes are straightforward and Claude applies them automatically (with documentation in the Change Log):

  • Clearing mailto: corruption from all email fields
  • Correcting known email typos (pattern-matched)
  • Normalizing STATE to uppercase
  • Removing commas from last names (CSV safety)
  • Trimming whitespace and normalizing double spaces in names
  • Filling empty dates with the current date as a fallback

6. Phase 2: Building Import Files

Once the data is clean, Claude generates the CSV files Zeffy needs. There are two types of import: Payment Import (which also creates contacts) and Contact Import (which adds list assignments and newsletter preferences).

Payment Import CSVs

Zeffy's payment import creates both a payment record and a contact profile for each row. We created one CSV per member class to keep imports manageable and to use the class name as the formTitle (which becomes a form label in Zeffy).

Payment CSV import fields and values used
FieldWhat We Used
firstName / lastNameFrom FIRST and LAST columns, cleaned
amount$40 (standard dues for all classes)
emailCleaned email, deduplicated for shared addresses
address / city / state / postalCodeFrom address fields, state normalized to uppercase
type / paymentMethod"manual" for all (not processed through Zeffy)
formTitleClass name (e.g., "Class A") — becomes form label in Zeffy
dateFrom Paid Date, fallback to JoinDate, fallback to today's date
noteMember #XXXXX | Joined: YYYY | N yrs continuous

Contact Import CSVs

After payments are imported (which creates contacts), a second contact import updates those contacts with list assignments, subscription preferences, and additional data. We created one CSV per class. These CSVs cover ALL members in each class, not just the ones who opted out of newsletters.

Contact CSV import fields and values used
FieldWhat We Used
First Name / Last Name / EmailSame cleaned values as payment files
Address / City / Region / Postal CodeFull mailing address
Subscription Status"unsubscribed" for No Newsletter members, blank for others
ListsSemicolon-separated: e.g., "Class A;All Members" or "Class A;All Members;No Newsletter"
NoteSame member info note as payment files

Lists Strategy

We designed six lists that get created automatically when the contact CSV is imported:

  • Class A, Class B, Class CA, Class CS — one list per membership class
  • All Members — every imported contact belongs to this list
  • No Newsletter — members who opted out of newsletters (also marked as "unsubscribed")

Tags vs. Lists

During this project, Zeffy was transitioning from Tags to Lists. We initially used Tags for segmentation but discovered they were no longer mapping in the import interface. We removed the Tags column entirely and used Lists for all segmentation. If you're reading this in the future, Tags may be fully deprecated — use Lists.

7. Phase 3: Importing into Zeffy

The import follows a specific order. Payment imports must come first because they create the contact records, then contact imports update those records with list assignments.

Step 1: Payment Import

  1. In Zeffy, go to Settings → Import Data → Payment Import.
  2. Upload each payment CSV one at a time (Class A first, then B, CA, CS).
  3. Map each column to the corresponding Zeffy field using the mapping interface.
  4. Review the preview and confirm the import.
  5. After all 4 files are imported, verify: 1,358 total payments and 1,358 contacts in the dashboard.

Step 2: Contact Import

  1. Go to Settings → Import Data → Contact Import.
  2. Upload each contact CSV one at a time.
  3. Map the Lists column and Subscription Status column in the mapping interface.
  4. Since these emails already exist from payment import, Zeffy will update the existing contacts.

Step 3: Verification

  1. Check that 6 lists were created: Class A, Class B, Class CA, Class CS, All Members, No Newsletter.
  2. Verify All Members list has 1,358 contacts.
  3. Verify No Newsletter list has approximately 232 contacts, all showing "unsubscribed" status.
  4. Spot-check 5-10 individual contacts to confirm names, emails, and addresses match.

8. Data Quality Issues We Found & Fixed

This section documents every data quality issue discovered during the project. If you're working with similar membership data, expect to encounter many of these same issues.

Data quality issues and resolutions
IssueRecordsSeverityResolution
mailto: corruption187HighStripped mailto: prefix from all emails
Email typos5 patternsHighPattern-matched corrections
Name whitespace~50MediumTrimmed and normalized double spaces
Last name commas64MediumRemoved commas (Jr, Sr suffixes kept)
Empty payment dates55MediumFilled with current date
Mixed case STATEAll rowsLowNormalized to uppercase
Minors in data18HighSeparated to dedicated Minors tab
Shared spouse emails~47 pairsHighKept male spouse record for import
Non-person rows4MediumCleared (org entries, not individuals)
DOBs in phone field4MediumMoved values to DOB column
Wrong class code1MediumCorrected ACT to CS
Email domain typo1Mediumgamil.com corrected to gmail.com
Duplicate persons3 pairsLowConfirmed father/son — kept all

9. Version Control Strategy

Every change to the workbook or CSV files was versioned. This is essential for accountability and for being able to roll back if something goes wrong. This entire system only exists because we explicitly asked Claude to implement it.

How It Works

  • The original file is never modified. It stays in the project folder as the source of truth.
  • Each time Claude makes changes, the workbook gets a new version number (v1, v2, ... v9).
  • CSV files also get version numbers that increment independently.
  • When a new version is created, the old version is moved to an "old" subfolder.
  • The Change Log tab inside the workbook documents exactly what changed in each version.

Version History

Workbook version history and changes
VerChanges
v1Initial working copy. Cleared mailto: corruption, applied safe fixes, created base CSVs.
v2Rebuilt Minors tab with all 26 columns (was missing 18 fields).
v3Added No Newsletter handling: tags, separate files, and dedicated workbook tabs.
v4Created Import Plan tab. Removed redundant contact-only CSVs.
v5Fixed last name commas (64 names) and empty dates (55 records). Regenerated all CSVs.
v6Resolved all remaining data quality items: email typo, class code, phone DOBs, non-person rows.
v7Added Subscription Status column for auto-unsubscribe on import.
v8Created full contact import CSVs with Lists column. Replaced NoNewsletter-only files.
v9Removed Tags column (OBE — replaced by Lists in Zeffy). Final version.

10. Final File Inventory

Active Files

Active file inventory with record counts and purpose
FileRecordsPurpose
2026 Member Data (Original).xlsx2,094Original — NEVER MODIFIED
2026 Member Data v9.xlsx2,076Working workbook (15 tabs)
Zeffy_Payment_Import_Class_A_v4.csv493Payment import — Class A
Zeffy_Payment_Import_Class_B_v4.csv109Payment import — Class B
Zeffy_Payment_Import_Class_CA_v4.csv283Payment import — Class CA
Zeffy_Payment_Import_Class_CS_v4.csv473Payment import — Class CS
Zeffy_Contact_Import_Class_A_v2.csv493Contact import with Lists
Zeffy_Contact_Import_Class_B_v2.csv109Contact import with Lists
Zeffy_Contact_Import_Class_CA_v2.csv281Contact import with Lists
Zeffy_Contact_Import_Class_CS_v2.csv475Contact import with Lists

Workbook Tabs (v9)

Workbook tab names and descriptions
TabDescription
Import PlanStep-by-step import workflow with verification checklist
Change LogEvery change across all 9 versions with dates and details
Data Quality AuditAll 13 issues tracked from discovery to resolution
Master ListFull cleaned dataset (2,076 rows, 26 columns)
New Members / All EmailsOriginal supplementary tabs preserved from source
Zeffy Pay Class A/B/CA/CSMirror of payment CSV data for in-workbook review
Minors18 minor records with full 26 columns
Contact A/B/CA/CSMirror of contact CSV data with Lists column

11. Lessons Learned & Tips

Working with Claude Cowork

  • Front-load your requirements. The consolidated prompt in Section 3 represents everything we learned over 9 versions. Give Claude all your project management requirements upfront and you'll save significant back-and-forth.
  • Claude is conservative by default. It won't create documentation tabs, set up folder structures, or implement version control unless you ask. See Section 4 for the full list.
  • Review Claude's work at each step. Claude shows you what it's doing and asks for decisions on ambiguous items. Take the time to review — this is where your institutional knowledge matters.
  • Use screenshots to share what you find in Zeffy. We discovered Subscription Status and Lists features by exploring Zeffy's import interface. Sharing screenshots with Claude let it immediately adapt the files.
  • The conversation context has limits. For very long projects, Claude's context window may fill up and the session may need to continue in a new conversation. When this happens, Claude can read a summary of the prior conversation and continue.
  • Check the Minors tab (or any separated data). When Claude creates subset tabs, verify they have all the columns from the original. Our Minors tab initially only had 8 columns instead of 26.

Data Cleaning Tips

  • mailto: corruption is common. If your Excel has been used to send emails, email cells often get corrupted with mailto: prefixes. Always check for this.
  • Commas in names break CSVs. Names like "Smith, Jr." will split incorrectly when imported as CSV. Remove commas but keep the suffix.
  • Empty dates need a strategy. Decide upfront what to use as a fallback date. We used the current date, but you might prefer the member's join date or a specific default.
  • Shared email addresses are a real problem. CRM systems use email as the unique identifier. If spouses share an email, you need a deduplication strategy before import.
  • Don't delete rows — clear them. We learned the hard way that deleting rows in Excel programmatically can corrupt data. Clearing cell values is safer.

Zeffy-Specific Tips

  • Payment import creates contacts. You don't need a separate contact import to get people into Zeffy. The payment import does both. Use the contact import only for adding Lists and newsletter preferences.
  • Email is the primary key. Everything in Zeffy revolves around the email address. Duplicate emails will be merged. Make sure emails are unique and correct before importing.
  • Tags are being replaced by Lists. As of early 2026, Zeffy's Tags feature is transitioning to Lists. Use Lists for segmentation.
  • Lists use semicolons in the CSV. When assigning contacts to multiple lists, separate list names with semicolons (e.g., "Class A;All Members").
  • Subscription Status controls newsletter opt-out. Setting it to "unsubscribed" opts the contact out of newsletters while still allowing transactional emails.
  • Import one file at a time. Even if your files are small, importing one class at a time makes troubleshooting easier.

12. Appendix: Zeffy Import Field Reference

Payment Import Template

Zeffy payment import field reference
FieldRequiredNotes
firstNameRequiredContact first name
lastNameRequiredContact last name
amountRequiredPayment amount in dollars
addressOptionalStreet address
cityOptionalCity
postalCodeOptionalZIP or postal code
countryRequired2-letter country code (US)
typeRequired"manual" for imported data
formTitleRequiredForm name — use for class segmentation
rateTitleOptionalRate/tier name
emailRequiredPrimary contact identifier
languageOptional"en" for English
dateRequiredPayment date (MM/DD/YYYY)
state/provinceOptional2-letter state code
paymentMethodRequired"manual" for imported data
receiptUrlOptionalLeave empty
ticketUrlOptionalLeave empty
receiptNumberOptionalLeave empty
companyNameOptionalOrganization name if applicable
noteOptionalFree text note
annotationOptionalInternal annotation

Contact Import Template

Zeffy contact import field reference
FieldRequiredNotes
First NameRequiredContact first name
Last NameRequiredContact last name
EmailRequiredPrimary identifier — matches existing contacts
LanguageOptional"en" for English
AddressOptionalStreet address
CityOptionalCity
RegionOptionalState/province
Postal CodeOptionalZIP code
CountryOptional2-letter country code
PhoneOptionalPhone number
NoteOptionalFree text note
Company nameOptionalOrganization name
Subscription StatusOptional"unsubscribed" to opt out of newsletters
ListsOptionalSemicolon-separated list names

This document was created using Claude AI (Cowork mode) as part of the member data migration project.

Back to All Guides