diff --git a/changelog.md b/changelog.md
index 65594512b..deee53e83 100644
--- a/changelog.md
+++ b/changelog.md
@@ -24,6 +24,7 @@
   instead.
 * Fixed error when the select row modal is closed immediately after opening.
 * Add footer aggregations to grid view
+* Hide "Export view" button if there is no valid exporter available
 
 ## Released (2022-01-13 1.8.2)
 
diff --git a/web-frontend/modules/database/components/export/ExportTableForm.vue b/web-frontend/modules/database/components/export/ExportTableForm.vue
index 4bc46ed48..4af744caf 100644
--- a/web-frontend/modules/database/components/export/ExportTableForm.vue
+++ b/web-frontend/modules/database/components/export/ExportTableForm.vue
@@ -38,6 +38,7 @@
 import { required } from 'vuelidate/lib/validators'
 
 import form from '@baserow/modules/core/mixins/form'
+import viewTypeHasExporterTypes from '@baserow/modules/database/utils/viewTypeHasExporterTypes'
 
 import ExportTableDropdown from '@baserow/modules/database/components/export/ExportTableDropdown'
 import ExporterTypeChoices from '@baserow/modules/database/components/export/ExporterTypeChoices'
@@ -79,7 +80,7 @@ export default {
   computed: {
     viewsWithExporterTypes() {
       return this.views.filter((view) =>
-        this.viewTypeHasExporterTypes(view.type)
+        viewTypeHasExporterTypes(view.type, this.$registry)
       )
     },
     selectedView() {
@@ -128,16 +129,5 @@ export default {
       exporter_type: { required },
     },
   },
-  methods: {
-    viewTypeHasExporterTypes(viewType) {
-      const exporters = Object.values(this.$registry.getAll('exporter'))
-      for (let i = 0; i < exporters.length; i++) {
-        if (exporters[i].getSupportedViews().includes(viewType)) {
-          return true
-        }
-      }
-      return false
-    },
-  },
 }
 </script>
diff --git a/web-frontend/modules/database/components/view/ViewContext.vue b/web-frontend/modules/database/components/view/ViewContext.vue
index 02e525879..23f3d7d40 100644
--- a/web-frontend/modules/database/components/view/ViewContext.vue
+++ b/web-frontend/modules/database/components/view/ViewContext.vue
@@ -1,7 +1,7 @@
 <template>
   <Context ref="context">
     <ul class="context__menu">
-      <li>
+      <li v-if="hasValidExporter">
         <a @click="exportView()">
           <i class="context__menu-icon fas fa-fw fa-file-export"></i>
           {{ $t('viewContext.exportView') }}
@@ -34,6 +34,8 @@
 
 <script>
 import context from '@baserow/modules/core/mixins/context'
+import viewTypeHasExporterTypes from '@baserow/modules/database/utils/viewTypeHasExporterTypes'
+
 import ExportTableModal from '@baserow/modules/database/components/export/ExportTableModal'
 import DeleteViewModal from './DeleteViewModal'
 import WebhookModal from '@baserow/modules/database/components/webhook/WebhookModal.vue'
@@ -52,6 +54,11 @@ export default {
       required: true,
     },
   },
+  computed: {
+    hasValidExporter() {
+      return viewTypeHasExporterTypes(this.view.type, this.$registry)
+    },
+  },
   methods: {
     setLoading(view, value) {
       this.$store.dispatch('view/setItemLoading', { view, value })
diff --git a/web-frontend/modules/database/utils/viewTypeHasExporterTypes.js b/web-frontend/modules/database/utils/viewTypeHasExporterTypes.js
new file mode 100644
index 000000000..580000a60
--- /dev/null
+++ b/web-frontend/modules/database/utils/viewTypeHasExporterTypes.js
@@ -0,0 +1,12 @@
+/**
+ * Check if the view of type viewType has at least a valid exporter.
+ */
+export default function (viewType, registry) {
+  const exporters = Object.values(registry.getAll('exporter'))
+  for (let i = 0; i < exporters.length; i++) {
+    if (exporters[i].getSupportedViews().includes(viewType)) {
+      return true
+    }
+  }
+  return false
+}