diff --git a/opentech/public/news/feeds.py b/opentech/public/news/feeds.py
index ae79a1ee652ea8aa88e068fcb1460bdd1e44405d..b8cb442c8123fec60dcce7e872ed48662211fd31 100644
--- a/opentech/public/news/feeds.py
+++ b/opentech/public/news/feeds.py
@@ -1,4 +1,6 @@
+from django.conf import settings
 from django.contrib.syndication.views import Feed
+from django.core.cache import cache
 from django.db.models.functions import Coalesce
 from django.http import Http404
 
@@ -14,7 +16,21 @@ class NewsFeed(Feed):
         except Site.DoesNotExist:
             raise Http404
         self.news_feed_settings = NewsFeedSettings.for_site(site=self.site)
-        return super().__call__(request, *args, **kwargs)
+
+        cache_key = self.get_cache_key(*args, **kwargs)
+        response = cache.get(cache_key)
+
+        if response is None:
+            response = super().__call__(request, *args, **kwargs)
+            cache.set(cache_key, response, settings.FEED_CACHE_TIMEOUT)
+
+        return response
+
+    def get_cache_key(self, *args, **kwargs):
+        tag = ''
+        for key, value in kwargs.items():
+            tag += f"-{key}-{value}"
+        return f"{self.__class__.__module__}{tag}"
 
     def title(self):
         return self.news_feed_settings.news_title
@@ -56,7 +72,7 @@ class NewsTypeFeed(NewsFeed):
     def link(self, obj):
         news_index = NewsIndex.objects.live().public().first()
         if news_index:
-            return news_index.full_url + '?news_type={}'.format(obj.id)
+            return f"{news_index.full_url}?news_type={obj.id}"
         return self.site.root_url
 
     def items(self, obj):
diff --git a/opentech/settings/base.py b/opentech/settings/base.py
index 3cd070b03e2cbf966a8522acd4bff4b995710a42..bef78cd4291e5fbeb0cb6f331de95aaaaa24a279 100644
--- a/opentech/settings/base.py
+++ b/opentech/settings/base.py
@@ -214,6 +214,9 @@ except ValueError:
 # Set wagtail cache timeout (automatic cache refresh).
 WAGTAIL_CACHE_TIMEOUT = CACHE_CONTROL_MAX_AGE
 
+# Set feed cache timeout (automatic cache refresh).
+FEED_CACHE_TIMEOUT = 600
+
 if 'REDIS_URL' in env:
     CACHES = {
         "default": {