Migrating a member list from spreadsheets without losing its history
Move a member register from Excel or Wild Apricot into membership database software without losing renewal history, duplicates or consents.
- Author
- Luca Longo
- Published
- Reading time
- 12 min read

The member list of most associations is a spreadsheet that has survived three secretaries. It has a column that nobody uses anymore, a colour code that meant something in 2018, and twelve people whose names appear twice with different spellings. Moving it into membership database software is the moment to fix that, and also the moment it can go wrong. This is how we approach a migration, whether the source is Excel, a CSV from a bank, or an export from Wild Apricot or a similar tool, and what to look for if you are weighing Wild Apricot alternatives at the same time.
What membership database software must do with your history
A membership database is not a contact list. Each person has a sequence of membership periods, each with a tier, a start, an end and the invoices and payments attached. That sequence is what lets the board answer the questions it actually asks: how many renewed, how many lapsed, who came back, how the junior section is trending. A spreadsheet holds, at best, the current state and a last-renewal date. The target system has to rebuild the sequence from whatever dates you have, and the migration plan has to give it the dates.
So the migration is less about moving rows than about moving time. Keep that in mind at every step below; it changes which columns matter.
Decide what the new register must know
Before touching the file, write down the fields the association actually uses. There are usually fewer than the spreadsheet has. For each, decide: is it a core field (name, email, address, tier, join date, status), a custom field (sail number, specialism, licence), or history (renewal dates, payments)? Everything else is dropped, consciously, and the decision is recorded in the minutes.
Decide the tiers and statuses too. A sheet that says "member", "Member", "MEMBER (family)" and "ex" has four values for two concepts. The target system has tiers (ordinary, family, junior) and statuses (active, lapsed, resigned); map every spreadsheet value to one of each before the import.
| Spreadsheet value | Tier | Status |
|---|---|---|
| member, Member, MEMBER | Ordinary | Active |
| MEMBER (family), fam | Family | Active |
| jun, junior, U18 | Junior | Active |
| hon | Honorary | Active |
| ex, left, resigned | Last known tier | Resigned |
| unpaid 2025, owes | Last known tier | Lapsed |
| blank | Decide per row | Decide per row |
The last row is the one that takes the time. Blank cells are where the sheet's three secretaries disagreed, and someone has to decide, row by row, with the bank statements open.
Clean the identities first
Duplicates are the main cost of a bad migration, because they hide. The same person with two emails, a maiden name, or a company and its owner on separate rows: each becomes two members, two invoices, two votes. Sort the sheet by surname and by email and merge what is obviously one person. A good import tool flags likely duplicates on its dry run, but it cannot know that "M. Rossi" and "Maria Rossi-Bianchi" are the same sailor; you do.
Companies deserve a decision of their own. If a corporate member is represented by two people, the target should have one company membership with two linked people, not two memberships.
Keep the history, not just the present
The common mistake is to import the list as it stands today. That gives a register of current members with no past: no idea who lapsed last year, who came back, how renewals trend. The board's first year-on-year report is then impossible until a year has passed.
If your sheet has a join date and a last-renewal date, the import can rebuild the membership periods between them. If payments are in the accounting package or the bank export, export them with the member reference and import them against the rebuilt periods. It is more work, and it is the work that makes the reports true.
A worked example: a class association of 640 members
A fictional class association, the kind that gathers owners of one boat design across a country, decided to leave its spreadsheet. The sheet had 712 rows. The treasurer's first pass found 48 duplicates (people who had changed email address and been re-added), 19 people who had resigned but were still marked as members because nobody wanted to delete a row, and 5 companies (sailmakers and a boatyard) entered as if they were people. After cleaning, the register had 640 members: 540 ordinary at 60 euro, 70 family at 90 euro and 30 honorary.
The sheet had a "joined" column for 610 of them and a "last paid" column for all 640. From those two dates the import rebuilt between one and fourteen membership periods per member. The bank export for the last three years, 1,720 transfers, was matched to members by name and reference; 1,640 matched automatically, 61 were matched by hand, and 19 were left unmatched and recorded in a note. The association went live with three years of renewal history, and the first board report compared this season's renewal rate with the two before it.
The whole exercise took the treasurer and the secretary about 25 hours over three weeks. The import itself took eleven minutes. The dry run ran six times before it came back clean.
Run a dry run, read the report, repeat
No import should write a record on the first pass. Load the file, map the columns, and run a dry run that reports every row with a problem: a date in the wrong format, an email that is not an email, a tier value that maps to nothing, a likely duplicate. Fix the source file, not the target, and run again. When the report is clean, import.
Insist on an undo. Even a clean dry run misses things you only see when the data is in place, such as a column that was offset by one row halfway down the sheet. A 24-hour undo turns that from a disaster into a Tuesday.
Moving off Wild Apricot or another membership tool
If your source is not a spreadsheet but another system, the shape of the work changes: the data is already structured, and the problem becomes mapping one structure to another without losing what the old one knew.
Wild Apricot is one of the most widely used membership tools, particularly in North America, and many associations have years of history in it. Its exports give you the material you need: the contact export typically carries the membership level, the status, the member-since date and the renewal due date, and separate exports cover invoices, payments and event registrations. The steps, which apply to most similar tools, are:
- Export everything, not just contacts. Contacts, membership levels, invoices, payments, event registrations and, if available, the email consent flags. Keep the raw exports as the archive.
- Map membership levels to tiers. Levels accumulate over years; "Regular 2019" and "Regular" are usually the same tier. Decide the mapping before the import and write it down.
- Map statuses. Active, lapsed, pending renewal and pending new have close equivalents in most targets, but check how each tool treats a member in the grace period.
- Bring the dates. Member-since and renewal-due are what the target uses to rebuild periods. Invoices and payments add the money to those periods.
- Decide what to do with archived contacts. People who left years ago can be imported as resigned, kept in the archive export, or dropped. Data minimisation argues for the second or the third; the register of past members argues for the first. Your statute may settle it.
- Run the dry run. The import wizard in SupaGuild reads Wild Apricot exports directly, so the mapping is mostly recognised, but the dry run still reports the rows that do not fit.
Wild Apricot alternatives: an honest view
Boards searching for Wild Apricot alternatives usually have one of a few reasons. The pricing is by number of contacts, in tiers, so a growing list or a large archive of past members pushes the bill up a step. Some associations want governance tools, meetings and ballots, that a membership tool centred on the website and the member list does not provide. European associations ask where the data is hosted and who the processor is, because the GDPR paperwork depends on it. Others simply want a product that embeds in the website they already have rather than one that wants to be the website.
The alternatives fall into three groups, and none is right for everyone:
- Other membership database software of the same kind: a register, renewals, a website builder, events. If your only complaint is price, this is where to look, and the migration is a mapping exercise.
- A generic CRM with an association template. Cheap at the start and familiar, but renewals, admission and governance stay manual. We compared the two in AMS vs CRM.
- An association management system such as SupaGuild: the same register and renewals, plus admission stages, governance, chapters and consents per purpose, built to embed in an existing site. More structure than a small, informal group needs; the right fit when the statute has real rules.
Whichever group you choose, run the 12-point checklist and insist on a dry-run import with your own export before deciding. A product that cannot read your file in a trial will not read it better after you have paid. For the record: Wild Apricot is a mature product and many associations are well served by it. Switch because the structure no longer fits, not because something newer exists.
Consents and what you may send
Moving a list into a system that will email people is a data protection event. Members who agreed to receive the newsletter years ago, by paying their dues, did not agree to partner marketing or to a public directory profile. Import only the consents you can evidence, record the source ("2019 application form", "2024 AGM registration"), and leave the rest unticked. The portal lets members grant them later, and a member who grants a consent themselves is worth more than one imported by assumption. The data, import and GDPR page lists the consent purposes SupaGuild records.
Invite members in waves
Do not send a thousand portal invitations the evening of the import. Start with the board and the office, fix what they find, then invite a chapter or a tier, then the rest. Each wave's questions improve the welcome message for the next. Expect a quarter of members to need a second invitation; that is normal, not a failure. The member portal page explains what members see when they first sign in.
Keep the spreadsheet, frozen
Export the old sheet as a PDF and a CSV, date them, store them with the association's records, and stop editing them. The point of the migration is a single source of truth; a spreadsheet that keeps being updated "just in case" defeats it within a month.
A migration timeline that works
For an association of a few hundred members, a realistic plan is two to three weeks:
- Week 1: decide fields, tiers and statuses; clean duplicates; export payments.
- Week 2: dry runs until clean; import; verify with the board; set up brand, domain and the application form.
- Week 3: invite in waves; switch renewals to the new system at the next cycle; freeze the old sheet.
The best moment to go live is a month or two before the renewal run, so that the first invoices come from the new system and nobody has to reconcile two. Going live the week before renewals is possible and stressful; going live in the middle of them is a mistake.
Common mistakes in a member list migration
Importing the present and discarding the dates. The register looks complete and the first year-on-year report is empty. Bring join and renewal dates, even if they are approximate.
Cleaning in the target instead of the source. Fixing rows after the import means the spreadsheet and the system disagree, and a re-import becomes impossible. Fix the file, run the dry run again.
Trusting the first clean dry run. Look at twenty records by hand after the import, including a family, a company and a lapsed member. Then look at the report. Then decide whether to use the undo.
Importing consents by assumption. "They are members, so they want our emails" is true of the renewal notice and false of partner marketing. Record what you can evidence.
Inviting everyone at once. The office receives three hundred questions in a day and cannot answer them. Waves let the welcome message improve.
Leaving the old tool running. A Wild Apricot account or a shared spreadsheet that stays editable becomes a second register within a month. Export, archive, close.
Skipping the minutes. The decisions about dropped fields, archived members and consents belong in the board minutes. The next secretary will ask why the 2018 colour code is gone.
How SupaGuild imports
SupaGuild's import wizard reads Excel, CSV and Wild Apricot exports, maps columns to core and custom fields, rebuilds membership periods from join and renewal dates, flags duplicates, imports companies together with the people who represent them, and runs a dry run that lists every issue before writing anything, with a 24-hour undo after. Consents are recorded per purpose with their source, every change is logged, the data is hosted in the European Union, and a complete export is available from the console at any time. The data, import and GDPR page has the detail, and the free plan, for associations up to 250 members, is enough to run the dry run on your own file before deciding anything. For the people who usually carry a migration, the club secretary and treasurer pages describe the day-to-day afterwards.
Frequently asked questions
What is membership database software?
Membership database software keeps one record per member with their membership periods, tiers, status, invoices and consents, and runs renewals and communications on that record. It differs from a spreadsheet in holding the history, not just the current state, which is what makes year-on-year reports possible.
How long does it take to migrate a member list from a spreadsheet?
Two to three weeks for an association of a few hundred members. Most of the time goes into deciding fields, tiers and statuses and cleaning duplicates; the import itself takes minutes once the dry run is clean. Larger federations with several chapters should plan a month.
Can we import our renewal history, or only the current members?
If your spreadsheet or export has a join date and a last-renewal or renewal-due date, the import can rebuild the membership periods between them, and payments exported from the bank or the accounting package can be attached to those periods. Importing only the current state is the most common migration mistake.
What are the alternatives to Wild Apricot?
Three kinds: other membership database software with a similar shape, generic CRMs with an association template, and association management systems that add admission, governance and chapters. Which is right depends on why you are leaving; price, governance, hosting region and website integration are the usual reasons. Test any candidate with a dry-run import of your own export.
How do we handle GDPR consents during an import?
Import only the consents you can evidence, record the source and date for each, and leave the rest unticked. Members grant further consents themselves in the portal. The import is a good moment to record who the processor is and where the data is hosted.
What happens if the import goes wrong?
With a dry run beforehand, most problems are caught before anything is written. For what slips through, SupaGuild keeps a 24-hour undo of the whole import, so you fix the source file and run again. Keep the original spreadsheet or export, dated, in the association's archive regardless.