diff --git a/lib/config/definitions.js b/lib/config/definitions.js
index 2ee0f9457c7c53239a5cc4ae70be24ab9920c594..a133080633490d0185c66f68293315cca82e397a 100644
--- a/lib/config/definitions.js
+++ b/lib/config/definitions.js
@@ -408,6 +408,18 @@ const options = [
     cli: false,
     env: false,
   },
+  {
+    name: 'updateTypes',
+    description:
+      'Update types to match against (major, minor, pin, etc). Valid only within `packageRules` object.',
+    type: 'list',
+    allowString: true,
+    stage: 'package',
+    parent: 'packageRules',
+    mergeable: true,
+    cli: false,
+    env: false,
+  },
   // Version behaviour
   {
     name: 'allowedVersions',
diff --git a/lib/config/validation.js b/lib/config/validation.js
index 6b2099514f09a8f96564b2b0ab7e9ff604ef83dd..c01b2468d3629eb57ac274f12010479ed6097226 100644
--- a/lib/config/validation.js
+++ b/lib/config/validation.js
@@ -130,6 +130,7 @@ async function validateConfig(config, isPreset, parentPath) {
               'packagePatterns',
               'excludePackageNames',
               'excludePackagePatterns',
+              'updateTypes',
             ];
             if (key === 'packageRules') {
               for (const packageRule of val) {
diff --git a/lib/util/package-rules.js b/lib/util/package-rules.js
index ec95b5edd35d897e4b5ea7b89497327097ea471a..0a620af8c79b95fa5a570e2d9a2ace5f3539a1f8 100644
--- a/lib/util/package-rules.js
+++ b/lib/util/package-rules.js
@@ -16,6 +16,7 @@ function applyPackageRules(inputConfig) {
     depName,
     currentValue,
     fromVersion,
+    type,
   } = config;
   const packageRules = config.packageRules || [];
   logger.trace(
@@ -31,6 +32,7 @@ function applyPackageRules(inputConfig) {
       excludePackageNames,
       excludePackagePatterns,
       matchCurrentVersion,
+      updateTypes,
     } = packageRule;
     // Setting empty arrays simplifies our logic later
     paths = paths || [];
@@ -40,6 +42,7 @@ function applyPackageRules(inputConfig) {
     excludePackageNames = excludePackageNames || [];
     excludePackagePatterns = excludePackagePatterns || [];
     matchCurrentVersion = matchCurrentVersion || null;
+    updateTypes = updateTypes || [];
     let positiveMatch = false;
     let negativeMatch = false;
     // Massage a positive patterns patch if an exclude one is present
@@ -62,6 +65,11 @@ function applyPackageRules(inputConfig) {
       positiveMatch = positiveMatch || isMatch;
       negativeMatch = negativeMatch || !isMatch;
     }
+    if (updateTypes.length) {
+      const isMatch = updateTypes.includes(type);
+      positiveMatch = positiveMatch || isMatch;
+      negativeMatch = negativeMatch || !isMatch;
+    }
     if (packageNames.length || packagePatterns.length) {
       let isMatch = packageNames.includes(depName);
       // name match is "or" so we check patterns if we didn't match names
diff --git a/test/config/__snapshots__/validation.spec.js.snap b/test/config/__snapshots__/validation.spec.js.snap
index 861b627fc06aa5a51ef68dc94265c9e2b8d8ad5f..672cfcb5627e8319e736cb40fc77033af2e549f7 100644
--- a/test/config/__snapshots__/validation.spec.js.snap
+++ b/test/config/__snapshots__/validation.spec.js.snap
@@ -44,7 +44,7 @@ Array [
   },
   Object {
     "depName": "Configuration Error",
-    "message": "packageRules: Each packageRule must contain at least one selector (paths, depTypeList, packageNames, packagePatterns, excludePackageNames, excludePackagePatterns). If you wish for configuration to apply to all packages, it is not necessary to place it inside a packageRule at all.",
+    "message": "packageRules: Each packageRule must contain at least one selector (paths, depTypeList, packageNames, packagePatterns, excludePackageNames, excludePackagePatterns, updateTypes). If you wish for configuration to apply to all packages, it is not necessary to place it inside a packageRule at all.",
   },
   Object {
     "depName": "Configuration Error",
diff --git a/test/util/package-rules.spec.js b/test/util/package-rules.spec.js
index efed3e527ce5eba79062110533fe05c8102f2c06..98e90164f24030fa36b9b1b6b4f53fd82ab9459f 100644
--- a/test/util/package-rules.spec.js
+++ b/test/util/package-rules.spec.js
@@ -119,6 +119,23 @@ describe('applyPackageRules()', () => {
     };
     const res = applyPackageRules({ ...config, ...dep });
     expect(res.x).toBe(1);
+  });
+    it('filters updateType', () => {
+    const config = {
+      packageRules: [
+        {
+          updateTypes: ['minor', 'patch'],
+          x: 1,
+        },
+      ],
+    };
+    const dep = {
+      depType: 'dependencies',
+      depName: 'a',
+      type: 'patch'
+    };
+    const res = applyPackageRules({ ...config, ...dep });
+    expect(res.x).toBe(1);
   });
   it('filters naked depType', () => {
     const config = {
diff --git a/website/docs/configuration-options.md b/website/docs/configuration-options.md
index 3f86b0d4d602638874147ee162e5ba1b480f514f..2b2dc47fe19df2a806c685b0d841d0891fa36b8e 100644
--- a/website/docs/configuration-options.md
+++ b/website/docs/configuration-options.md
@@ -434,6 +434,17 @@ Use this field if you want to have one or more package names patterns in your pa
 
 The above will set `rangeStrategy` to `replace` for any package starting with `angular`.
 
+### updateTypes
+
+USe this field to match rules against types of updates. For example to apply a special label for Major updates:
+
+```
+  "packageRules: [{
+    "updateTypes": ["major"],
+    "labels": ["UPDATE-MAJOR"]
+  }]
+```
+
 ## patch
 
 Add to this object if you wish to define rules that apply only to patch updates. See also `major` and `minor` configuration options.