# STEP TWO: Add or Import Teachers

There are two ways to populate your teacher roster: **add them manually**, or **import a Teacher file**.

---

### Option A: Manually Add Teachers

Go to **Event Management / Appointments**.

---

#### Copy teachers from a previous event

1. Select the **Teachers** drop-down.
2. Select **Copy Teachers**.

> Once copied, you can safely delete the old event.

---

#### Add teachers one by one

**To add an existing contact as a teacher:**

1. Select **Add Teacher** from the **Teachers** drop-down.
2. In the **Select Person** dialog, search for the teacher's name.
3. Select the correct name, confirm the details on the right, then click **Select**.

**To add a brand-new teacher:**

1. In the **Select Person** dialog, enter the teacher's **Last Name**, **First Name**, and **Email** on the left.
2. Click **Add New**, then click **OK**.

Repeat until all teachers are added — each will appear in your teacher list on the right.

---

### Option B: Import a Teacher File

#### Step 1: Create the File

<div class="overflow-x-auto w-full px-2 mb-6" id="bkmrk-field-description-te"><table class="min-w-full border-collapse text-sm leading-[1.7] whitespace-normal"><thead class="text-left"><tr><th class="text-text-100 border-b-0.5 border-[hsl(var(--border-300)/0.6)] py-2 pr-4 align-top font-bold" scope="col">Field</th><th class="text-text-100 border-b-0.5 border-[hsl(var(--border-300)/0.6)] py-2 pr-4 align-top font-bold" scope="col">Description</th></tr></thead><tbody><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">**TeacherID**</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">Unique identifier for the teacher *(key field)*</td></tr><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">**First**</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">Teacher's first name</td></tr><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">**Last**</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">Teacher's last name</td></tr><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">**Email**</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">Teacher's email (must be unique; one address only)</td></tr><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">**Room**</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">Where the teacher will be during conferences — useful for room-based reporting</td></tr></tbody></table>

</div>**Example:**

<div class="overflow-x-auto w-full px-2 mb-6" id="bkmrk-teacherid-first-last"><table class="min-w-full border-collapse text-sm leading-[1.7] whitespace-normal"><thead class="text-left"><tr><th class="text-text-100 border-b-0.5 border-[hsl(var(--border-300)/0.6)] py-2 pr-4 align-top font-bold" scope="col">TeacherID</th><th class="text-text-100 border-b-0.5 border-[hsl(var(--border-300)/0.6)] py-2 pr-4 align-top font-bold" scope="col">First</th><th class="text-text-100 border-b-0.5 border-[hsl(var(--border-300)/0.6)] py-2 pr-4 align-top font-bold" scope="col">Last</th><th class="text-text-100 border-b-0.5 border-[hsl(var(--border-300)/0.6)] py-2 pr-4 align-top font-bold" scope="col">Email</th><th class="text-text-100 border-b-0.5 border-[hsl(var(--border-300)/0.6)] py-2 pr-4 align-top font-bold" scope="col">Room</th></tr></thead><tbody><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">234</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">Angela</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">Frank</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top"><a@school.com></td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">106</td></tr><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">225</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">Bobby</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">Smith</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top"><b@school.com></td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">Library</td></tr></tbody></table>

</div>> File must be **tab-delimited** (`.txt` from Excel, `.tsv` from Google Sheets), with column headers matching exactly (no spaces) in the first row.

**Optional columns:**

<div class="overflow-x-auto w-full px-2 mb-6" id="bkmrk-column-purpose-passw"><table class="min-w-full border-collapse text-sm leading-[1.7] whitespace-normal"><thead class="text-left"><tr><th class="text-text-100 border-b-0.5 border-[hsl(var(--border-300)/0.6)] py-2 pr-4 align-top font-bold" scope="col">Column</th><th class="text-text-100 border-b-0.5 border-[hsl(var(--border-300)/0.6)] py-2 pr-4 align-top font-bold" scope="col">Purpose</th></tr></thead><tbody><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">**Password**</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">Sets an initial password (min. 6 characters). If omitted, the teacher creates their own at first login. *(Once a teacher sets their own password, future imports won't override it — use the Reset Admin Password button under Global Setup / Contacts Setup to reset instead.)*</td></tr><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">**Virtual Room**</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">Online meeting link, if manually generating your own (not needed if using pickAtime's built-in meeting integration)</td></tr><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">**AccessLevel**</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">Sets admin access. `3` = Resource Administrator (can block their own schedule). Default is Appointment Viewer.</td></tr><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">**GroupName**</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">Categorizes teachers (e.g., "Middle School," "Science") — useful for creating different slot durations per group, or displaying teachers grouped on the scheduler</td></tr><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">**Action**</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">Set to `delete` to remove a previously imported row. Defaults to `update` if omitted.</td></tr></tbody></table>

</div>---

#### Step 2: Import Your File

1. Log into pickAtime and click **Importer**.
2. Set **Data Type** to **School**.
3. Select your event from the **Event** pull-down.
4. Set **File Type** to **Teachers**.
5. Click **Browse**, select your file, and click **Import**.

> If you left out some teachers, you can simply import a follow-up file containing just the missing rows.

---

#### Error Messages on Import

**"Found contact with teacherid of ABC and a different contact with the email of \[email\]"**

This means your import row has TeacherID `ABC` + a specific email, but the Admin UI already has **two separate** existing contacts — one matching the TeacherID, one matching the email — and the system can't tell which one to update.

**Example:**

*Your import file:*

<div class="overflow-x-auto w-full px-2 mb-6" id="bkmrk-teacherid-email-abc-"><table class="min-w-full border-collapse text-sm leading-[1.7] whitespace-normal"><thead class="text-left"><tr><th class="text-text-100 border-b-0.5 border-[hsl(var(--border-300)/0.6)] py-2 pr-4 align-top font-bold" scope="col">TeacherID</th><th class="text-text-100 border-b-0.5 border-[hsl(var(--border-300)/0.6)] py-2 pr-4 align-top font-bold" scope="col">Email</th></tr></thead><tbody><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">ABC</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top"><betsy@noemail.com></td></tr></tbody></table>

</div>*Existing Admin UI contacts:*

<div class="overflow-x-auto w-full px-2 mb-6" id="bkmrk-teacherid-email-abc--1"><table class="min-w-full border-collapse text-sm leading-[1.7] whitespace-normal"><thead class="text-left"><tr><th class="text-text-100 border-b-0.5 border-[hsl(var(--border-300)/0.6)] py-2 pr-4 align-top font-bold" scope="col">TeacherID</th><th class="text-text-100 border-b-0.5 border-[hsl(var(--border-300)/0.6)] py-2 pr-4 align-top font-bold" scope="col">Email</th></tr></thead><tbody><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">ABC</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top"><annie@noemail.com></td></tr><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">DEF</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top"><betsy@noemail.com></td></tr></tbody></table>

</div>**How matching works:** The import looks for a matching TeacherID *or* a matching email. If it finds one match, it updates the rest of that contact's info. If it finds **both** a TeacherID match and a separate email match — pointing to two different contacts — it can't determine which one you intended to update, so it flags this error instead.

**Fix:** In the Admin UI, search for the contact with the flagged email. If that contact has a different (likely outdated) TeacherID than your file, delete it, then re-import your teacher file.

---

### Viewing Your Imported Data

Go to the **Appointments** page and confirm your teacher list (right-hand side) is correct.