Back to admin

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

Download 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

Download 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

Download 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

Download 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

Download 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.

1
Upload
2
Validate
3
Execute

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.