Skip to main content

Importing data into Core

Core has a built-in importer for bulk-loading event data (registrations, check-ins, and submissions) from a CSV. Each upload becomes an Import record made of import line items (one per row), which you can watch as they process. Open imports at https://core.mlhtools.com/resources/imports.

Import types

Every import has a type that decides what the rows become:

  • Registration — creates/updates users and their registered participations.
  • Check-in — moves participations to checked in.
  • Submission — imports project submissions to challenges.
  • Project — imports project-first event submissions.

How an import runs

  1. A CSV is uploaded through Core's importer. An Import is created as pending, linked to the event, with the total row count.
  2. Each row becomes an import line item holding the raw row data, starting as pending.
  3. Line items process in the background: users are found or created (with their emails, phone numbers, school, social profiles), participations are created or advanced, and — for submission/project imports — projects and submissions are created.
  4. Each line item ends as processed or errored (with an error message). The import becomes processed when all rows are done, or errored if some rows failed.

Reimports (registration and check-in)

Registration and check-in imports are append-only and can be re-run: a new import supersedes the previous one for the event. During a reimport:

  • Rows for people no longer in the CSV are deleted (their participation is removed or downgraded).
  • People who have already advanced further (e.g. already checked in, or already submitted) are preserved — a reimport never moves someone backward.

Submission and project imports support only one import (no reimport).

Import fields

  • Status: pending, processed, or errored.
  • Event: the event the data belongs to.
  • Total rows: how many rows were in the file.
  • Type (external source type): registration, check-in, submission, or project.
  • Outcome (on the record): a summary — how many rows were processed, removed, kept, errored, and pending.
  • Supersedes / Superseded by: links to the imports this one replaced or was replaced by.

Import line items

Each row shows its Status, an Error message (if it failed), the linked User, the raw Data, and flags for whether the row was deleted or preserved during a reimport.

Devpost auto-import

Devpost auto-import pulls an event's data straight from Devpost instead of a manual CSV. It logs into Devpost, downloads the projects and registrants as CSVs, and queues them through the same importer. Its State field tracks progress (authenticating → navigating → downloading → uploading → queueing → completed, or failed with an error message), and the downloaded CSVs are attached to the record.

:::info Maintainer note Add the how-to: where staff start an upload (the browser upload UI vs. CSVifier vs. Flatfile), the expected CSV columns per import type, and how to recover from an errored import. :::