diff --git a/packages/desktop-client/src/components/ManageRules.js b/packages/desktop-client/src/components/ManageRules.js
index ac85aa98d2d396d8120e6c520e58a5f77f760d2f..b4fba68688a4fae2be4e706b55360bce2d984a54 100644
--- a/packages/desktop-client/src/components/ManageRules.js
+++ b/packages/desktop-client/src/components/ManageRules.js
@@ -51,6 +51,7 @@ let SchedulesQuery = liveQueryContext(q('schedules').select('*'));
 export function Value({
   value,
   field,
+  valueIsRaw,
   inline = false,
   data: dataProp,
   describe = x => x.name,
@@ -93,35 +94,44 @@ export function Value({
     } else if (typeof value === 'boolean') {
       return value ? 'true' : 'false';
     } else {
-      if (field === 'amount') {
-        return integerToCurrency(value);
-      } else if (field === 'date') {
-        if (value) {
-          if (value.frequency) {
-            return getRecurringDescription(value);
+      switch (field) {
+        case 'amount':
+          return integerToCurrency(value);
+        case 'date':
+          if (value) {
+            if (value.frequency) {
+              return getRecurringDescription(value);
+            }
+            return formatDate(parseISO(value), dateFormat);
           }
-          return formatDate(parseISO(value), dateFormat);
-        }
-        return null;
-      } else if (field === 'month') {
-        return value
-          ? formatDate(parseISO(value), getMonthYearFormat(dateFormat))
-          : null;
-      } else if (field === 'year') {
-        return value ? formatDate(parseISO(value), 'yyyy') : null;
-      } else if (field === 'notes') {
-        return value;
-      } else {
-        if (data && data.length) {
-          let item = data.find(item => item.id === value);
-          if (item) {
-            return describe(item);
-          } else {
-            return '(deleted)';
+          return null;
+        case 'month':
+          return value
+            ? formatDate(parseISO(value), getMonthYearFormat(dateFormat))
+            : null;
+        case 'year':
+          return value ? formatDate(parseISO(value), 'yyyy') : null;
+        case 'notes':
+        case 'imported_payee':
+          return value;
+        case 'payee':
+        case 'category':
+        case 'account':
+          if (valueIsRaw) {
+            return value;
+          }
+          if (data && data.length) {
+            let item = data.find(item => item.id === value);
+            if (item) {
+              return describe(item);
+            } else {
+              return '(deleted)';
+            }
           }
-        } else {
+
           return '…';
-        }
+        default:
+          throw new Error(`Unknown field ${field}`);
       }
     }
   }
diff --git a/packages/desktop-client/src/components/accounts/Filters.js b/packages/desktop-client/src/components/accounts/Filters.js
index cee34db075fb1e48a6a3047da5863fe2eebe6d2f..f0bf6585919fe4ff8c91a9e4a7a0bd6f8563fe8f 100644
--- a/packages/desktop-client/src/components/accounts/Filters.js
+++ b/packages/desktop-client/src/components/accounts/Filters.js
@@ -486,7 +486,12 @@ function FilterExpression({
                 {mapField(field, options)}
               </Text>{' '}
               <Text style={{ color: colors.n3 }}>{friendlyOp(op)}</Text>{' '}
-              <Value value={value} field={field} inline={true} />
+              <Value
+                value={value}
+                field={field}
+                inline={true}
+                valueIsRaw={op === 'contains'}
+              />
             </>
           )}
         </div>
diff --git a/packages/loot-core/src/shared/rules.js b/packages/loot-core/src/shared/rules.js
index a6823369fd71f9079081e78ccf0d4d4553ac71a4..beb08f8f19a0d2cc4ac9be7fa0f00028fe85254d 100644
--- a/packages/loot-core/src/shared/rules.js
+++ b/packages/loot-core/src/shared/rules.js
@@ -147,7 +147,11 @@ export function parse(item) {
   switch (item.type) {
     case 'number': {
       let parsed = item.value;
-      if (item.field === 'amount' && item.op !== 'isbetween') {
+      if (
+        item.field === 'amount' &&
+        item.op !== 'isbetween' &&
+        parsed != null
+      ) {
         parsed = integerToAmount(parsed);
       }
       return { ...item, value: parsed };
@@ -197,7 +201,7 @@ export function makeValue(value, cond) {
         return {
           ...cond,
           error: null,
-          value: value ? currencyToAmount(value) || 0 : 0,
+          value: value ? currencyToAmount(String(value)) || 0 : 0,
         };
       }
       break;