diff --git a/gracedb/events/migrations/0038_pipeline_pipeline_type.py b/gracedb/events/migrations/0038_pipeline_pipeline_type.py
new file mode 100644
index 0000000000000000000000000000000000000000..8e0d9f4190c72b6100b9f2d8b7fe38b319132acf
--- /dev/null
+++ b/gracedb/events/migrations/0038_pipeline_pipeline_type.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.20 on 2019-07-10 19:34
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('events', '0037_delete_approval_model'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='pipeline',
+            name='pipeline_type',
+            field=models.CharField(choices=[(b'E', b'external'), (b'O', b'other'), (b'SO', b'non-production search'), (b'SP', b'production search')], default='O', max_length=2),
+            preserve_default=False,
+        ),
+    ]
diff --git a/gracedb/events/migrations/0039_specify_pipeline_types.py b/gracedb/events/migrations/0039_specify_pipeline_types.py
new file mode 100644
index 0000000000000000000000000000000000000000..5ac894da44b56c68313c1b5bbc5b5de177dc83b3
--- /dev/null
+++ b/gracedb/events/migrations/0039_specify_pipeline_types.py
@@ -0,0 +1,55 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.20 on 2019-07-10 19:34
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+from events.models import Pipeline as pipeline_model
+
+PIPELINES = [
+    ('CWB', pipeline_model.PIPELINE_TYPE_SEARCH_PRODUCTION),
+    ('MBTAOnline', pipeline_model.PIPELINE_TYPE_SEARCH_PRODUCTION),
+    ('gstlal', pipeline_model.PIPELINE_TYPE_SEARCH_PRODUCTION),
+    ('oLIB', pipeline_model.PIPELINE_TYPE_SEARCH_PRODUCTION),
+    ('pycbc', pipeline_model.PIPELINE_TYPE_SEARCH_PRODUCTION),
+    ('spiir', pipeline_model.PIPELINE_TYPE_SEARCH_PRODUCTION),
+    ('CWB2G', pipeline_model.PIPELINE_TYPE_SEARCH_OTHER),
+    ('Ringdown', pipeline_model.PIPELINE_TYPE_SEARCH_OTHER),
+    ('X', pipeline_model.PIPELINE_TYPE_SEARCH_OTHER),
+    ('HardwareInjection', pipeline_model.PIPELINE_TYPE_OTHER),
+    ('Omega', pipeline_model.PIPELINE_TYPE_OTHER),
+    ('Q', pipeline_model.PIPELINE_TYPE_OTHER),
+    ('Fermi', pipeline_model.PIPELINE_TYPE_EXTERNAL),
+    ('SNEWS', pipeline_model.PIPELINE_TYPE_EXTERNAL),
+    ('Swift', pipeline_model.PIPELINE_TYPE_EXTERNAL),
+]
+
+DEFAULT_PIPELINE_TYPE = pipeline_model.PIPELINE_TYPE_OTHER
+
+def update_pipeline_types(apps, schema_editor):
+    Pipeline = apps.get_model('events', 'Pipeline')
+
+    for p_tuple in PIPELINES:
+        p = Pipeline.objects.get(name=p_tuple[0])
+        p.pipeline_type = p_tuple[1]
+        p.save(update_fields=['pipeline_type'])
+
+
+def revert_pipeline_types(apps, schema_editor):
+    Pipeline = apps.get_model('events', 'Pipeline')
+
+    for p_tuple in PIPELINES:
+        p = Pipeline.objects.get(name=p_tuple[0])
+        p.pipeline_type = DEFAULT_PIPELINE_TYPE
+        p.save(update_fields=['pipeline_type'])
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('events', '0038_pipeline_pipeline_type'),
+    ]
+
+    operations = [
+        migrations.RunPython(update_pipeline_types, revert_pipeline_types),
+    ]
diff --git a/gracedb/events/models.py b/gracedb/events/models.py
index 7d7ddf8de230eeb83da786ce28ce37b3921261a5..528174a68f1adf8fa4aa1ab14d47e5774f570d24 100644
--- a/gracedb/events/models.py
+++ b/gracedb/events/models.py
@@ -65,14 +65,30 @@ class Group(models.Model):
     def __unicode__(self):
         return self.name
 
+
 class Pipeline(models.Model):
+    PIPELINE_TYPE_EXTERNAL = 'E'
+    PIPELINE_TYPE_OTHER = 'O'
+    PIPELINE_TYPE_SEARCH_OTHER = 'SO'
+    PIPELINE_TYPE_SEARCH_PRODUCTION = 'SP'
+    PIPELINE_TYPE_CHOICES = (
+        (PIPELINE_TYPE_EXTERNAL, 'external'),
+        (PIPELINE_TYPE_OTHER, 'other'),
+        (PIPELINE_TYPE_SEARCH_OTHER, 'non-production search'),
+        (PIPELINE_TYPE_SEARCH_PRODUCTION, 'production search'),
+    )
     name = models.CharField(max_length=100)
+    # Are submissions allowed for this pipeline?
     enabled = models.BooleanField(default=True)
-    # XXX Need any additional fields? Like a librarian email? Or perhaps even fk?
+    # Pipeline type
+    pipeline_type = models.CharField(max_length=2,
+        choices=PIPELINE_TYPE_CHOICES)
+
     class Meta:
         permissions = (
             ('manage_pipeline', 'Can enable or disable pipeline'),
         )
+
     def __unicode__(self):
         return self.name