Migrating Data from Slate to WebAdMIT
- Last updated
- Save as PDF
Overview
If you'd like to transfer data from Slate to WebAdMIT, you can do so using the Slate to WebAdMIT data migration process. This process uses a Python script to move data from Slate to custom fields in WebAdMIT.
This works by following these steps:
- Slate exports a CSV file to an SFTP location.
- The Python script picks up the CSV file and uses the WebAdMIT API to load the date into custom fields in WebAdMIT.
- The script archives the file for data retention and auditing purposes.
Using this process, you can transfer data like:
- Interview status
- Student ID
- Campus visit (yes/no)
- School email address
- Date enrollment deposit received
- Scholarship/Financial aid information
For guidance on migrating decision codes, see Migrating Decision from Slate to WebAdMIT.
Prerequisites
To set up this migration process, you'll need to have the following in place:
- A Windows server to host the Python script. To set up the server, you'll need to:
- Establish an account with admin rights on the server.
- Install Notepad++ on the server to edit the Python script.
- Install Python on the server that hosts the script.
- Optional: If the SFTP server and the Python script are on two different servers, you'll need a script or batch file to move the data from the SFTP to the script server.
-
Configured export fields. The fields needed for the export in Slate should be configured in production and, optionally, Slate Test.
-
Configured custom fields. WebAdMIT's custom fields should also be built in the prelaunch and production evironments.
Creating Custom Fields in WebAdMIT
Identify the fields you want to migrate from Slate to WebAdMIT. Then, create custom fields in WebAdMIT that will be the destination for this data.
WebAdMIT User Identities
To access the WebAdMIT API, you need a user account in WebAdMIT that is in the WebAdMIT Administrators Work Group and can access data for all departments and programs. You should have an account in the prelaunch and production environments. Once that is in place, complete the following steps in both environments:
- Log in to WebAdMIT with your user account.
- Click Account on the top right to view Account Details.
- Click Edit My Account at the top right.
- Verify that your account has the correct organization assignments and program assignments.
- In the API Key section, click Generate New Key to generate a unique API key for your account.
- Click Show Key to view your API Key.
- Make note of the API Key, which will be required for the script and retrieving your identity ID.
Retrieving Your User Identity ID
You can retrieve your User Identity ID in two different ways, either with or without Postman.
Retrieving Your User Identity ID with Postman
To use Postman to retrieve your User Identity ID, follow these steps:
- Download the WebAdMIT API collection (updated 9/22/25).
- Download the WebAdMIT API Prelaunch environment and the WebAdMIT API Production environment (updated 9/22/25).
- From your Workspace, select the Collections tab and click Import.
- Select the WebAdMIT API collection and WebAdMIT API environments from your computer. It will automatically import. You should now see a collection created in the Collections section and an environment created in the Environments section.
- Click Environments, then the WebAdMIT Prelaunch environment. Add the API key you generated for your WebAdMIT account to the environment.
- Repeat step 5 for the production environment.
- Click Collections, then in the WebAdMIT Custom Fields grouping, select GET User Identities. In the drop-down in the upper right corner, select your WebAdMIT API Prelaunch environment.
- Click Send to retrieve the User Identities.
- Copy the number after “id” for the CAS and cycle you want to make updates and set this value as the “UserIdentityID” variable.
- If the API call fails, it will return a status code of 401. This indicates that the user is not authorized to access the API. Check the user’s permissions in WebAdMIT and verify that the user has the correct organization and program assignments.
Retrieving Your User Identity ID without Postman
To retrieve your User Identity ID without using Postman, follow these steps:
- Use CURL or POSTMAN to make the below API calls:
- PRODUCTION
Base URL: https://api.webadmit.org
$ curl -n https://api.webadmit.org/api/v1/user_identities \ -H "x-api-key: <ENTER YOUR API KEY>"
- PRELAUNCH
Base URL: https://prelaunch.webadmit.org
$ curl -n https://prelaunch.webadmit.org/api/v1/user_identities \ -H "x-api-key: <ENTER YOUR API KEY>"
- Make sure to use the correct API Keys for PRELAUNCH and PRODUCTION.
- A successful API call should generate a status code of 200 with the following example response body:
{ "href": "/api/v1/user_identities", "user_identities": [ { "id": 42, "type": "Admissions User", "association": "SOPHAS", "institution": "Demo University", "organization": "Demo University School of Public Health", "cycle": "2014 - 2015" } ] }
- Make note of the number after "id":. Corresponding to the cycle for which you want your applicant custom fields updated, this is the identity ID and is needed for prelaunch and production. You'll use this in the next section.
- If the API call is unsuccessful, then it will return a status code of 401. This means the user is not authorized to gain access to the API. Verify the user’s permissions in WebAdMIT and confirm that the user has the correct organization and program assignments.
Retrieving Custom Field IDs in WebAdMIT
To create the export in Slate, you'll need the IDs corresponding to your custom fields. You can retrieve these IDs in several ways, as outlined below.
Option 1: Making API Calls to Retrieve Custom Field IDs in WebAdMIT
You can retrieve the the custom field IDs in WebAdMIT either with or without using Postman.
Retrieving Custom Field IDs with Postman
To use Postman to retrieve the custom field IDs, follow these steps:
- In Collections, under the WebAdMIT API Data Import grouping and the Custom Fields folder, select GET Program IDs.
- Ensure that the correct environment is selected (prelaunch or production) in the upper right corner and click Send.
- Populate the environment variable with the program ID.
- In Collections, under the WebAdMIT API Data Import grouping and the Custom Fields folder, select GET Custom Field IDs. Ensure that the correct environment is selected (prelaunch or production) in the upper right corner and click Send to retrieve the custom field IDs.
- Make note of the number after "id" for each of the custom fields. You will need the IDs to build the export in Slate.
Retrieving Custom Field IDs without Postman
To retrieve the custom field IDs without Postman, proceed as follows. Note that the examples below are for WebAdMIT production. To make this code viable for prelaunch, use https://prelaunch.webadmit.org as your base URL.
- Make the following API call to retrieve the Program ID associated with the user identity ID:
$ curl -n https://api.webadmit.org/api/v1/user_identities/:<ENTER USER_IDENTITY_ID>/programs/ -H "x-api-key: <ENTER YOUR API KEY>"
- Make the following API call to retrieve the custom field IDs:
$ curl -n https://api.webadmit.org/api/v1/user_identities/:<ENTER USER_IDENTITY_ID>/programs/:<ENTER PROGRAM_ID>/custom_fields \ -H "x-api-key: <ENTER YOUR API KEY>"
- A successful API call should generate a status code of “200” with the following example response body:
{ "href": "/api/v1/user_identities/1/programs/42023191739237/custom_fields", "custom_fields": [ { "id": 4, "label": "Preferred house", "field_type": "select", "options": [ "Gryffindor", "Hufflepuff", "Ravenclaw", "Slytherin" ] } ] }
- Make note of the number after "id" for each of the custom fields.
Option 2: Manually Retrieve Custom Field IDs in WebAdMIT
- Log in to WebAdMIT prelaunch or production.
- Click Custom Fields in the Management section of the Navigation Panel on the left.
- From the Custom Fields Manager page, click the pencil icon on the right of your desired custom field.
- In the URL of the properties page that opens, you'll find the ID for that custom field.
- Repeat this process for each needed custom field to capture their IDs.
Note that custom field IDs are different between prelaunch and production, so you'll need to complete this process for each environment as needed.
We recommend that you create a data mapping document for each cycle to capture the WebAdMIT Custom Field Label, Custom Field IDs, and Custom Field Data Types, as seen in the example below.
WebAdMIT Field Label |
WebAdMIT Field Type |
WebAdMIT Field ID (Prelaunch) |
WebAdMIT Field ID (Production) |
---|---|---|---|
Student ID | Numeric | 2271421 | 2571462 |
Enrollment Deposit Received | Date | 2117817 | 2581764 |
Campus Visit | Yes/No Value | 2118714 | 2297871 |
Scholarship/Financial Aid Information | Text Value | 2714171 | 2237848 |
School Email Address | Text Value | 2178171 | 2267413 |
Interview Status | Select From List | 2281917 | 2246458 |
Slate Configuration
To set things up in Slate:
- Ensure that the Program Unique Identifier String is mapped.
- When loading data into Slate via the CAS API (using the templated All CAS By Liaison - Applications Source Format), you will need to create a new field in Slate to store the Program Unique Identifier String field and map it to progMate.progSele0.uniqueIdentifier.
- If you are loading application data from WebAdMIT using a custom Source Format, and you are not already loading the Program Unique Identifier String (in WebADMIT the field is called Program ID (for WebAdMIT API) (program_id), add a new field in Slate for CAS Program Unique Identifier String and map it to program_id.
- When loading data into Slate via the CAS API (using the templated All CAS By Liaison - Applications Source Format), you will need to create a new field in Slate to store the Program Unique Identifier String field and map it to progMate.progSele0.uniqueIdentifier.
- Create a query. To move any data points from Slate to WebAdMIT via SFTP, you must configure a query in Slate. The custom field IDs retrieved previously will be needed for this step. The script expects the exports in the query in the following order:
- CAS/Liaison Person ID
- Program Unique Identifier String (field mapped in Step 1)
- List of Slate fields that need to be populated in WebAdMIT custom fields.
- WebAdMIT custom fields are data type sensitive, so it is important to ensure:
- Numeric fields in Slate are mapped to numeric custom fields in WebAdMIT.
- Boolean or bit fields in Slate are mapped to Boolean fields in WebAdMIT. Use TRUE/FALSE as the format type.
- Multiple value fields in Slate can be mapped to string fields or a select-from-list custom fields in WebAdMIT. If using a multi-select field in WebAdMIT, ensure the drop-down values match all possibilities that are derived from Slate.
- String (text) fields in Slate are mapped to string (text) custom fields in WebAdMIT.
- Date fields in Slate are mapped to date custom fields in WebAdMIT. In the Format Mask setting of your field of the Slate query, use yyyy-MM-dd as the date format.
- After the fields have been added to the query, update the export names in Slate as described below. The custom field IDs need to match what you retrieved previously:
- CASID
- Program Unique Identifier String
- Custom Field ID Number
- Your Slate query should look like the example below. The numbers in each field represent the custom field IDs that were retrieved in the section Retrieving the IDs of custom fields in WebAdMIT.
- Set up a schedule to export the query to the Slate SFTP. See the Scheduling Exports Slate Knowledge Base article.
- The script expects a CSV (Comma Separated Format). Set the path to end in .csv without a date parameter, as the script handles this as part of the archiving process.
- The CSV file should contain headers.
- You can add a column to your data mapping document to help cross-reference the Slate fields to the WebAdMIT IDs. See example table, below.
WebAdMIT Field Label |
WebAdMIT Field Type |
WebAdMIT Field ID (Prelaunch) |
WebAdMIT Field ID (Production) |
Slate Fields |
---|---|---|---|---|
Student ID | Numeric | 2271421 | 2571462 | Student ID |
Enrollment Deposit Received | Date | 2117817 | 2581764 | Enrollment Deposit Date |
Campus Visit | Yes/No Value | 2118714 | 2297871 | Campus Visit |
Scholarship/Financial Aid Information | Text Value | 2714171 | 2237848 | Scholarship Financial Aid Information |
School Email Address | Text Value | 2178171 | 2267413 | School Email |
Interview Status | Select From List | 2281917 | 2246458 | Interview Status |
Python Installation
You'll need to install Python on the server that will be hosting the script. To do so:
- Download the software from https://www.python.org/downloads/.
- Download the latest release for Windows (based on whether the server is a 32-bit or 64-bit).
- Once downloaded, run the Python install file as an administrator.
- This opens an installation window:
- Click Customize Installation to display Optional Features:
- Ensure that pip is selected.
- The next page displays advanced installation options:
- Select the path to install Python and click Install.
- Once Python is successfully installed, restart the server.
- Once restarted, navigate to your system environment variables to ensure Python is appended to the end of the PATH variable. If it is not, you will need to add it. The path should be the path to the Python executable, such as C:\Users\username\AppData\Local\Programs\Python\Python310
-
To test that your Python installation was successful and added successfully to your PATH variables, run Command Prompt as an administrator, type python, and hit enter:
- If the response is similar to “Python is not recognized as an internal or external command”, it could mean that the PATH variable is not correctly set up or your Python was not correctly installed.
Editing the Python script
- Download the Python script and config.json file from Integration Help Center and place it on the windows server meant to host the script.
- On the server, create a folder called SlateToWebAdMIT.
- Create a sub-folder called Archive.
- Place the Python script and the config.json file in the SlateToWebAdMIT folder.
- The CSV file from Slate must also be dropped in the SlateToWebAdMIT folder.
- Edit the config.json file in the SlateToWebAdMIT folder using Notepad++ or Notepad and make the following changes:
- Change the api_key value to your API key for prelaunch or production.
- Change the url_link value to prelaunch or production URL.
- Change working_dir to the full directory path of your SlateToWebAdMIT folder. Note that the directory separations use "/".
- Set file_name to the name of the incoming CSV file from Slate.
- Set cycle in the format of “2025 - 2026” depending on the cycle you are working with. Note that this value changes each cycle so will need to be updated.
Creating a Python executable
Next, you'll need to create a Python executable that will run the script. To do so:
- Open Command Prompt as an administrator.
- Run the following command:
pip install pyinstaller
- If you get an error message that pip is not recognized as an internal or external command, this means your Python installation did not include the pip package.
- The article How to Install PIP on Windows provides guidance on installing pip.
- Once installed, type pip –version in Command Prompt to verify if the installation was successful.
- If pip installation was successful, rerun the
pip
install pyinstaller
command.
- Run the following command:
pip install requests
and ensure the requests module gets installed correctly. - If pyinstaller and requests installation was successful, in Command Prompt, navigate to the SlateToWebAdMIT directory.
- Type the following command:
pyinstaller --onefile main.py
and press enter. - This command converts the script into an executable.
- The executable is found in the \SlateToWebAdMIT\dist\ folder.
- Copy the config.json file from the SlateToWebAdMIT folder to \SlateToWebAdMIT\dist\ folder.
Testing the executable
The following should be completed for Slate to prelaunch WebAdMIT:
- Navigate to the \SlateToWebAdMIT\dist\ folder in Windows Explorer and double-click main.exe to open a running Command Prompt window.
- If the Command Prompt window closes immediately after opening, then there is an issue with your Python code or the config.json file. In that case, navigate to the SlateToWebAdMIT\dist folder and check the main.log file. If this file shows HTTP connection errors, this could mean that your API key, URL, or Cycle is incorrect.
- Edit the config.json file to make sure the file name, directory paths, API keys, base URL, and cycle are correct.
- Once verified, run the executable again.
- If the executable continues to run, this means the JSON file is correct.
- Drop a CSV export from Slate to the SlateToWebAdMIT folder. The file will be picked, processed, and archived by the executable.
- Navigate to the Archive folder under SlateToWebAdMIT\Archive folder. You will see a timestamped_yourfilename.csv file.
- Open the file, and you will see HTTP status codes printed in each row.
- The number of status codes printed are equivalent to the number of fields that need to be processed. So, if five fields need to have data loaded to five custom fields in WebAdMIT, then the status codes will be printed five times per row.
- Successful loads have a status code of 200, while unsuccessful loads have a status code of 404. As described below, a status code of 422 may also be present in the file.
- The 404 status code could indicate several issues, including custom fields missing in WebAdMIT, incorrect authentication methods (api_key), or CAS ID not found in WebAdMIT.
- The 422 status code may indicate a mismatch of data types for the field in Slate and custom field in WebAdMIT. It is also the expected status code if the field from the Slate export is null.
- If all rows show a 200 (or 422 for expected null data) for each field, the next step is to check prelaunch WebAdMIT to ensure the data was loaded correctly into corresponding custom fields.
- If the data is not loaded into the correct custom fields, but is present, this means that the order of the fields in your Slate export is incorrect.
- If the data is correctly loaded to the WebAdMIT custom fields, then close the running executable command prompt window and delete the archived file.
Setting the Python Executable as a Windows Service
To keep the script running indefinitely, the following steps are required to set up the Python executable as a windows service. For this purpose, you'll need to install a tool called NSSM (Non-Sucking Service Manager).
- On your web browser on the Windows server meant to host the script, navigate to https://nssm.cc/download
- Download the latest release of NSSM which is nssm 2.24.
- This should download a zip file called nssm-2.24.zip.
- Extract the zip file in the SlateToWebAdMIT folder.
- Open Command Prompt as an administrator, and within Command Prompt, navigate to SlateToWebAdMIT\nssm-2.24\win64 (or win32, depending on your windows server).
- Run the following command by replacing the paths to your python executable and python (.py) file:
nssm install "SlateToWebAdMIT" "PathTo\SlateToWebAdMIT\dist\main.exe" "PathTo\SlateToWebAdMIT\main.py"
- If the service is successfully installed, it displays the following message in command prompt: Service "SlateToWebAdMIT" installed successfully!
- Open services.msc in Windows as an admin and locate the SlateToWebAdMIT service.
- Start the SlateToWebAdMIT service.
Testing the SlateToWebAdMIT Service
- To test the service, navigate to Testing the executable and perform steps 6 to 14.
- If the test is successful, then stop the SlateToWebAdMIT service in services.msc and make sure to delete the archived file.
- After all testing is completed and preparations are being made to move to production then perform the following steps to remove the service:
- Open Command Prompt as an administrator, and within Command Prompt navigate to SlateToWebAdMIT\nssm-2.24\win64 (or win32 depending on your Windows server).
- Run the following in Command Prompt:
nssm remove “SlateToWebAdMIT”
- A dialog box will open to ask if you want to remove the service, click yes, and it should say the service was successfully removed.
- Open services.msc as an admin and refresh the services to ensure the SlateToWebAdMIT service is not in the list of services.
Moving the Script to Production
- If all testing has been completed in the prelaunch environments, then it is time to prepare the script for production use.
- Navigate to the SlateToWebAdMIT folder in Windows Explorer.
- Delete the following file and folders:
- Build folder.
- Dist folder.
- Main.spec file.
- Edit the config.json file found in the SlateToWebAdMIT folder.
- In the file, change the API key, URL, and cycle to production values.
- Save the file.
- Perform the steps found in Creating a Python executable section.
- Perform the steps found in Setting the Python executable as a Windows Service section.
- Start the SlateToWebAdMIT service.
- Have Slate drop a CSV file to the SlateToWebAdMIT folder.
- Check the archived file for status codes for a successful load.
Cycle Over Cycle Changes
To maintain this process from cycle to cycle, complete these steps:
- Cycle over cycle, review your custom fields in WebAdMIT and make note of any new custom fields that need to be added.
- Update the custo field IDs following the steps in Retrieving Custom Field IDs in WebAdMIT and configure your Slate export to match accordingly.
- If a new export is created in Slate each cycle, then make sure the new export is configured to deliver files to SFTP and is named the same as the previous one. If the file name needs to change, make note of the new filename.
- Stop the SlateToWebAdMIT service.
- Edit the config.json file in your SlateToWebAdMIT and SlateToWebAdMIT\dist folders.
- Update the filename if you plan to use a new filename for the new cycle in the config.json file.
- Update the cycle to correspond with the new cycle in the config.json file.
- If you plan to use a new WebAdMIT user for the new cycle, change the API key and cycle in the config.json file.
- Save the config.json file in the SlateToWebAdMIT and \SlateToWebAdMIT\dist folders with the changes.
- Start the SlateToWebAdMIT service.
Special Considerations
- If you have multiple CASs that require custom fields to be updated in WebAdMIT, then you will need one version of the script and config.json file per CAS.
- If your CAS cycles overlap, you will need two versions of this process per CAS cycle. Once the previous cycle ends, make sure to stop and delete the service.