diff --git a/.gitignore b/.gitignore
index fe6b2ed34291ab03f55a5a57ec13dfe3954c0377..45c723e1bb173b996282651d85dad658aea01ebf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,6 +12,7 @@
 node_modules/
 /npm-debug.log
 /.idea/
+salesforce.py
 
 # Distribution / packaging
 .Python
diff --git a/docker/Dockerfile.dev b/docker/Dockerfile.dev
index 3e593bbde5cebb3ea7ee4072c344f348a999cc17..587a757e4fdcc1de1d86dafa84bd8a78f2a85e4c 100644
--- a/docker/Dockerfile.dev
+++ b/docker/Dockerfile.dev
@@ -9,6 +9,7 @@ ENV DATABASE_URL postgres://hypha:hypha@db:5432/hypha
 ENV DJANGO_SETTINGS_MODULE hypha.settings.dev
 ENV PYTHONDONTWRITEBYTECODE 1
 ENV PYTHONUNBUFFERED 1
+ENV SALESFORCE_INTEGRATION 1
 
 # Set owner on /usr/local.
 RUN sudo chown -R circleci:circleci /usr/local
diff --git a/hypha/settings/base.py b/hypha/settings/base.py
index 55956fa8407d8afd826f96d95e2518c873f2417a..08bdafd94a5acd8a558c12bfd1a53b8082c878a1 100644
--- a/hypha/settings/base.py
+++ b/hypha/settings/base.py
@@ -136,6 +136,8 @@ INSTALLED_APPS = [
     'pagedown',
     'webpack_loader',
 
+    'salesforce',
+
     'django.contrib.admin',
     'django.contrib.auth',
     'django.contrib.contenttypes',
diff --git a/hypha/settings/dev.py b/hypha/settings/dev.py
index 76926f9bfdb265e2ec1502f394837e728379d8ff..f4a4f3fbb009b1072e9d554de2ac352e3dcf6df8 100644
--- a/hypha/settings/dev.py
+++ b/hypha/settings/dev.py
@@ -145,3 +145,11 @@ DEBUG_TOOLBAR_CONFIG = {
 WEBPACK_LOADER['DEFAULT'].update({
     'STATS_FILE': os.path.join(BASE_DIR, './hypha/static_compiled/app/webpack-stats.json'),
 })
+
+# Salesforce Integration
+if 'SALESFORCE_INTEGRATION' in env and env['SALESFORCE_INTEGRATION']:
+    try:
+        from .salesforce import *
+    except ImportError:
+        pass
+    DATABASES.update(SALESFORCE_DB)
diff --git a/hypha/settings/production.py b/hypha/settings/production.py
index 1c4a980951b00ae54b20a33ead879e7bc50123b1..4111cec135e44adf768eac12085feadc6f03f78f 100644
--- a/hypha/settings/production.py
+++ b/hypha/settings/production.py
@@ -39,3 +39,11 @@ if 'SENTRY_DSN' in env:
 if 'ON_HEROKU' in env:
     import django_heroku
     django_heroku.settings(locals())
+
+# Salesforce Integration
+if 'SALESFORCE_INTEGRATION' in env and env['SALESFORCE_INTEGRATION']:
+    try:
+        from .salesforce import *
+    except ImportError:
+        pass
+    DATABASES.update(SALESFORCE_DB)
diff --git a/hypha/settings/salesforce.py.example b/hypha/settings/salesforce.py.example
new file mode 100644
index 0000000000000000000000000000000000000000..63bdb82ce5adac5d752628d7a9c11d2be3e383dc
--- /dev/null
+++ b/hypha/settings/salesforce.py.example
@@ -0,0 +1,14 @@
+SALESFORCE_DB = {
+    'ENGINE': 'salesforce.backend',
+    'CONSUMER_KEY': 'Consumer Key from Salesforce App',
+    'CONSUMER_SECRET': 'Consumer Secret from Salesforce APP',
+    'USER': 'user@email.com',
+    'PASSWORD': 'Password and security token concatenated',
+    'HOST': 'https://login.salesforce.com' # Or test or URL of salesforce org
+}
+
+SALESFORCE_QUERY_TIMEOUT = (30, 30)  # (connect timeout, data timeout)
+
+DATABASE_ROUTERS = [
+    "salesforce.router.ModelRouter"
+]
diff --git a/hypha/settings/test.py b/hypha/settings/test.py
index 610dc3b03352a6d17bfd0d2b6365675a515d929b..cac29f9a76b3bb16c2af6e396aa9bf4e0c1a0bf9 100644
--- a/hypha/settings/test.py
+++ b/hypha/settings/test.py
@@ -17,3 +17,11 @@ STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
 PASSWORD_HASHERS = [
     'django.contrib.auth.hashers.MD5PasswordHasher',
 ]
+
+# Salesforce Integration
+if 'SALESFORCE_INTEGRATION' in env and env['SALESFORCE_INTEGRATION']:
+    try:
+        from .salesforce import *
+    except ImportError:
+        pass
+    DATABASES.update(SALESFORCE_DB)
diff --git a/requirements.txt b/requirements.txt
index 85d1695a6ac5fcd6a696fa82cca091068767b04e..d5ef048c775800f7d1fd5ee43d369fb97b876742 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -41,3 +41,4 @@ tomd==0.1.3
 wagtail==2.9
 wagtail-cache==1.0.0
 whitenoise==5.1.0
+django-salesforce==1.0