diff --git a/script_git_for_groups.py b/script_git_for_groups.py
new file mode 100755
index 0000000000000000000000000000000000000000..e34eb23969417d38e2812bfb5025914b31632649
--- /dev/null
+++ b/script_git_for_groups.py
@@ -0,0 +1,122 @@
+#!/usr/bin/python3
+
+import requests as r
+import json as j
+import sys as s
+
+SECRET_KEY = None # Supply in arguments
+BASE_URL = 'https://gitlab.cs.umd.edu/'
+
+GROUP_ID = 4092 #FILL IN
+
+DEFAULT_HEADERS = {
+	'user-agent': 'bulk-repo-create',
+	'Content-Type': 'application/json',
+	'Private-Token' : SECRET_KEY
+}
+
+def id_from_name (name):
+	rq = r.get (
+		BASE_URL + "api/v4/users/",
+		headers = DEFAULT_HEADERS,
+		params = {
+			'username' : name
+		}
+	)
+	res = j.loads(rq.text)
+	if type(res) == list:
+		if len(res) == 0:
+			return None
+		else:
+			return res[0]['id']
+	else:
+		raise TypeError
+
+# Returns project id, or none if project cannot be created
+def create_project (proj_name):
+	rq = r.post (
+		BASE_URL + "api/v4/projects/",
+		headers = DEFAULT_HEADERS,
+		data = j.dumps(
+			{
+				'name' : proj_name,
+				'visibility' : 'private'
+			}
+		)
+	)
+	res = j.loads(rq.text)
+	try:
+		return res['id']
+	except KeyError:
+		return None
+
+# adds user with user_id to project with project_id with permission permission
+# 30 for developer 40 for maintainer
+# return true if successful false if not
+def add_to_project(project_id, user_id, permission):
+	rq = r.post (
+		BASE_URL + "api/v4/projects/" + str(project_id) + "/members",
+		headers = DEFAULT_HEADERS,
+		data = j.dumps(
+			{
+				'id' : project_id,
+				'user_id' : user_id,
+				'access_level': permission #Developer
+			}
+		)
+	)
+	res = j.loads(rq.text)
+	try:
+		return res['id'] == user_id
+	except KeyError:
+		return False
+
+def transfer_to_group(project_id, group_id):
+	rq = r.put (
+		BASE_URL + "api/v4/projects/" + str(project_id) + "/transfer",
+		headers = DEFAULT_HEADERS,
+		data = j.dumps(
+			{
+				'namespace' : group_id
+			}
+		)
+	)
+	res = j.loads(rq.text)
+	try:
+		return res['id'] == project_id
+	except KeyError:
+		return False
+
+if __name__ == "__main__":
+	if len(s.argv) != 4:
+		print("Usage: <input list> <output list> <secret key>")
+	else:
+		SECRET_KEY = s.argv[3]
+		DEFAULT_HEADERS['Private-Token'] = SECRET_KEY
+		f = open(s.argv[1], 'r')
+		groups = f.readlines()
+		f.close()
+		
+		f = open(s.argv[2], 'w')
+		
+		group_num = 1
+
+		for group in groups:
+			names = group.split(",")
+			# create project
+			proj_id = create_project("cmsc417-s2020-group" + str(group_num))
+			# transfer project to group
+			transfer_to_group(proj_id, GROUP_ID)
+			print(names)
+			for name in names:
+				# add name to project
+				correct_name = name.strip()
+				print(correct_name)
+				name_id = id_from_name(correct_name)
+				if (name_id == None):
+					f.write(correct_name + "\n")
+				else:
+					if not add_to_project(proj_id, name_id, 30):
+						f.write(correct_name + "\n")
+			group_num += 1
+		f.close()