diff --git a/opentech/apply/users/groups.py b/opentech/apply/users/groups.py
index 42a49daa26f41ef5674bb083df6a342098fb35d2..a3e7bbe881d062c04a225103d1446362cc84cdc9 100644
--- a/opentech/apply/users/groups.py
+++ b/opentech/apply/users/groups.py
@@ -1,5 +1,7 @@
 STAFF_GROUP_NAME = 'Staff'
 REVIEWER_GROUP_NAME = 'Reviewer'
+TEAMADMIN_GROUP_NAME = 'Team Admin'
+PARTNER_GROUP_NAME = 'Partner'
 
 GROUPS = [
     {
@@ -10,4 +12,12 @@ GROUPS = [
         'name': STAFF_GROUP_NAME,
         'permissions': [],
     },
+    {
+        'name': TEAMADMIN_GROUP_NAME,
+        'permissions': [],
+    },
+    {
+        'name': PARTNER_GROUP_NAME,
+        'permissions': [],
+    },
 ]
diff --git a/opentech/apply/users/migrations/0008_add_partner_group.py b/opentech/apply/users/migrations/0008_add_partner_group.py
new file mode 100644
index 0000000000000000000000000000000000000000..c639f4918461ad467cc7202cd6ba9ef99e919d5d
--- /dev/null
+++ b/opentech/apply/users/migrations/0008_add_partner_group.py
@@ -0,0 +1,42 @@
+
+# Generated by Django 2.0.9 on 2018-12-19 13:21
+from __future__ import unicode_literals
+
+from django.core.exceptions import ObjectDoesNotExist
+from django.core.management.sql import emit_post_migrate_signal
+from django.db import migrations
+
+from opentech.apply.users.groups import GROUPS, TEAMADMIN_GROUP_NAME, PARTNER_GROUP_NAME
+
+
+def add_groups(apps, schema_editor):
+    # Workaround for https://code.djangoproject.com/ticket/23422
+    db_alias = schema_editor.connection.alias
+    emit_post_migrate_signal(2, False, db_alias)
+
+    Group = apps.get_model('auth.Group')
+    Permission = apps.get_model('auth.Permission')
+
+    for group_data in GROUPS:
+        group, created = Group.objects.get_or_create(name=group_data['name'])
+        for permission in group_data['permissions']:
+            try:
+                group.permissions.add(Permission.objects.get(codename=permission))
+            except ObjectDoesNotExist:
+                print("Could not find the '%s' permission" % permission)
+
+
+def remove_groups(apps, schema_editor):
+    Group = apps.get_model('auth.Group')
+    Group.objects.filter(name__in=[TEAMADMIN_GROUP_NAME, PARTNER_GROUP_NAME]).delete()
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('users', '0007_user_slack'),
+    ]
+
+    operations = [
+        migrations.RunPython(add_groups, remove_groups)
+    ]