diff --git a/django/core/management/commands/syncdb.py b/django/core/management/commands/syncdb.py
--- a/django/core/management/commands/syncdb.py
+++ b/django/core/management/commands/syncdb.py
@@ -5,7 +5,7 @@
 from django.conf import settings
 from django.core.management.base import NoArgsCommand
 from django.core.management.color import no_style
-from django.core.management.sql import custom_sql_for_model, emit_post_sync_signal
+from django.core.management.sql import custom_sql_for_model, emit_post_sync_signal, emit_pre_sync_signal
 from django.db import connections, router, transaction, models, DEFAULT_DB_ALIAS
 from django.utils.datastructures import SortedDict
 from django.utils.importlib import import_module
@@ -54,6 +54,7 @@
 
         db = options.get('database')
         connection = connections[db]
+        emit_pre_sync_signal(verbosity, interactive, db)
         cursor = connection.cursor()
 
         # Get a list of already installed *models* so that references work right.
diff --git a/django/core/management/sql.py b/django/core/management/sql.py
--- a/django/core/management/sql.py
+++ b/django/core/management/sql.py
@@ -178,6 +178,18 @@
     return output
 
 
+def emit_pre_sync_signal(verbosity, interactive, db): 
+    # Emit the pre_sync signal for every application. 
+    for app in models.get_apps(): 
+        app_name = app.__name__.split('.')[-2] 
+        if verbosity >= 2:
+            print "Running pre-sync handlers for application", app_name 
+        models.signals.pre_syncdb.send(sender=app, app=app, 
+                                       verbosity=verbosity,
+                                       interactive=interactive, 
+                                       db=db)
+
+
 def emit_post_sync_signal(created_models, verbosity, interactive, db):
     # Emit the post_sync signal for every application.
     for app in models.get_apps():
@@ -187,3 +199,4 @@
         models.signals.post_syncdb.send(sender=app, app=app,
             created_models=created_models, verbosity=verbosity,
             interactive=interactive, db=db)
+
diff --git a/django/db/models/signals.py b/django/db/models/signals.py
--- a/django/db/models/signals.py
+++ b/django/db/models/signals.py
@@ -11,6 +11,7 @@
 pre_delete = Signal(providing_args=["instance", "using"])
 post_delete = Signal(providing_args=["instance", "using"])
 
+pre_syncdb = Signal(providing_args=["app", "verbosity", "interactive", "db"])
 post_syncdb = Signal(providing_args=["class", "app", "created_models", "verbosity", "interactive"])
 
 m2m_changed = Signal(providing_args=["action", "instance", "reverse", "model", "pk_set", "using"])
diff --git a/tests/regressiontests/syncdb/__init__.py b/tests/regressiontests/syncdb/__init__.py
new file mode 100644
--- /dev/null
+++ b/tests/regressiontests/syncdb/__init__.py
@@ -0,0 +1,1 @@
+
diff --git a/tests/regressiontests/syncdb/models.py b/tests/regressiontests/syncdb/models.py
new file mode 100644
diff --git a/tests/regressiontests/syncdb/tests.py b/tests/regressiontests/syncdb/tests.py
new file mode 100644
--- /dev/null
+++ b/tests/regressiontests/syncdb/tests.py
@@ -0,0 +1,36 @@
+from django.db.models import signals
+from django.dispatch import receiver
+from django.test import TestCase
+from django.core import management
+
+import models
+
+
+PRE_SYNCDB_ARGS = ['app', 'verbosity', 'interactive', 'db']
+SYNCDB_VERBOSITY = 1
+SYNCDB_INTERACTIVE = False
+
+
+class PreSyncdbReceiver(object):
+    def __init__(self):
+        self.run_counter = 0
+        self.args = None
+
+    def __call__(self, signal, sender, **kwargs):
+        self.run_counter = self.run_counter + 1
+        self.args = kwargs
+
+
+class SyncdbSignalTests(TestCase):
+    def test_pre_syncdb_signal(self):
+        r = PreSyncdbReceiver()
+        signals.pre_syncdb.connect(r, sender=models)
+        management.call_command('syncdb', verbosity=SYNCDB_VERBOSITY, 
+                                interactive=SYNCDB_INTERACTIVE)
+
+        self.assertEqual(r.run_counter, 1)
+        self.assertItemsEqual(r.args, PRE_SYNCDB_ARGS)
+        self.assertEqual(r.args['app'], models)
+        self.assertEqual(r.args['verbosity'], SYNCDB_VERBOSITY)
+        self.assertEqual(r.args['interactive'], SYNCDB_INTERACTIVE)
+        self.assertEqual(r.args['db'], 'default')
