In This Article
SFTP batch upload is the standard way transcripts enter EddyAI™. Your institution drops a ZIP of transcript PDFs into a secure folder, EddyAI™ picks it up on a schedule, reads every transcript, and returns the extracted data to your CRM. This article walks through each stage of that journey and what you need to get right on your side.
How It Works
Every batch follows the same five stages:
1 |
You upload a ZIP containing transcript PDFs and an index.csv to your institution's SFTP folder. |
2 |
EddyAI™ picks it up at the next scheduled check, copies the ZIP to secure cloud storage, and unpacks it. |
3 |
The AI reads each transcript — courses, grades, credits, GPA, and school details — and matches it to the student listed in the index. |
4 |
Your team reviews the results in the EddyAI™ queue, corrects anything that needs it, and approves each record. |
5 |
EddyAI™ exports the approved data as a CSV back to your SFTP folder, ready for your CRM to import. |
Note
Your SFTP connection — host, credentials, and folder path — is configured by EdVisorly during implementation. If you need the connection details or a credential rotated, contact your implementation lead.
SFTP Folder Layout
Inside the sftp account, files move through a standard set of folders. The names are from your institution's point of view: you place files in outgoing and collect results from incoming.
| Purpose | High School | College |
|---|---|---|
| You upload transcript ZIPs here | outgoing/edvisorly/eddyai/high_school | outgoing/edvisorly/eddyai/college |
| EddyAI™ writes CRM export CSVs here | incoming/edvisorly/eddyai/high_school | incoming/edvisorly/eddyai/college |
Preparing a Batch
A batch is a single ZIP file. Getting the structure right is what makes pickup and matching work automatically.
What Goes in the ZIP
- Transcript PDFs: One file per transcript, placed at the root of the ZIP (not inside subfolders).
- index.csv: A single index file at the root of the ZIP that tells EddyAI™ which student each PDF belongs to.
Naming the ZIP
EddyAI™ uses the ZIP filename to decide which pipeline handles it. The name must include one of these keywords (case does not matter):
| Transcript Type | Required Keyword | Example |
|---|---|---|
| High School | high_school | schoolname_high_school_timestamp.zip |
| College | college | schoolname_college_timestamp.zip |
Warning
Every ZIP needs a unique filename. EddyAI™ remembers each ZIP it has processed and will silently skip a file whose name it has seen before — even if the contents are different. Including the date in the filename is the easiest way to keep names unique.
The index.csv File
The index links each PDF to a student record so EddyAI™ knows where the extracted data belongs. File rules:
- Filename: index.csv, at the root of the ZIP.
- Format: Comma-delimited, UTF-8. One row per PDF.
- Header row: Required. The first row must contain the column names exactly as configured for your institution.
- Blank rows: Skipped. A row with an empty SOURCE_FILE value is ignored, so that PDF will not be matched.
Standard Columns
Column names are agreed during implementation and can be customized to match your CRM export, but nearly all institutions use the standard set below. Your implementation documentation lists the exact headers configured for you.
| Header | Required | What It Contains |
|---|---|---|
| SOURCE_FILE | Yes | The PDF filename, exactly as it appears in the ZIP, including the .pdf extension. This is how each row is paired with its transcript. |
| SCHOOL_CODE | Yes | CEEB code of the school that issued the transcript. |
| SCHOOL_INSTITUTION | College: Yes High School: Recommended |
Name of the issuing school or institution. |
| STUDENT_ID | Recommended | Your CRM's student identifier. Needed for the export file to land on the right record. |
| APPLICATION_ID | Recommended | Your CRM's application identifier. |
| DOCUMENT_ID | Recommended | Your CRM's identifier for this transcript document. |
| FIRST | Recommended | Student first name. |
| LAST | Recommended | Student last name. |
Warning
SOURCE_FILE must match the PDF filename character for character. A PDF named Smith_J.pdf with an index value of smith_j.pdf or Smith_J will not be paired and the transcript will not appear in your queue with student details attached.
Uploading to SFTP
Use any SFTP client (such as FileZilla, Cyberduck, WinSCP, or a scripted transfer from your SIS) with the connection details provided during implementation.
1 |
Connect to the SFTP host using your institution's username and password. |
2 |
Navigate to the outgoing folder for the transcript type (for example, outgoing/edvisorly/eddyai/high_school). Do not create subfolders — EddyAI™ only looks in the assigned folder itself. |
3 |
Upload the ZIP file and wait for the transfer to complete. |
4 |
Leave the file in place. EddyAI™ never moves or deletes your files, and you do not need to remove a ZIP after it has been processed. |
Tip
Pickups run on a fixed twice-daily schedule and take one ZIP per pickup. Finish uploading at least 30 minutes before a pickup, and combine transcripts into one ZIP rather than several. See How Often EddyAI™ Picks Up Files from SFTP for the schedule.
What Happens After Pickup
Once EddyAI™ picks up a ZIP, the batch moves through several automated stages. You do not need to do anything during this time.
| Stage | What EddyAI™ Does |
|---|---|
| Download | Copies the ZIP from SFTP into secure cloud storage and records the batch so the same ZIP is never picked up again. |
| Unpack | Extracts the PDFs and reads index.csv to pair each file with its student. |
| Duplicate check | Identifies any transcript PDF that has been delivered before and sets it aside rather than creating a second record. (NOTE: File must be pixal for pixal exactly the same as a previous file.) |
| Extraction | Reads every transcript and pulls out courses, grades, credits, GPA, and school information according to your institution's configuration. |
| Ready for Review | Each record appears in your review queue as it finishes. Large batches fill the queue over time rather than all at once. |
Getting Results Back
After your team reviews and approves records, EddyAI™ bundles the approved data into a CSV export and writes it to the incoming folder on your SFTP server (see SFTP Folder Layout). Exports run on a regular interval (every 2 hours for High School, every 30 minutes for College), so approved records appear in the next file rather than immediately. The export filename includes the date so each file is unique.
The columns in the export file are mapped to your CRM's fields during implementation. Your CRM or SIS team then imports the file using their standard process.
Note
Records show Sending to CRM while they wait for the next export and Sent to CRM once they are included in a file. If a record shows CRM Send Failed, open it in EddyAI™ to see the reason and retry.
Troubleshooting
The ZIP was not picked up
- Check the filename: It must contain high_school or college and must not match a ZIP that was processed before.
- Check the location: The ZIP must sit directly in your assigned folder, not in a subfolder.
- Check the timing: If the upload finished after the scheduled pickup, it will be collected at the next one.
- Check for other ZIPs: Only one ZIP is processed per pickup. If a newer ZIP was also waiting, it went first.
Some transcripts from the batch are missing from the queue
- Index mismatch: A PDF whose filename does not exactly match a row in index.csv cannot be paired with a student.
- Duplicate transcript: A PDF identical to one delivered previously is set aside rather than processed again.
- Still processing: Large batches finish over time. Check back before assuming a record is missing.
A batch needs to be run again
Re-uploading the same ZIP will not trigger reprocessing. Upload the corrected batch under a new filename, or contact EdVisorly Support and we can re-drive the original batch for you.
Caution
Do not delete or rename a ZIP while a pickup may be in progress. If EddyAI™ is midway through downloading the file, the batch will fail and need to be re-run.
Comments
0 comments
Article is closed for comments.