Our student information system will show me a roster on screen. It will not give me that roster as a file I can use.
So I do what everyone does. I screenshot it. Then I retype thirty names and ID numbers into a spreadsheet, build the email addresses by hand, and save it as a CSV. Twenty minutes, and one typo means an email that bounces.
This does it in about thirty seconds.
What It Does
Upload a screenshot or photo of any student list. It reads the names and ID numbers, builds each student's email address from the ID, and returns two things: a plain list of addresses you can paste straight into the To field, and a CSV file.
Roster on screen, working file in hand.
What I Actually Use It For
Building a distribution list for a class or a group without typing thirty addresses.
Importing into a tool. Canvas, Quizizz, Blooket, anything that wants a CSV. Most of them want first name, last name, email in that order, which is what this produces.
Pulling a subset. A screenshot of just the students in one project group, or just the ones who need a retake.
Photos, not just screenshots. A picture of a printed roster on your desk works.
Read Before You Use It
This uploads real student data. Names and ID numbers going to a commercial AI service. That's a different thing than the other prompts I've posted, and it deserves a straight answer.
Check your district's policy. Some districts have an approved enterprise version of ChatGPT or Gemini where data isn't retained for training. Some prohibit student information in consumer accounts entirely. Ask your tech director before you build this, not after. That's a two-minute email and it's the right order of operations.
If you're cleared, turn off chat history and training in your account settings, and delete the conversation when you're finished. Basic hygiene.
Use ChatGPT, not Gemini, for the file. The prompt asks for a downloadable CSV. ChatGPT can actually generate and hand you a file. Gemini will give you CSV text you have to paste into a spreadsheet and save yourself. Both work. One is one step and one is three.
Verify the IDs. The AI reads images well, not perfectly. A blurry screenshot or an unusual font will produce a wrong digit eventually, and a wrong digit is a wrong email address. Scan the output against the source before you send anything. It takes fifteen seconds and it is the only reason I trust the other twenty minutes I saved.
Change This Before You Use It
The email pattern is set to my district: [ID]@guhsd.net. Yours is different. Find that line in the instructions and swap in your own domain and format. If your district uses first initial plus last name instead of ID numbers, change the pattern to match. That's the only edit most people need.
Build It Once
Set it up as a ChatGPT Project. Paste the instructions, change the email pattern, done. Every roster from here on is a thirty-second job.
Instructions
Paste everything below into your Project instructions. Change the EMAIL PATTERN section to match your district.
User Prompt
ROLE
You are a data extraction specialist. You read student rosters from
uploaded images and convert them into email lists and CSV files.
EMAIL PATTERN [CHANGE THIS TO MATCH YOUR DISTRICT]
Build each student email as: [StudentID]@guhsd.net
Example: a student with ID 654321 becomes 654321@guhsd.net
TASK
Examine the attached image and identify every student listed. For each
student, extract:
- First Name
- Last Name
- Student ID number
Then build each student's email address using the pattern above.
ACCURACY RULES
- Read every name and ID directly from the image. Never infer, complete,
or correct a value you cannot clearly see.
- If a name or ID is unreadable, output the row with [UNREADABLE] in that
field rather than guessing.
- After the output, list any rows containing [UNREADABLE] under a short
heading so the user knows exactly what to check.
- Report the total number of students found so the user can confirm it
matches the roster.
- Preserve spelling exactly as shown, including hyphens, apostrophes, and
accented characters.
OUTPUT
Produce three sections, in this order, with a bold heading on each:
**Email List:**
A bulleted list of every email address, one per line.
**students.csv:**
The CSV content as plain text, not in a code block. Header row first:
First Name,Last Name,Email
Then one row per student.
**Download:**
Generate students.csv as an actual downloadable file and provide the link.
If you are unable to generate files, state that plainly and tell the user
to copy the CSV text above into a spreadsheet and save it as
students.csv.
Close with:
**Students found:** [count]
**Needs review:** [list any [UNREADABLE] rows, or "none"]
CONSTRAINTS
- Do not explain your process or add commentary. Output only the sections
above.
- Output must be ready to copy, paste, or download with no cleanup.
