diff --git a/.gitignore b/.gitignore
index 38883e4..8c5ce73 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,7 +22,6 @@
 !xos/core/static/xos.css
 .DS_Store
 xos/configurations/setup/
-migrations/
 onboarding-docker-compose/
 key_import/
 *.retry
diff --git a/xos/core/migrations/.gitignore b/xos/core/migrations/.gitignore
new file mode 100644
index 0000000..68e8e0f
--- /dev/null
+++ b/xos/core/migrations/.gitignore
@@ -0,0 +1,2 @@
+*
+!0002_initial_data.py
\ No newline at end of file
diff --git a/xos/core/migrations/0002_initial_data.py b/xos/core/migrations/0002_initial_data.py
new file mode 100644
index 0000000..6198806
--- /dev/null
+++ b/xos/core/migrations/0002_initial_data.py
@@ -0,0 +1,73 @@
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import os
+import yaml
+from django.db import models, migrations
+from django.contrib.auth.hashers import make_password
+
+FIXTURES = os.path.abspath(os.path.dirname(os.path.realpath(__file__)) + '/initial_data.yaml')
+
+def load_data_from_yaml():
+    file = open(FIXTURES, 'r').read()
+    try:
+        data = yaml.load(file)
+        return data
+    except Exception, e:
+        raise Exception("Cannot load inital data file: %s" % e.message)
+
+
+def persist_data(apps, schema_editor):
+
+    data = load_data_from_yaml()
+
+    # iterate over the data
+    for entry in data:
+
+        # retrieve the class for that model
+        [app, model_name] = entry['model'].split('.')
+        model_class = apps.get_model(app, model_name)
+
+        # create a new instance for that model
+        i = model_class(**entry['fields'])
+
+        # if model is user hash the password
+        if model_name == "User":
+            i.password = make_password(entry['fields']['password'])
+
+        # check relations
+        if 'relations' in entry:
+            for (r_name, r) in entry['relations'].items():
+                # retrieve the related model
+                [r_app, r_model_name] = r['model'].split('.')
+                related_model_class = apps.get_model(r_app, r_model_name)
+                r_model = related_model_class.objects.get(**r['fields'])
+
+                # assign relation
+                setattr(i, r_name, r_model)
+
+        # save the instance
+        i.save()
+        print "Created %s: %s" % (model_name, entry['fields'])
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.RunPython(persist_data)
+    ]
\ No newline at end of file
diff --git a/xos/coreapi/start_coreapi.sh b/xos/coreapi/start_coreapi.sh
index 580a295..5b8a78f 100755
--- a/xos/coreapi/start_coreapi.sh
+++ b/xos/coreapi/start_coreapi.sh
@@ -15,9 +15,16 @@
 # limitations under the License.
 
 
+# seed initial data in the db
+bash /opt/xos/tools/xos-manage makemigrations
+python /opt/xos/manage.py migrate;
+
+# build protobuf
 cd protos
 make rebuild-protos
 make
+
+# start the grpc server
 cd ..
 source env.sh
 python ./core_main.py
diff --git a/xos/tools/xos-manage b/xos/tools/xos-manage
index 363b00c..50b152b 100755
--- a/xos/tools/xos-manage
+++ b/xos/tools/xos-manage
@@ -138,7 +138,9 @@
 }
 
 function makemigrations {
+    cp /opt/xos/core/migrations/0002_initial_data.py /opt/xos/0002_initial_data.py # HACK to save 0002_initial_data.py
     rm -rf /opt/xos/*/migrations /opt/xos/services/*/migrations
+    cp /opt/xos/0002_initial_data.py /opt/xos/core/migrations/0002_initial_data.py # HACK to restore 0002_initial_data.py
     python ./manage.py makemigrations core
     python ./manage.py makemigrations syndicate_storage
 
