From 9c21276ef9e99659cc43a53bc40746225e642013 Mon Sep 17 00:00:00 2001
From: Jack Senyitko <jsenyitko@expensify.com>
Date: Mon, 15 Dec 2025 16:40:29 -0500
Subject: [PATCH 01/12] show custom cols for expenses too

---
 src/components/Search/SearchPageHeader/SearchFiltersBar.tsx | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/components/Search/SearchPageHeader/SearchFiltersBar.tsx b/src/components/Search/SearchPageHeader/SearchFiltersBar.tsx
index b978ffc872a3..86325f23ab73 100644
--- a/src/components/Search/SearchPageHeader/SearchFiltersBar.tsx
+++ b/src/components/Search/SearchPageHeader/SearchFiltersBar.tsx
@@ -781,7 +781,7 @@ function SearchFiltersBar({
         [],
     );
 
-    const shouldShowColumnsButton = isLargeScreenWidth && queryJSON.type === CONST.SEARCH.DATA_TYPES.EXPENSE_REPORT;
+    const shouldShowColumnsButton = isLargeScreenWidth && (queryJSON.type === CONST.SEARCH.DATA_TYPES.EXPENSE || queryJSON.type === CONST.SEARCH.DATA_TYPES.EXPENSE_REPORT);
 
     const filterButtonText = useMemo(
         () => translate('search.filtersHeader') + (hiddenSelectedFilters.length > 0 ? ` (${hiddenSelectedFilters.length})` : ''),

From 9c5773b3322128cf09996a51cb3c1906fe788198 Mon Sep 17 00:00:00 2001
From: Jack Senyitko <jsenyitko@expensify.com>
Date: Mon, 15 Dec 2025 16:43:23 -0500
Subject: [PATCH 02/12] add col types based on type

---
 src/CONST/index.ts | 47 +++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 40 insertions(+), 7 deletions(-)

diff --git a/src/CONST/index.ts b/src/CONST/index.ts
index 7f2b5f5767a3..4bbda0dedc32 100755
--- a/src/CONST/index.ts
+++ b/src/CONST/index.ts
@@ -6701,17 +6701,50 @@ const CONST = {
         },
         get CUSTOM_COLUMNS() {
             return {
-                DATE: this.TABLE_COLUMNS.DATE,
-                STATUS: this.TABLE_COLUMNS.STATUS,
-                TITLE: this.TABLE_COLUMNS.TITLE,
-                FROM: this.TABLE_COLUMNS.FROM,
-                TO: this.TABLE_COLUMNS.TO,
-                ACTION: this.TABLE_COLUMNS.ACTION,
+                [this.DATA_TYPES.EXPENSE]: {
+                    RECEIPT: this.TABLE_COLUMNS.RECEIPT,
+                    DATE: this.TABLE_COLUMNS.DATE,
+                    MERCHANT: this.TABLE_COLUMNS.MERCHANT,
+                    DESCRIPTION: this.TABLE_COLUMNS.DESCRIPTION,
+                    FROM: this.TABLE_COLUMNS.FROM,
+                    TO: this.TABLE_COLUMNS.TO,
+                    CATEGORY: this.TABLE_COLUMNS.CATEGORY,
+                    TAG: this.TABLE_COLUMNS.TAG,
+                    TOTAL_AMOUNT: this.TABLE_COLUMNS.TOTAL_AMOUNT,
+                    ACTION: this.TABLE_COLUMNS.ACTION,
+                },
+                [this.DATA_TYPES.EXPENSE_REPORT]: {
+                    DATE: this.TABLE_COLUMNS.DATE,
+                    STATUS: this.TABLE_COLUMNS.STATUS,
+                    TITLE: this.TABLE_COLUMNS.TITLE,
+                    FROM: this.TABLE_COLUMNS.FROM,
+                    TO: this.TABLE_COLUMNS.TO,
+                    ACTION: this.TABLE_COLUMNS.ACTION,
+                },
             };
         },
         get DEFAULT_COLUMNS() {
             return {
-                EXPENSE_REPORT: [this.TABLE_COLUMNS.DATE, this.TABLE_COLUMNS.STATUS, this.TABLE_COLUMNS.TITLE, this.TABLE_COLUMNS.FROM, this.TABLE_COLUMNS.TO, this.TABLE_COLUMNS.ACTION],
+                [this.DATA_TYPES.EXPENSE]: [
+                    this.TABLE_COLUMNS.RECEIPT,
+                    this.TABLE_COLUMNS.DATE,
+                    this.TABLE_COLUMNS.MERCHANT,
+                    this.TABLE_COLUMNS.DESCRIPTION,
+                    this.TABLE_COLUMNS.FROM,
+                    this.TABLE_COLUMNS.TO,
+                    this.TABLE_COLUMNS.CATEGORY,
+                    this.TABLE_COLUMNS.TAG,
+                    this.TABLE_COLUMNS.TOTAL_AMOUNT,
+                    this.TABLE_COLUMNS.ACTION,
+                ],
+                [this.DATA_TYPES.EXPENSE_REPORT]: [
+                    this.TABLE_COLUMNS.DATE,
+                    this.TABLE_COLUMNS.STATUS,
+                    this.TABLE_COLUMNS.TITLE,
+                    this.TABLE_COLUMNS.FROM,
+                    this.TABLE_COLUMNS.TO,
+                    this.TABLE_COLUMNS.ACTION,
+                ],
             };
         },
         BOOLEAN: {

From bc14dc6f993f53bc3602c66b92a6f81f003907d6 Mon Sep 17 00:00:00 2001
From: Jack Senyitko <jsenyitko@expensify.com>
Date: Mon, 15 Dec 2025 16:46:23 -0500
Subject: [PATCH 03/12] get default and all options for the current type

---
 src/CONST/index.ts                     | 8 ++++++++
 src/pages/Search/SearchColumnsPage.tsx | 7 ++++---
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/CONST/index.ts b/src/CONST/index.ts
index 4bbda0dedc32..d7034bce78ed 100755
--- a/src/CONST/index.ts
+++ b/src/CONST/index.ts
@@ -6721,6 +6721,10 @@ const CONST = {
                     TO: this.TABLE_COLUMNS.TO,
                     ACTION: this.TABLE_COLUMNS.ACTION,
                 },
+                [this.DATA_TYPES.INVOICE]: {},
+                [this.DATA_TYPES.TASK]: {},
+                [this.DATA_TYPES.TRIP]: {},
+                [this.DATA_TYPES.CHAT]: {},
             };
         },
         get DEFAULT_COLUMNS() {
@@ -6745,6 +6749,10 @@ const CONST = {
                     this.TABLE_COLUMNS.TO,
                     this.TABLE_COLUMNS.ACTION,
                 ],
+                [this.DATA_TYPES.INVOICE]: [],
+                [this.DATA_TYPES.TASK]: [],
+                [this.DATA_TYPES.TRIP]: [],
+                [this.DATA_TYPES.CHAT]: [],
             };
         },
         BOOLEAN: {
diff --git a/src/pages/Search/SearchColumnsPage.tsx b/src/pages/Search/SearchColumnsPage.tsx
index 736a2466a7eb..419733c8915f 100644
--- a/src/pages/Search/SearchColumnsPage.tsx
+++ b/src/pages/Search/SearchColumnsPage.tsx
@@ -23,15 +23,16 @@ import ROUTES from '@src/ROUTES';
 import type {SearchAdvancedFiltersForm} from '@src/types/form';
 import arraysEqual from '@src/utils/arraysEqual';
 
-const allCustomColumns = Object.values(CONST.SEARCH.CUSTOM_COLUMNS);
-const defaultCustomColumns = Object.values(CONST.SEARCH.DEFAULT_COLUMNS.EXPENSE_REPORT);
-
 function SearchColumnsPage() {
     const styles = useThemeStyles();
     const {translate} = useLocalize();
 
     const [searchAdvancedFiltersForm] = useOnyx(ONYXKEYS.FORMS.SEARCH_ADVANCED_FILTERS_FORM, {canBeMissing: true});
 
+    const queryType = searchAdvancedFiltersForm?.type ?? CONST.SEARCH.DATA_TYPES.EXPENSE;
+    const allCustomColumns = Object.values(CONST.SEARCH.CUSTOM_COLUMNS[queryType]);
+    const defaultCustomColumns = Object.values(CONST.SEARCH.DEFAULT_COLUMNS[queryType]);
+
     const [selectedColumnIds, setSelectedColumnIds] = useState<SearchCustomColumnIds[]>(() => {
         const columnIds = searchAdvancedFiltersForm?.columns?.filter((columnId) => Object.values(CONST.SEARCH.CUSTOM_COLUMNS).includes(columnId)) ?? [];
 

From aa597264fa469632bc868ac8330eb3daeaa5dc9b Mon Sep 17 00:00:00 2001
From: Jack Senyitko <jsenyitko@expensify.com>
Date: Mon, 15 Dec 2025 16:51:57 -0500
Subject: [PATCH 04/12] add all translations

---
 .../SearchPageHeader/SearchFiltersBar.tsx     |  2 +-
 src/libs/SearchUIUtils.ts                     | 22 +++++++++++++------
 2 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/src/components/Search/SearchPageHeader/SearchFiltersBar.tsx b/src/components/Search/SearchPageHeader/SearchFiltersBar.tsx
index 86325f23ab73..292c98eb4902 100644
--- a/src/components/Search/SearchPageHeader/SearchFiltersBar.tsx
+++ b/src/components/Search/SearchPageHeader/SearchFiltersBar.tsx
@@ -827,7 +827,7 @@ function SearchFiltersBar({
             expensifyIcons.Filter,
             expensifyIcons.Columns,
             openAdvancedFilters,
-            isLargeScreenWidth,
+            shouldShowColumnsButton,
             translate,
         ],
     );
diff --git a/src/libs/SearchUIUtils.ts b/src/libs/SearchUIUtils.ts
index 288907d98c7c..f507dc862fd8 100644
--- a/src/libs/SearchUIUtils.ts
+++ b/src/libs/SearchUIUtils.ts
@@ -2049,20 +2049,28 @@ function getExpenseTypeTranslationKey(expenseType: ValueOf<typeof CONST.SEARCH.T
     }
 }
 
-function getSearchColumnTranslationKey(columnId: ValueOf<typeof CONST.SEARCH.CUSTOM_COLUMNS>): TranslationPaths {
+function getSearchColumnTranslationKey(columnId: ValueOf<typeof CONST.SEARCH.CUSTOM_COLUMNS.expense & typeof CONST.SEARCH.CUSTOM_COLUMNS.expenseReport>): TranslationPaths {
     // eslint-disable-next-line default-case
     switch (columnId) {
-        case CONST.SEARCH.CUSTOM_COLUMNS.DATE:
+        case CONST.SEARCH.TABLE_COLUMNS.DATE:
             return 'common.date';
-        case CONST.SEARCH.CUSTOM_COLUMNS.STATUS:
+        case CONST.SEARCH.TABLE_COLUMNS.MERCHANT:
             return 'common.status';
-        case CONST.SEARCH.CUSTOM_COLUMNS.TITLE:
+        case CONST.SEARCH.TABLE_COLUMNS.DESCRIPTION:
             return 'common.title';
-        case CONST.SEARCH.CUSTOM_COLUMNS.FROM:
+        case CONST.SEARCH.TABLE_COLUMNS.FROM:
             return 'common.from';
-        case CONST.SEARCH.CUSTOM_COLUMNS.TO:
+        case CONST.SEARCH.TABLE_COLUMNS.TO:
             return 'common.to';
-        case CONST.SEARCH.CUSTOM_COLUMNS.ACTION:
+        case CONST.SEARCH.TABLE_COLUMNS.CATEGORY:
+            return 'common.action';
+        case CONST.SEARCH.TABLE_COLUMNS.RECEIPT:
+            return 'common.receipt';
+        case CONST.SEARCH.TABLE_COLUMNS.TAG:
+            return 'common.tag';
+        case CONST.SEARCH.TABLE_COLUMNS.TOTAL_AMOUNT:
+            return 'iou.amount';
+        case CONST.SEARCH.TABLE_COLUMNS.ACTION:
             return 'common.action';
     }
 }

From dec8460dfff966852959b7f63f55c2a356acd53f Mon Sep 17 00:00:00 2001
From: Jack Senyitko <jsenyitko@expensify.com>
Date: Mon, 15 Dec 2025 16:56:14 -0500
Subject: [PATCH 05/12] add methods to get cols

---
 src/CONST/index.ts             | 31 ++++++++++----------------
 src/components/Search/types.ts |  2 +-
 src/libs/SearchUIUtils.ts      | 40 +++++++++++++++++++++++++++++++++-
 3 files changed, 52 insertions(+), 21 deletions(-)

diff --git a/src/CONST/index.ts b/src/CONST/index.ts
index d7034bce78ed..5096dcb0ae7a 100755
--- a/src/CONST/index.ts
+++ b/src/CONST/index.ts
@@ -6701,7 +6701,7 @@ const CONST = {
         },
         get CUSTOM_COLUMNS() {
             return {
-                [this.DATA_TYPES.EXPENSE]: {
+                EXPENSE: {
                     RECEIPT: this.TABLE_COLUMNS.RECEIPT,
                     DATE: this.TABLE_COLUMNS.DATE,
                     MERCHANT: this.TABLE_COLUMNS.MERCHANT,
@@ -6713,7 +6713,7 @@ const CONST = {
                     TOTAL_AMOUNT: this.TABLE_COLUMNS.TOTAL_AMOUNT,
                     ACTION: this.TABLE_COLUMNS.ACTION,
                 },
-                [this.DATA_TYPES.EXPENSE_REPORT]: {
+                EXPENSE_REPORT: {
                     DATE: this.TABLE_COLUMNS.DATE,
                     STATUS: this.TABLE_COLUMNS.STATUS,
                     TITLE: this.TABLE_COLUMNS.TITLE,
@@ -6721,15 +6721,15 @@ const CONST = {
                     TO: this.TABLE_COLUMNS.TO,
                     ACTION: this.TABLE_COLUMNS.ACTION,
                 },
-                [this.DATA_TYPES.INVOICE]: {},
-                [this.DATA_TYPES.TASK]: {},
-                [this.DATA_TYPES.TRIP]: {},
-                [this.DATA_TYPES.CHAT]: {},
+                INVOICE: {},
+                TASK: {},
+                TRIP: {},
+                CHAT: {},
             };
         },
         get DEFAULT_COLUMNS() {
             return {
-                [this.DATA_TYPES.EXPENSE]: [
+                EXPENSE: [
                     this.TABLE_COLUMNS.RECEIPT,
                     this.TABLE_COLUMNS.DATE,
                     this.TABLE_COLUMNS.MERCHANT,
@@ -6741,18 +6741,11 @@ const CONST = {
                     this.TABLE_COLUMNS.TOTAL_AMOUNT,
                     this.TABLE_COLUMNS.ACTION,
                 ],
-                [this.DATA_TYPES.EXPENSE_REPORT]: [
-                    this.TABLE_COLUMNS.DATE,
-                    this.TABLE_COLUMNS.STATUS,
-                    this.TABLE_COLUMNS.TITLE,
-                    this.TABLE_COLUMNS.FROM,
-                    this.TABLE_COLUMNS.TO,
-                    this.TABLE_COLUMNS.ACTION,
-                ],
-                [this.DATA_TYPES.INVOICE]: [],
-                [this.DATA_TYPES.TASK]: [],
-                [this.DATA_TYPES.TRIP]: [],
-                [this.DATA_TYPES.CHAT]: [],
+                EXPENSE_REPORT: [this.TABLE_COLUMNS.DATE, this.TABLE_COLUMNS.STATUS, this.TABLE_COLUMNS.TITLE, this.TABLE_COLUMNS.FROM, this.TABLE_COLUMNS.TO, this.TABLE_COLUMNS.ACTION],
+                INVOICE: [],
+                TASK: [],
+                TRIP: [],
+                CHAT: [],
             };
         },
         BOOLEAN: {
diff --git a/src/components/Search/types.ts b/src/components/Search/types.ts
index ca6a7b532ddf..d756a65f7701 100644
--- a/src/components/Search/types.ts
+++ b/src/components/Search/types.ts
@@ -107,7 +107,7 @@ type TableColumnSize = ValueOf<typeof CONST.SEARCH.TABLE_COLUMN_SIZES>;
 type SearchDatePreset = ValueOf<typeof CONST.SEARCH.DATE_PRESETS>;
 type SearchWithdrawalType = ValueOf<typeof CONST.SEARCH.WITHDRAWAL_TYPE>;
 type SearchAction = ValueOf<typeof CONST.SEARCH.ACTION_FILTERS>;
-type SearchCustomColumnIds = ValueOf<typeof CONST.SEARCH.CUSTOM_COLUMNS>;
+type SearchCustomColumnIds = ValueOf<typeof CONST.SEARCH.CUSTOM_COLUMNS.EXPENSE> | ValueOf<typeof CONST.SEARCH.CUSTOM_COLUMNS.EXPENSE_REPORT>;
 
 type SearchContextData = {
     currentSearchHash: number;
diff --git a/src/libs/SearchUIUtils.ts b/src/libs/SearchUIUtils.ts
index f507dc862fd8..eb0eb31a294e 100644
--- a/src/libs/SearchUIUtils.ts
+++ b/src/libs/SearchUIUtils.ts
@@ -2049,7 +2049,43 @@ function getExpenseTypeTranslationKey(expenseType: ValueOf<typeof CONST.SEARCH.T
     }
 }
 
-function getSearchColumnTranslationKey(columnId: ValueOf<typeof CONST.SEARCH.CUSTOM_COLUMNS.expense & typeof CONST.SEARCH.CUSTOM_COLUMNS.expenseReport>): TranslationPaths {
+function getCustomColumns(type: SearchDataTypes) {
+    // eslint-disable-next-line default-case
+    switch (type) {
+        case CONST.SEARCH.DATA_TYPES.EXPENSE:
+            return CONST.SEARCH.CUSTOM_COLUMNS.EXPENSE;
+        case CONST.SEARCH.DATA_TYPES.EXPENSE_REPORT:
+            return CONST.SEARCH.CUSTOM_COLUMNS.EXPENSE_REPORT;
+        case CONST.SEARCH.DATA_TYPES.INVOICE:
+            return CONST.SEARCH.CUSTOM_COLUMNS.INVOICE;
+        case CONST.SEARCH.DATA_TYPES.TASK:
+            return CONST.SEARCH.CUSTOM_COLUMNS.TASK;
+        case CONST.SEARCH.DATA_TYPES.TRIP:
+            return CONST.SEARCH.CUSTOM_COLUMNS.TRIP;
+        case CONST.SEARCH.DATA_TYPES.CHAT:
+            return CONST.SEARCH.CUSTOM_COLUMNS.CHAT;
+    }
+}
+
+function getCustomColumnDefault(type: SearchDataTypes) {
+    // eslint-disable-next-line default-case
+    switch (type) {
+        case CONST.SEARCH.DATA_TYPES.EXPENSE:
+            return CONST.SEARCH.DEFAULT_COLUMNS.EXPENSE;
+        case CONST.SEARCH.DATA_TYPES.EXPENSE_REPORT:
+            return CONST.SEARCH.DEFAULT_COLUMNS.EXPENSE_REPORT;
+        case CONST.SEARCH.DATA_TYPES.INVOICE:
+            return CONST.SEARCH.DEFAULT_COLUMNS.INVOICE;
+        case CONST.SEARCH.DATA_TYPES.TASK:
+            return CONST.SEARCH.DEFAULT_COLUMNS.TASK;
+        case CONST.SEARCH.DATA_TYPES.TRIP:
+            return CONST.SEARCH.DEFAULT_COLUMNS.TRIP;
+        case CONST.SEARCH.DATA_TYPES.CHAT:
+            return CONST.SEARCH.DEFAULT_COLUMNS.CHAT;
+    }
+}
+
+function getSearchColumnTranslationKey(columnId: SearchCustomColumnIds): TranslationPaths {
     // eslint-disable-next-line default-case
     switch (columnId) {
         case CONST.SEARCH.TABLE_COLUMNS.DATE:
@@ -2773,5 +2809,7 @@ export {
     getTransactionFromTransactionListItem,
     getSearchColumnTranslationKey,
     getTableMinWidth,
+    getCustomColumns,
+    getCustomColumnDefault,
 };
 export type {SavedSearchMenuItem, SearchTypeMenuSection, SearchTypeMenuItem, SearchDateModifier, SearchDateModifierLower, SearchKey, ArchivedReportsIDSet};

From 6d20eb83592bab42ee0ebac7efafe48d485b2a6a Mon Sep 17 00:00:00 2001
From: Jack Senyitko <jsenyitko@expensify.com>
Date: Mon, 15 Dec 2025 16:59:15 -0500
Subject: [PATCH 06/12] fix up more types

---
 src/libs/SearchUIUtils.ts              | 20 ++++++++++++--------
 src/pages/Search/SearchColumnsPage.tsx |  6 +++---
 2 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/src/libs/SearchUIUtils.ts b/src/libs/SearchUIUtils.ts
index eb0eb31a294e..f8cb7f20928e 100644
--- a/src/libs/SearchUIUtils.ts
+++ b/src/libs/SearchUIUtils.ts
@@ -2049,25 +2049,25 @@ function getExpenseTypeTranslationKey(expenseType: ValueOf<typeof CONST.SEARCH.T
     }
 }
 
-function getCustomColumns(type: SearchDataTypes) {
+function getCustomColumns(type: SearchDataTypes): SearchCustomColumnIds[] {
     // eslint-disable-next-line default-case
     switch (type) {
         case CONST.SEARCH.DATA_TYPES.EXPENSE:
-            return CONST.SEARCH.CUSTOM_COLUMNS.EXPENSE;
+            return Object.values(CONST.SEARCH.CUSTOM_COLUMNS.EXPENSE);
         case CONST.SEARCH.DATA_TYPES.EXPENSE_REPORT:
-            return CONST.SEARCH.CUSTOM_COLUMNS.EXPENSE_REPORT;
+            return Object.values(CONST.SEARCH.CUSTOM_COLUMNS.EXPENSE_REPORT);
         case CONST.SEARCH.DATA_TYPES.INVOICE:
-            return CONST.SEARCH.CUSTOM_COLUMNS.INVOICE;
+            return Object.values(CONST.SEARCH.CUSTOM_COLUMNS.INVOICE);
         case CONST.SEARCH.DATA_TYPES.TASK:
-            return CONST.SEARCH.CUSTOM_COLUMNS.TASK;
+            return Object.values(CONST.SEARCH.CUSTOM_COLUMNS.TASK);
         case CONST.SEARCH.DATA_TYPES.TRIP:
-            return CONST.SEARCH.CUSTOM_COLUMNS.TRIP;
+            return Object.values(CONST.SEARCH.CUSTOM_COLUMNS.TRIP);
         case CONST.SEARCH.DATA_TYPES.CHAT:
-            return CONST.SEARCH.CUSTOM_COLUMNS.CHAT;
+            return Object.values(CONST.SEARCH.CUSTOM_COLUMNS.CHAT);
     }
 }
 
-function getCustomColumnDefault(type: SearchDataTypes) {
+function getCustomColumnDefault(type: SearchDataTypes): SearchCustomColumnIds[] {
     // eslint-disable-next-line default-case
     switch (type) {
         case CONST.SEARCH.DATA_TYPES.EXPENSE:
@@ -2108,6 +2108,10 @@ function getSearchColumnTranslationKey(columnId: SearchCustomColumnIds): Transla
             return 'iou.amount';
         case CONST.SEARCH.TABLE_COLUMNS.ACTION:
             return 'common.action';
+        case CONST.SEARCH.TABLE_COLUMNS.TITLE:
+            return 'common.title';
+        case CONST.SEARCH.TABLE_COLUMNS.STATUS:
+            return 'common.status';
     }
 }
 
diff --git a/src/pages/Search/SearchColumnsPage.tsx b/src/pages/Search/SearchColumnsPage.tsx
index 419733c8915f..c301b1c06c0f 100644
--- a/src/pages/Search/SearchColumnsPage.tsx
+++ b/src/pages/Search/SearchColumnsPage.tsx
@@ -16,7 +16,7 @@ import useThemeStyles from '@hooks/useThemeStyles';
 import {clearAllFilters} from '@libs/actions/Search';
 import Navigation from '@libs/Navigation/Navigation';
 import {buildQueryStringFromFilterFormValues} from '@libs/SearchQueryUtils';
-import {getSearchColumnTranslationKey} from '@libs/SearchUIUtils';
+import {getCustomColumnDefault, getCustomColumns, getSearchColumnTranslationKey} from '@libs/SearchUIUtils';
 import CONST from '@src/CONST';
 import ONYXKEYS from '@src/ONYXKEYS';
 import ROUTES from '@src/ROUTES';
@@ -30,8 +30,8 @@ function SearchColumnsPage() {
     const [searchAdvancedFiltersForm] = useOnyx(ONYXKEYS.FORMS.SEARCH_ADVANCED_FILTERS_FORM, {canBeMissing: true});
 
     const queryType = searchAdvancedFiltersForm?.type ?? CONST.SEARCH.DATA_TYPES.EXPENSE;
-    const allCustomColumns = Object.values(CONST.SEARCH.CUSTOM_COLUMNS[queryType]);
-    const defaultCustomColumns = Object.values(CONST.SEARCH.DEFAULT_COLUMNS[queryType]);
+    const allCustomColumns = getCustomColumns(queryType);
+    const defaultCustomColumns = getCustomColumnDefault(queryType);
 
     const [selectedColumnIds, setSelectedColumnIds] = useState<SearchCustomColumnIds[]>(() => {
         const columnIds = searchAdvancedFiltersForm?.columns?.filter((columnId) => Object.values(CONST.SEARCH.CUSTOM_COLUMNS).includes(columnId)) ?? [];

From ff01b9a5a295e9a01b01d5d6830239b4eb9e94fc Mon Sep 17 00:00:00 2001
From: Jack Senyitko <jsenyitko@expensify.com>
Date: Mon, 15 Dec 2025 17:09:31 -0500
Subject: [PATCH 07/12] reset when type changes

---
 src/components/Search/SearchPageHeader/SearchFiltersBar.tsx | 1 +
 src/pages/Search/SearchColumnsPage.tsx                      | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/components/Search/SearchPageHeader/SearchFiltersBar.tsx b/src/components/Search/SearchPageHeader/SearchFiltersBar.tsx
index 292c98eb4902..25adbc97eedd 100644
--- a/src/components/Search/SearchPageHeader/SearchFiltersBar.tsx
+++ b/src/components/Search/SearchPageHeader/SearchFiltersBar.tsx
@@ -307,6 +307,7 @@ function SearchFiltersBar({
             // If the type has changed, reset the status so we dont have an invalid status selected
             if (updatedFilterFormValues.type !== filterFormValues.type) {
                 updatedFilterFormValues.status = CONST.SEARCH.STATUS.EXPENSE.ALL;
+                updatedFilterFormValues.columns = [];
             }
 
             const queryString = buildQueryStringFromFilterFormValues(updatedFilterFormValues);
diff --git a/src/pages/Search/SearchColumnsPage.tsx b/src/pages/Search/SearchColumnsPage.tsx
index c301b1c06c0f..682591248d3f 100644
--- a/src/pages/Search/SearchColumnsPage.tsx
+++ b/src/pages/Search/SearchColumnsPage.tsx
@@ -34,7 +34,7 @@ function SearchColumnsPage() {
     const defaultCustomColumns = getCustomColumnDefault(queryType);
 
     const [selectedColumnIds, setSelectedColumnIds] = useState<SearchCustomColumnIds[]>(() => {
-        const columnIds = searchAdvancedFiltersForm?.columns?.filter((columnId) => Object.values(CONST.SEARCH.CUSTOM_COLUMNS).includes(columnId)) ?? [];
+        const columnIds = searchAdvancedFiltersForm?.columns?.filter((columnId) => allCustomColumns.includes(columnId)) ?? [];
 
         // We dont allow the user to unselect all columns, so we can assume that no columns = default columns
         if (!columnIds.length) {

From 044a1f229cc6b0906f92ddb3bdda8d2f0e33d6b7 Mon Sep 17 00:00:00 2001
From: Jack Senyitko <jsenyitko@expensify.com>
Date: Mon, 15 Dec 2025 17:17:41 -0500
Subject: [PATCH 08/12] enable custom columns

---
 src/libs/SearchUIUtils.ts | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/src/libs/SearchUIUtils.ts b/src/libs/SearchUIUtils.ts
index f8cb7f20928e..6ab38d3a8ad2 100644
--- a/src/libs/SearchUIUtils.ts
+++ b/src/libs/SearchUIUtils.ts
@@ -58,6 +58,7 @@ import type {
     SearchWithdrawalIDGroup,
 } from '@src/types/onyx/SearchResults';
 import type IconAsset from '@src/types/utils/IconAsset';
+import arraysEqual from '@src/utils/arraysEqual';
 import {hasSynchronizationErrorMessage} from './actions/connections';
 import {canApproveIOU, canIOUBePaid, canSubmitReport, startMoneyRequest} from './actions/IOU';
 import {setIsOpenConfirmNavigateExpensifyClassicModalOpen} from './actions/isOpenConfirmNavigateExpensifyClassicModal';
@@ -2619,6 +2620,18 @@ function getColumnsToShow(
         }
     };
 
+    // If the user has set custom columns for the search, we need to respect their preference, and only show
+    // them what they want to see
+    if (!arraysEqual(Object.values(CONST.SEARCH.DEFAULT_COLUMNS.EXPENSE), visibleColumns) && visibleColumns.length > 0) {
+        const requiredColumns = new Set<keyof ColumnVisibility>([CONST.SEARCH.TABLE_COLUMNS.AVATAR, CONST.SEARCH.TABLE_COLUMNS.TOTAL_AMOUNT]);
+
+        for (const column of Object.keys(columns) as SearchCustomColumnIds[]) {
+            columns[column] = visibleColumns.includes(column) || requiredColumns.has(column);
+        }
+
+        return columns;
+    }
+
     if (Array.isArray(data)) {
         for (const item of data) {
             updateColumns(item);

From 56df554957050db9f14c03084b062e5c524fc486 Mon Sep 17 00:00:00 2001
From: Jack Senyitko <jsenyitko@expensify.com>
Date: Mon, 15 Dec 2025 17:18:12 -0500
Subject: [PATCH 09/12] remove amount from expense

---
 src/CONST/index.ts | 2 --
 1 file changed, 2 deletions(-)

diff --git a/src/CONST/index.ts b/src/CONST/index.ts
index 5096dcb0ae7a..8e5a40067c53 100755
--- a/src/CONST/index.ts
+++ b/src/CONST/index.ts
@@ -6710,7 +6710,6 @@ const CONST = {
                     TO: this.TABLE_COLUMNS.TO,
                     CATEGORY: this.TABLE_COLUMNS.CATEGORY,
                     TAG: this.TABLE_COLUMNS.TAG,
-                    TOTAL_AMOUNT: this.TABLE_COLUMNS.TOTAL_AMOUNT,
                     ACTION: this.TABLE_COLUMNS.ACTION,
                 },
                 EXPENSE_REPORT: {
@@ -6738,7 +6737,6 @@ const CONST = {
                     this.TABLE_COLUMNS.TO,
                     this.TABLE_COLUMNS.CATEGORY,
                     this.TABLE_COLUMNS.TAG,
-                    this.TABLE_COLUMNS.TOTAL_AMOUNT,
                     this.TABLE_COLUMNS.ACTION,
                 ],
                 EXPENSE_REPORT: [this.TABLE_COLUMNS.DATE, this.TABLE_COLUMNS.STATUS, this.TABLE_COLUMNS.TITLE, this.TABLE_COLUMNS.FROM, this.TABLE_COLUMNS.TO, this.TABLE_COLUMNS.ACTION],

From dac619e72594d36ef231f7dfda12c48d6b927d27 Mon Sep 17 00:00:00 2001
From: Jack Senyitko <jsenyitko@expensify.com>
Date: Mon, 15 Dec 2025 17:26:41 -0500
Subject: [PATCH 10/12] fix options that shouldnt exist

---
 src/libs/SearchUIUtils.ts | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/src/libs/SearchUIUtils.ts b/src/libs/SearchUIUtils.ts
index 6ab38d3a8ad2..f93016ee8a19 100644
--- a/src/libs/SearchUIUtils.ts
+++ b/src/libs/SearchUIUtils.ts
@@ -2092,9 +2092,9 @@ function getSearchColumnTranslationKey(columnId: SearchCustomColumnIds): Transla
         case CONST.SEARCH.TABLE_COLUMNS.DATE:
             return 'common.date';
         case CONST.SEARCH.TABLE_COLUMNS.MERCHANT:
-            return 'common.status';
+            return 'common.merchant';
         case CONST.SEARCH.TABLE_COLUMNS.DESCRIPTION:
-            return 'common.title';
+            return 'common.description';
         case CONST.SEARCH.TABLE_COLUMNS.FROM:
             return 'common.from';
         case CONST.SEARCH.TABLE_COLUMNS.TO:
@@ -2105,8 +2105,6 @@ function getSearchColumnTranslationKey(columnId: SearchCustomColumnIds): Transla
             return 'common.receipt';
         case CONST.SEARCH.TABLE_COLUMNS.TAG:
             return 'common.tag';
-        case CONST.SEARCH.TABLE_COLUMNS.TOTAL_AMOUNT:
-            return 'iou.amount';
         case CONST.SEARCH.TABLE_COLUMNS.ACTION:
             return 'common.action';
         case CONST.SEARCH.TABLE_COLUMNS.TITLE:

From a0d3dc9f8185e8ac9f227dbbc23c8251651096d1 Mon Sep 17 00:00:00 2001
From: Jack Senyitko <jsenyitko@expensify.com>
Date: Mon, 15 Dec 2025 17:29:00 -0500
Subject: [PATCH 11/12] more incorrect consts on test steps

---
 src/CONST/index.ts        | 2 --
 src/libs/SearchUIUtils.ts | 4 +---
 2 files changed, 1 insertion(+), 5 deletions(-)

diff --git a/src/CONST/index.ts b/src/CONST/index.ts
index 8e5a40067c53..c251b5f52000 100755
--- a/src/CONST/index.ts
+++ b/src/CONST/index.ts
@@ -6705,7 +6705,6 @@ const CONST = {
                     RECEIPT: this.TABLE_COLUMNS.RECEIPT,
                     DATE: this.TABLE_COLUMNS.DATE,
                     MERCHANT: this.TABLE_COLUMNS.MERCHANT,
-                    DESCRIPTION: this.TABLE_COLUMNS.DESCRIPTION,
                     FROM: this.TABLE_COLUMNS.FROM,
                     TO: this.TABLE_COLUMNS.TO,
                     CATEGORY: this.TABLE_COLUMNS.CATEGORY,
@@ -6732,7 +6731,6 @@ const CONST = {
                     this.TABLE_COLUMNS.RECEIPT,
                     this.TABLE_COLUMNS.DATE,
                     this.TABLE_COLUMNS.MERCHANT,
-                    this.TABLE_COLUMNS.DESCRIPTION,
                     this.TABLE_COLUMNS.FROM,
                     this.TABLE_COLUMNS.TO,
                     this.TABLE_COLUMNS.CATEGORY,
diff --git a/src/libs/SearchUIUtils.ts b/src/libs/SearchUIUtils.ts
index f93016ee8a19..15fe3441ba2f 100644
--- a/src/libs/SearchUIUtils.ts
+++ b/src/libs/SearchUIUtils.ts
@@ -2093,14 +2093,12 @@ function getSearchColumnTranslationKey(columnId: SearchCustomColumnIds): Transla
             return 'common.date';
         case CONST.SEARCH.TABLE_COLUMNS.MERCHANT:
             return 'common.merchant';
-        case CONST.SEARCH.TABLE_COLUMNS.DESCRIPTION:
-            return 'common.description';
         case CONST.SEARCH.TABLE_COLUMNS.FROM:
             return 'common.from';
         case CONST.SEARCH.TABLE_COLUMNS.TO:
             return 'common.to';
         case CONST.SEARCH.TABLE_COLUMNS.CATEGORY:
-            return 'common.action';
+            return 'common.category';
         case CONST.SEARCH.TABLE_COLUMNS.RECEIPT:
             return 'common.receipt';
         case CONST.SEARCH.TABLE_COLUMNS.TAG:

From 1eb77819cbc30368f8368a1388c84c2526ed2834 Mon Sep 17 00:00:00 2001
From: Jack Senyitko <jsenyitko@expensify.com>
Date: Mon, 15 Dec 2025 18:57:16 -0500
Subject: [PATCH 12/12] remove clearAllFilters

---
 src/hooks/useSearchTypeMenu.tsx        | 3 ---
 src/libs/SearchUIUtils.ts              | 2 +-
 src/pages/Search/SearchColumnsPage.tsx | 2 --
 src/pages/Search/SearchTypeMenu.tsx    | 1 -
 4 files changed, 1 insertion(+), 7 deletions(-)

diff --git a/src/hooks/useSearchTypeMenu.tsx b/src/hooks/useSearchTypeMenu.tsx
index 74cb1b28f120..c639059f7753 100644
--- a/src/hooks/useSearchTypeMenu.tsx
+++ b/src/hooks/useSearchTypeMenu.tsx
@@ -6,7 +6,6 @@ import type {PopoverMenuItem} from '@components/PopoverMenu';
 import {useSearchContext} from '@components/Search/SearchContext';
 import type {SearchQueryJSON} from '@components/Search/types';
 import ThreeDotsMenu from '@components/ThreeDotsMenu';
-import {clearAllFilters} from '@libs/actions/Search';
 import {mergeCardListWithWorkspaceFeeds} from '@libs/CardUtils';
 import Navigation from '@libs/Navigation/Navigation';
 import {getAllTaxRates} from '@libs/PolicyUtils';
@@ -109,7 +108,6 @@ export default function useSearchTypeMenu(queryJSON: SearchQueryJSON) {
             return {
                 ...baseMenuItem,
                 onSelected: () => {
-                    clearAllFilters();
                     Navigation.navigate(ROUTES.SEARCH_ROOT.getRoute({query: item?.query ?? '', name: item?.name}));
                 },
                 rightComponent: (
@@ -181,7 +179,6 @@ export default function useSearchTypeMenu(queryJSON: SearchQueryJSON) {
                             containerStyle: isSelected ? [{backgroundColor: theme.border}] : undefined,
                             shouldCallAfterModalHide: true,
                             onSelected: singleExecution(() => {
-                                clearAllFilters();
                                 Navigation.navigate(ROUTES.SEARCH_ROOT.getRoute({query: item.searchQuery}));
                             }),
                         });
diff --git a/src/libs/SearchUIUtils.ts b/src/libs/SearchUIUtils.ts
index 15fe3441ba2f..1f6acf88a6eb 100644
--- a/src/libs/SearchUIUtils.ts
+++ b/src/libs/SearchUIUtils.ts
@@ -2619,7 +2619,7 @@ function getColumnsToShow(
     // If the user has set custom columns for the search, we need to respect their preference, and only show
     // them what they want to see
     if (!arraysEqual(Object.values(CONST.SEARCH.DEFAULT_COLUMNS.EXPENSE), visibleColumns) && visibleColumns.length > 0) {
-        const requiredColumns = new Set<keyof ColumnVisibility>([CONST.SEARCH.TABLE_COLUMNS.AVATAR, CONST.SEARCH.TABLE_COLUMNS.TOTAL_AMOUNT]);
+        const requiredColumns = new Set<keyof ColumnVisibility>([CONST.SEARCH.TABLE_COLUMNS.AVATAR, CONST.SEARCH.TABLE_COLUMNS.TOTAL_AMOUNT, CONST.SEARCH.TABLE_COLUMNS.TYPE]);
 
         for (const column of Object.keys(columns) as SearchCustomColumnIds[]) {
             columns[column] = visibleColumns.includes(column) || requiredColumns.has(column);
diff --git a/src/pages/Search/SearchColumnsPage.tsx b/src/pages/Search/SearchColumnsPage.tsx
index 682591248d3f..5b03943d691c 100644
--- a/src/pages/Search/SearchColumnsPage.tsx
+++ b/src/pages/Search/SearchColumnsPage.tsx
@@ -13,7 +13,6 @@ import TextLink from '@components/TextLink';
 import useLocalize from '@hooks/useLocalize';
 import useOnyx from '@hooks/useOnyx';
 import useThemeStyles from '@hooks/useThemeStyles';
-import {clearAllFilters} from '@libs/actions/Search';
 import Navigation from '@libs/Navigation/Navigation';
 import {buildQueryStringFromFilterFormValues} from '@libs/SearchQueryUtils';
 import {getCustomColumnDefault, getCustomColumns, getSearchColumnTranslationKey} from '@libs/SearchUIUtils';
@@ -82,7 +81,6 @@ function SearchColumnsPage() {
         const updatedAdvancedFilters: Partial<SearchAdvancedFiltersForm> = {...searchAdvancedFiltersForm, columns: selectedColumnIds};
         const queryString = buildQueryStringFromFilterFormValues(updatedAdvancedFilters);
 
-        clearAllFilters();
         Navigation.navigate(ROUTES.SEARCH_ROOT.getRoute({query: queryString}), {forceReplace: true});
     };
 
diff --git a/src/pages/Search/SearchTypeMenu.tsx b/src/pages/Search/SearchTypeMenu.tsx
index 99cbcf564c01..afdd77471f9c 100644
--- a/src/pages/Search/SearchTypeMenu.tsx
+++ b/src/pages/Search/SearchTypeMenu.tsx
@@ -100,7 +100,6 @@ function SearchTypeMenu({queryJSON}: SearchTypeMenuProps) {
             return {
                 ...baseMenuItem,
                 onPress: () => {
-                    clearAllFilters();
                     Navigation.navigate(ROUTES.SEARCH_ROOT.getRoute({query: item?.query ?? '', name: item?.name}));
                 },
                 rightComponent: (
