Step 1: Export the sheet to CSV
In Google Sheets, File → Download → Comma-separated values (.csv). In Excel it's File → Save As → CSV UTF-8. Either works. Don't worry about quoting or escaping — the importer handles standard CSV from both tools.
Step 2: Upload it
Open /dashboard/members/import. Drop the CSV onto the upload area. You'll see a preview with the first ten rows; check the columns line up with the labels Freyaa expects.
Click Import. The importer runs synchronously for files under ~5,000 rows and queues anything larger. You'll get an email when it finishes if it queues.
Step 3: Tell members
Imported members don't automatically get an email — they sit as "invited but not activated" until they sign in for the first time. There's a one-click "Send welcome emails" button on the members list once the import is done. That triggers thewelcome lifecycle drip for each member.
First sign-in flow: the member receives a magic link, sets a password, and lands on their member portal at your subdomain.
Pre-paid members (the 6 / 12-month dues case)
Most clubs collect dues offline once or twice a year. When you migrate, you don't want Freyaa to charge those members again on day one. Add a paid_through column with the date their offline payment covers them through:
email,name,tier,paid_through
mira@example.co,Mira Patel,Adult,2026-11-01
jamie@example.co,Jamie Reyes,Adult,2026-05-15
Accepts YYYY-MM-DD or DD/MM/YYYY. On import the membership is marked pre-paid through that date. When the member adds a card and starts their Stripe subscription, Freyaa passes trial_end = paid_through to Stripe — the first card charge lands at renewal, not on signup. No double-charging.
Members without a paid_through field are billed normally on subscription start. You can mix pre-paid and not in the same CSV.
Past bookings — usually skip
We strongly recommend not migrating historical bookings. They take time to map (court ids change, time zones drift), they don't earn your front desk anything, and members already know what they booked. If a member asks about an old booking, just point them at the original record. After 60-90 days no one asks any more.