Bulk School Import
Download the CSV templates below. Fill them in, then return here to upload and validate. The first three are required; Lineage Islands and Branches are optional.
How the three files link together
You assign a temporary row_ref (e.g. SCH001) to each school in the Schools CSV. You then use that same value as school_row_ref in the Art Listings and Class Schedules CSVs to tell the importer which school each row belongs to. The real system IDs are generated during import — you never type them yourself.
1. Schools Template
schools_template.csv
One row per school. The row_ref column is YOUR temporary identifier (e.g. SCH001) used to link Art Listings and Class Schedules to this school. It is not stored in the database.
- •Required: name, instructor_name, address_line1, city_local, country, contact_email
- •lat / lng / place_id are NOT included — geocoding runs automatically after import
- •apple_maps_url is optional — the apple_maps_id will be extracted automatically
- •name_native, instructor_name_native, address_native are optional — native-script variants (Japanese, Thai, etc.) shown alongside the Latin fields
2. Art Listings Template
art_listings_template.csv
One row per art taught at a school. Use school_row_ref to link to the row_ref from the Schools CSV. A school can have multiple arts — mark exactly one as primary_art = true.
- •martial_art_name must match an existing MartialArt record (case-insensitive)
- •lineage_island_name and lineage_branch_name are optional — leave blank if unknown
- •mat_fee_currency should be a 3-letter code (AUD, JPY, USD, EUR, etc.)
3. Class Schedules Template
class_schedules_template.csv
One row per weekly class. Use school_row_ref + martial_art_name to link to the correct Art Listing from the previous CSV.
- •day_of_week: Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | Sunday
- •start_time / end_time in 24-hour HH:MM format (e.g. 18:30)
- •class_type examples: Regular, Weapons, Advanced, Beginners, Open Mat
4. Lineage Islands Template (optional)
islands_template.csv
Optional. Only needed when this batch introduces lineage islands (top-level lineage groupings) that don't yet exist as LineageIsland records. Islands created here are NOT stamped with the batch code — they persist across batches and are not removed by batch rollback.
- •Required per row: name
- •description is optional
- •If an island with the same name already exists, the row is silently skipped
- •Islands are created BEFORE branches, so branches whose island_name matches a new island will resolve in the same run
5. Branches Template (optional)
branches_template.csv
Optional. Only needed when this batch introduces federations/organisations that don't yet exist as LineageBranch records. Branches created here are NOT stamped with the batch code — they persist across batches and are not removed by batch rollback.
- •Required per row: name, island_name
- •island_name must exactly match an existing LineageIsland (case-insensitive) — or an island created earlier in this same import run
- •If a branch with the same name already exists, the row is silently skipped
- •Branches are created BEFORE art listings, so listings whose branch_custom matches a new branch will resolve in the same run
Run import
Upload your three filled CSVs, validate the data, then execute the import.
A short identifier stamped on every record in this batch (e.g. JP-2026-06). Used to undo this batch later if needed.
Schools CSV
No file selected
Art Listings CSV
No file selected
Class Schedules CSV
No file selected
Lineage Islands CSV (optional)
Only needed when the batch introduces lineage islands that don't yet exist as LineageIsland records.
Branches CSV (optional)
Only needed when the batch introduces federations/organisations that don't yet exist as LineageBranch records.
Delete an import batch
Rolls back an entire batch by import_batch code. Only schools still in unclaimed status, with no introductions and no recruitment sent, are deletable. Everything else is protected.