Import members from a spreadsheet
How to bring a list of people from any .xlsx or .csv spreadsheet into the community - origin, file, columns, groups and tags, consent, summary and report -, what each person gets by email and how they decline the invite.
The Import spreadsheet tab of the Invite Members window brings the people in a spreadsheet into the community: the attendee list of an event, a member base, the students of a class. Any spreadsheet works: you say where each column goes, choose role, groups and tags for everyone, check a summary and only then import. Each new person gets an invitation by email.
Only import people who agreed to receive emails and to join the community. Bought lists, giveaways and data collected by bots are forbidden. Read the Invitation and member import policy before importing.
What it's for
| Community | Spreadsheet |
|---|---|
| Event | The attendees who ticked "I want to join the community", with the ticket type column becoming a tag |
| Association | The member base, with company and job title becoming custom fields |
| School | The semester's enrolled students, all in the class group |
| Coworking | The residents, with the Floor column going to Groups |
How it works
Who can import
The owner and admins. The import only gives the Member or Moderator role: anyone who needs to join as admin or finance is invited from the Type e-mails tab. See Invite members.
The file
- .xlsx or .csv. The old
.xlsand.xlsm(with macros) are refused, even renamed. - Up to 5 MB, 5,000 data rows and 100 columns.
- Formulas count by their calculated value; merged cells, by the value of the first one.
- In a CSV, Memberfy works out the encoding on its own (correct accents even in a file saved by an old Excel) and the delimiter (comma, semicolon, tab or pipe). You can change both.
What happens to each row
| Case | What happens |
|---|---|
| Email with no Memberfy account | Gets an account and joins the community, with the role, the groups (including the default group), the tags and the fields. Gets the invitation with Set my password |
| Has an account, but isn't in this community | Joins the community. The account's name and phone don't change (they apply in other communities). Gets the invitation with Sign in |
| Already a member | Role and name don't change. Gains the groups and tags (nothing is removed) and only the empty custom fields are filled in. Gets no email. Counts as updated |
| Email repeated in the spreadsheet | The first row counts; the others are skipped as duplicate in the spreadsheet |
| No email or an invalid email | Skipped with the reason, without stopping the rest |
| No consent | Skipped (when there's a consent column) |
| Asked not to take part in this community | Skipped; no email goes out |
| A value that doesn't fit the field | Only that field stays empty; the person joins and the report warns you |
The invitation email
Every person new to the community gets an email on the community's behalf, with the list origin ("You got this invitation because your details are in: Attendees of event X in 2026") and, in the footer, the link Thanks for the invitation, but I do not want to join. Someone without an account gets Set my password (the link is valid for 7 days and works once); someone with an account gets Sign in. Existing members get nothing.
Import emails don't count toward the campaign quota.
In the background
When you click Import, the import goes into a queue and runs on its own: you can close the window. Invitations go out at the same pace as campaigns, about 5 per second, so a list of 3,000 people takes around 10 minutes to be fully delivered. At the end, whoever imported gets an in-app notice and an email with the summary.
A community reads one spreadsheet at a time. If someone else on the team is importing at the same moment, the screen says "Another spreadsheet is being read right now. Try again in a moment."
What is kept
The import records who imported, when, the file name, the origin and the consent used (the column and the values, or the declaration). A copy of the original file is kept in private storage, with no deletion date: the owner and admins download it from the history (Previous imports › View › Download the original file). On the record of whoever joined, the team reads "Origin: spreadsheet import on …".
Step by step
Role: owner or admin.
Administration › Members, Invite Members button, Import spreadsheet tab.
At the top of the window, choose the Role (Member or Moderator), the Groups and the Tags for everyone. New groups and tags are created right there by typing the name. These three fields are the same as on the Type e-mails tab: what you choose on one applies to the other.
1. Source. Write the List origin (required, up to 150 characters, no links), for example Attendees of event X in 2026. It goes in each invitee's email. Choose the file (drag it or click) and click Next.
2. File. Check how it was read: the Sheet (in an .xlsx with several), the Header row ("Header on row 8.", when the spreadsheet has a title above it) and, in a CSV, the Delimiter and the Encoding. Changing any of them rereads the file.
3. Columns. Each column shows with its first 3 rows and the Goes to selector. Columns Recognized automatically (email, first name, last name, phone, existing fields) come first; the others are left on Ignore, collapsed under "28 ignored columns — show". The destinations:
Goes to Rule E-mail Required, one column only. Without it, "Choose the e-mail column to continue." First name and Last name Together they make the full name. A full-name column also works Phone Adjusted to the international format, with the community's country as the default; an unreadable one stays empty Tags Each value becomes a tag (separate several with ,;or|). E.g.: Ticket typeGroups Each value puts the person in the group with that name; a missing one becomes a new group Consent The column that says who agreed. Mark which values count as yes (Yes, x, agreed…) Field: … An existing custom field + New custom field Creates the field with the column's name (editable) and the type suggested by the content. It is created optional Ignore The column isn't imported Consent, Tags and Groups are never suggested: you choose them. Columns with the same name show separately (Phone (col. 24), Phone (col. 30)), and only one can go to each of the person's details.
Consent. With a consent column, only rows with the marked values get in. Without one, tick the declaration "I declare that everyone on this list agreed to receive e-mails and to join this community." Without one of the two, you can't import.
4. Summary. Check before saving: Rows in the spreadsheet, New people, Already members, Will be skipped (with the reason), Skipped because they asked not to join, Invite e-mails to be sent and the groups, tags and fields that will be created, by name. Clicking Import confirms all of this; there's no other question.
5. Result. Progress shows in the window. At the end: Imported, Updated, Skipped and Invites sent, the list of Skipped rows with the reason, the Rows imported with a warning and the Download errors CSV button (the original rows with a reason column, to fix and import again).
Previous imports, on the same tab, shows the history: each import with date, counts, status and the original file.
Decline the invite
Someone who was imported and doesn't want to take part has two ways out:
- From the email: the link Thanks for the invitation, but I do not want to join opens a community page, with no sign-in, with Confirm: I don't want to join.
- In the community: in My Account, the same sentence shows discreetly, with the explanation "You were added to this community by a list import."
On confirming, the person leaves the community and goes on the decline list: the community can no longer import or invite them. Their Memberfy account stays. They only come back by joining on their own, through open sign-up.
- The email link is valid for 30 days and stops working when the person accepts the invite (sets the password and signs in) or when their role changes. After that, to leave, they talk to whoever runs the community.
- Declining doesn't apply to team members (moderator, admin, finance) or to anyone with an active or pending subscription in the community: the person cancels the subscription first.
- The decline list also applies to the email invite and to New Member: whoever declined comes back as "Asked not to take part in this community", and no email goes out.
A single decline isn't a violation; many declines from the same list lead Memberfy to review the community. See the Invitation policy.
Examples
An event with 220 attendees. The spreadsheet has a title in the first rows and the header on row 8. The organizers check the header row, send the Agreed to receive news column to Consent with Yes counting as yes, Ticket type to Tags and Company to + New custom field. The summary shows 97 new people, 109 without consent, 12 duplicates and 2 without email. They import; 97 invitations go out.
An association bringing in its base again. Half are already members. That half gets the Members 2026 group and fills in the Company that was empty, with no email; only the new people are invited.
Common errors and how to fix them
| Message | What to do |
|---|---|
| Upload an .xlsx or .csv file. | Save the spreadsheet as .xlsx or .csv |
| The file is over 5 MB. / The spreadsheet has more than 5,000 data rows. | Split it into parts and import one at a time |
| No clear header was found, so row 1 was used… | Pick the right Header row in the File step |
| Garbled accents (João) | Change the Encoding in the File step |
| Choose the e-mail column to continue. | Send a column to E-mail |
| Only one column can go to Phone. | Leave the other on Ignore or send it to a custom field |
| Mark which values of the consent column count as yes. | Mark the values under Count as yes |
| Tell where the list comes from. | Fill in the origin in step 1 |
| Check the consent declaration to import. | Without a consent column, the declaration is required |
| Another spreadsheet is being read right now. Try again in a moment. | Wait a few seconds and click again |
| Spreadsheet imports only accept member or moderator. | For other roles, use Type e-mails |
| Interrupted by the community's suspension | Memberfy suspended people joining; what had already been processed stays. See Suspension of joining and sales |
Frequently asked questions
Can I import without sending an email? No. Every new person gets the invitation, with the origin and the decline link: that's what lets them know where their data came from and say no.
Can I undo an import? There's no undo button. To remove someone, use Manage members.
Can I import someone who declined? No. Someone who declined only comes back by joining on their own.
The groups column has a name written differently from the group. The match ignores case and accents (engineering finds Engineering). A name that matches no group creates a new one, and the summary shows which before you import.
Can I import through Claude or ChatGPT? Yes: attach the spreadsheet to the conversation and ask. See the recipe Import a spreadsheet through the assistant.
In the API
POST /api/members/imports (the file, as multipart), POST /api/members/imports/{id}/preview, POST /api/members/imports/{id}/start, GET /api/members/imports, GET /api/members/imports/{id}, GET /api/members/imports/{id}/errors.csv and GET /api/members/imports/{id}/file. Declining is POST /api/invite-opt-out/{token} (from the link) and POST /api/profiles/me/decline (signed in). See Member Imports in the API reference.