diff --git a/lib/manager/terraform/__fixtures__/helm.tf b/lib/manager/terraform/__fixtures__/helm.tf
new file mode 100644
index 0000000000000000000000000000000000000000..01d0dd84f7c28e8781c9702a2838d583ed37ac88
--- /dev/null
+++ b/lib/manager/terraform/__fixtures__/helm.tf
@@ -0,0 +1,40 @@
+# legit use cases
+## complete example
+resource "helm_release" "example" {
+  name       = "my-redis-release"
+  repository = "https://kubernetes-charts.storage.googleapis.com"
+  chart      = "redis"
+  version    = "1.0.1"
+}
+
+## example without version, this will default to latest in Terraform
+resource "helm_release" "example" {
+  name       = "my-redis-release"
+  repository = "https://kubernetes-charts.storage.googleapis.com"
+  chart      = "redis"
+}
+
+## local chart
+resource "helm_release" "local" {
+  name       = "my-local-chart"
+  chart      = "./charts/example"
+}
+
+## malformed examples
+resource "helm_release" "example" {
+  name       = "my-redis-release"
+  repository = "https://kubernetes-charts.storage.googleapis.com"
+  version    = "4.0.1"
+}
+
+resource "helm_release" "example" {
+  repository = "https://kubernetes-charts.storage.googleapis.com"
+  chart      = "redis"
+  version    = "5.0.1"
+}
+
+resource "helm_release" "example" {
+  name       = "my-redis-release"
+  chart      = "redis"
+  version    = "6.0.1"
+}
diff --git a/lib/manager/terraform/__snapshots__/extract.spec.ts.snap b/lib/manager/terraform/__snapshots__/extract.spec.ts.snap
index e61646a6faa8bd32270bc5c72c5923f40fcbda87..2d3476bb07532466504edd6108d089dba3d277a3 100644
--- a/lib/manager/terraform/__snapshots__/extract.spec.ts.snap
+++ b/lib/manager/terraform/__snapshots__/extract.spec.ts.snap
@@ -1,5 +1,73 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
+exports[`lib/manager/terraform/extract extractPackageFile() extract helm releases 1`] = `
+Object {
+  "deps": Array [
+    Object {
+      "currentValue": "1.0.1",
+      "datasource": "helm",
+      "depName": "redis",
+      "depNameShort": "redis",
+      "depType": "helm",
+      "registryUrls": Array [
+        "https://kubernetes-charts.storage.googleapis.com",
+      ],
+    },
+    Object {
+      "datasource": "helm",
+      "depName": "redis",
+      "depNameShort": "redis",
+      "depType": "helm",
+      "registryUrls": Array [
+        "https://kubernetes-charts.storage.googleapis.com",
+      ],
+      "skipReason": "unsupported-version",
+    },
+    Object {
+      "datasource": "helm",
+      "depName": "./charts/example",
+      "depNameShort": "./charts/example",
+      "depType": "helm",
+      "registryUrls": Array [
+        undefined,
+      ],
+      "skipReason": "local-chart",
+    },
+    Object {
+      "currentValue": "4.0.1",
+      "datasource": "helm",
+      "depName": undefined,
+      "depNameShort": undefined,
+      "depType": "helm",
+      "registryUrls": Array [
+        "https://kubernetes-charts.storage.googleapis.com",
+      ],
+      "skipReason": "invalid-name",
+    },
+    Object {
+      "currentValue": "5.0.1",
+      "datasource": "helm",
+      "depName": "redis",
+      "depNameShort": "redis",
+      "depType": "helm",
+      "registryUrls": Array [
+        "https://kubernetes-charts.storage.googleapis.com",
+      ],
+    },
+    Object {
+      "currentValue": "6.0.1",
+      "datasource": "helm",
+      "depName": "redis",
+      "depNameShort": "redis",
+      "depType": "helm",
+      "registryUrls": Array [
+        undefined,
+      ],
+    },
+  ],
+}
+`;
+
 exports[`lib/manager/terraform/extract extractPackageFile() extracts 1`] = `
 Object {
   "deps": Array [
diff --git a/lib/manager/terraform/extract.spec.ts b/lib/manager/terraform/extract.spec.ts
index 5e3fba602b747580459a4e54a0575bb5bb65949f..23019135fb0247573473b2ad2318df524ee1bbd9 100644
--- a/lib/manager/terraform/extract.spec.ts
+++ b/lib/manager/terraform/extract.spec.ts
@@ -6,6 +6,7 @@ const tf2 = `module "relative" {
   source = "../../modules/fe"
 }
 `;
+const helm = readFileSync('lib/manager/terraform/__fixtures__/helm.tf', 'utf8');
 
 describe('lib/manager/terraform/extract', () => {
   describe('extractPackageFile()', () => {
@@ -21,5 +22,11 @@ describe('lib/manager/terraform/extract', () => {
     it('returns null if only local deps', () => {
       expect(extractPackageFile(tf2)).toBeNull();
     });
+    it('extract helm releases', () => {
+      const res = extractPackageFile(helm);
+      expect(res).toMatchSnapshot();
+      expect(res.deps).toHaveLength(6);
+      expect(res.deps.filter((dep) => dep.skipReason)).toHaveLength(3);
+    });
   });
 });
diff --git a/lib/manager/terraform/extract.ts b/lib/manager/terraform/extract.ts
index 48e469d250d24d8b382b188b10d93f5e27a15426..93d206da9bdc1db22be3d05bbcdf5a34cdc51348 100644
--- a/lib/manager/terraform/extract.ts
+++ b/lib/manager/terraform/extract.ts
@@ -6,14 +6,23 @@ import {
   extractTerraformProvider,
 } from './providers';
 import { extractTerraformRequiredProviders } from './required_providers';
+import {
+  analyseTerraformResource,
+  extractTerraformResource,
+} from './resources';
 import {
   TerraformDependencyTypes,
   checkFileContainsDependency,
   getTerraformDependencyType,
 } from './util';
 
-const dependencyBlockExtractionRegex = /^\s*(?<type>module|provider|required_providers)\s+("(?<lookupName>[^"]+)"\s+)?{\s*$/;
-const contentCheckList = ['module "', 'provider "', 'required_providers '];
+const dependencyBlockExtractionRegex = /^\s*(?<type>[a-z_]+)\s+("(?<lookupName>[^"]+)"\s+)?("(?<terraformName>[^"]+)"\s+)?{\s*$/;
+const contentCheckList = [
+  'module "',
+  'provider "',
+  'required_providers ',
+  ' "helm_release" ',
+];
 
 export function extractPackageFile(content: string): PackageFile | null {
   logger.trace({ content }, 'terraform.extractPackageFile()');
@@ -55,6 +64,10 @@ export function extractPackageFile(content: string): PackageFile | null {
             );
             break;
           }
+          case TerraformDependencyTypes.resource: {
+            result = extractTerraformResource(lineNumber, lines);
+            break;
+          }
           /* istanbul ignore next */
           default:
             logger.warn(
@@ -81,6 +94,9 @@ export function extractPackageFile(content: string): PackageFile | null {
       case TerraformDependencyTypes.module:
         analyseTerraformModule(dep);
         break;
+      case TerraformDependencyTypes.resource:
+        analyseTerraformResource(dep);
+        break;
       /* istanbul ignore next */
       default:
     }
diff --git a/lib/manager/terraform/resources.ts b/lib/manager/terraform/resources.ts
new file mode 100644
index 0000000000000000000000000000000000000000..793b4ced5000540853ab397a0091988c063ff1c6
--- /dev/null
+++ b/lib/manager/terraform/resources.ts
@@ -0,0 +1,58 @@
+import * as datasourceHelm from '../../datasource/helm';
+import { SkipReason } from '../../types';
+import { isValid } from '../../versioning/hashicorp';
+import { PackageDependency } from '../common';
+import {
+  ExtractionResult,
+  TerraformDependencyTypes,
+  checkIfStringIsPath,
+  keyValueExtractionRegex,
+} from './util';
+
+export function extractTerraformResource(
+  startingLine: number,
+  lines: string[]
+): ExtractionResult {
+  let lineNumber = startingLine;
+  let line;
+  const deps: PackageDependency[] = [];
+  const dep: PackageDependency = {
+    managerData: {
+      terraformDependencyType: TerraformDependencyTypes.resource,
+    },
+  };
+
+  do {
+    lineNumber += 1;
+    line = lines[lineNumber];
+    const kvMatch = keyValueExtractionRegex.exec(line);
+    if (kvMatch) {
+      if (kvMatch.groups.key === 'version') {
+        dep.currentValue = kvMatch.groups.value;
+      } else if (kvMatch.groups.key === 'chart') {
+        dep.managerData.chart = kvMatch.groups.value;
+      } else if (kvMatch.groups.key === 'repository') {
+        dep.managerData.repository = kvMatch.groups.value;
+      }
+    }
+  } while (line.trim() !== '}');
+  deps.push(dep);
+  return { lineNumber, dependencies: deps };
+}
+
+export function analyseTerraformResource(dep: PackageDependency): void {
+  /* eslint-disable no-param-reassign */
+  if (dep.managerData.chart == null) {
+    dep.skipReason = SkipReason.InvalidName;
+  } else if (checkIfStringIsPath(dep.managerData.chart)) {
+    dep.skipReason = SkipReason.LocalChart;
+  } else if (!isValid(dep.currentValue)) {
+    dep.skipReason = SkipReason.UnsupportedVersion;
+  }
+  dep.depType = 'helm';
+  dep.registryUrls = [dep.managerData.repository];
+  dep.depName = dep.managerData.chart;
+  dep.depNameShort = dep.managerData.chart;
+  dep.datasource = datasourceHelm.id;
+  /* eslint-enable no-param-reassign */
+}
diff --git a/lib/manager/terraform/util.ts b/lib/manager/terraform/util.ts
index 996fbae14269ffa1f4c50594e64f6375bf717fd5..c2fd55855b351be02e96d32495c0d3fe554029a4 100644
--- a/lib/manager/terraform/util.ts
+++ b/lib/manager/terraform/util.ts
@@ -12,6 +12,7 @@ export enum TerraformDependencyTypes {
   module = 'module',
   provider = 'provider',
   required_providers = 'required_providers',
+  resource = 'resource',
 }
 
 export function getTerraformDependencyType(
@@ -27,6 +28,9 @@ export function getTerraformDependencyType(
     case 'required_providers': {
       return TerraformDependencyTypes.required_providers;
     }
+    case 'resource': {
+      return TerraformDependencyTypes.resource;
+    }
     default: {
       return TerraformDependencyTypes.unknown;
     }
@@ -41,3 +45,9 @@ export function checkFileContainsDependency(
     return content.includes(check);
   });
 }
+
+const pathStringRegex = /(.|..)?(\/[^/])+/;
+export function checkIfStringIsPath(path: string): boolean {
+  const match = pathStringRegex.exec(path);
+  return !!match;
+}