diff --git a/smash/smash/settings.py b/smash/smash/settings.py
index fbdd6e22c2d3175ec692b63332269d03b3ba4e29..86456861f9b30ff0d43c6dcf224ec70038765597 100644
--- a/smash/smash/settings.py
+++ b/smash/smash/settings.py
@@ -71,7 +71,8 @@ TEMPLATES = [
 ]
 
 CRON_CLASSES = [
-    'web.views.kit.KitRequestEmailSendJob'
+    'web.views.kit.KitRequestEmailSendJob',
+    'web.redcap_connector.RedCapRefreshJob'
 ]
 
 # Password validation
diff --git a/smash/web/redcap_connector.py b/smash/web/redcap_connector.py
index 706c4e192574b1f42f902e2b6f41ae376b8d6447..6cc2cc1179af478f0abf9f45bf66a4287c4f7517 100644
--- a/smash/web/redcap_connector.py
+++ b/smash/web/redcap_connector.py
@@ -5,6 +5,7 @@ import logging
 import pycurl
 
 import certifi
+from django_cron import CronJobBase, Schedule
 
 from web.models import ConfigurationItem, Subject, Language
 from web.models.constants import REDCAP_TOKEN_CONFIGURATION_TYPE, \
@@ -302,3 +303,21 @@ class RedcapConnector(object):
             return False
 
         return True
+
+
+class RedCapRefreshJob(CronJobBase):
+    RUN_EVERY_MINUTES = 60
+    schedule = Schedule(run_every_mins=RUN_EVERY_MINUTES)
+    code = 'web.red_cap_hourly_refresh'  # a unique code
+
+    def do(self):
+        connector = RedcapConnector()
+        if connector.is_valid():
+            logger.info("Refreshing redcap data")
+            connector.refresh_inconsistent()
+            connector.refresh_missing()
+            logger.info("Redcap data refreshed")
+            return "ok"
+        else:
+            logger.info("Redcap connector is down")
+            return "connector down"