diff --git a/synapse/push/pusherpool.py b/synapse/push/pusherpool.py
index 58fe6ad747b17775060d3ce4006c75d708bc83f6..571d8b2f822b6d631b634cd722c708f83676b492 100644
--- a/synapse/push/pusherpool.py
+++ b/synapse/push/pusherpool.py
@@ -170,7 +170,11 @@ class PusherPool:
     def _start_pushers(self, pushers):
         logger.info("Starting %d pushers", len(pushers))
         for pusherdict in pushers:
-            p = self._create_pusher(pusherdict)
+            try:
+                p = self._create_pusher(pusherdict)
+            except PusherConfigException:
+                logger.exception("Couldn't start a pusher: caught PusherConfigException")
+                continue
             if p:
                 fullid = "%s:%s:%s" % (
                     pusherdict['app_id'],
diff --git a/synapse/storage/pusher.py b/synapse/storage/pusher.py
index 2582a1da661b1a23569da7c8d9c32a2cbcbdb300..feb2870dfee55759604c359deb9fbfd6c1daf21e 100644
--- a/synapse/storage/pusher.py
+++ b/synapse/storage/pusher.py
@@ -21,6 +21,7 @@ from synapse.api.errors import StoreError
 from syutil.jsonutil import encode_canonical_json
 
 import logging
+import simplejson as json
 
 logger = logging.getLogger(__name__)
 
@@ -48,6 +49,14 @@ class PusherStore(SQLBaseStore):
         )
 
         rows = yield self._execute_and_decode("get_all_pushers", sql)
+        for r in rows:
+            dataJson = r['data']
+            r['data'] = None
+            try:
+                r['data'] = json.loads(dataJson)
+            except:
+                logger.warn("Invalid JSON in data for pusher %d: %s", r['id'], dataJson)
+                pass
 
         defer.returnValue(rows)