Import Events
Import Events lets you create multiple events at once by uploading a CSV file. This is ideal for migrating from another system, planning an entire semester of activities, or setting up many events quickly.
When to Use Bulk Import
Bulk import is most useful when you have:
- Many events to create - Setting up 10+ events is faster with import than creating each manually
- Events from another system - Migrating from spreadsheets or another platform
- Seasonal planning - Setting up an entire semester or year of activities
- Recurring schedules - Creating multiple similar events with different dates
For recurring events with the same time and location (like weekly classes), use Event Series instead. Event Series automatically generates sessions and supports series passes. Use bulk import when your events vary in details or aren't on a regular schedule.
Accessing Event Import
- Go to your group page
- Click the Events tab
- Click Import Events in the top right
Only Group Owners, Co-Leaders, and Event Managers can import events. See Managing Members for role details.
Downloading the CSV Template
To ensure your CSV file has the correct format:
- On the Import Events page, click Download Template
- The template downloads as
event-import-template.csv - Open it in Excel, Google Sheets, or any spreadsheet program
The template includes:
- Example data for both single events and series
- All required and optional columns
- Comments explaining each field
CSV Format Requirements
Required Columns
Every row must include these columns:
| Column | Format | Description |
|---|---|---|
type | event or series | Whether this is a single event or recurring series |
name | Text | Event title |
start_date | YYYY-MM-DD | Date of the event (e.g., 2025-03-15) |
start_time | HH:MM | Start time in 24-hour format (e.g., 14:00 for 2 PM) |
end_time | HH:MM | End time in 24-hour format (e.g., 16:30 for 4:30 PM) |
Optional Columns
Add these columns to configure additional event details:
Event Details:
description- Event description (plain text)category- Category names, comma-separated (e.g., "Arts & Crafts, Academic")image_url- URL to an image (will be downloaded and attached to event)
Location Settings:
location_name- Venue name (e.g., "Community Center")location_address- Full street address for geocoding (e.g., "123 Main St, Austin, TX 78701")location_type-physical,virtual, orhybrid(default: physical)virtual_meeting_url- Zoom/Teams link for virtual or hybrid events
Visibility & Registration:
visibility-public,group_members, orunlisted(default: public)show_attendees-trueorfalse(default: true)collect_attendee_info-trueorfalse(default: false)registration_deadline- Deadline as YYYY-MM-DD or YYYY-MM-DD HH:MMscholarship_enabled-trueorfalse(default: false)no_refunds-trueorfalse(default: false)
Capacity & Pricing:
capacity- Maximum attendees (number)series_pass_price- Price for a series pass or single event ticket (e.g., 25.00)drop_in_price- Per-session price for series (e.g., 5.00)intro_price- Special price for first session of series (e.g., 3.00)tickets_json- Advanced: JSON array for custom ticket types
Series Options (required if type = series):
recurrence-daily,weekly,biweekly, ormonthlysessions- Number of sessions (number)
Format Examples
Single Free Event:
type,name,start_date,start_time,end_time,location_name,location_address,location_type,visibility
event,Park Day Meetup,2025-03-20,11:00,14:00,Zilker Park,2100 Barton Springs Rd Austin TX,physical,public
Single Paid Event:
type,name,start_date,start_time,end_time,location_name,location_address,capacity,series_pass_price,category
event,Science Fair,2025-04-15,10:00,15:00,Community Center,100 Center Blvd Austin TX,100,5,STEM
Weekly Series:
type,name,start_date,start_time,end_time,recurrence,sessions,series_pass_price,drop_in_price,location_name,location_address
series,8-Week Art Class,2025-01-15,10:00,12:00,weekly,8,200,30,Art Studio,123 Main St Austin TX
Virtual Event:
type,name,start_date,start_time,end_time,location_type,virtual_meeting_url,visibility
event,Online Book Club,2025-03-25,19:00,20:30,virtual,https://zoom.us/j/123456789,group_members
CSV Formatting Tips
- Headers - First row must contain column names (case-insensitive)
- Quotes - Use double quotes around values containing commas (e.g., "Arts, Academic")
- Empty values - Leave cells blank for optional fields you don't need
- Dates - Always use YYYY-MM-DD format
- Times - Use 24-hour format (14:00, not 2:00 PM)
- Encoding - Save as UTF-8 encoding for special characters
Uploading and Importing
Upload Your CSV
- On the Import Events page, either:
- Drag and drop your CSV file onto the upload area
- Click Select File to browse for your CSV
- The file is validated immediately
- You'll see a preview of what will be imported
Review the Preview
The preview shows:
- Valid - Number of rows ready to import (green)
- Errors - Number of rows with validation errors (red)
- Warnings - Number of rows with warnings (yellow)
Each row displays:
- Row number from your CSV
- Status icon (checkmark or X)
- Event/series name and date
- Any errors or warnings for that row
Handle Validation Results
If all rows are valid:
- Review the preview
- Click Import Events to proceed
If there are errors:
- Review error messages for each row
- Choose one of these options:
- Click Change file to fix your CSV and re-upload
- Check Skip invalid rows to import only the valid rows
If there are warnings:
- Warnings don't prevent import
- Review them to ensure your data is correct
- Common warnings: dates in the past, very high capacity
If any row includes pricing (series_pass_price, drop_in_price, etc.), your group must have completed Stripe Connect verification. Free events can be imported without payment setup.
Confirm and Import
- Review the preview one final time
- If you have invalid rows, decide whether to skip them
- Click Import [N] Events where N is the number of events to create
- Wait while events are created (this may take a few moments)
Understanding Import Results
After import completes, you'll see a summary:
Success
If all events were created successfully:
- Green success message
- List of created events with links to view them
- Import More button to import another file
- View Group button to return to your group
Partial Success
If some events couldn't be created:
- Yellow warning message
- Count of successfully created events
- List of created events
- Error details for failed rows
- Errors are shown with row numbers
Common Import Errors
During validation:
- Missing required fields (type, name, dates, times)
- Invalid date format (use YYYY-MM-DD)
- Invalid time format (use HH:MM)
- End time before start time
- Series missing recurrence or session count
- Invalid category names (category doesn't exist in your group)
During import:
- Group needs Stripe verification for paid events
- Location geocoding failed (address not found)
- Image download failed (invalid URL or timeout)
Fixing Import Errors
If your import has errors:
- Note the row numbers with errors
- Click Change file
- Open your original CSV
- Fix the errors based on the error messages
- Save the CSV
- Upload the corrected file
Common fixes:
- Add missing required fields
- Correct date/time formats
- Fix category names to match your group's categories
- Remove pricing for groups without Stripe setup
- Verify location addresses are complete
Advanced Features
Multiple Categories
Assign multiple categories to an event:
category
"Arts & Crafts, Academic, Social"
Categories are matched to your group's event categories (case-insensitive).
Image URLs
Provide a URL to an event image:
image_url
https://example.com/event-photo.jpg
The import process will:
- Download the image
- Upload it to Homeschool Hive storage
- Attach it to the event
Requirements:
- Must be a valid HTTP/HTTPS URL
- Image format: JPG, PNG, GIF, or WebP
- Maximum file size: 5MB
- Download must complete within 10 seconds
Custom Tickets (Advanced)
For complex ticket configurations, use tickets_json:
tickets_json
"[{""name"":""Adult"",""price"":15,""capacity"":50},{""name"":""Child"",""price"":10,""capacity"":50}]"
Each ticket object can include:
name- Ticket name (required)price- Ticket price (required)capacity- Maximum quantitydescription- Ticket descriptionis_addon- true for add-on items
JSON in CSV requires careful escaping. For complex tickets, it's often easier to create the event manually or import basic events and add tickets afterward.
Location Geocoding
When you provide a location_address, the import process:
- Geocodes the address using Mapbox
- Creates or reuses a location record
- Associates it with the event
- Stores coordinates for map display
For best results:
- Include full addresses: "123 Main St, Austin, TX 78701"
- US addresses only
- Verify addresses exist (geocoding failures are logged but don't stop import)
After Importing
Review Imported Events
- Go to your group's Events page
- Find your newly imported events
- Click on each to review details
- Make any final adjustments
What to Check
- Event images loaded correctly
- Categories assigned properly
- Locations geocoded accurately
- Ticket prices are correct
- Registration settings match your intent
Make Adjustments
To edit an imported event:
- Open the event page
- Click Edit Event
- Make changes
- Click Save Changes
See Create Events for editing details.
Tips for Successful Imports
Planning Your Import
- Start small - Test with 2-3 events first
- Review the template - Understand all available fields
- Match your categories - Verify category names match your group's categories
- Check dates - Ensure dates are in the future and formatted correctly
Preparing Your CSV
- Use the template - Start from the downloaded template
- Keep it simple - Only include columns you need
- Test addresses - Verify locations geocode correctly
- Remove duplicates - Check for duplicate event names/dates
After Import
- Review immediately - Check all events after import
- Test registration - Try registering for a test event
- Communicate - Let members know about new events
- Monitor - Watch for questions about imported events
Troubleshooting
Import Button Disabled
Problem: Can't click the Import button
Solutions:
- Ensure at least one row is valid
- If there are errors, check Skip invalid rows
- Verify CSV uploaded successfully
All Rows Show Errors
Problem: Every row has validation errors
Solutions:
- Check CSV has header row with column names
- Verify date format is YYYY-MM-DD
- Verify time format is HH:MM (24-hour)
- Ensure required columns are present
Events Created But Missing Details
Problem: Events imported but some information is missing
Causes:
- Optional columns left blank
- Geocoding failed for addresses
- Image download failed or timed out
- Categories didn't match group's categories
Solutions:
- Edit events to add missing details
- Manually add images
- Verify category names
- Re-enter locations
Stripe Verification Error
Problem: Can't import paid events
Solution:
- Complete Stripe Connect setup in group settings
- Or remove all pricing from CSV to create free events
- See Payments & Stripe
What's Next?
- Create Events - Learn about all event configuration options
- Event Series - Set up recurring events with series passes
- Manage Events - Handle RSVPs and attendance