diff --git a/src/CONST/index.ts b/src/CONST/index.ts
index ca292aafea3f..149283e44f7f 100644
--- a/src/CONST/index.ts
+++ b/src/CONST/index.ts
@@ -8829,22 +8829,11 @@ const CONST = {
             SELECT_ALL_BUTTON: 'Search-SelectAllButton',
             TYPE_MENU_BUTTON: 'Search-TypeMenuButton',
             FILTER_DISPLAY: 'Search-FilterDisplay',
-            FILTER_TYPE: 'Search-FilterType',
-            FILTER_STATUS: 'Search-FilterStatus',
-            FILTER_DATE: 'Search-FilterDate',
-            FILTER_FROM: 'Search-FilterFrom',
-            FILTER_WORKSPACE: 'Search-FilterWorkspace',
             FILTER_GROUP_BY: 'Search-FilterGroupBy',
             FILTER_SORT_BY: 'Search-FilterSortBy',
             FILTER_GROUP_CURRENCY: 'Search-FilterGroupCurrency',
             FILTER_VIEW: 'Search-FilterView',
             FILTER_LIMIT: 'Search-FilterLimit',
-            FILTER_FEED: 'Search-FilterFeed',
-            FILTER_POSTED: 'Search-FilterPosted',
-            FILTER_WITHDRAWN: 'Search-FilterWithdrawn',
-            FILTER_WITHDRAWAL_TYPE: 'Search-FilterWithdrawalType',
-            FILTER_HAS: 'Search-FilterHas',
-            FILTER_IS: 'Search-FilterIs',
             ADVANCED_FILTERS_BUTTON: 'Search-AdvancedFiltersButton',
             COLUMNS_BUTTON: 'Search-ColumnsButton',
             SELECT_ALL_MATCHING_BUTTON: 'Search-SelectAllMatchingButton',
diff --git a/src/SCREENS.ts b/src/SCREENS.ts
index 8216ca68090c..42eae1002149 100644
--- a/src/SCREENS.ts
+++ b/src/SCREENS.ts
@@ -53,8 +53,6 @@ const SCREENS = {
         REPORT_VERIFY_ACCOUNT: 'Search_Report_Verify_Account',
         ADVANCED_FILTERS_RHP: 'Search_Advanced_Filters_RHP',
         ADVANCED_FILTERS_TYPE_RHP: 'Search_Advanced_Filters_Type_RHP',
-        ADVANCED_FILTERS_GROUP_BY_RHP: 'Search_Advanced_Filters_GroupBy_RHP',
-        ADVANCED_FILTERS_VIEW_RHP: 'Search_Advanced_Filters_View_RHP',
         ADVANCED_FILTERS_STATUS_RHP: 'Search_Advanced_Filters_Status_RHP',
         ADVANCED_FILTERS_DATE_RHP: 'Search_Advanced_Filters_Date_RHP',
         ADVANCED_FILTERS_SUBMITTED_RHP: 'Search_Advanced_Filters_Submitted_RHP',
@@ -65,7 +63,6 @@ const SCREENS = {
         ADVANCED_FILTERS_POSTED_RHP: 'Search_Advanced_Filters_Posted_RHP',
         ADVANCED_FILTERS_WITHDRAWN_RHP: 'Search_Advanced_Filters_Withdrawn_RHP',
         ADVANCED_FILTERS_CURRENCY_RHP: 'Search_Advanced_Filters_Currency_RHP',
-        ADVANCED_FILTERS_GROUP_CURRENCY_RHP: 'Search_Advanced_Filters_Group_Currency_RHP',
         ADVANCED_FILTERS_DESCRIPTION_RHP: 'Search_Advanced_Filters_Description_RHP',
         ADVANCED_FILTERS_MERCHANT_RHP: 'Search_Advanced_Filters_Merchant_RHP',
         ADVANCED_FILTERS_REPORT_ID_RHP: 'Search_Advanced_Filters_ReportID_RHP',
@@ -81,7 +78,6 @@ const SCREENS = {
         ADVANCED_FILTERS_WITHDRAWAL_ID_RHP: 'Search_Advanced_Filters_Withdrawal_ID_RHP',
         ADVANCED_FILTERS_TAG_RHP: 'Search_Advanced_Filters_Tag_RHP',
         ADVANCED_FILTERS_HAS_RHP: 'Search_Advanced_Filters_Has_RHP',
-        ADVANCED_FILTERS_LIMIT_RHP: 'Search_Advanced_Filters_Limit_RHP',
         ADVANCED_FILTERS_FROM_RHP: 'Search_Advanced_Filters_From_RHP',
         ADVANCED_FILTERS_TO_RHP: 'Search_Advanced_Filters_To_RHP',
         ADVANCED_FILTERS_TITLE_RHP: 'Search_Advanced_Filters_Title_RHP',
diff --git a/src/components/MoneyRequestReportView/MoneyRequestReportTransactionList.tsx b/src/components/MoneyRequestReportView/MoneyRequestReportTransactionList.tsx
index 0ff5931c3a88..963cbfc5eceb 100644
--- a/src/components/MoneyRequestReportView/MoneyRequestReportTransactionList.tsx
+++ b/src/components/MoneyRequestReportView/MoneyRequestReportTransactionList.tsx
@@ -495,7 +495,7 @@ function MoneyRequestReportTransactionList({
 
     const groupByPopoverComponent = useCallback(
         (props: {closeOverlay: () => void}) => (
-            <View style={[styles.pt4, styles.pb1]}>
+            <View style={[!isSmallScreenWidth && styles.pv4]}>
                 <View style={styles.getSelectionListPopoverHeight(groupByOptions.length || 1, windowHeight, false, isInLandscapeMode, false)}>
                     <SelectionList
                         data={groupByOptions}
@@ -508,11 +508,12 @@ function MoneyRequestReportTransactionList({
                             setReportLayoutGroupBy(item.keyForList, reportLayoutGroupBy);
                             props.closeOverlay();
                         }}
+                        style={{contentContainerStyle: [styles.pb0]}}
                     />
                 </View>
             </View>
         ),
-        [groupByOptions, reportLayoutGroupBy, styles, windowHeight, isInLandscapeMode],
+        [groupByOptions, reportLayoutGroupBy, styles, windowHeight, isSmallScreenWidth, isInLandscapeMode],
     );
 
     const transactionListContent = (
diff --git a/src/components/Search/FilterDropdowns/DisplayPopup.tsx b/src/components/Search/FilterDropdowns/DisplayPopup.tsx
index 085bcb9aa7a1..1c26236f5bdf 100644
--- a/src/components/Search/FilterDropdowns/DisplayPopup.tsx
+++ b/src/components/Search/FilterDropdowns/DisplayPopup.tsx
@@ -21,8 +21,10 @@ import type {SearchAdvancedFiltersForm} from '@src/types/form';
 import type {SearchResults} from '@src/types/onyx';
 import {getEmptyObject} from '@src/types/utils/EmptyObject';
 import GroupByPopup from './GroupByPopup';
+import GroupCurrencyPopup from './GroupCurrencyPopup';
 import SingleSelectPopup from './SingleSelectPopup';
 import SortByPopup from './SortByPopup';
+import SortOrderPopup from './SortOrderPopup';
 import TextInputPopup from './TextInputPopup';
 
 type DisplayPopupProps = {
@@ -41,8 +43,10 @@ function DisplayPopup({queryJSON, searchResults, closeOverlay, onSort}: DisplayP
     const [selectedDisplayFilter, setSelectedDisplayFilter] = useState<
         | typeof CONST.SEARCH.SYNTAX_ROOT_KEYS.LIMIT
         | typeof CONST.SEARCH.SYNTAX_ROOT_KEYS.GROUP_BY
+        | typeof CONST.SEARCH.SYNTAX_FILTER_KEYS.GROUP_CURRENCY
         | typeof CONST.SEARCH.SYNTAX_ROOT_KEYS.VIEW
         | typeof CONST.SEARCH.SYNTAX_ROOT_KEYS.SORT_BY
+        | typeof CONST.SEARCH.SYNTAX_ROOT_KEYS.SORT_ORDER
         | null
     >(null);
 
@@ -52,9 +56,6 @@ function DisplayPopup({queryJSON, searchResults, closeOverlay, onSort}: DisplayP
     const view = viewOptions.find((option) => option.value === queryJSON.view) ?? viewOptions.at(0) ?? null;
     const shouldShowColumnsButton = isLargeScreenWidth && (queryJSON.type === CONST.SEARCH.DATA_TYPES.EXPENSE || queryJSON.type === CONST.SEARCH.DATA_TYPES.EXPENSE_REPORT);
 
-    const sortByValue = queryJSON.sortBy;
-    const groupByValue = searchAdvancedFilters[CONST.SEARCH.SYNTAX_ROOT_KEYS.GROUP_BY];
-    const viewValue = searchAdvancedFilters[CONST.SEARCH.SYNTAX_ROOT_KEYS.VIEW];
     const limitValue = searchAdvancedFilters[CONST.SEARCH.SYNTAX_ROOT_KEYS.LIMIT];
 
     if (!selectedDisplayFilter) {
@@ -64,12 +65,18 @@ function DisplayPopup({queryJSON, searchResults, closeOverlay, onSort}: DisplayP
 
         const isExpenseType = queryJSON.type === CONST.SEARCH.DATA_TYPES.EXPENSE;
         const isTripType = queryJSON.type === CONST.SEARCH.DATA_TYPES.TRIP;
+        const sortByValue = queryJSON.sortBy;
+        const sortOrderValue = queryJSON.sortOrder;
+        const groupByValue = searchAdvancedFilters[CONST.SEARCH.SYNTAX_ROOT_KEYS.GROUP_BY];
+        const groupCurrencyValue = searchAdvancedFilters[CONST.SEARCH.SYNTAX_FILTER_KEYS.GROUP_CURRENCY];
+        const viewValue = searchAdvancedFilters[CONST.SEARCH.SYNTAX_ROOT_KEYS.VIEW];
+
         return (
             <View style={[!shouldUseNarrowLayout && styles.pv4]}>
                 <MenuItemWithTopDescription
                     shouldShowRightIcon
                     description={translate('search.display.sortBy')}
-                    title={translate(getSearchColumnTranslationKey(sortByValue))}
+                    title={`${translate(getSearchColumnTranslationKey(sortByValue))} ${CONST.DOT_SEPARATOR} ${translate(`search.filters.sortOrder.${sortOrderValue}`)}`}
                     onPress={() => setSelectedDisplayFilter(CONST.SEARCH.SYNTAX_ROOT_KEYS.SORT_BY)}
                     sentryLabel={CONST.SENTRY_LABEL.SEARCH.FILTER_SORT_BY}
                 />
@@ -82,6 +89,15 @@ function DisplayPopup({queryJSON, searchResults, closeOverlay, onSort}: DisplayP
                         sentryLabel={CONST.SENTRY_LABEL.SEARCH.FILTER_GROUP_BY}
                     />
                 )}
+                {!!groupBy && (
+                    <MenuItemWithTopDescription
+                        shouldShowRightIcon
+                        description={translate('common.groupCurrency')}
+                        title={groupCurrencyValue}
+                        onPress={() => setSelectedDisplayFilter(CONST.SEARCH.SYNTAX_FILTER_KEYS.GROUP_CURRENCY)}
+                        sentryLabel={CONST.SENTRY_LABEL.SEARCH.FILTER_GROUP_CURRENCY}
+                    />
+                )}
                 {isExpenseType && !!groupByValue && (
                     <MenuItemWithTopDescription
                         shouldShowRightIcon
@@ -138,60 +154,98 @@ function DisplayPopup({queryJSON, searchResults, closeOverlay, onSort}: DisplayP
         close(() => Navigation.setParams({q: queryString, rawQuery: undefined}));
     };
 
+    const goBack = () => {
+        if (selectedDisplayFilter === CONST.SEARCH.SYNTAX_ROOT_KEYS.SORT_ORDER) {
+            setSelectedDisplayFilter(CONST.SEARCH.SYNTAX_ROOT_KEYS.SORT_BY);
+            return;
+        }
+        setSelectedDisplayFilter(null);
+    };
+
     const subtitle = {
         [CONST.SEARCH.SYNTAX_ROOT_KEYS.SORT_BY]: translate('search.display.sortBy'),
+        [CONST.SEARCH.SYNTAX_ROOT_KEYS.SORT_ORDER]: translate('search.display.sortOrder'),
         [CONST.SEARCH.SYNTAX_ROOT_KEYS.GROUP_BY]: translate('search.display.groupBy'),
+        [CONST.SEARCH.SYNTAX_FILTER_KEYS.GROUP_CURRENCY]: translate('common.groupCurrency'),
         [CONST.SEARCH.SYNTAX_ROOT_KEYS.VIEW]: translate('search.view.label'),
         [CONST.SEARCH.SYNTAX_ROOT_KEYS.LIMIT]: translate('search.display.limitResults'),
     };
 
-    const subPopup = {
-        [CONST.SEARCH.SYNTAX_ROOT_KEYS.SORT_BY]: (
-            <SortByPopup
-                searchResults={searchResults}
-                queryJSON={queryJSON}
-                groupBy={groupBy}
-                onSort={onSort}
-                closeOverlay={() => setSelectedDisplayFilter(null)}
-            />
-        ),
-        [CONST.SEARCH.SYNTAX_ROOT_KEYS.GROUP_BY]: (
-            <GroupByPopup
-                style={styles.p0}
-                label={shouldUseNarrowLayout ? undefined : translate('search.display.groupBy')}
-                sections={groupBySections}
-                value={groupBy}
-                closeOverlay={() => setSelectedDisplayFilter(null)}
-                onChange={(item) => {
-                    const newValue = item?.value;
-                    if (!newValue) {
-                        updateFilterForm({groupBy: undefined, groupCurrency: undefined});
-                    } else {
-                        updateFilterForm({groupBy: newValue});
-                    }
-                }}
-            />
-        ),
-        [CONST.SEARCH.SYNTAX_ROOT_KEYS.VIEW]: (
-            <SingleSelectPopup
-                style={styles.p0}
-                label={shouldUseNarrowLayout ? undefined : translate('search.view.label')}
-                items={viewOptions}
-                value={view}
-                closeOverlay={() => setSelectedDisplayFilter(null)}
-                onChange={(item) => updateFilterForm({view: item?.value ?? CONST.SEARCH.VIEW.TABLE})}
-            />
-        ),
-        [CONST.SEARCH.SYNTAX_ROOT_KEYS.LIMIT]: (
-            <TextInputPopup
-                style={styles.pv0}
-                placeholder={translate('search.filters.limit')}
-                defaultValue={limitValue}
-                closeOverlay={() => setSelectedDisplayFilter(null)}
-                onChange={(value) => updateFilterForm({limit: value})}
-            />
-        ),
-    };
+    let subPopup: React.JSX.Element | null = null;
+
+    switch (selectedDisplayFilter) {
+        case CONST.SEARCH.SYNTAX_ROOT_KEYS.SORT_BY:
+            subPopup = (
+                <SortByPopup
+                    searchResults={searchResults}
+                    queryJSON={queryJSON}
+                    groupBy={groupBy}
+                    onSort={onSort}
+                    onSortOrderPress={() => setSelectedDisplayFilter(CONST.SEARCH.SYNTAX_ROOT_KEYS.SORT_ORDER)}
+                    closeOverlay={closeOverlay}
+                />
+            );
+            break;
+        case CONST.SEARCH.SYNTAX_ROOT_KEYS.SORT_ORDER:
+            subPopup = (
+                <SortOrderPopup
+                    queryJSON={queryJSON}
+                    onSort={onSort}
+                    closeOverlay={closeOverlay}
+                />
+            );
+            break;
+        case CONST.SEARCH.SYNTAX_ROOT_KEYS.GROUP_BY:
+            subPopup = (
+                <GroupByPopup
+                    style={styles.p0}
+                    sections={groupBySections}
+                    value={groupBy}
+                    closeOverlay={closeOverlay}
+                    onChange={(item) => {
+                        const newValue = item?.value;
+                        if (!newValue) {
+                            updateFilterForm({groupBy: undefined, groupCurrency: undefined});
+                        } else {
+                            updateFilterForm({groupBy: newValue});
+                        }
+                    }}
+                />
+            );
+            break;
+        case CONST.SEARCH.SYNTAX_FILTER_KEYS.GROUP_CURRENCY:
+            subPopup = (
+                <GroupCurrencyPopup
+                    onChange={(item) => updateFilterForm({groupCurrency: item?.value})}
+                    closeOverlay={closeOverlay}
+                />
+            );
+            break;
+        case CONST.SEARCH.SYNTAX_ROOT_KEYS.VIEW:
+            subPopup = (
+                <SingleSelectPopup
+                    style={styles.p0}
+                    items={viewOptions}
+                    value={view}
+                    closeOverlay={closeOverlay}
+                    onChange={(item) => updateFilterForm({view: item?.value ?? CONST.SEARCH.VIEW.TABLE})}
+                />
+            );
+            break;
+        case CONST.SEARCH.SYNTAX_ROOT_KEYS.LIMIT:
+            subPopup = (
+                <TextInputPopup
+                    style={styles.pv0}
+                    placeholder={translate('search.filters.limit')}
+                    defaultValue={limitValue}
+                    closeOverlay={closeOverlay}
+                    onChange={(value) => updateFilterForm({limit: value})}
+                />
+            );
+            break;
+        default:
+            break;
+    }
 
     return (
         <View style={[!shouldUseNarrowLayout && styles.pv4]}>
@@ -199,9 +253,9 @@ function DisplayPopup({queryJSON, searchResults, closeOverlay, onSort}: DisplayP
                 shouldDisplayHelpButton={false}
                 style={[styles.h10, styles.pv1, styles.mb2]}
                 subtitle={subtitle[selectedDisplayFilter]}
-                onBackButtonPress={() => setSelectedDisplayFilter(null)}
+                onBackButtonPress={goBack}
             />
-            {subPopup[selectedDisplayFilter]}
+            {subPopup}
         </View>
     );
 }
diff --git a/src/components/Search/FilterDropdowns/DropdownButton.tsx b/src/components/Search/FilterDropdowns/DropdownButton.tsx
index b33429f991a9..4e835a205266 100644
--- a/src/components/Search/FilterDropdowns/DropdownButton.tsx
+++ b/src/components/Search/FilterDropdowns/DropdownButton.tsx
@@ -1,5 +1,5 @@
 import {willAlertModalBecomeVisibleSelector} from '@selectors/Modal';
-import type {ReactNode} from 'react';
+import type {ReactNode, RefObject} from 'react';
 import React, {useCallback, useMemo, useRef, useState} from 'react';
 import type {StyleProp, TextStyle, ViewStyle} from 'react-native';
 import {View} from 'react-native';
@@ -26,6 +26,8 @@ type PopoverComponentProps = {
 };
 
 type DropdownButtonProps = WithSentryLabel & {
+    children?: (triggerRef: RefObject<View | null>, onPress: () => void) => ReactNode;
+
     /** The label to display on the select */
     label: string;
 
@@ -38,6 +40,8 @@ type DropdownButtonProps = WithSentryLabel & {
     /** The component to render in the popover */
     PopoverComponent: (props: PopoverComponentProps) => ReactNode;
 
+    ButtonComponent?: React.ComponentType<{onPress: () => void; ref: RefObject<View | null>}>;
+
     /** Whether to use medium size button instead of small */
     medium?: boolean;
 
@@ -54,14 +58,24 @@ type DropdownButtonProps = WithSentryLabel & {
     wrapperStyle?: StyleProp<ViewStyle>;
 };
 
-const PADDING_MODAL = 8;
-
 const ANCHOR_ORIGIN = {
     horizontal: CONST.MODAL.ANCHOR_ORIGIN_HORIZONTAL.LEFT,
     vertical: CONST.MODAL.ANCHOR_ORIGIN_VERTICAL.TOP,
 };
 
-function DropdownButton({label, value, viewportOffsetTop, PopoverComponent, medium = false, labelStyle, innerStyles, caretWrapperStyle, wrapperStyle, sentryLabel}: DropdownButtonProps) {
+function DropdownButton({
+    label,
+    value,
+    viewportOffsetTop,
+    PopoverComponent,
+    ButtonComponent,
+    medium = false,
+    labelStyle,
+    innerStyles,
+    caretWrapperStyle,
+    wrapperStyle,
+    sentryLabel,
+}: DropdownButtonProps) {
     // We need to use isSmallScreenWidth instead of shouldUseNarrowLayout to distinguish RHL and narrow layout
     // eslint-disable-next-line rulesdir/prefer-shouldUseNarrowLayout-instead-of-isSmallScreenWidth
     const {isSmallScreenWidth} = useResponsiveLayout();
@@ -100,7 +114,7 @@ function DropdownButton({label, value, viewportOffsetTop, PopoverComponent, medi
      */
     const calculatePopoverPositionAndToggleOverlay = useCallback(() => {
         calculatePopoverPosition(anchorRef, ANCHOR_ORIGIN).then((pos) => {
-            setPopoverTriggerPosition({...pos, vertical: pos.vertical + PADDING_MODAL});
+            setPopoverTriggerPosition({...pos, vertical: pos.vertical});
             toggleOverlay();
         });
     }, [calculatePopoverPosition, toggleOverlay]);
@@ -136,28 +150,35 @@ function DropdownButton({label, value, viewportOffsetTop, PopoverComponent, medi
             style={wrapperStyle}
         >
             {/* Dropdown Trigger */}
-            <Button
-                ref={triggerRef}
-                innerStyles={[isOverlayVisible && styles.buttonHoveredBG, {maxWidth: 256}, innerStyles]}
-                onPress={calculatePopoverPositionAndToggleOverlay}
-                sentryLabel={sentryLabel}
-                // eslint-disable-next-line react/jsx-props-no-spreading
-                {...(medium ? {medium: true} : {small: true})}
-            >
-                <CaretWrapper
-                    style={[styles.flex1, styles.mw100, caretWrapperStyle]}
-                    caretWidth={medium ? variables.iconSizeSmall : variables.iconSizeExtraSmall}
-                    caretHeight={medium ? variables.iconSizeSmall : variables.iconSizeExtraSmall}
-                    isActive={isOverlayVisible}
+            {ButtonComponent ? (
+                <ButtonComponent
+                    ref={triggerRef}
+                    onPress={calculatePopoverPositionAndToggleOverlay}
+                />
+            ) : (
+                <Button
+                    ref={triggerRef}
+                    innerStyles={[isOverlayVisible && styles.buttonHoveredBG, {maxWidth: 256}, innerStyles]}
+                    onPress={calculatePopoverPositionAndToggleOverlay}
+                    sentryLabel={sentryLabel}
+                    // eslint-disable-next-line react/jsx-props-no-spreading
+                    {...(medium ? {medium: true} : {small: true})}
                 >
-                    <Text
-                        numberOfLines={1}
-                        style={[styles.textMicroBold, styles.flexShrink1, labelStyle]}
+                    <CaretWrapper
+                        style={[styles.flex1, styles.mw100, caretWrapperStyle]}
+                        caretWidth={medium ? variables.iconSizeSmall : variables.iconSizeExtraSmall}
+                        caretHeight={medium ? variables.iconSizeSmall : variables.iconSizeExtraSmall}
+                        isActive={isOverlayVisible}
                     >
-                        {buttonText}
-                    </Text>
-                </CaretWrapper>
-            </Button>
+                        <Text
+                            numberOfLines={1}
+                            style={[styles.textMicroBold, styles.flexShrink1, labelStyle]}
+                        >
+                            {buttonText}
+                        </Text>
+                    </CaretWrapper>
+                </Button>
+            )}
 
             {/* Dropdown overlay */}
             <PopoverWithMeasuredContent
diff --git a/src/components/Search/FilterDropdowns/InSelectPopup.tsx b/src/components/Search/FilterDropdowns/InSelectPopup.tsx
index ca4460f9ec39..a5802cf3209c 100644
--- a/src/components/Search/FilterDropdowns/InSelectPopup.tsx
+++ b/src/components/Search/FilterDropdowns/InSelectPopup.tsx
@@ -18,6 +18,7 @@ import getNonEmptyStringOnyxID from '@libs/getNonEmptyStringOnyxID';
 import {createOptionFromReport, filterAndOrderOptions, formatSectionsFromSearchTerm, getAlternateText, getSearchOptions} from '@libs/OptionsListUtils';
 import type {Option, OptionWithKey, SelectionListSections} from '@libs/OptionsListUtils/types';
 import type {OptionData} from '@libs/ReportUtils';
+import variables from '@styles/variables';
 import CONST from '@src/CONST';
 import ONYXKEYS from '@src/ONYXKEYS';
 import passthroughPolicyTagListSelector from '@src/selectors/PolicyTagList';
@@ -178,6 +179,7 @@ function InSelectPopup({closeOverlay, updateFilterForm}: InSelectPopupProps) {
         headerMessage,
     };
 
+    const itemCount = sections.flatMap((section) => section.data).length || 1;
     return (
         <BasePopup
             label={translate('common.in')}
@@ -185,14 +187,13 @@ function InSelectPopup({closeOverlay, updateFilterForm}: InSelectPopupProps) {
             onApply={applyChanges}
             resetSentryLabel={CONST.SENTRY_LABEL.SEARCH.FILTER_POPUP_RESET_REPORT}
             applySentryLabel={CONST.SENTRY_LABEL.SEARCH.FILTER_POPUP_APPLY_REPORT}
-            style={[styles.getUserSelectionListPopoverHeight(sections.flatMap((section) => section.data).length || 1, windowHeight, shouldUseNarrowLayout, isInLandscapeMode, true)]}
+            style={[styles.getCommonSelectionListPopoverHeight(itemCount, variables.optionRowHeight, windowHeight, shouldUseNarrowLayout, isInLandscapeMode, true)]}
         >
             <SelectionListWithSections
                 sections={sections}
                 onSelectRow={handleParticipantSelection}
                 ListItem={InviteMemberListItem}
                 canSelectMultiple
-                style={{listStyle: styles.pb2}}
                 shouldPreventDefaultFocusOnSelectRow={!canUseTouchScreen()}
                 textInputOptions={textInputOptions}
                 isLoadingNewOptions={isLoadingNewOptions}
diff --git a/src/components/Search/FilterDropdowns/MultiSelectPopup.tsx b/src/components/Search/FilterDropdowns/MultiSelectPopup.tsx
index e44befd0f8ce..98ab533a2bb4 100644
--- a/src/components/Search/FilterDropdowns/MultiSelectPopup.tsx
+++ b/src/components/Search/FilterDropdowns/MultiSelectPopup.tsx
@@ -137,6 +137,7 @@ function MultiSelectPopup<T extends string>({label, loading, value, items, close
                         ListItem={MultiSelectListItem}
                         onSelectRow={updateSelectedItems}
                         textInputOptions={textInputOptions}
+                        style={{contentContainerStyle: [styles.pb0]}}
                     />
                 )}
             </View>
diff --git a/src/components/Search/FilterDropdowns/SingleSelectPopup.tsx b/src/components/Search/FilterDropdowns/SingleSelectPopup.tsx
index 8f4e44ad0e7d..5d3ff7964fad 100644
--- a/src/components/Search/FilterDropdowns/SingleSelectPopup.tsx
+++ b/src/components/Search/FilterDropdowns/SingleSelectPopup.tsx
@@ -145,7 +145,7 @@ function SingleSelectPopup<T extends string>({
                     ListItem={SingleSelectListItem}
                     onSelectRow={updateSelectedItem}
                     textInputOptions={textInputOptions}
-                    style={selectionListStyle}
+                    style={{contentContainerStyle: [styles.pb0], ...selectionListStyle}}
                     shouldUpdateFocusedIndex={isSearchable}
                     initiallyFocusedItemKey={isSearchable ? value?.value : undefined}
                     shouldShowLoadingPlaceholder={!noResultsFound}
diff --git a/src/components/Search/FilterDropdowns/SortByPopup.tsx b/src/components/Search/FilterDropdowns/SortByPopup.tsx
index 9b82d6426a6a..7979f4519b0b 100644
--- a/src/components/Search/FilterDropdowns/SortByPopup.tsx
+++ b/src/components/Search/FilterDropdowns/SortByPopup.tsx
@@ -1,11 +1,12 @@
 import React from 'react';
+import {View} from 'react-native';
 import type {OnyxEntry} from 'react-native-onyx';
+import MenuItemWithTopDescription from '@components/MenuItemWithTopDescription';
 import {useSearchActionsContext, useSearchStateContext} from '@components/Search/SearchContext';
 import type {SearchColumnType, SearchGroupBy, SearchQueryJSON} from '@components/Search/types';
 import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails';
 import useLocalize from '@hooks/useLocalize';
 import useOnyx from '@hooks/useOnyx';
-import useResponsiveLayout from '@hooks/useResponsiveLayout';
 import useThemeStyles from '@hooks/useThemeStyles';
 import {close} from '@libs/actions/Modal';
 import Navigation from '@libs/Navigation/Navigation';
@@ -23,13 +24,13 @@ type SortByPopupProps = {
     queryJSON: SearchQueryJSON;
     groupBy: SingleSelectItem<SearchGroupBy> | null;
     onSort: () => void;
+    onSortOrderPress: () => void;
     closeOverlay: () => void;
 };
 
-function SortByPopup({searchResults, queryJSON, groupBy, onSort, closeOverlay}: SortByPopupProps) {
+function SortByPopup({searchResults, queryJSON, groupBy, onSort, onSortOrderPress, closeOverlay}: SortByPopupProps) {
     const {translate} = useLocalize();
     const styles = useThemeStyles();
-    const {shouldUseNarrowLayout} = useResponsiveLayout();
     const {accountID} = useCurrentUserPersonalDetails();
     const {shouldUseLiveData} = useSearchStateContext();
     const {clearSelectedTransactions} = useSearchActionsContext();
@@ -40,14 +41,11 @@ function SortByPopup({searchResults, queryJSON, groupBy, onSort, closeOverlay}:
         : getColumnsToShow({currentAccountID: accountID, data: searchResults.data, visibleColumns, type: searchDataType, groupBy: groupBy?.value});
     const sortableColumns = getSortByOptions(currentColumns, translate);
     const sortBy = {text: translate(getSearchColumnTranslationKey(queryJSON.sortBy)), value: queryJSON.sortBy};
+    const sortOrder = queryJSON.sortOrder;
 
     const onSortChange = (column: SearchColumnType) => {
         clearSelectedTransactions();
-        const newQuery = buildSearchQueryString({
-            ...queryJSON,
-            sortBy: column,
-            sortOrder: CONST.SEARCH.SORT_ORDER.DESC,
-        });
+        const newQuery = buildSearchQueryString({...queryJSON, sortBy: column});
         onSort();
         // We want to explicitly clear stale rawQuery since it's only used for manually typed-in queries.
         close(() => {
@@ -56,20 +54,28 @@ function SortByPopup({searchResults, queryJSON, groupBy, onSort, closeOverlay}:
     };
 
     return (
-        <SingleSelectPopup
-            style={styles.p0}
-            label={shouldUseNarrowLayout ? undefined : translate('search.display.sortBy')}
-            items={sortableColumns}
-            value={sortBy}
-            closeOverlay={closeOverlay}
-            defaultValue={sortableColumns.at(0)?.value}
-            onChange={(item) => {
-                if (!item) {
-                    return;
-                }
-                onSortChange(item.value);
-            }}
-        />
+        <>
+            <MenuItemWithTopDescription
+                shouldShowRightIcon
+                description={translate('search.display.sortOrder')}
+                title={sortOrder ? translate(`search.filters.sortOrder.${sortOrder}`) : undefined}
+                onPress={onSortOrderPress}
+            />
+            <View style={styles.dividerLine} />
+            <SingleSelectPopup
+                style={styles.p0}
+                items={sortableColumns}
+                value={sortBy}
+                closeOverlay={closeOverlay}
+                defaultValue={sortableColumns.at(0)?.value}
+                onChange={(item) => {
+                    if (!item) {
+                        return;
+                    }
+                    onSortChange(item.value);
+                }}
+            />
+        </>
     );
 }
 
diff --git a/src/components/Search/FilterDropdowns/SortOrderPopup.tsx b/src/components/Search/FilterDropdowns/SortOrderPopup.tsx
new file mode 100644
index 000000000000..83734a263380
--- /dev/null
+++ b/src/components/Search/FilterDropdowns/SortOrderPopup.tsx
@@ -0,0 +1,53 @@
+import React from 'react';
+import {useSearchActionsContext} from '@components/Search/SearchContext';
+import type {SearchQueryJSON, SortOrder} from '@components/Search/types';
+import useLocalize from '@hooks/useLocalize';
+import useThemeStyles from '@hooks/useThemeStyles';
+import {close} from '@libs/actions/Modal';
+import Navigation from '@libs/Navigation/Navigation';
+import {buildSearchQueryString} from '@libs/SearchQueryUtils';
+import {getSortOrderOptions} from '@libs/SearchUIUtils';
+import SingleSelectPopup from './SingleSelectPopup';
+
+type SortOrderPopupProps = {
+    queryJSON: SearchQueryJSON;
+    onSort: () => void;
+    closeOverlay: () => void;
+};
+
+function SortOrderPopup({queryJSON, onSort, closeOverlay}: SortOrderPopupProps) {
+    const {translate} = useLocalize();
+    const styles = useThemeStyles();
+    const {clearSelectedTransactions} = useSearchActionsContext();
+
+    const onSortChange = (sortOrder: SortOrder) => {
+        clearSelectedTransactions();
+        const newQuery = buildSearchQueryString({...queryJSON, sortOrder});
+        onSort();
+        // We want to explicitly clear stale rawQuery since it's only used for manually typed-in queries.
+        close(() => {
+            Navigation.setParams({q: newQuery, rawQuery: undefined});
+        });
+    };
+
+    const sortOrderOptions = getSortOrderOptions(translate);
+    const sortOrder = {text: translate(`search.filters.sortOrder.${queryJSON.sortOrder}`), value: queryJSON.sortOrder};
+
+    return (
+        <SingleSelectPopup
+            style={styles.p0}
+            items={sortOrderOptions}
+            value={sortOrder}
+            closeOverlay={closeOverlay}
+            defaultValue={sortOrderOptions.at(0)?.value}
+            onChange={(item) => {
+                if (!item) {
+                    return;
+                }
+                onSortChange(item.value);
+            }}
+        />
+    );
+}
+
+export default SortOrderPopup;
diff --git a/src/components/Search/FilterDropdowns/UserSelectPopup.tsx b/src/components/Search/FilterDropdowns/UserSelectPopup.tsx
index f220e9890b5a..e751d236cf06 100644
--- a/src/components/Search/FilterDropdowns/UserSelectPopup.tsx
+++ b/src/components/Search/FilterDropdowns/UserSelectPopup.tsx
@@ -14,6 +14,7 @@ import useWindowDimensions from '@hooks/useWindowDimensions';
 import canFocusInputOnScreenFocus from '@libs/canFocusInputOnScreenFocus';
 import {getParticipantsOption} from '@libs/OptionsListUtils';
 import type {OptionData} from '@libs/ReportUtils';
+import variables from '@styles/variables';
 import CONST from '@src/CONST';
 import ONYXKEYS from '@src/ONYXKEYS';
 import BasePopup from './BasePopup';
@@ -176,7 +177,16 @@ function UserSelectPopup({value, label, closeOverlay, onChange, isSearchable}: U
             onApply={applyChanges}
             resetSentryLabel={CONST.SENTRY_LABEL.SEARCH.FILTER_POPUP_RESET_USER}
             applySentryLabel={CONST.SENTRY_LABEL.SEARCH.FILTER_POPUP_APPLY_USER}
-            style={[styles.getUserSelectionListPopoverHeight(listData.length || 1, windowHeight, shouldUseNarrowLayout, isInLandscapeMode, shouldShowSearchInput)]}
+            style={[
+                styles.getCommonSelectionListPopoverHeight(
+                    listData.length || 1,
+                    variables.optionRowHeightCompact,
+                    windowHeight,
+                    shouldUseNarrowLayout,
+                    isInLandscapeMode,
+                    shouldShowSearchInput,
+                ),
+            ]}
         >
             <SelectionList
                 data={listData}
@@ -188,6 +198,7 @@ function UserSelectPopup({value, label, closeOverlay, onChange, isSearchable}: U
                 isLoadingNewOptions={isLoadingNewOptions}
                 shouldShowLoadingPlaceholder={!areOptionsInitialized}
                 onEndReached={onListEndReached}
+                style={{contentContainerStyle: [styles.pb0]}}
             />
         </BasePopup>
     );
diff --git a/src/components/Search/FilterDropdowns/WorkspaceSelectPopup.tsx b/src/components/Search/FilterDropdowns/WorkspaceSelectPopup.tsx
index 4f8be0b07f51..e2afd79b33a6 100644
--- a/src/components/Search/FilterDropdowns/WorkspaceSelectPopup.tsx
+++ b/src/components/Search/FilterDropdowns/WorkspaceSelectPopup.tsx
@@ -6,13 +6,13 @@ import useOnyx from '@hooks/useOnyx';
 import ONYXKEYS from '@src/ONYXKEYS';
 import type {SearchAdvancedFiltersForm} from '@src/types/form';
 import type {Icon} from '@src/types/onyx/OnyxCommon';
-import type {PopoverComponentProps} from './DropdownButton';
 import type {MultiSelectItem} from './MultiSelectPopup';
 import MultiSelectPopup from './MultiSelectPopup';
 
-type WorkspaceSelectPopupProps = PopoverComponentProps & {
-    updateFilterForm: (values: Partial<SearchAdvancedFiltersForm>) => void;
+type WorkspaceSelectPopupProps = {
     policyIDQuery: string[] | undefined;
+    updateFilterForm: (values: Partial<SearchAdvancedFiltersForm>) => void;
+    closeOverlay: () => void;
 };
 
 function filterPolicyIDSelector(searchAdvancedFiltersForm: OnyxEntry<SearchAdvancedFiltersForm>) {
diff --git a/src/components/Search/SearchAutocompleteInput.tsx b/src/components/Search/SearchAutocompleteInput.tsx
index 9b097fb86a0f..df1785d31675 100644
--- a/src/components/Search/SearchAutocompleteInput.tsx
+++ b/src/components/Search/SearchAutocompleteInput.tsx
@@ -2,7 +2,7 @@
 import passthroughPolicyTagListSelector from '@selectors/PolicyTagList';
 import type {ForwardedRef} from 'react';
 import React, {useEffect, useRef} from 'react';
-import type {StyleProp, TextInputProps, ViewStyle} from 'react-native';
+import type {StyleProp, TextInputProps, TextStyle, ViewStyle} from 'react-native';
 import {View} from 'react-native';
 import Animated, {interpolateColor, useAnimatedStyle, useSharedValue} from 'react-native-reanimated';
 import FormHelpMessage from '@components/FormHelpMessage';
@@ -60,6 +60,12 @@ type SearchAutocompleteInputProps = {
     /** Any additional styles to apply to text input along with FormHelperMessage */
     outerWrapperStyle?: StyleProp<ViewStyle>;
 
+    inputStyle?: StyleProp<TextStyle>;
+
+    inputContainerStyle?: StyleProp<ViewStyle>;
+
+    touchableInputWrapperStyle?: StyleProp<ViewStyle>;
+
     /** Whether the search reports API call is running  */
     isSearchingForReports?: boolean;
 
@@ -88,6 +94,9 @@ function SearchAutocompleteInput({
     wrapperStyle,
     wrapperFocusedStyle = {},
     outerWrapperStyle,
+    inputStyle,
+    inputContainerStyle,
+    touchableInputWrapperStyle,
     isSearchingForReports,
     selection,
     substitutionMap,
@@ -193,63 +202,62 @@ function SearchAutocompleteInput({
 
     return (
         <View style={[outerWrapperStyle]}>
-            <Animated.View style={[styles.flexRow, styles.alignItemsCenter, wrapperStyle ?? styles.searchRouterTextInputContainer, wrapperAnimatedStyle, wrapperBorderColorAnimatedStyle]}>
-                <View style={styles.flex1}>
-                    <TextInput
-                        testID="search-autocomplete-text-input"
-                        value={value}
-                        onChangeText={onSearchQueryChange}
-                        autoFocus={shouldDelayFocus ? autoFocusAfterNav : autoFocus}
-                        caretHidden={caretHidden}
-                        role={CONST.ROLE.SEARCHBOX}
-                        placeholder={translate('search.searchPlaceholder')}
-                        autoCapitalize="none"
-                        autoCorrect={false}
-                        spellCheck={false}
-                        enterKeyHint="search"
-                        accessibilityLabel={translate('search.searchPlaceholder')}
-                        disabled={disabled}
-                        maxLength={CONST.SEARCH_QUERY_LIMIT}
-                        onSubmitEditing={onSubmit}
-                        shouldUseDisabledStyles={false}
-                        textInputContainerStyles={[styles.borderNone, styles.pb0, styles.pl3]}
-                        inputStyle={[inputWidth, styles.lineHeightUndefined]}
-                        placeholderTextColor={theme.textSupporting}
-                        loadingSpinnerStyle={[styles.mt0, styles.mr1, styles.justifyContentCenter]}
-                        onFocus={() => {
-                            onFocus?.();
-                            focusedSharedValue.set(true);
-                        }}
-                        onBlur={() => {
-                            focusedSharedValue.set(false);
-                            onBlur?.();
-                        }}
-                        onKeyPress={onKeyPress}
-                        isLoading={isSearchingForReports}
-                        ref={(element) => {
-                            if (!ref) {
-                                return;
-                            }
-
-                            inputRef.current = element as AnimatedTextInputRef;
-
-                            if (typeof ref === 'function') {
-                                ref(element);
-                                return;
-                            }
-
-                            // eslint-disable-next-line no-param-reassign
-                            ref.current = element;
-                        }}
-                        type="markdown"
-                        multiline={false}
-                        parser={parser}
-                        selection={selection}
-                        shouldShowClearButton={!!value && !isSearchingForReports}
-                        shouldHideClearButton={false}
-                        onClearInput={clearInput}
-                    />
-                </View>
+            <Animated.View style={[wrapperStyle ?? styles.searchRouterTextInputContainer, wrapperAnimatedStyle, wrapperBorderColorAnimatedStyle]}>
+                <TextInput
+                    testID="search-autocomplete-text-input"
+                    value={value}
+                    onChangeText={onSearchQueryChange}
+                    autoFocus={shouldDelayFocus ? autoFocusAfterNav : autoFocus}
+                    caretHidden={caretHidden}
+                    role={CONST.ROLE.SEARCHBOX}
+                    placeholder={translate('search.searchPlaceholder')}
+                    autoCapitalize="none"
+                    autoCorrect={false}
+                    spellCheck={false}
+                    enterKeyHint="search"
+                    accessibilityLabel={translate('search.searchPlaceholder')}
+                    disabled={disabled}
+                    maxLength={CONST.SEARCH_QUERY_LIMIT}
+                    onSubmitEditing={onSubmit}
+                    shouldUseDisabledStyles={false}
+                    textInputContainerStyles={[styles.borderNone, styles.pb0, styles.ph3, inputContainerStyle]}
+                    inputStyle={[inputWidth, styles.lineHeightUndefined, inputStyle]}
+                    touchableInputWrapperStyle={touchableInputWrapperStyle}
+                    placeholderTextColor={theme.textSupporting}
+                    loadingSpinnerStyle={[styles.mt0, styles.mr1, styles.justifyContentCenter]}
+                    onFocus={() => {
+                        onFocus?.();
+                        focusedSharedValue.set(true);
+                    }}
+                    onBlur={() => {
+                        focusedSharedValue.set(false);
+                        onBlur?.();
+                    }}
+                    onKeyPress={onKeyPress}
+                    isLoading={isSearchingForReports}
+                    ref={(element) => {
+                        if (!ref) {
+                            return;
+                        }
+
+                        inputRef.current = element as AnimatedTextInputRef;
+
+                        if (typeof ref === 'function') {
+                            ref(element);
+                            return;
+                        }
+
+                        // eslint-disable-next-line no-param-reassign
+                        ref.current = element;
+                    }}
+                    type="markdown"
+                    multiline={false}
+                    parser={parser}
+                    selection={selection}
+                    shouldShowClearButton={!!value && !isSearchingForReports}
+                    shouldHideClearButton={false}
+                    onClearInput={clearInput}
+                />
             </Animated.View>
             <FormHelpMessage
                 style={styles.ph3}
diff --git a/src/components/Search/SearchContext.tsx b/src/components/Search/SearchContext.tsx
index a3cb3981b31c..bcfe7f5f3121 100644
--- a/src/components/Search/SearchContext.tsx
+++ b/src/components/Search/SearchContext.tsx
@@ -61,7 +61,7 @@ const defaultSearchStateContext: SearchStateContextValue = {
     lastSearchType: undefined,
     areAllMatchingItemsSelected: false,
     shouldShowSelectAllMatchingItems: false,
-    shouldShowActionsBarLoading: false,
+    shouldShowFiltersBarLoading: false,
     currentSearchResults: undefined,
     shouldUseLiveData: false,
 };
@@ -72,7 +72,7 @@ const defaultSearchActionsContext: SearchActionsContextValue = {
     setSelectedTransactions: () => {},
     removeTransaction: () => {},
     clearSelectedTransactions: () => {},
-    setShouldShowActionsBarLoading: () => {},
+    setShouldShowFiltersBarLoading: () => {},
     setShouldShowSelectAllMatchingItems: () => {},
     selectAllMatchingItems: () => {},
     setShouldResetSearchQuery: () => {},
@@ -103,7 +103,7 @@ function SearchContextProvider({children}: SearchContextProps) {
     const areTransactionsEmpty = useRef(true);
     const [lastSearchType, setLastSearchType] = useState<string>();
     const [areAllMatchingItemsSelected, selectAllMatchingItems] = useState(false);
-    const [shouldShowActionsBarLoading, setShouldShowActionsBarLoading] = useState(false);
+    const [shouldShowFiltersBarLoading, setShouldShowFiltersBarLoading] = useState(false);
     const [shouldShowSelectAllMatchingItems, setShouldShowSelectAllMatchingItems] = useState(false);
     const [searchContextData, setSearchContextData] = useState({...defaultSearchContextData});
 
@@ -330,7 +330,7 @@ function SearchContextProvider({children}: SearchContextProps) {
             currentSimilarSearchHash,
             currentSearchResults,
             shouldUseLiveData,
-            shouldShowActionsBarLoading,
+            shouldShowFiltersBarLoading,
             lastSearchType,
             shouldShowSelectAllMatchingItems,
             areAllMatchingItemsSelected,
@@ -344,7 +344,7 @@ function SearchContextProvider({children}: SearchContextProps) {
             currentSimilarSearchHash,
             currentSearchResults,
             shouldUseLiveData,
-            shouldShowActionsBarLoading,
+            shouldShowFiltersBarLoading,
             lastSearchType,
             shouldShowSelectAllMatchingItems,
             areAllMatchingItemsSelected,
@@ -358,13 +358,13 @@ function SearchContextProvider({children}: SearchContextProps) {
             setSelectedTransactions,
             setCurrentSelectedTransactionReportID,
             clearSelectedTransactions,
-            setShouldShowActionsBarLoading,
+            setShouldShowFiltersBarLoading,
             setLastSearchType,
             setShouldShowSelectAllMatchingItems,
             selectAllMatchingItems,
             setShouldResetSearchQuery,
         }),
-        // setShouldShowActionsBarLoading, setLastSearchType, setShouldShowSelectAllMatchingItems,
+        // shouldShowFiltersBarLoading, setLastSearchType, setShouldShowSelectAllMatchingItems,
         // and selectAllMatchingItems are stable useState setters — excluded from deps intentionally.
         // setCurrentSelectedTransactionReportID only uses setSearchContextData (stable setter).
         [removeTransaction, setSelectedTransactions, clearSelectedTransactions, setShouldResetSearchQuery],
diff --git a/src/components/Search/SearchPageHeader/SearchActionsBarCreateButton.tsx b/src/components/Search/SearchPageHeader/SearchActionsBarCreateButton.tsx
index f0ff7e5c994d..8e11164b2582 100644
--- a/src/components/Search/SearchPageHeader/SearchActionsBarCreateButton.tsx
+++ b/src/components/Search/SearchPageHeader/SearchActionsBarCreateButton.tsx
@@ -227,7 +227,7 @@ function SearchActionsBarCreateButton() {
     );
 
     return (
-        <View style={[styles.pr5, styles.searchActionsBarCreateButton]}>
+        <View style={[styles.searchActionsBarCreateButton]}>
             <PopoverMenu
                 onClose={hideCreateMenu}
                 isVisible={isCreateMenuActive}
diff --git a/src/components/Search/SearchPageHeader/SearchActionsBarNarrow.tsx b/src/components/Search/SearchPageHeader/SearchActionsBarNarrow.tsx
index 2c3622b58f03..73d85a6e306a 100644
--- a/src/components/Search/SearchPageHeader/SearchActionsBarNarrow.tsx
+++ b/src/components/Search/SearchPageHeader/SearchActionsBarNarrow.tsx
@@ -1,76 +1,34 @@
+// NOTE: This component has a static twin in SearchPageNarrow/StaticSearchActionsBar.tsx
+// used for fast perceived performance. If you change the UI here, verify the
+// static version still looks visually identical.
 import React from 'react';
 import {View} from 'react-native';
 import type {OnyxEntry} from 'react-native-onyx';
-import Button from '@components/Button';
-import SearchBulkActionsButton from '@components/Search/SearchBulkActionsButton';
 import type {SearchQueryJSON} from '@components/Search/types';
-import SearchActionsSkeleton from '@components/Skeletons/SearchActionsSkeleton';
-import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset';
-import type {SkeletonSpanReasonAttributes} from '@libs/telemetry/useSkeletonSpan';
+import useThemeStyles from '@hooks/useThemeStyles';
 import type {SearchResults} from '@src/types/onyx';
 import SearchAdvancedFiltersButton from './SearchAdvancedFiltersButton';
 import SearchDisplayDropdownButton from './SearchDisplayDropdownButton';
 import SearchSaveButton from './SearchSaveButton';
-import useSearchActionsBar from './useSearchActionsBar';
 
 type SearchActionsBarNarrowProps = {
     queryJSON: SearchQueryJSON;
-    isMobileSelectionModeEnabled: boolean;
-    isSearchInputVisible: boolean;
     searchResults: OnyxEntry<SearchResults>;
-    onSearchButtonPress: () => void;
     onSort: () => void;
 };
 
-// NOTE: This is intentionally unused for now. It will be wired up in https://github.com/Expensify/App/issues/84876
-function SearchActionsBarNarrow({queryJSON, isMobileSelectionModeEnabled, isSearchInputVisible, searchResults, onSearchButtonPress, onSort}: SearchActionsBarNarrowProps) {
-    const {hasErrors, shouldShowActionsBarLoading, shouldShowSelectedDropdown, styles} = useSearchActionsBar(queryJSON, isMobileSelectionModeEnabled);
-    const expensifyIcons = useMemoizedLazyExpensifyIcons(['MagnifyingGlass']);
-
-    if (hasErrors) {
-        return null;
-    }
-
-    if (shouldShowActionsBarLoading) {
-        const skeletonReasonAttributes: SkeletonSpanReasonAttributes = {
-            context: 'SearchActionsBarNarrow',
-            shouldShowActionsBarLoading,
-        };
-        return (
-            <SearchActionsSkeleton
-                shouldAnimate
-                reasonAttributes={skeletonReasonAttributes}
-            />
-        );
-    }
+function SearchActionsBarNarrow({queryJSON, searchResults, onSort}: SearchActionsBarNarrowProps) {
+    const styles = useThemeStyles();
 
     return (
-        <View style={[styles.searchActionsBarContainer]}>
-            {shouldShowSelectedDropdown ? (
-                <SearchBulkActionsButton queryJSON={queryJSON} />
-            ) : (
-                <>
-                    <View style={[styles.flexRow, styles.gap2]}>
-                        {!isSearchInputVisible && (
-                            <Button
-                                testID="search-button-narrow"
-                                icon={expensifyIcons.MagnifyingGlass}
-                                small
-                                onPress={onSearchButtonPress}
-                            />
-                        )}
-                        <SearchAdvancedFiltersButton queryJSON={queryJSON} />
-                    </View>
-                    <View style={[styles.flexRow, styles.gap2]}>
-                        <SearchSaveButton />
-                        <SearchDisplayDropdownButton
-                            queryJSON={queryJSON}
-                            searchResults={searchResults}
-                            onSort={onSort}
-                        />
-                    </View>
-                </>
-            )}
+        <View style={[styles.flexRow, styles.alignItemsCenter, styles.mr5, styles.mb4]}>
+            <SearchAdvancedFiltersButton queryJSON={queryJSON} />
+            <SearchSaveButton />
+            <SearchDisplayDropdownButton
+                queryJSON={queryJSON}
+                searchResults={searchResults}
+                onSort={onSort}
+            />
         </View>
     );
 }
@@ -78,3 +36,4 @@ function SearchActionsBarNarrow({queryJSON, isMobileSelectionModeEnabled, isSear
 SearchActionsBarNarrow.displayName = 'SearchActionsBarNarrow';
 
 export default SearchActionsBarNarrow;
+export type {SearchActionsBarNarrowProps};
diff --git a/src/components/Search/SearchPageHeader/SearchActionsBarWide.tsx b/src/components/Search/SearchPageHeader/SearchActionsBarWide.tsx
index 19a074780a63..2e59b322e194 100644
--- a/src/components/Search/SearchPageHeader/SearchActionsBarWide.tsx
+++ b/src/components/Search/SearchPageHeader/SearchActionsBarWide.tsx
@@ -1,24 +1,17 @@
 import React from 'react';
 import {View} from 'react-native';
 import type {OnyxEntry} from 'react-native-onyx';
-import DropdownButton from '@components/Search/FilterDropdowns/DropdownButton';
-import type {DropdownButtonProps} from '@components/Search/FilterDropdowns/DropdownButton';
-import useFilterFeedValue from '@components/Search/hooks/useFilterFeedValue';
-import useFilterFromValue from '@components/Search/hooks/useFilterFromValue';
-import useFilterWorkspaceValue from '@components/Search/hooks/useFilterWorkspaceValue';
 import SearchBulkActionsButton from '@components/Search/SearchBulkActionsButton';
+import {useSearchStateContext} from '@components/Search/SearchContext';
 import type {SearchQueryJSON} from '@components/Search/types';
-import SearchActionsSkeleton from '@components/Skeletons/SearchActionsSkeleton';
-import type {SkeletonSpanReasonAttributes} from '@libs/telemetry/useSkeletonSpan';
-import FILTER_KEYS from '@src/types/form/SearchAdvancedFiltersForm';
-import type {SearchAdvancedFiltersKey} from '@src/types/form/SearchAdvancedFiltersForm';
+import useThemeStyles from '@hooks/useThemeStyles';
 import type {SearchResults} from '@src/types/onyx';
 import SearchActionsBarCreateButton from './SearchActionsBarCreateButton';
 import SearchAdvancedFiltersButton from './SearchAdvancedFiltersButton';
 import SearchDisplayDropdownButton from './SearchDisplayDropdownButton';
+import SearchFiltersBarWide from './SearchFiltersBarWide';
 import SearchPageInputWide from './SearchPageInputWide';
 import SearchSaveButton from './SearchSaveButton';
-import useSearchActionsBar from './useSearchActionsBar';
 
 type SearchActionsBarWideProps = {
     queryJSON: SearchQueryJSON;
@@ -27,75 +20,17 @@ type SearchActionsBarWideProps = {
     onSort: () => void;
 };
 
-type SearchDropdownProps = Omit<DropdownButtonProps, 'viewportOffsetTop'>;
-
-function FromDropdown({label, value, PopoverComponent, sentryLabel}: SearchDropdownProps) {
-    const fromValue = useFilterFromValue(value);
-    return (
-        <DropdownButton
-            label={label}
-            value={fromValue ?? []}
-            PopoverComponent={PopoverComponent}
-            sentryLabel={sentryLabel}
-        />
-    );
-}
-
-function WorkspaceDropdown({label, value, PopoverComponent, sentryLabel}: SearchDropdownProps) {
-    const workspaceValue = useFilterWorkspaceValue(value);
-    return (
-        <DropdownButton
-            label={label}
-            value={workspaceValue ?? []}
-            PopoverComponent={PopoverComponent}
-            sentryLabel={sentryLabel}
-        />
-    );
-}
-
-function FeedDropdown({label, value, PopoverComponent, sentryLabel}: SearchDropdownProps) {
-    const feedValue = useFilterFeedValue(value);
-    return (
-        <DropdownButton
-            label={label}
-            value={feedValue}
-            PopoverComponent={PopoverComponent}
-            sentryLabel={sentryLabel}
-        />
-    );
-}
-
-const FILTER_KEY_TO_COMPONENT: Partial<Record<SearchAdvancedFiltersKey, React.ComponentType<SearchDropdownProps>>> = {
-    [FILTER_KEYS.FROM]: FromDropdown,
-    [FILTER_KEYS.POLICY_ID]: WorkspaceDropdown,
-    [FILTER_KEYS.FEED]: FeedDropdown,
-};
-
-// NOTE: This is intentionally unused for now. It will be wired up in https://github.com/Expensify/App/issues/84876
 function SearchActionsBarWide({queryJSON, searchResults, handleSearch, onSort}: SearchActionsBarWideProps) {
-    const {filters, hasErrors, shouldShowActionsBarLoading, shouldShowSelectedDropdown, styles} = useSearchActionsBar(queryJSON, false);
-
-    if (hasErrors) {
-        return null;
-    }
-
-    if (shouldShowActionsBarLoading) {
-        const skeletonReasonAttributes: SkeletonSpanReasonAttributes = {
-            context: 'SearchActionsBarWide',
-            shouldShowActionsBarLoading,
-        };
-        return (
-            <SearchActionsSkeleton
-                shouldAnimate
-                reasonAttributes={skeletonReasonAttributes}
-            />
-        );
-    }
+    const styles = useThemeStyles();
+    const {selectedTransactions} = useSearchStateContext();
+    const hasSelectedItems = Object.keys(selectedTransactions ?? {}).length > 0;
 
     return (
-        <View style={[styles.searchActionsBarContainer, styles.gap2]}>
-            {shouldShowSelectedDropdown ? (
-                <SearchBulkActionsButton queryJSON={queryJSON} />
+        <View style={[styles.searchActionsBarContainer, styles.gap2, styles.mt3]}>
+            {hasSelectedItems ? (
+                <View style={styles.searchBulkActionsButton}>
+                    <SearchBulkActionsButton queryJSON={queryJSON} />
+                </View>
             ) : (
                 <>
                     <View style={[styles.flexRow, styles.alignItemsCenter, styles.pRelative, styles.w100, styles.flexWrap, styles.flexShrink1, styles.gap2, styles.zIndex10]}>
@@ -103,18 +38,7 @@ function SearchActionsBarWide({queryJSON, searchResults, handleSearch, onSort}:
                             queryJSON={queryJSON}
                             handleSearch={handleSearch}
                         />
-                        {filters.map((item) => {
-                            const Component = FILTER_KEY_TO_COMPONENT[item.key] ?? DropdownButton;
-                            return (
-                                <Component
-                                    key={item.key}
-                                    label={item.label}
-                                    value={item.value}
-                                    PopoverComponent={item.PopoverComponent}
-                                    sentryLabel={item.sentryLabel}
-                                />
-                            );
-                        })}
+                        <SearchFiltersBarWide queryJSON={queryJSON} />
                     </View>
                     <View style={styles.filtersBar}>
                         <SearchAdvancedFiltersButton queryJSON={queryJSON} />
diff --git a/src/components/Search/SearchPageHeader/SearchAdvancedFiltersButton.tsx b/src/components/Search/SearchPageHeader/SearchAdvancedFiltersButton.tsx
index 899a099eef0b..33599b21aa49 100644
--- a/src/components/Search/SearchPageHeader/SearchAdvancedFiltersButton.tsx
+++ b/src/components/Search/SearchPageHeader/SearchAdvancedFiltersButton.tsx
@@ -1,17 +1,29 @@
 import React from 'react';
 import Button from '@components/Button';
+import Icon from '@components/Icon';
+import {PressableWithFeedback} from '@components/Pressable';
 import type {SearchQueryJSON} from '@components/Search/types';
 import useFilterFormValues from '@hooks/useFilterFormValues';
 import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset';
 import useLocalize from '@hooks/useLocalize';
+import useResponsiveLayout from '@hooks/useResponsiveLayout';
 import useSearchFilterSync from '@hooks/useSearchFilterSync';
+import useTheme from '@hooks/useTheme';
+import useThemeStyles from '@hooks/useThemeStyles';
 import {updateAdvancedFilters} from '@libs/actions/Search';
 import Navigation from '@libs/Navigation/Navigation';
 import CONST from '@src/CONST';
 import ROUTES from '@src/ROUTES';
 
-function SearchAdvancedFiltersButton({queryJSON}: {queryJSON: SearchQueryJSON}) {
+type SearchAdvancedFiltersButtonProp = {
+    queryJSON: SearchQueryJSON;
+};
+
+function SearchAdvancedFiltersButton({queryJSON}: SearchAdvancedFiltersButtonProp) {
     const {translate} = useLocalize();
+    const theme = useTheme();
+    const styles = useThemeStyles();
+    const {shouldUseNarrowLayout, isMediumScreenWidth} = useResponsiveLayout();
     const expensifyIcons = useMemoizedLazyExpensifyIcons(['Filter']);
     const filterFormValues = useFilterFormValues(queryJSON);
     useSearchFilterSync(filterFormValues);
@@ -21,9 +33,30 @@ function SearchAdvancedFiltersButton({queryJSON}: {queryJSON: SearchQueryJSON})
         Navigation.navigate(ROUTES.SEARCH_ADVANCED_FILTERS.getRoute());
     };
 
+    if (shouldUseNarrowLayout || isMediumScreenWidth) {
+        return (
+            <PressableWithFeedback
+                accessibilityLabel={translate('search.filtersHeader')}
+                role={CONST.ROLE.BUTTON}
+                style={[styles.searchActionsBar(shouldUseNarrowLayout)]}
+                hoverStyle={styles.buttonHoveredBG}
+                sentryLabel={CONST.SENTRY_LABEL.SEARCH.ADVANCED_FILTERS_BUTTON}
+                onPress={openAdvancedFilters}
+            >
+                <Icon
+                    src={expensifyIcons.Filter}
+                    fill={theme.icon}
+                    small={shouldUseNarrowLayout}
+                    extraSmall={isMediumScreenWidth}
+                />
+            </PressableWithFeedback>
+        );
+    }
+
     return (
         <Button
             small
+            accessibilityLabel={translate('search.filtersHeader')}
             text={translate('search.filtersHeader')}
             icon={expensifyIcons.Filter}
             onPress={openAdvancedFilters}
diff --git a/src/components/Search/SearchPageHeader/SearchDisplayDropdownButton.tsx b/src/components/Search/SearchPageHeader/SearchDisplayDropdownButton.tsx
index 5b08a5c74576..646916d844ec 100644
--- a/src/components/Search/SearchPageHeader/SearchDisplayDropdownButton.tsx
+++ b/src/components/Search/SearchPageHeader/SearchDisplayDropdownButton.tsx
@@ -1,10 +1,16 @@
 import React from 'react';
 import type {OnyxEntry} from 'react-native-onyx';
+import Icon from '@components/Icon';
+import {PressableWithFeedback} from '@components/Pressable';
 import DisplayPopup from '@components/Search/FilterDropdowns/DisplayPopup';
 import DropdownButton from '@components/Search/FilterDropdowns/DropdownButton';
-import type {PopoverComponentProps} from '@components/Search/FilterDropdowns/DropdownButton';
+import type {DropdownButtonProps} from '@components/Search/FilterDropdowns/DropdownButton';
 import type {SearchQueryJSON} from '@components/Search/types';
+import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset';
 import useLocalize from '@hooks/useLocalize';
+import useResponsiveLayout from '@hooks/useResponsiveLayout';
+import useTheme from '@hooks/useTheme';
+import useThemeStyles from '@hooks/useThemeStyles';
 import CONST from '@src/CONST';
 import type {SearchResults} from '@src/types/onyx';
 
@@ -16,12 +22,16 @@ type SearchDisplayDropdownButtonProps = {
 
 function SearchDisplayDropdownButton({queryJSON, searchResults, onSort}: SearchDisplayDropdownButtonProps) {
     const {translate} = useLocalize();
+    const {shouldUseNarrowLayout, isMediumScreenWidth} = useResponsiveLayout();
+    const expensifyIcons = useMemoizedLazyExpensifyIcons(['Gear']);
+    const theme = useTheme();
+    const styles = useThemeStyles();
 
     if (queryJSON.type === CONST.SEARCH.DATA_TYPES.CHAT) {
         return null;
     }
 
-    const displayPopup = ({closeOverlay}: PopoverComponentProps) => (
+    const displayPopup = ({closeOverlay}: {closeOverlay: () => void}) => (
         <DisplayPopup
             queryJSON={queryJSON}
             searchResults={searchResults}
@@ -30,12 +40,32 @@ function SearchDisplayDropdownButton({queryJSON, searchResults, onSort}: SearchD
         />
     );
 
+    const displayIconButton: DropdownButtonProps['ButtonComponent'] = (props) => (
+        <PressableWithFeedback
+            ref={props.ref}
+            accessibilityLabel={translate('search.display.label')}
+            role={CONST.ROLE.BUTTON}
+            style={[styles.searchActionsBar(shouldUseNarrowLayout)]}
+            hoverStyle={styles.buttonHoveredBG}
+            sentryLabel={CONST.SENTRY_LABEL.SEARCH.FILTER_DISPLAY}
+            onPress={props.onPress}
+        >
+            <Icon
+                src={expensifyIcons.Gear}
+                fill={theme.icon}
+                small={shouldUseNarrowLayout}
+                extraSmall={isMediumScreenWidth}
+            />
+        </PressableWithFeedback>
+    );
+
     return (
         <DropdownButton
             label={translate('search.display.label')}
             sentryLabel={CONST.SENTRY_LABEL.SEARCH.FILTER_DISPLAY}
             value={null}
             PopoverComponent={displayPopup}
+            ButtonComponent={shouldUseNarrowLayout || isMediumScreenWidth ? displayIconButton : undefined}
         />
     );
 }
diff --git a/src/components/Search/SearchPageHeader/SearchFilterBar.tsx b/src/components/Search/SearchPageHeader/SearchFilterBar.tsx
new file mode 100644
index 000000000000..b71cf4856c62
--- /dev/null
+++ b/src/components/Search/SearchPageHeader/SearchFilterBar.tsx
@@ -0,0 +1,105 @@
+import React from 'react';
+import DropdownButton from '@components/Search/FilterDropdowns/DropdownButton';
+import type {DropdownButtonProps} from '@components/Search/FilterDropdowns/DropdownButton';
+import useFilterCardValue from '@components/Search/hooks/useFilterCardValue';
+import useFilterReportValue from '@components/Search/hooks/useFilterReportValue';
+import useFilterTaxRateValue from '@components/Search/hooks/useFilterTaxRateValue';
+import useFilterUserValue from '@components/Search/hooks/useFilterUserValue';
+import useFilterWorkspaceValue from '@components/Search/hooks/useFilterWorkspaceValue';
+import type {SearchFilter} from '@libs/SearchUIUtils';
+import FILTER_KEYS from '@src/types/form/SearchAdvancedFiltersForm';
+import type {SearchAdvancedFiltersKey} from '@src/types/form/SearchAdvancedFiltersForm';
+import type {FilterItem} from './useSearchFiltersBar';
+
+type SearchDropdownProps = Omit<DropdownButtonProps, 'viewportOffsetTop'>;
+
+function UserDropdown({label, value, PopoverComponent, sentryLabel}: SearchDropdownProps) {
+    const users = useFilterUserValue(value);
+    return (
+        <DropdownButton
+            label={label}
+            value={users ?? []}
+            PopoverComponent={PopoverComponent}
+            sentryLabel={sentryLabel}
+        />
+    );
+}
+
+function WorkspaceDropdown({label, value, PopoverComponent, sentryLabel}: SearchDropdownProps) {
+    const workspaceValue = useFilterWorkspaceValue(value);
+    return (
+        <DropdownButton
+            label={label}
+            value={workspaceValue ?? []}
+            PopoverComponent={PopoverComponent}
+            sentryLabel={sentryLabel}
+        />
+    );
+}
+
+function CardDropdown({label, PopoverComponent, sentryLabel}: SearchDropdownProps) {
+    const cardValue = useFilterCardValue();
+    return (
+        <DropdownButton
+            label={label}
+            value={cardValue}
+            PopoverComponent={PopoverComponent}
+            sentryLabel={sentryLabel}
+        />
+    );
+}
+
+function TaxRateDropdown({label, PopoverComponent, sentryLabel}: SearchDropdownProps) {
+    const taxRateValue = useFilterTaxRateValue();
+    return (
+        <DropdownButton
+            label={label}
+            value={taxRateValue}
+            PopoverComponent={PopoverComponent}
+            sentryLabel={sentryLabel}
+        />
+    );
+}
+
+function ReportDropdown({label, value, PopoverComponent, sentryLabel}: SearchDropdownProps) {
+    const reportValue = useFilterReportValue(value);
+    return (
+        <DropdownButton
+            label={label}
+            value={reportValue}
+            PopoverComponent={PopoverComponent}
+            sentryLabel={sentryLabel}
+        />
+    );
+}
+
+const FILTER_COMPONENT_MAP: Partial<Record<SearchAdvancedFiltersKey, React.ComponentType<SearchDropdownProps>>> = {
+    [FILTER_KEYS.FROM]: UserDropdown,
+    [FILTER_KEYS.TO]: UserDropdown,
+    [FILTER_KEYS.ATTENDEE]: UserDropdown,
+    [FILTER_KEYS.ASSIGNEE]: UserDropdown,
+
+    [FILTER_KEYS.POLICY_ID]: WorkspaceDropdown,
+
+    [FILTER_KEYS.FEED]: CardDropdown,
+    [FILTER_KEYS.CARD_ID]: CardDropdown,
+
+    [FILTER_KEYS.TAX_RATE]: TaxRateDropdown,
+
+    [FILTER_KEYS.IN]: ReportDropdown,
+};
+
+function SearchFilterBar({item}: {item: SearchFilter & FilterItem}) {
+    const Component = FILTER_COMPONENT_MAP[item.key] ?? DropdownButton;
+    return (
+        <Component
+            key={item.key}
+            label={item.label}
+            value={item.value}
+            PopoverComponent={item.PopoverComponent}
+            sentryLabel={item.sentryLabel}
+        />
+    );
+}
+
+export default SearchFilterBar;
diff --git a/src/components/Search/SearchPageHeader/SearchFiltersBar.tsx b/src/components/Search/SearchPageHeader/SearchFiltersBar.tsx
deleted file mode 100644
index a902c94e08ec..000000000000
--- a/src/components/Search/SearchPageHeader/SearchFiltersBar.tsx
+++ /dev/null
@@ -1,28 +0,0 @@
-import React from 'react';
-import type {SearchQueryJSON} from '@components/Search/types';
-import useResponsiveLayout from '@hooks/useResponsiveLayout';
-import SearchFiltersBarNarrow from './SearchFiltersBarNarrow';
-import SearchFiltersBarWide from './SearchFiltersBarWide';
-
-type SearchFiltersBarProps = {
-    queryJSON: SearchQueryJSON;
-    isMobileSelectionModeEnabled: boolean;
-};
-
-function SearchFiltersBar({queryJSON, isMobileSelectionModeEnabled}: SearchFiltersBarProps) {
-    const {shouldUseNarrowLayout} = useResponsiveLayout();
-
-    return shouldUseNarrowLayout ? (
-        <SearchFiltersBarNarrow
-            queryJSON={queryJSON}
-            isMobileSelectionModeEnabled={isMobileSelectionModeEnabled}
-        />
-    ) : (
-        <SearchFiltersBarWide
-            queryJSON={queryJSON}
-            isMobileSelectionModeEnabled={isMobileSelectionModeEnabled}
-        />
-    );
-}
-
-export default SearchFiltersBar;
diff --git a/src/components/Search/SearchPageHeader/SearchFiltersBarNarrow.tsx b/src/components/Search/SearchPageHeader/SearchFiltersBarNarrow.tsx
index cbfc8e23de4f..c0e4a54afcd2 100644
--- a/src/components/Search/SearchPageHeader/SearchFiltersBarNarrow.tsx
+++ b/src/components/Search/SearchPageHeader/SearchFiltersBarNarrow.tsx
@@ -1,30 +1,21 @@
-// NOTE: This component has a static twin in SearchPageNarrow/StaticFiltersBar.tsx
-// used for fast perceived performance. If you change the UI here, verify the
-// static version still looks visually identical.
 import React, {useRef} from 'react';
-import {FlatList, View} from 'react-native';
-import Button from '@components/Button';
-import DropdownButton from '@components/Search/FilterDropdowns/DropdownButton';
-import SearchBulkActionsButton from '@components/Search/SearchBulkActionsButton';
+import {FlatList} from 'react-native';
 import type {SearchQueryJSON} from '@components/Search/types';
-import SearchActionsSkeleton from '@components/Skeletons/SearchActionsSkeleton';
+import SearchFiltersSkeleton from '@components/Skeletons/SearchFiltersSkeleton';
+import type {SearchFilter} from '@libs/SearchUIUtils';
 import shouldAdjustScroll from '@libs/shouldAdjustScroll';
 import type {SkeletonSpanReasonAttributes} from '@libs/telemetry/useSkeletonSpan';
-import CONST from '@src/CONST';
-import type {FilterItem} from './useSearchFiltersBar';
+import SearchFilterBar from './SearchFilterBar';
 import useSearchFiltersBar from './useSearchFiltersBar';
+import type {FilterItem} from './useSearchFiltersBar';
 
 type SearchFiltersBarNarrowProps = {
     queryJSON: SearchQueryJSON;
-    isMobileSelectionModeEnabled: boolean;
 };
 
-function SearchFiltersBarNarrow({queryJSON, isMobileSelectionModeEnabled}: SearchFiltersBarNarrowProps) {
-    const scrollRef = useRef<FlatList<FilterItem>>(null);
-    const {filters, hasErrors, shouldShowFiltersBarLoading, shouldShowSelectedDropdown, filterButtonText, openAdvancedFilters, expensifyIcons, theme, styles} = useSearchFiltersBar(
-        queryJSON,
-        isMobileSelectionModeEnabled,
-    );
+function SearchFiltersBarNarrow({queryJSON}: SearchFiltersBarNarrowProps) {
+    const scrollRef = useRef<FlatList<SearchFilter & FilterItem>>(null);
+    const {filters, hasErrors, shouldShowFiltersBarLoading, styles} = useSearchFiltersBar(queryJSON);
 
     const adjustScroll = (info: {distanceFromEnd: number}) => {
         // Workaround for a known React Native bug on Android (https://github.com/facebook/react-native/issues/27504):
@@ -38,31 +29,7 @@ function SearchFiltersBarNarrow({queryJSON, isMobileSelectionModeEnabled}: Searc
         scrollRef.current?.scrollToEnd();
     };
 
-    const renderFilterItem = ({item}: {item: FilterItem}) => (
-        <DropdownButton
-            label={item.label}
-            value={item.value}
-            PopoverComponent={item.PopoverComponent}
-            sentryLabel={item.sentryLabel}
-        />
-    );
-
-    const renderListFooter = () => (
-        <View style={[styles.flexRow, styles.gap2]}>
-            <Button
-                link
-                small
-                shouldUseDefaultHover={false}
-                text={filterButtonText}
-                iconFill={theme.link}
-                iconHoverFill={theme.linkHover}
-                icon={expensifyIcons.Filter}
-                textStyles={[styles.textMicroBold]}
-                onPress={openAdvancedFilters}
-                sentryLabel={CONST.SENTRY_LABEL.SEARCH.ADVANCED_FILTERS_BUTTON}
-            />
-        </View>
-    );
+    const renderFilterItem = ({item}: {item: SearchFilter & FilterItem}) => <SearchFilterBar item={item} />;
 
     if (hasErrors) {
         return null;
@@ -74,7 +41,7 @@ function SearchFiltersBarNarrow({queryJSON, isMobileSelectionModeEnabled}: Searc
             shouldShowFiltersBarLoading,
         };
         return (
-            <SearchActionsSkeleton
+            <SearchFiltersSkeleton
                 shouldAnimate
                 reasonAttributes={skeletonReasonAttributes}
             />
@@ -82,29 +49,23 @@ function SearchFiltersBarNarrow({queryJSON, isMobileSelectionModeEnabled}: Searc
     }
 
     return (
-        <View style={[shouldShowSelectedDropdown && styles.ph5, styles.mb2, styles.searchFiltersBarContainer]}>
-            {shouldShowSelectedDropdown ? (
-                <SearchBulkActionsButton queryJSON={queryJSON} />
-            ) : (
-                <FlatList
-                    horizontal
-                    keyboardShouldPersistTaps="always"
-                    style={[styles.flexRow, styles.overflowScroll, styles.flexGrow0]}
-                    contentContainerStyle={[styles.flexRow, styles.flexGrow0, styles.gap2, styles.ph5]}
-                    ref={scrollRef}
-                    showsHorizontalScrollIndicator={false}
-                    data={filters}
-                    keyExtractor={(item) => item.label}
-                    renderItem={renderFilterItem}
-                    ListFooterComponent={renderListFooter}
-                    onEndReached={adjustScroll}
-                    onEndReachedThreshold={0.75}
-                />
-            )}
-        </View>
+        <FlatList
+            horizontal
+            keyboardShouldPersistTaps="always"
+            style={[styles.flexRow, styles.overflowScroll, styles.flexGrow0, !!filters.length && styles.mb4]}
+            contentContainerStyle={[styles.flexRow, styles.flexGrow0, styles.gap2, styles.ph5]}
+            ref={scrollRef}
+            showsHorizontalScrollIndicator={false}
+            data={filters}
+            keyExtractor={(item) => item.key}
+            renderItem={renderFilterItem}
+            onEndReached={adjustScroll}
+            onEndReachedThreshold={0.75}
+        />
     );
 }
 
 SearchFiltersBarNarrow.displayName = 'SearchFiltersBarNarrow';
 
 export default SearchFiltersBarNarrow;
+export type {SearchFiltersBarNarrowProps};
diff --git a/src/components/Search/SearchPageHeader/SearchFiltersBarWide.tsx b/src/components/Search/SearchPageHeader/SearchFiltersBarWide.tsx
index b4e218958039..024ec2403407 100644
--- a/src/components/Search/SearchPageHeader/SearchFiltersBarWide.tsx
+++ b/src/components/Search/SearchPageHeader/SearchFiltersBarWide.tsx
@@ -1,35 +1,16 @@
 import React from 'react';
-import {View} from 'react-native';
-import Button from '@components/Button';
-import DropdownButton from '@components/Search/FilterDropdowns/DropdownButton';
-import SearchBulkActionsButton from '@components/Search/SearchBulkActionsButton';
 import type {SearchQueryJSON} from '@components/Search/types';
-import SearchActionsSkeleton from '@components/Skeletons/SearchActionsSkeleton';
+import SearchFiltersSkeleton from '@components/Skeletons/SearchFiltersSkeleton';
 import type {SkeletonSpanReasonAttributes} from '@libs/telemetry/useSkeletonSpan';
-import CONST from '@src/CONST';
-import SearchActionsBarCreateButton from './SearchActionsBarCreateButton';
+import SearchFilterBar from './SearchFilterBar';
 import useSearchFiltersBar from './useSearchFiltersBar';
 
 type SearchFiltersBarWideProps = {
     queryJSON: SearchQueryJSON;
-    isMobileSelectionModeEnabled: boolean;
 };
 
-function SearchFiltersBarWide({queryJSON, isMobileSelectionModeEnabled}: SearchFiltersBarWideProps) {
-    const {
-        filters,
-        hasErrors,
-        shouldShowFiltersBarLoading,
-        shouldShowSelectedDropdown,
-        shouldShowColumnsButton,
-        filterButtonText,
-        openAdvancedFilters,
-        openSearchColumns,
-        expensifyIcons,
-        theme,
-        styles,
-        translate,
-    } = useSearchFiltersBar(queryJSON, isMobileSelectionModeEnabled);
+function SearchFiltersBarWide({queryJSON}: SearchFiltersBarWideProps) {
+    const {filters, hasErrors, shouldShowFiltersBarLoading} = useSearchFiltersBar(queryJSON);
 
     if (hasErrors) {
         return null;
@@ -41,63 +22,19 @@ function SearchFiltersBarWide({queryJSON, isMobileSelectionModeEnabled}: SearchF
             shouldShowFiltersBarLoading,
         };
         return (
-            <SearchActionsSkeleton
+            <SearchFiltersSkeleton
                 shouldAnimate
                 reasonAttributes={skeletonReasonAttributes}
             />
         );
     }
 
-    return (
-        <View style={[shouldShowSelectedDropdown && styles.ph5, styles.mb4, styles.searchFiltersBarContainer, styles.gap5]}>
-            {shouldShowSelectedDropdown ? (
-                <SearchBulkActionsButton queryJSON={queryJSON} />
-            ) : (
-                <>
-                    <View style={[styles.flexRow, styles.flexWrap, styles.flexShrink1, styles.gap2, styles.ph5]}>
-                        {filters.map((item) => (
-                            <DropdownButton
-                                key={item.label}
-                                label={item.label}
-                                value={item.value}
-                                PopoverComponent={item.PopoverComponent}
-                                sentryLabel={item.sentryLabel}
-                            />
-                        ))}
-                        <View style={[styles.flexRow, styles.gap2]}>
-                            <Button
-                                link
-                                small
-                                shouldUseDefaultHover={false}
-                                text={filterButtonText}
-                                iconFill={theme.link}
-                                iconHoverFill={theme.linkHover}
-                                icon={expensifyIcons.Filter}
-                                textStyles={[styles.textMicroBold]}
-                                onPress={openAdvancedFilters}
-                                sentryLabel={CONST.SENTRY_LABEL.SEARCH.ADVANCED_FILTERS_BUTTON}
-                            />
-                            {shouldShowColumnsButton && (
-                                <Button
-                                    link
-                                    small
-                                    shouldUseDefaultHover={false}
-                                    text={translate('search.columns')}
-                                    iconFill={theme.link}
-                                    iconHoverFill={theme.linkHover}
-                                    icon={expensifyIcons.Columns}
-                                    textStyles={[styles.textMicroBold]}
-                                    onPress={openSearchColumns}
-                                    sentryLabel={CONST.SENTRY_LABEL.SEARCH.COLUMNS_BUTTON}
-                                />
-                            )}
-                        </View>
-                    </View>
-                    <SearchActionsBarCreateButton />
-                </>
-            )}
-        </View>
-    );
+    return filters.map((item) => (
+        <SearchFilterBar
+            key={item.key}
+            item={item}
+        />
+    ));
 }
 
 SearchFiltersBarWide.displayName = 'SearchFiltersBarWide';
diff --git a/src/components/Search/SearchPageHeader/SearchPageHeader.tsx b/src/components/Search/SearchPageHeader/SearchPageHeader.tsx
deleted file mode 100644
index eb130182b741..000000000000
--- a/src/components/Search/SearchPageHeader/SearchPageHeader.tsx
+++ /dev/null
@@ -1,53 +0,0 @@
-// NOTE: The narrow-layout rendering of this component has a static twin in
-// SearchPageNarrow/StaticSearchPageHeader.tsx used for fast perceived
-// performance. If you change the narrow-layout UI here, verify the static
-// version still looks visually identical.
-import React from 'react';
-import type {SearchQueryJSON} from '@components/Search/types';
-import useResponsiveLayout from '@hooks/useResponsiveLayout';
-import SearchSelectedNarrow from '@pages/Search/SearchSelectedNarrow';
-import type CONST from '@src/CONST';
-import type DeepValueOf from '@src/types/utils/DeepValueOf';
-import SearchPageHeaderInput from './SearchPageHeaderInput';
-
-type SearchPageHeaderProps = {
-    queryJSON: SearchQueryJSON;
-    searchRouterListVisible?: boolean;
-    hideSearchRouterList?: () => void;
-    onSearchRouterFocus?: () => void;
-    handleSearch: (value: string) => void;
-    isMobileSelectionModeEnabled: boolean;
-    skipInputSkeleton?: boolean;
-};
-
-type SearchHeaderOptionValue = DeepValueOf<typeof CONST.SEARCH.BULK_ACTION_TYPES> | undefined;
-
-function SearchPageHeader({
-    queryJSON,
-    searchRouterListVisible,
-    hideSearchRouterList,
-    onSearchRouterFocus,
-    handleSearch,
-    isMobileSelectionModeEnabled,
-    skipInputSkeleton,
-}: SearchPageHeaderProps) {
-    const {shouldUseNarrowLayout} = useResponsiveLayout();
-
-    if (shouldUseNarrowLayout && isMobileSelectionModeEnabled) {
-        return <SearchSelectedNarrow queryJSON={queryJSON} />;
-    }
-
-    return (
-        <SearchPageHeaderInput
-            searchRouterListVisible={searchRouterListVisible}
-            onSearchRouterFocus={onSearchRouterFocus}
-            queryJSON={queryJSON}
-            hideSearchRouterList={hideSearchRouterList}
-            handleSearch={handleSearch}
-            skipInputSkeleton={skipInputSkeleton}
-        />
-    );
-}
-
-export type {SearchHeaderOptionValue};
-export default SearchPageHeader;
diff --git a/src/components/Search/SearchPageHeader/SearchPageHeaderInput.tsx b/src/components/Search/SearchPageHeader/SearchPageHeaderInput.tsx
deleted file mode 100644
index ab754329e7ce..000000000000
--- a/src/components/Search/SearchPageHeader/SearchPageHeaderInput.tsx
+++ /dev/null
@@ -1,386 +0,0 @@
-import {useIsFocused} from '@react-navigation/native';
-import {hasSeenTourSelector} from '@selectors/Onboarding';
-import {accountIDSelector} from '@selectors/Session';
-import {deepEqual} from 'fast-equals';
-import isEmpty from 'lodash/isEmpty';
-import React, {useCallback, useEffect, useMemo, useRef, useState} from 'react';
-import type {TextInputKeyPressEvent} from 'react-native';
-import {View} from 'react-native';
-import Animated from 'react-native-reanimated';
-import {usePersonalDetails} from '@components/OnyxListItemProvider';
-import type {AnimatedTextInputRef} from '@components/RNTextInput';
-import SearchAutocompleteList from '@components/Search/SearchAutocompleteList';
-import SearchInputSelectionWrapper from '@components/Search/SearchInputSelectionWrapper';
-import type {SearchQueryItem} from '@components/Search/SearchList/ListItem/SearchQueryListItem';
-import {isSearchQueryItem} from '@components/Search/SearchList/ListItem/SearchQueryListItem';
-import {buildSubstitutionsMap} from '@components/Search/SearchRouter/buildSubstitutionsMap';
-import type {SubstitutionMap} from '@components/Search/SearchRouter/getQueryWithSubstitutions';
-import {getQueryWithSubstitutions} from '@components/Search/SearchRouter/getQueryWithSubstitutions';
-import {getUpdatedSubstitutionsMap} from '@components/Search/SearchRouter/getUpdatedSubstitutionsMap';
-import {useSearchRouterActions} from '@components/Search/SearchRouter/SearchRouterContext';
-import type {SearchQueryJSON, SearchQueryString} from '@components/Search/types';
-import type {SelectionListWithSectionsHandle} from '@components/SelectionList/SelectionListWithSections/types';
-import SidePanelButton from '@components/SidePanel/SidePanelButton';
-import useFeedKeysWithAssignedCards from '@hooks/useFeedKeysWithAssignedCards';
-import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset';
-import useLocalize from '@hooks/useLocalize';
-import useOnyx from '@hooks/useOnyx';
-import useReportAttributes from '@hooks/useReportAttributes';
-import useResponsiveLayout from '@hooks/useResponsiveLayout';
-import useTheme from '@hooks/useTheme';
-import useThemeStyles from '@hooks/useThemeStyles';
-import {navigateToAndOpenReport} from '@libs/actions/Report';
-import {setSearchContext} from '@libs/actions/Search';
-import Navigation from '@libs/Navigation/Navigation';
-import {getAllTaxRates} from '@libs/PolicyUtils';
-import type {OptionData} from '@libs/ReportUtils';
-import {getAutocompleteQueryWithComma, getTrimmedUserSearchQueryPreservingComma} from '@libs/SearchAutocompleteUtils';
-import {buildUserReadableQueryString, getQueryWithUpdatedValues, sanitizeSearchValue} from '@libs/SearchQueryUtils';
-import StringUtils from '@libs/StringUtils';
-import variables from '@styles/variables';
-import CONST from '@src/CONST';
-import ONYXKEYS from '@src/ONYXKEYS';
-import ROUTES from '@src/ROUTES';
-import KeyboardUtils from '@src/utils/keyboard';
-
-// When counting absolute positioning, we need to account for borders
-const BORDER_WIDTH = 1;
-
-type SearchPageHeaderInputProps = {
-    queryJSON: SearchQueryJSON;
-    searchRouterListVisible?: boolean;
-    hideSearchRouterList?: () => void;
-    onSearchRouterFocus?: () => void;
-    handleSearch: (value: string) => void;
-    skipInputSkeleton?: boolean;
-};
-
-function SearchPageHeaderInput({queryJSON, searchRouterListVisible, hideSearchRouterList, onSearchRouterFocus, handleSearch, skipInputSkeleton}: SearchPageHeaderInputProps) {
-    const styles = useThemeStyles();
-    const theme = useTheme();
-    const {translate} = useLocalize();
-    const {shouldUseNarrowLayout: displayNarrowHeader} = useResponsiveLayout();
-    const expensifyIcons = useMemoizedLazyExpensifyIcons(['MagnifyingGlass']);
-    const personalDetails = usePersonalDetails();
-    const [reports] = useOnyx(ONYXKEYS.COLLECTION.REPORT);
-    const [policies] = useOnyx(ONYXKEYS.COLLECTION.POLICY);
-    const reportAttributes = useReportAttributes();
-    const taxRates = useMemo(() => getAllTaxRates(policies), [policies]);
-    const [personalAndWorkspaceCards] = useOnyx(ONYXKEYS.DERIVED.PERSONAL_AND_WORKSPACE_CARD_LIST);
-    const [allFeeds] = useOnyx(ONYXKEYS.COLLECTION.SHARED_NVP_PRIVATE_DOMAIN_MEMBER);
-    const feedKeysWithCards = useFeedKeysWithAssignedCards();
-    const {inputQuery: originalInputQuery} = queryJSON;
-    const [currentUserAccountID = -1] = useOnyx(ONYXKEYS.SESSION, {selector: accountIDSelector});
-    const [introSelected] = useOnyx(ONYXKEYS.NVP_INTRO_SELECTED);
-    const [betas] = useOnyx(ONYXKEYS.BETAS);
-    const [isSelfTourViewed] = useOnyx(ONYXKEYS.NVP_ONBOARDING, {selector: hasSeenTourSelector});
-    const queryText = buildUserReadableQueryString({
-        queryJSON,
-        PersonalDetails: personalDetails,
-        reports,
-        taxRates,
-        cardList: personalAndWorkspaceCards,
-        cardFeeds: allFeeds,
-        policies,
-        currentUserAccountID,
-        autoCompleteWithSpace: true,
-        translate,
-        feedKeysWithCards,
-        reportAttributes,
-    });
-
-    const [searchContext] = useOnyx(ONYXKEYS.SEARCH_CONTEXT);
-    const shouldShowQuery = searchContext?.shouldShowSearchQuery ?? false;
-
-    const [textInputValue, setTextInputValue] = useState('');
-    // The input text that was last used for autocomplete; needed for the SearchAutocompleteList when browsing list via arrow keys
-    const [autocompleteQueryValue, setAutocompleteQueryValue] = useState('');
-    const [selection, setSelection] = useState({start: textInputValue.length, end: textInputValue.length});
-
-    const [autocompleteSubstitutions, setAutocompleteSubstitutions] = useState<SubstitutionMap>({});
-    const [isAutocompleteListVisible, setIsAutocompleteListVisible] = useState(false);
-    const listRef = useRef<SelectionListWithSectionsHandle>(null);
-    const textInputRef = useRef<AnimatedTextInputRef>(null);
-    const hasMountedRef = useRef(false);
-    const isFocused = useIsFocused();
-    const {registerSearchPageInput} = useSearchRouterActions();
-
-    useEffect(() => {
-        hasMountedRef.current = true;
-    }, []);
-
-    // useEffect for blurring TextInput when we cancel SearchRouter interaction on narrow layout
-    useEffect(() => {
-        if (!displayNarrowHeader || !!searchRouterListVisible || !textInputRef.current || !textInputRef.current.isFocused()) {
-            return;
-        }
-        textInputRef.current.blur();
-        // eslint-disable-next-line react-hooks/exhaustive-deps
-    }, [searchRouterListVisible]);
-
-    useEffect(() => {
-        if (displayNarrowHeader || !isFocused || !textInputRef.current) {
-            return;
-        }
-
-        registerSearchPageInput(textInputRef.current);
-    }, [isFocused, registerSearchPageInput, displayNarrowHeader]);
-
-    useEffect(() => {
-        const newValue = shouldShowQuery ? queryText : '';
-
-        setTextInputValue(newValue);
-        setAutocompleteQueryValue(newValue);
-    }, [queryText, shouldShowQuery]);
-
-    useEffect(() => {
-        const substitutionsMap = buildSubstitutionsMap(
-            originalInputQuery,
-            personalDetails,
-            reports,
-            taxRates,
-            personalAndWorkspaceCards,
-            allFeeds,
-            policies,
-            currentUserAccountID,
-            translate,
-            reportAttributes,
-        );
-        setAutocompleteSubstitutions(substitutionsMap);
-    }, [allFeeds, personalAndWorkspaceCards, originalInputQuery, personalDetails, reports, taxRates, policies, currentUserAccountID, translate, reportAttributes]);
-
-    const onFocus = useCallback(() => {
-        onSearchRouterFocus?.();
-        // eslint-disable-next-line react-hooks/exhaustive-deps
-    }, []);
-
-    const handleKeyPress = useCallback((e: TextInputKeyPressEvent) => {
-        const keyEvent = e as unknown as KeyboardEvent;
-
-        if (keyEvent.key === CONST.KEYBOARD_SHORTCUTS.ESCAPE.shortcutKey && textInputRef.current?.isFocused()) {
-            keyEvent.preventDefault();
-            textInputRef.current.blur();
-        }
-    }, []);
-
-    const handleSearchAction = useCallback(
-        (value: string) => {
-            // Skip calling handleSearch on the initial mount
-            if (!hasMountedRef.current) {
-                return;
-            }
-            handleSearch(value);
-        },
-        [handleSearch],
-    );
-    const onSearchQueryChange = useCallback(
-        (userQuery: string) => {
-            const singleLineUserQuery = StringUtils.lineBreaksToSpaces(userQuery, true);
-            const updatedUserQuery = getAutocompleteQueryWithComma(textInputValue, singleLineUserQuery);
-            setTextInputValue(updatedUserQuery);
-            setAutocompleteQueryValue(updatedUserQuery);
-
-            const updatedSubstitutionsMap = getUpdatedSubstitutionsMap(singleLineUserQuery, autocompleteSubstitutions);
-            if (!deepEqual(autocompleteSubstitutions, updatedSubstitutionsMap) && !isEmpty(updatedSubstitutionsMap)) {
-                setAutocompleteSubstitutions(updatedSubstitutionsMap);
-            }
-        },
-        [autocompleteSubstitutions, setTextInputValue, textInputValue],
-    );
-
-    const submitSearch = useCallback(
-        (queryString: SearchQueryString, shouldSkipAmountConversion = false) => {
-            const queryWithSubstitutions = getQueryWithSubstitutions(queryString, autocompleteSubstitutions);
-            const updatedQuery = getQueryWithUpdatedValues(queryWithSubstitutions, shouldSkipAmountConversion);
-
-            if (!updatedQuery) {
-                return;
-            }
-
-            setSearchContext(true);
-            Navigation.navigate(
-                ROUTES.SEARCH_ROOT.getRoute({
-                    query: updatedQuery,
-                    rawQuery: queryWithSubstitutions,
-                }),
-            );
-            hideSearchRouterList?.();
-            setIsAutocompleteListVisible(false);
-            if (updatedQuery !== originalInputQuery) {
-                setTextInputValue('');
-                setAutocompleteQueryValue('');
-            }
-        },
-        [autocompleteSubstitutions, hideSearchRouterList, originalInputQuery],
-    );
-
-    const onListItemPress = useCallback(
-        (item: OptionData | SearchQueryItem) => {
-            if (isSearchQueryItem(item)) {
-                if (!item.searchQuery) {
-                    return;
-                }
-
-                if (item.searchItemType === CONST.SEARCH.SEARCH_ROUTER_ITEM_TYPE.AUTOCOMPLETE_SUGGESTION && textInputValue) {
-                    const fieldKey = item.mapKey?.includes(':') ? item.mapKey.split(':').at(0) : item.mapKey;
-                    const trimmedUserSearchQuery = getTrimmedUserSearchQueryPreservingComma(textInputValue, fieldKey);
-                    const newSearchQuery = `${trimmedUserSearchQuery}${sanitizeSearchValue(item.searchQuery)}\u00A0`;
-
-                    onSearchQueryChange(newSearchQuery);
-                    setSelection({start: newSearchQuery.length, end: newSearchQuery.length});
-
-                    if (item.mapKey && item.autocompleteID) {
-                        const substitutions = {...autocompleteSubstitutions, [item.mapKey]: item.autocompleteID};
-                        setAutocompleteSubstitutions(substitutions);
-                    }
-                } else if (item.searchItemType === CONST.SEARCH.SEARCH_ROUTER_ITEM_TYPE.SEARCH) {
-                    submitSearch(item.searchQuery, item.keyForList !== CONST.SEARCH.SEARCH_ROUTER_ITEM_TYPE.FIND_ITEM);
-                }
-            } else if (item?.reportID) {
-                Navigation.navigate(ROUTES.REPORT_WITH_ID.getRoute(item?.reportID));
-            } else if ('login' in item) {
-                navigateToAndOpenReport(item.login ? [item.login] : [], currentUserAccountID, introSelected, isSelfTourViewed, betas, false);
-            }
-        },
-        [autocompleteSubstitutions, onSearchQueryChange, submitSearch, textInputValue, currentUserAccountID, introSelected, isSelfTourViewed, betas],
-    );
-
-    const searchQueryItem = useMemo(
-        () =>
-            textInputValue
-                ? {
-                      text: textInputValue,
-                      singleIcon: expensifyIcons.MagnifyingGlass,
-                      searchQuery: textInputValue,
-                      itemStyle: styles.activeComponentBG,
-                      keyForList: CONST.SEARCH.SEARCH_ROUTER_ITEM_TYPE.FIND_ITEM,
-                      searchItemType: CONST.SEARCH.SEARCH_ROUTER_ITEM_TYPE.SEARCH,
-                  }
-                : undefined,
-        [textInputValue, expensifyIcons.MagnifyingGlass, styles.activeComponentBG],
-    );
-
-    if (displayNarrowHeader) {
-        return (
-            <View
-                dataSet={{dragArea: false}}
-                style={[styles.flex1]}
-            >
-                <View style={[styles.appBG, styles.flex1]}>
-                    <View style={[styles.flexRow, styles.mh5, styles.mb3, styles.alignItemsCenter, styles.justifyContentCenter, {height: variables.searchTopBarHeight}]}>
-                        <Animated.View style={[styles.flex1, styles.zIndex10]}>
-                            <SearchInputSelectionWrapper
-                                value={textInputValue}
-                                substitutionMap={autocompleteSubstitutions}
-                                selection={selection}
-                                onSearchQueryChange={onSearchQueryChange}
-                                isFullWidth
-                                onSubmit={() => {
-                                    KeyboardUtils.dismiss().then(() => submitSearch(textInputValue));
-                                }}
-                                autoFocus={false}
-                                onFocus={onFocus}
-                                wrapperStyle={{...styles.searchAutocompleteInputResults, ...styles.br2}}
-                                wrapperFocusedStyle={styles.searchAutocompleteInputResultsFocused}
-                                ref={textInputRef}
-                                onKeyPress={handleKeyPress}
-                                skipSkeleton={skipInputSkeleton}
-                            />
-                        </Animated.View>
-                    </View>
-                    {!!searchRouterListVisible && (
-                        <View style={[styles.flex1]}>
-                            <SearchAutocompleteList
-                                autocompleteQueryValue={autocompleteQueryValue}
-                                handleSearch={handleSearchAction}
-                                searchQueryItem={searchQueryItem}
-                                onListItemPress={onListItemPress}
-                                ref={listRef}
-                                personalDetails={personalDetails}
-                                reports={reports}
-                                allCards={personalAndWorkspaceCards}
-                                allFeeds={allFeeds}
-                                textInputRef={textInputRef}
-                            />
-                        </View>
-                    )}
-                </View>
-            </View>
-        );
-    }
-
-    const hideAutocompleteList = () => setIsAutocompleteListVisible(false);
-    const showAutocompleteList = () => {
-        setIsAutocompleteListVisible(true);
-    };
-    // we need `- BORDER_WIDTH` to achieve the effect that the input will not "jump"
-    const leftPopoverHorizontalPosition = 12 - BORDER_WIDTH;
-    const rightPopoverHorizontalPosition = 4 - BORDER_WIDTH;
-    const autocompleteInputStyle = isAutocompleteListVisible
-        ? [
-              styles.border,
-              styles.borderRadiusComponentLarge,
-              styles.pAbsolute,
-              styles.pt2,
-              {top: 8 - BORDER_WIDTH, left: leftPopoverHorizontalPosition, right: rightPopoverHorizontalPosition},
-              {boxShadow: theme.shadow},
-          ]
-        : [styles.pt4];
-    const inputWrapperActiveStyle = isAutocompleteListVisible ? styles.ph2 : null;
-
-    return (
-        <View style={[styles.flexRow, styles.alignItemsCenter, styles.zIndex10, styles.mr3]}>
-            <View
-                dataSet={{dragArea: false}}
-                style={[styles.searchResultsHeaderBar, styles.flex1, isAutocompleteListVisible && styles.pr1, isAutocompleteListVisible && styles.pl3]}
-            >
-                <View style={[styles.appBG, ...autocompleteInputStyle]}>
-                    <View style={[styles.flex1]}>
-                        <SearchInputSelectionWrapper
-                            value={textInputValue}
-                            onSearchQueryChange={onSearchQueryChange}
-                            isFullWidth
-                            onSubmit={() => {
-                                const focusedOption = listRef.current?.getFocusedOption();
-                                if (focusedOption) {
-                                    return;
-                                }
-                                submitSearch(textInputValue);
-                            }}
-                            autoFocus={false}
-                            onFocus={showAutocompleteList}
-                            onBlur={hideAutocompleteList}
-                            wrapperStyle={{...styles.searchAutocompleteInputResults, ...styles.br2}}
-                            wrapperFocusedStyle={styles.searchAutocompleteInputResultsFocused}
-                            outerWrapperStyle={[inputWrapperActiveStyle, styles.pb2]}
-                            ref={textInputRef}
-                            selection={selection}
-                            substitutionMap={autocompleteSubstitutions}
-                            onKeyPress={handleKeyPress}
-                        />
-                    </View>
-                    {isAutocompleteListVisible && (
-                        <View style={[styles.mh65vh]}>
-                            <SearchAutocompleteList
-                                autocompleteQueryValue={autocompleteQueryValue}
-                                handleSearch={handleSearchAction}
-                                searchQueryItem={searchQueryItem}
-                                onListItemPress={onListItemPress}
-                                ref={listRef}
-                                shouldSubscribeToArrowKeyEvents={isAutocompleteListVisible}
-                                personalDetails={personalDetails}
-                                reports={reports}
-                                allCards={personalAndWorkspaceCards}
-                                allFeeds={allFeeds}
-                                textInputRef={textInputRef}
-                            />
-                        </View>
-                    )}
-                </View>
-            </View>
-            <SidePanelButton style={styles.mt1Half} />
-        </View>
-    );
-}
-
-export default SearchPageHeaderInput;
diff --git a/src/components/Search/SearchPageHeader/SearchPageHeaderNarrow.tsx b/src/components/Search/SearchPageHeader/SearchPageHeaderNarrow.tsx
index 064282118009..77fcd198de6b 100644
--- a/src/components/Search/SearchPageHeader/SearchPageHeaderNarrow.tsx
+++ b/src/components/Search/SearchPageHeader/SearchPageHeaderNarrow.tsx
@@ -10,7 +10,7 @@ type SearchPageHeaderNarrowProps = {
     isMobileSelectionModeEnabled: boolean;
     cancelSearch?: () => void;
 };
-// NOTE: This is intentionally unused for now. It will be wired up in https://github.com/Expensify/App/issues/84876
+
 function SearchPageHeaderNarrow({queryJSON, shouldShowLoadingBar = false, isMobileSelectionModeEnabled, cancelSearch}: SearchPageHeaderNarrowProps) {
     const {translate} = useLocalize();
 
@@ -23,6 +23,7 @@ function SearchPageHeaderNarrow({queryJSON, shouldShowLoadingBar = false, isMobi
             shouldShowLoadingBar={shouldShowLoadingBar}
             breadcrumbLabel={translate('common.reports')}
             shouldDisplaySearch={false}
+            shouldDisplayHelpButton
             cancelSearch={cancelSearch}
         />
     );
diff --git a/src/components/Search/SearchPageHeader/SearchPageHeaderWide.tsx b/src/components/Search/SearchPageHeader/SearchPageHeaderWide.tsx
index 2647f64f3f07..d108950b9ee3 100644
--- a/src/components/Search/SearchPageHeader/SearchPageHeaderWide.tsx
+++ b/src/components/Search/SearchPageHeader/SearchPageHeaderWide.tsx
@@ -7,7 +7,7 @@ import useSearchTypeMenuSections from '@hooks/useSearchTypeMenuSections';
 type SearchPageHeaderWideProps = {
     queryJSON: SearchQueryJSON;
 };
-// NOTE: This is intentionally unused for now. It will be wired up in https://github.com/Expensify/App/issues/84876
+
 function SearchPageHeaderWide({queryJSON}: SearchPageHeaderWideProps) {
     const {translate} = useLocalize();
     const {typeMenuSections, activeItemIndex} = useSearchTypeMenuSections(queryJSON);
diff --git a/src/components/Search/SearchPageHeader/SearchPageInputNarrow.tsx b/src/components/Search/SearchPageHeader/SearchPageInputNarrow.tsx
index 31107f394daa..d3f21d127611 100644
--- a/src/components/Search/SearchPageHeader/SearchPageInputNarrow.tsx
+++ b/src/components/Search/SearchPageHeader/SearchPageInputNarrow.tsx
@@ -1,3 +1,6 @@
+// NOTE: This component has a static twin in SearchPageNarrow/StaticSearchPageInput.tsx
+// used for fast perceived performance. If you change the UI here, verify the
+// static version still looks visually identical.
 import React, {useEffect} from 'react';
 import {View} from 'react-native';
 import Animated from 'react-native-reanimated';
@@ -14,9 +17,9 @@ type SearchPageInputNarrowProps = {
     hideSearchRouterList: () => void;
     onSearchRouterFocus: () => void;
     handleSearch: (value: string) => void;
+    skipSkeleton: boolean;
 };
-// NOTE: This is intentionally unused for now. It will be wired up in https://github.com/Expensify/App/issues/84876
-function SearchPageInputNarrow({queryJSON, searchRouterListVisible, hideSearchRouterList, onSearchRouterFocus, handleSearch}: SearchPageInputNarrowProps) {
+function SearchPageInputNarrow({queryJSON, searchRouterListVisible, hideSearchRouterList, onSearchRouterFocus, handleSearch, skipSkeleton}: SearchPageInputNarrowProps) {
     const styles = useThemeStyles();
 
     const {
@@ -53,9 +56,9 @@ function SearchPageInputNarrow({queryJSON, searchRouterListVisible, hideSearchRo
     return (
         <View
             dataSet={{dragArea: false}}
-            style={[styles.flex1, styles.appBG, searchRouterListVisible && styles.pt2]}
+            style={[styles.flex1, styles.appBG]}
         >
-            <View style={[styles.flexRow, styles.mh5, searchRouterListVisible ? styles.mb3 : styles.mb4, styles.alignItemsCenter, styles.justifyContentCenter]}>
+            <View style={[styles.flexRow, styles.ml5, searchRouterListVisible ? [styles.mb3, styles.mr5] : [styles.mb4, styles.mr3]]}>
                 <Animated.View style={[styles.flex1, styles.zIndex10]}>
                     <SearchInputSelectionWrapper
                         value={textInputValue}
@@ -68,10 +71,12 @@ function SearchPageInputNarrow({queryJSON, searchRouterListVisible, hideSearchRo
                         }}
                         autoFocus={false}
                         onFocus={onSearchRouterFocus}
-                        wrapperStyle={{...styles.newSearchAutocompleteInputResults, ...styles.br2}}
+                        touchableInputWrapperStyle={styles.searchPageInputNarrowTouchableWrapper}
+                        wrapperStyle={{...styles.searchAutocompleteInputResults, ...styles.br2}}
                         wrapperFocusedStyle={styles.searchAutocompleteInputResultsFocused}
                         ref={textInputRef}
                         onKeyPress={handleKeyPress}
+                        skipSkeleton={skipSkeleton}
                     />
                 </Animated.View>
             </View>
@@ -93,3 +98,4 @@ function SearchPageInputNarrow({queryJSON, searchRouterListVisible, hideSearchRo
 }
 
 export default SearchPageInputNarrow;
+export type {SearchPageInputNarrowProps};
diff --git a/src/components/Search/SearchPageHeader/SearchPageInputWide.tsx b/src/components/Search/SearchPageHeader/SearchPageInputWide.tsx
index 6a910d1646c5..9eb4d79064b5 100644
--- a/src/components/Search/SearchPageHeader/SearchPageInputWide.tsx
+++ b/src/components/Search/SearchPageHeader/SearchPageInputWide.tsx
@@ -1,5 +1,5 @@
 import {useIsFocused} from '@react-navigation/native';
-import {useEffect, useRef, useState} from 'react';
+import React, {useEffect, useRef, useState} from 'react';
 import {View} from 'react-native';
 import SearchAutocompleteList from '@components/Search/SearchAutocompleteList';
 import SearchInputSelectionWrapper from '@components/Search/SearchInputSelectionWrapper';
@@ -14,7 +14,7 @@ type SearchPageInputWideProps = {
     queryJSON: SearchQueryJSON;
     handleSearch: (value: string) => void;
 };
-// NOTE: This is intentionally unused for now. It will be wired up in https://github.com/Expensify/App/issues/84876
+
 function SearchPageInputWide({queryJSON, handleSearch}: SearchPageInputWideProps) {
     const styles = useThemeStyles();
     const theme = useTheme();
@@ -66,17 +66,18 @@ function SearchPageInputWide({queryJSON, handleSearch}: SearchPageInputWideProps
     return (
         <>
             {/* An empty view as the input placeholder so that the applied filters won't move when the real input position becomes absolute */}
-            {isAutocompleteListVisible && <View style={styles.searchPageInputPlaceholder} />}
+            {isAutocompleteListVisible && <View style={styles.searchPageInputWidePlaceholder} />}
             <View
                 dataSet={{dragArea: false}}
-                style={[styles.appBG, styles.newSearchResultsHeaderBar, ...autocompleteInputStyle]}
+                style={[styles.appBG, styles.searchResultsHeaderBar, ...autocompleteInputStyle]}
             >
                 <SearchInputSelectionWrapper
                     value={textInputValue}
                     onSearchQueryChange={onSearchQueryChange}
                     isFullWidth
-                    // inputContainerStyle={isAutocompleteListVisible ? styles.ph3 : styles.ph2}
-                    // touchableInputWrapperStyle={isAutocompleteListVisible ? undefined : styles.searchPageInputTouchableWrapper}
+                    inputStyle={isAutocompleteListVisible ? undefined : styles.fontSizeLabel}
+                    inputContainerStyle={isAutocompleteListVisible ? undefined : styles.ph2}
+                    touchableInputWrapperStyle={isAutocompleteListVisible ? undefined : styles.searchPageInputWideTouchableWrapper}
                     onSubmit={() => {
                         const focusedOption = listRef.current?.getFocusedOption();
                         if (focusedOption) {
@@ -87,7 +88,7 @@ function SearchPageInputWide({queryJSON, handleSearch}: SearchPageInputWideProps
                     autoFocus={false}
                     onFocus={showAutocompleteList}
                     onBlur={hideAutocompleteList}
-                    wrapperStyle={{...styles.newSearchAutocompleteInputResults, ...styles.br2}}
+                    wrapperStyle={{...styles.searchAutocompleteInputResults, ...styles.br2}}
                     wrapperFocusedStyle={styles.searchAutocompleteInputResultsFocused}
                     outerWrapperStyle={[inputWrapperActiveStyle, styles.flex1]}
                     ref={textInputRef}
diff --git a/src/components/Search/SearchPageHeader/SearchSaveButton.tsx b/src/components/Search/SearchPageHeader/SearchSaveButton.tsx
index db3e60a9cc61..1dcf5b96ca64 100644
--- a/src/components/Search/SearchPageHeader/SearchSaveButton.tsx
+++ b/src/components/Search/SearchPageHeader/SearchSaveButton.tsx
@@ -1,21 +1,53 @@
 import React from 'react';
 import Button from '@components/Button';
+import Icon from '@components/Icon';
+import {PressableWithFeedback} from '@components/Pressable';
 import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset';
 import useLocalize from '@hooks/useLocalize';
+import useResponsiveLayout from '@hooks/useResponsiveLayout';
+import useTheme from '@hooks/useTheme';
+import useThemeStyles from '@hooks/useThemeStyles';
 import Navigation from '@libs/Navigation/Navigation';
 import CONST from '@src/CONST';
 import ROUTES from '@src/ROUTES';
 
 function SearchSaveButton() {
     const {translate} = useLocalize();
+    const theme = useTheme();
+    const styles = useThemeStyles();
+    const {shouldUseNarrowLayout, isMediumScreenWidth} = useResponsiveLayout();
     const expensifyIcons = useMemoizedLazyExpensifyIcons(['Bookmark']);
 
+    const openSaveSearchPage = () => {
+        Navigation.navigate(ROUTES.SEARCH_SAVE);
+    };
+
+    if (shouldUseNarrowLayout || isMediumScreenWidth) {
+        return (
+            <PressableWithFeedback
+                accessibilityLabel={translate('common.save')}
+                role={CONST.ROLE.BUTTON}
+                style={[styles.searchActionsBar(shouldUseNarrowLayout)]}
+                hoverStyle={styles.buttonHoveredBG}
+                sentryLabel={CONST.SENTRY_LABEL.SEARCH.FILTER_SAVE_BUTTON}
+                onPress={openSaveSearchPage}
+            >
+                <Icon
+                    src={expensifyIcons.Bookmark}
+                    fill={theme.icon}
+                    small={shouldUseNarrowLayout}
+                    extraSmall={isMediumScreenWidth}
+                />
+            </PressableWithFeedback>
+        );
+    }
+
     return (
         <Button
             small
             icon={expensifyIcons.Bookmark}
             text={translate('common.save')}
-            onPress={() => Navigation.navigate(ROUTES.SEARCH_SAVE)}
+            onPress={openSaveSearchPage}
             sentryLabel={CONST.SENTRY_LABEL.SEARCH.FILTER_SAVE_BUTTON}
         />
     );
diff --git a/src/components/Search/SearchPageHeader/useSearchActionsBar.tsx b/src/components/Search/SearchPageHeader/useSearchActionsBar.tsx
deleted file mode 100644
index a2368820d446..000000000000
--- a/src/components/Search/SearchPageHeader/useSearchActionsBar.tsx
+++ /dev/null
@@ -1,431 +0,0 @@
-import React, {useEffect} from 'react';
-import type {ReactNode} from 'react';
-import type {OnyxCollection} from 'react-native-onyx';
-import type {PopoverComponentProps} from '@components/Search/FilterDropdowns/DropdownButton';
-import type {MultiSelectItem} from '@components/Search/FilterDropdowns/MultiSelectPopup';
-import MultiSelectPopup from '@components/Search/FilterDropdowns/MultiSelectPopup';
-import SingleSelectPopup from '@components/Search/FilterDropdowns/SingleSelectPopup';
-import UserSelectPopup from '@components/Search/FilterDropdowns/UserSelectPopup';
-import {useSearchStateContext} from '@components/Search/SearchContext';
-import {filterFeedSelector, filterGroupCurrencySelector, filterPolicyIDSelector} from '@components/Search/selectors/Search';
-import type {SearchDateFilterKeys, SearchQueryJSON, SingularSearchStatus} from '@components/Search/types';
-import useAdvancedSearchFilters from '@hooks/useAdvancedSearchFilters';
-import {useCurrencyListActions, useCurrencyListState} from '@hooks/useCurrencyList';
-import useFeedKeysWithAssignedCards from '@hooks/useFeedKeysWithAssignedCards';
-import useLocalize from '@hooks/useLocalize';
-import useNetwork from '@hooks/useNetwork';
-import useOnyx from '@hooks/useOnyx';
-import useResponsiveLayout from '@hooks/useResponsiveLayout';
-import useThemeStyles from '@hooks/useThemeStyles';
-import {close} from '@libs/actions/Modal';
-import {openSearchCardFiltersPage} from '@libs/actions/Search';
-import Navigation from '@libs/Navigation/Navigation';
-import {buildFilterQueryWithSortDefaults} from '@libs/SearchQueryUtils';
-import {filterValidHasValues, getCurrencyOptions, getFeedOptions, getHasOptions, getStatusOptions, getWithdrawalTypeOptions, mapFiltersFormToLabelValueList} from '@libs/SearchUIUtils';
-import type {SearchFilter} from '@libs/SearchUIUtils';
-import CONST from '@src/CONST';
-import type {TranslationPaths} from '@src/languages/types';
-import ONYXKEYS from '@src/ONYXKEYS';
-import type {SearchAdvancedFiltersForm} from '@src/types/form';
-import FILTER_KEYS from '@src/types/form/SearchAdvancedFiltersForm';
-import type {HasFilterValue, IsFilterValue} from '@src/types/form/SearchAdvancedFiltersForm';
-import type {Policy} from '@src/types/onyx';
-import type {Icon} from '@src/types/onyx/OnyxCommon';
-import {getEmptyObject} from '@src/types/utils/EmptyObject';
-import type WithSentryLabel from '@src/types/utils/SentryLabel';
-import DatePickerFilterPopup from './DatePickerFilterPopup';
-import MultiSelectFilterPopup from './MultiSelectFilterPopup';
-
-type FilterItem = WithSentryLabel & {
-    PopoverComponent: (props: PopoverComponentProps) => ReactNode;
-};
-
-type UseSearchActionsBarResult = {
-    filters: Array<SearchFilter & FilterItem>;
-    hasErrors: boolean;
-    shouldShowActionsBarLoading: boolean;
-    shouldShowSelectedDropdown: boolean;
-    queryJSON: SearchQueryJSON;
-    styles: ReturnType<typeof useThemeStyles>;
-    translate: ReturnType<typeof useLocalize>['translate'];
-};
-
-type FilterBarPopupProps = PopoverComponentProps & {
-    updateFilterForm: (values: Partial<SearchAdvancedFiltersForm>) => void;
-};
-
-/**
- * Extracts only the fields needed by getTypeOptions (canSendInvoice check).
- * Strips heavyweight fields like customUnits, connections, taxRates, fieldList, rules, exportLayouts.
- */
-function typeOptionsPoliciesSelector(policies: OnyxCollection<Policy>): OnyxCollection<Policy> {
-    if (!policies) {
-        return policies;
-    }
-    const result: OnyxCollection<Policy> = {};
-    for (const [key, policy] of Object.entries(policies)) {
-        if (!policy) {
-            continue;
-        }
-        result[key] = {
-            id: policy.id,
-            name: policy.name,
-            type: policy.type,
-            role: policy.role,
-            employeeList: policy.employeeList,
-            pendingAction: policy.pendingAction,
-            errors: policy.errors,
-            areInvoicesEnabled: policy.areInvoicesEnabled,
-            isJoinRequestPending: policy.isJoinRequestPending,
-            owner: policy.owner,
-        } as Policy;
-    }
-    return result;
-}
-
-function GroupCurrencyPopup({updateFilterForm, closeOverlay}: FilterBarPopupProps) {
-    const {translate} = useLocalize();
-    const {currencyList} = useCurrencyListState();
-    const {getCurrencySymbol} = useCurrencyListActions();
-    const groupCurrencyOptions = getCurrencyOptions(currencyList, getCurrencySymbol);
-    const [groupCurrency] = useOnyx(ONYXKEYS.FORMS.SEARCH_ADVANCED_FILTERS_FORM, {selector: filterGroupCurrencySelector});
-
-    const groupCurrencyValue = groupCurrencyOptions.find((option) => option.value === groupCurrency) ?? null;
-
-    return (
-        <SingleSelectPopup
-            label={translate('common.groupCurrency')}
-            items={groupCurrencyOptions}
-            value={groupCurrencyValue}
-            closeOverlay={closeOverlay}
-            onChange={(item) => updateFilterForm({groupCurrency: item?.value})}
-            isSearchable
-            searchPlaceholder={translate('common.groupCurrency')}
-        />
-    );
-}
-
-function FeedPopup({updateFilterForm, closeOverlay, isExpanded}: FilterBarPopupProps) {
-    const {isOffline} = useNetwork();
-    const {translate, localeCompare} = useLocalize();
-    const feedKeysWithCards = useFeedKeysWithAssignedCards();
-
-    const [feed] = useOnyx(ONYXKEYS.FORMS.SEARCH_ADVANCED_FILTERS_FORM, {selector: filterFeedSelector});
-    const [personalAndWorkspaceCards] = useOnyx(ONYXKEYS.DERIVED.PERSONAL_AND_WORKSPACE_CARD_LIST);
-    const [allFeeds] = useOnyx(ONYXKEYS.COLLECTION.SHARED_NVP_PRIVATE_DOMAIN_MEMBER);
-    const [areCardsLoaded] = useOnyx(ONYXKEYS.IS_SEARCH_FILTERS_CARD_DATA_LOADED);
-
-    useEffect(() => {
-        if (isOffline || !isExpanded) {
-            return;
-        }
-        openSearchCardFiltersPage();
-    }, [isOffline, isExpanded]);
-
-    const updateFeedFilterForm = (items: Array<MultiSelectItem<string>>) => {
-        updateFilterForm({feed: items.map((item) => item.value)});
-    };
-
-    const feedOptions = getFeedOptions(allFeeds, personalAndWorkspaceCards, translate, localeCompare, feedKeysWithCards);
-    const feedValue = feed ? feedOptions.filter((option) => feed.includes(option.value)) : [];
-    const shouldShowLoadingState = !areCardsLoaded && !isOffline;
-
-    return (
-        <MultiSelectFilterPopup
-            closeOverlay={closeOverlay}
-            translationKey="search.filters.feed"
-            items={feedOptions}
-            value={feedValue}
-            loading={shouldShowLoadingState}
-            onChangeCallback={updateFeedFilterForm}
-        />
-    );
-}
-
-function WorkspacePopup({policyIDQuery, updateFilterForm, closeOverlay}: FilterBarPopupProps & {policyIDQuery: string[] | undefined}) {
-    const {translate} = useLocalize();
-    const {workspaces, shouldShowWorkspaceSearchInput} = useAdvancedSearchFilters();
-    const [policyID] = useOnyx(ONYXKEYS.FORMS.SEARCH_ADVANCED_FILTERS_FORM, {selector: filterPolicyIDSelector});
-    const workspaceOptions: Array<MultiSelectItem<string>> = workspaces
-        .flatMap((section) => section.data)
-        .filter((workspace): workspace is typeof workspace & {policyID: string; icons: Icon[]} => !!workspace.policyID && !!workspace.icons)
-        .map((workspace) => ({
-            text: workspace.text,
-            value: workspace.policyID,
-            icons: workspace.icons,
-        }));
-
-    const policyIDs = policyID ?? policyIDQuery;
-    const selectedWorkspaceOptions = policyIDs ? workspaceOptions.filter((option) => (Array.isArray(policyIDs) ? policyIDs : [policyIDs]).includes(option.value)) : [];
-
-    const handleWorkspaceChange = (items: Array<MultiSelectItem<string>>) => {
-        updateFilterForm({policyID: items.map((item) => item.value)});
-    };
-
-    return (
-        <MultiSelectPopup
-            label={translate('workspace.common.workspace')}
-            items={workspaceOptions}
-            value={selectedWorkspaceOptions}
-            closeOverlay={closeOverlay}
-            onChange={handleWorkspaceChange}
-            isSearchable={shouldShowWorkspaceSearchInput}
-        />
-    );
-}
-
-function makeDateFilterItem(
-    filterKey: SearchDateFilterKeys,
-    translationKey: TranslationPaths,
-    sentryLabel: string,
-    on: string | undefined,
-    after: string | undefined,
-    before: string | undefined,
-    range: string | undefined,
-    updateFilterForm: (v: Partial<SearchAdvancedFiltersForm>) => void,
-): FilterItem {
-    const value = {
-        [CONST.SEARCH.DATE_MODIFIERS.ON]: on,
-        [CONST.SEARCH.DATE_MODIFIERS.AFTER]: after,
-        [CONST.SEARCH.DATE_MODIFIERS.BEFORE]: before,
-        [CONST.SEARCH.DATE_MODIFIERS.RANGE]: range,
-    };
-    return {
-        PopoverComponent: (props) => (
-            <DatePickerFilterPopup
-                isExpanded={props.isExpanded}
-                closeOverlay={props.closeOverlay}
-                filterKey={filterKey}
-                value={value}
-                translationKey={translationKey}
-                updateFilterForm={updateFilterForm}
-            />
-        ),
-        sentryLabel,
-    };
-}
-
-function useSearchActionsBar(queryJSON: SearchQueryJSON, isMobileSelectionModeEnabled: boolean): UseSearchActionsBarResult {
-    const [searchAdvancedFiltersForm = getEmptyObject<Partial<SearchAdvancedFiltersForm>>()] = useOnyx(ONYXKEYS.FORMS.SEARCH_ADVANCED_FILTERS_FORM);
-    const type = queryJSON.type;
-    const styles = useThemeStyles();
-    const {translate} = useLocalize();
-
-    const {isOffline} = useNetwork();
-    const {shouldUseNarrowLayout} = useResponsiveLayout();
-    const {selectedTransactions, shouldShowActionsBarLoading, currentSearchResults} = useSearchStateContext();
-
-    const selectedTransactionsKeys = Object.keys(selectedTransactions ?? {});
-
-    const hasErrors = Object.keys(currentSearchResults?.errors ?? {}).length > 0 && !isOffline;
-    const hasSelectedItems = selectedTransactionsKeys.length > 0;
-    const shouldShowSelectedDropdown = hasSelectedItems && (!shouldUseNarrowLayout || isMobileSelectionModeEnabled);
-
-    const updateFilterForm = (values: Partial<SearchAdvancedFiltersForm>) => {
-        const updatedFilterFormValues: Partial<SearchAdvancedFiltersForm> = {
-            ...searchAdvancedFiltersForm,
-            ...values,
-        };
-
-        if (updatedFilterFormValues.type !== searchAdvancedFiltersForm.type) {
-            updatedFilterFormValues.columns = [];
-            updatedFilterFormValues.status = CONST.SEARCH.STATUS.EXPENSE.ALL;
-            updatedFilterFormValues.has = filterValidHasValues(updatedFilterFormValues.has, updatedFilterFormValues.type, translate);
-        }
-
-        if (updatedFilterFormValues.groupBy !== searchAdvancedFiltersForm.groupBy) {
-            updatedFilterFormValues.columns = [];
-        }
-
-        const queryString =
-            buildFilterQueryWithSortDefaults(
-                updatedFilterFormValues,
-                {view: searchAdvancedFiltersForm.view, groupBy: searchAdvancedFiltersForm.groupBy},
-                {sortBy: queryJSON.sortBy, sortOrder: queryJSON.sortOrder},
-            ) ?? '';
-        if (!queryString) {
-            return;
-        }
-
-        close(() => {
-            Navigation.setParams({q: queryString, rawQuery: undefined});
-        });
-    };
-
-    const filters = mapFiltersFormToLabelValueList<FilterItem>(searchAdvancedFiltersForm, queryJSON.policyID, translate, (filterKey) => {
-        switch (filterKey) {
-            case FILTER_KEYS.GROUP_CURRENCY:
-                return {
-                    PopoverComponent: ({closeOverlay, isExpanded}) => (
-                        <GroupCurrencyPopup
-                            isExpanded={isExpanded}
-                            updateFilterForm={updateFilterForm}
-                            closeOverlay={closeOverlay}
-                        />
-                    ),
-                    sentryLabel: CONST.SENTRY_LABEL.SEARCH.FILTER_GROUP_CURRENCY,
-                };
-            case FILTER_KEYS.HAS: {
-                const hasFilterValues = searchAdvancedFiltersForm[filterKey];
-                const hasOptions = getHasOptions(translate, type);
-                const has = hasFilterValues ? hasOptions.filter((option) => hasFilterValues.includes(option.value)) : [];
-                const updateHasFilterForm = (selectedItems: Array<MultiSelectItem<HasFilterValue>>) => {
-                    updateFilterForm({has: selectedItems.map((item) => item.value)});
-                };
-                const hasComponent = (props: PopoverComponentProps) => (
-                    <MultiSelectFilterPopup
-                        closeOverlay={props.closeOverlay}
-                        translationKey="search.has"
-                        items={hasOptions}
-                        value={has}
-                        onChangeCallback={updateHasFilterForm}
-                    />
-                );
-                return {PopoverComponent: hasComponent, sentryLabel: CONST.SENTRY_LABEL.SEARCH.FILTER_HAS};
-            }
-            case FILTER_KEYS.IS: {
-                const isFilterValues = searchAdvancedFiltersForm[filterKey];
-                const isOptions = Object.values(CONST.SEARCH.IS_VALUES).map((value) => ({text: translate(`common.${value}`), value}));
-                const is = isFilterValues ? isOptions.filter((option) => isFilterValues.includes(option.value)) : [];
-                const updateIsFilterForm = (selectedItems: Array<MultiSelectItem<IsFilterValue>>) => {
-                    updateFilterForm({is: selectedItems.map((item) => item.value)});
-                };
-                const isComponent = (props: PopoverComponentProps) => (
-                    <MultiSelectFilterPopup
-                        closeOverlay={props.closeOverlay}
-                        translationKey="search.filters.is"
-                        items={isOptions}
-                        value={is}
-                        onChangeCallback={updateIsFilterForm}
-                    />
-                );
-                return {PopoverComponent: isComponent, sentryLabel: CONST.SENTRY_LABEL.SEARCH.FILTER_IS};
-            }
-            case FILTER_KEYS.FEED: {
-                return {
-                    PopoverComponent: ({closeOverlay, isExpanded}) => (
-                        <FeedPopup
-                            isExpanded={isExpanded}
-                            updateFilterForm={updateFilterForm}
-                            closeOverlay={closeOverlay}
-                        />
-                    ),
-                    sentryLabel: CONST.SENTRY_LABEL.SEARCH.FILTER_FEED,
-                };
-            }
-            case FILTER_KEYS.POSTED_ON:
-            case FILTER_KEYS.POSTED_AFTER:
-            case FILTER_KEYS.POSTED_BEFORE:
-                return makeDateFilterItem(
-                    CONST.SEARCH.SYNTAX_FILTER_KEYS.POSTED,
-                    'search.filters.posted',
-                    CONST.SENTRY_LABEL.SEARCH.FILTER_POSTED,
-                    searchAdvancedFiltersForm.postedOn,
-                    searchAdvancedFiltersForm.postedAfter,
-                    searchAdvancedFiltersForm.postedBefore,
-                    searchAdvancedFiltersForm.postedRange,
-                    updateFilterForm,
-                );
-            case FILTER_KEYS.WITHDRAWAL_TYPE: {
-                const withdrawalType = searchAdvancedFiltersForm[filterKey];
-                const withdrawalTypeOptions = getWithdrawalTypeOptions(translate);
-                const withdrawalTypeValue = withdrawalTypeOptions.find((option) => option.value === withdrawalType) ?? null;
-                const withdrawalTypeComponent = ({closeOverlay}: PopoverComponentProps) => (
-                    <SingleSelectPopup
-                        label={translate('search.withdrawalType')}
-                        items={withdrawalTypeOptions}
-                        value={withdrawalTypeValue}
-                        closeOverlay={closeOverlay}
-                        onChange={(item) => updateFilterForm({withdrawalType: item?.value})}
-                    />
-                );
-                return {PopoverComponent: withdrawalTypeComponent, sentryLabel: CONST.SENTRY_LABEL.SEARCH.FILTER_WITHDRAWAL_TYPE};
-            }
-            case FILTER_KEYS.WITHDRAWN_ON:
-            case FILTER_KEYS.WITHDRAWN_AFTER:
-            case FILTER_KEYS.WITHDRAWN_BEFORE:
-                return makeDateFilterItem(
-                    CONST.SEARCH.SYNTAX_FILTER_KEYS.WITHDRAWN,
-                    'search.filters.withdrawn',
-                    CONST.SENTRY_LABEL.SEARCH.FILTER_WITHDRAWN,
-                    searchAdvancedFiltersForm.withdrawnOn,
-                    searchAdvancedFiltersForm.withdrawnAfter,
-                    searchAdvancedFiltersForm.withdrawnBefore,
-                    searchAdvancedFiltersForm.withdrawnRange,
-                    updateFilterForm,
-                );
-            case FILTER_KEYS.STATUS: {
-                const status = searchAdvancedFiltersForm[filterKey];
-                const statusOptions = type ? getStatusOptions(translate, type) : [];
-                const statusValue = statusOptions.filter((option) => status?.includes(option.value));
-                const updateStatusFilterForm = (selectedItems: Array<MultiSelectItem<SingularSearchStatus>>) => {
-                    const newStatus = selectedItems.length ? selectedItems.map((i) => i.value) : CONST.SEARCH.STATUS.EXPENSE.ALL;
-                    updateFilterForm({status: newStatus});
-                };
-                const statusComponent = (props: PopoverComponentProps) => (
-                    <MultiSelectFilterPopup
-                        closeOverlay={props.closeOverlay}
-                        translationKey="common.status"
-                        items={statusOptions}
-                        value={statusValue}
-                        onChangeCallback={updateStatusFilterForm}
-                    />
-                );
-                return {PopoverComponent: statusComponent, sentryLabel: CONST.SENTRY_LABEL.SEARCH.FILTER_STATUS};
-            }
-            case FILTER_KEYS.DATE_ON:
-            case FILTER_KEYS.DATE_AFTER:
-            case FILTER_KEYS.DATE_BEFORE:
-                return makeDateFilterItem(
-                    CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE,
-                    'common.date',
-                    CONST.SENTRY_LABEL.SEARCH.FILTER_DATE,
-                    searchAdvancedFiltersForm.dateOn,
-                    searchAdvancedFiltersForm.dateAfter,
-                    searchAdvancedFiltersForm.dateBefore,
-                    searchAdvancedFiltersForm.dateRange,
-                    updateFilterForm,
-                );
-            case FILTER_KEYS.FROM: {
-                const from = searchAdvancedFiltersForm[filterKey];
-                const userPickerComponent = ({closeOverlay}: PopoverComponentProps) => (
-                    <UserSelectPopup
-                        value={from ?? []}
-                        closeOverlay={closeOverlay}
-                        onChange={(selectedUsers) => updateFilterForm({from: selectedUsers})}
-                    />
-                );
-                return {PopoverComponent: userPickerComponent, sentryLabel: CONST.SENTRY_LABEL.SEARCH.FILTER_FROM};
-            }
-            case FILTER_KEYS.POLICY_ID:
-                return {
-                    PopoverComponent: ({closeOverlay, isExpanded}) => (
-                        <WorkspacePopup
-                            isExpanded={isExpanded}
-                            policyIDQuery={queryJSON.policyID}
-                            updateFilterForm={updateFilterForm}
-                            closeOverlay={closeOverlay}
-                        />
-                    ),
-                    sentryLabel: CONST.SENTRY_LABEL.SEARCH.FILTER_WORKSPACE,
-                };
-            default:
-                // This should be unreachable
-                return {PopoverComponent: () => null};
-        }
-    });
-
-    return {
-        filters,
-        hasErrors,
-        shouldShowActionsBarLoading,
-        shouldShowSelectedDropdown,
-        queryJSON,
-        styles,
-        translate,
-    };
-}
-
-export default useSearchActionsBar;
-export type {FilterItem};
-export {typeOptionsPoliciesSelector};
diff --git a/src/components/Search/SearchPageHeader/useSearchFiltersBar.tsx b/src/components/Search/SearchPageHeader/useSearchFiltersBar.tsx
index 45067ad701b8..7b15e5e5f349 100644
--- a/src/components/Search/SearchPageHeader/useSearchFiltersBar.tsx
+++ b/src/components/Search/SearchPageHeader/useSearchFiltersBar.tsx
@@ -1,126 +1,60 @@
-import {emailSelector} from '@selectors/Session';
 import React from 'react';
 import type {ReactNode} from 'react';
 import type {OnyxCollection} from 'react-native-onyx';
-import type {TupleToUnion} from 'type-fest';
-import {usePersonalDetails} from '@components/OnyxListItemProvider';
+import AmountPopup from '@components/Search/FilterDropdowns/AmountPopup';
+import CardSelectPopup from '@components/Search/FilterDropdowns/CardSelectPopup';
+import CategorySelectPopup from '@components/Search/FilterDropdowns/CategorySelectPopup';
+import CurrencySelectPopup from '@components/Search/FilterDropdowns/CurrencySelectPopup';
 import type {PopoverComponentProps} from '@components/Search/FilterDropdowns/DropdownButton';
-import GroupByPopup from '@components/Search/FilterDropdowns/GroupByPopup';
-import type {MultiSelectItem} from '@components/Search/FilterDropdowns/MultiSelectPopup';
-import MultiSelectPopup from '@components/Search/FilterDropdowns/MultiSelectPopup';
+import ExportedToSelectPopup from '@components/Search/FilterDropdowns/ExportedToSelectPopup';
+import InSelectPopup from '@components/Search/FilterDropdowns/InSelectPopup';
+import ReportFieldPopup from '@components/Search/FilterDropdowns/ReportFieldPopup';
 import SingleSelectPopup from '@components/Search/FilterDropdowns/SingleSelectPopup';
+import TagSelectPopup from '@components/Search/FilterDropdowns/TagSelectPopup';
+import TaxRateSelectPopup from '@components/Search/FilterDropdowns/TaxRateSelectPopup';
+import TextInputPopup from '@components/Search/FilterDropdowns/TextInputPopup';
 import UserSelectPopup from '@components/Search/FilterDropdowns/UserSelectPopup';
+import WorkspaceSelectPopup from '@components/Search/FilterDropdowns/WorkspaceSelectPopup';
 import {useSearchStateContext} from '@components/Search/SearchContext';
-import type {SearchQueryJSON, SingularSearchStatus} from '@components/Search/types';
-import useAdvancedSearchFilters from '@hooks/useAdvancedSearchFilters';
-import {useCurrencyListActions, useCurrencyListState} from '@hooks/useCurrencyList';
-import useFeedKeysWithAssignedCards from '@hooks/useFeedKeysWithAssignedCards';
-import useFilterFormValues from '@hooks/useFilterFormValues';
-import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset';
+import type {ReportFieldKey, SearchAmountFilterKeys, SearchDateFilterKeys, SearchFilterKey, SearchQueryJSON} from '@components/Search/types';
 import useLocalize from '@hooks/useLocalize';
 import useNetwork from '@hooks/useNetwork';
 import useOnyx from '@hooks/useOnyx';
-import useResponsiveLayout from '@hooks/useResponsiveLayout';
-import useSearchFilterSync from '@hooks/useSearchFilterSync';
-import useTheme from '@hooks/useTheme';
 import useThemeStyles from '@hooks/useThemeStyles';
 import {close} from '@libs/actions/Modal';
-import {updateAdvancedFilters} from '@libs/actions/Search';
-import DateUtils from '@libs/DateUtils';
 import Navigation from '@libs/Navigation/Navigation';
-import {getDisplayNameOrDefault} from '@libs/PersonalDetailsUtils';
-import type {SearchDateValues} from '@libs/SearchQueryUtils';
-import {buildFilterQueryWithSortDefaults, getDateRangeDisplayValueFromFormValue, isFilterSupported, isSearchDatePreset} from '@libs/SearchQueryUtils';
-import {
-    filterValidHasValues,
-    getCurrencyOptions,
-    getFeedOptions,
-    getGroupByOptions,
-    getGroupBySections,
-    getHasOptions,
-    getStatusOptions,
-    getTypeOptions,
-    getViewOptions,
-    getWithdrawalTypeOptions,
-} from '@libs/SearchUIUtils';
+import {buildFilterQueryWithSortDefaults, isAmountFilterKey} from '@libs/SearchQueryUtils';
+import {FILTER_GROUP_MAP, FILTER_LABEL_MAP, filterValidHasValues, getMultiSelectFilterOptions, getSingleSelectFilterOptions, mapFiltersFormToLabelValueList} from '@libs/SearchUIUtils';
+import type {SearchFilter} from '@libs/SearchUIUtils';
 import CONST from '@src/CONST';
+import type {TranslationPaths} from '@src/languages/types';
 import ONYXKEYS from '@src/ONYXKEYS';
-import ROUTES from '@src/ROUTES';
-import {hasMultipleOutputCurrenciesSelector} from '@src/selectors/Policy';
 import type {SearchAdvancedFiltersForm} from '@src/types/form';
-import FILTER_KEYS, {AMOUNT_FILTER_KEYS, DATE_FILTER_KEYS} from '@src/types/form/SearchAdvancedFiltersForm';
-import type {HasFilterValue, IsFilterValue, SearchAdvancedFiltersKey} from '@src/types/form/SearchAdvancedFiltersForm';
+import FILTER_KEYS from '@src/types/form/SearchAdvancedFiltersForm';
+import type {ExpenseTypeValues, HasFilterValues, IsFilterValues, SearchAdvancedFiltersKey} from '@src/types/form/SearchAdvancedFiltersForm';
 import type {Policy} from '@src/types/onyx';
-import type {Icon} from '@src/types/onyx/OnyxCommon';
 import {getEmptyObject} from '@src/types/utils/EmptyObject';
-import type IconAsset from '@src/types/utils/IconAsset';
 import type WithSentryLabel from '@src/types/utils/SentryLabel';
 import DatePickerFilterPopup from './DatePickerFilterPopup';
-import FeedFilterPopup from './FeedFilterPopup';
 import MultiSelectFilterPopup from './MultiSelectFilterPopup';
 
 type FilterItem = WithSentryLabel & {
-    label: string;
     PopoverComponent: (props: PopoverComponentProps) => ReactNode;
-    value: string | string[] | null;
-    filterKey: SearchAdvancedFiltersKey;
 };
 
 type UseSearchFiltersBarResult = {
-    filters: FilterItem[];
-    hiddenSelectedFilters: string[];
+    filters: Array<SearchFilter & FilterItem>;
     hasErrors: boolean;
     shouldShowFiltersBarLoading: boolean;
-    shouldShowSelectedDropdown: boolean;
-    shouldShowColumnsButton: boolean;
-    shouldUseNarrowLayout: boolean;
-    filterButtonText: string;
     queryJSON: SearchQueryJSON;
-    openAdvancedFilters: () => void;
-    openSearchColumns: () => void;
-    expensifyIcons: Record<'Filter' | 'Columns', IconAsset>;
-    theme: ReturnType<typeof useTheme>;
     styles: ReturnType<typeof useThemeStyles>;
     translate: ReturnType<typeof useLocalize>['translate'];
 };
 
-type SearchDateFilterValues = {
-    on?: string;
-    after?: string;
-    before?: string;
-    range?: string;
-};
-
-function createDateDisplayValue(filterValues: SearchDateFilterValues, translate: ReturnType<typeof useLocalize>['translate']): [SearchDateValues, string[]] {
-    const value: SearchDateValues = {
-        [CONST.SEARCH.DATE_MODIFIERS.ON]: filterValues.on,
-        [CONST.SEARCH.DATE_MODIFIERS.AFTER]: filterValues.after,
-        [CONST.SEARCH.DATE_MODIFIERS.BEFORE]: filterValues.before,
-        [CONST.SEARCH.DATE_MODIFIERS.RANGE]: filterValues.range,
-    };
-
-    const displayText: string[] = [];
-    if (value.On) {
-        displayText.push(isSearchDatePreset(value.On) ? translate(`search.filters.date.presets.${value.On}`) : `${translate('common.on')} ${DateUtils.formatToReadableString(value.On)}`);
-    }
-    if (value.After) {
-        displayText.push(`${translate('common.after')} ${DateUtils.formatToReadableString(value.After)}`);
-    }
-    if (value.Before) {
-        displayText.push(`${translate('common.before')} ${DateUtils.formatToReadableString(value.Before)}`);
-    }
-    if (value.Range) {
-        const rangeDisplay = getDateRangeDisplayValueFromFormValue(value.Range, undefined, undefined, true);
-        if (rangeDisplay) {
-            displayText.push(rangeDisplay);
-        }
-    }
+const SKIPPED_FILTERS = new Set<SearchAdvancedFiltersKey>([FILTER_KEYS.GROUP_BY, FILTER_KEYS.GROUP_CURRENCY, FILTER_KEYS.LIMIT, FILTER_KEYS.TYPE, FILTER_KEYS.VIEW]);
 
-    return [value, displayText];
-}
-
-function hasDateFilterValue(filterFormValues: Partial<SearchAdvancedFiltersForm>, dateFilterKey: TupleToUnion<typeof DATE_FILTER_KEYS>) {
-    return filterFormValues[`${dateFilterKey}On`] ?? filterFormValues[`${dateFilterKey}After`] ?? filterFormValues[`${dateFilterKey}Before`] ?? filterFormValues[`${dateFilterKey}Range`];
+function getFilterSentryLabel(filterKey: SearchAdvancedFiltersKey | SearchFilterKey | ReportFieldKey) {
+    return `Search-Filter-${filterKey}`;
 }
 
 /**
@@ -152,120 +86,69 @@ function typeOptionsPoliciesSelector(policies: OnyxCollection<Policy>): OnyxColl
     return result;
 }
 
-function useSearchFiltersBar(queryJSON: SearchQueryJSON, isMobileSelectionModeEnabled: boolean): UseSearchFiltersBarResult {
+function makeDateFilterItem(
+    filterKey: SearchDateFilterKeys,
+    translationKey: TranslationPaths,
+    searchAdvancedFiltersForm: Partial<SearchAdvancedFiltersForm>,
+    updateFilterForm: (v: Partial<SearchAdvancedFiltersForm>) => void,
+): FilterItem {
+    const value = {
+        [CONST.SEARCH.DATE_MODIFIERS.ON]: searchAdvancedFiltersForm[`${filterKey}${CONST.SEARCH.DATE_MODIFIERS.ON}`],
+        [CONST.SEARCH.DATE_MODIFIERS.AFTER]: searchAdvancedFiltersForm[`${filterKey}${CONST.SEARCH.DATE_MODIFIERS.AFTER}`],
+        [CONST.SEARCH.DATE_MODIFIERS.BEFORE]: searchAdvancedFiltersForm[`${filterKey}${CONST.SEARCH.DATE_MODIFIERS.BEFORE}`],
+        [CONST.SEARCH.DATE_MODIFIERS.RANGE]: searchAdvancedFiltersForm[`${filterKey}${CONST.SEARCH.DATE_MODIFIERS.RANGE}`],
+    };
+    return {
+        PopoverComponent: (props) => (
+            <DatePickerFilterPopup
+                isExpanded={props.isExpanded}
+                closeOverlay={props.closeOverlay}
+                setPopoverWidth={props.setPopoverWidth}
+                filterKey={filterKey}
+                value={value}
+                translationKey={translationKey}
+                updateFilterForm={updateFilterForm}
+            />
+        ),
+        sentryLabel: getFilterSentryLabel(filterKey),
+    };
+}
+
+function makeAmountFilterItem(
+    filterKey: SearchAmountFilterKeys,
+    label: string,
+    searchAdvancedFiltersForm: Partial<SearchAdvancedFiltersForm>,
+    updateFilterForm: (v: Partial<SearchAdvancedFiltersForm>) => void,
+): FilterItem {
+    const value = {
+        [CONST.SEARCH.AMOUNT_MODIFIERS.EQUAL_TO]: searchAdvancedFiltersForm[`${filterKey}${CONST.SEARCH.AMOUNT_MODIFIERS.EQUAL_TO}`],
+        [CONST.SEARCH.AMOUNT_MODIFIERS.GREATER_THAN]: searchAdvancedFiltersForm[`${filterKey}${CONST.SEARCH.AMOUNT_MODIFIERS.GREATER_THAN}`],
+        [CONST.SEARCH.AMOUNT_MODIFIERS.LESS_THAN]: searchAdvancedFiltersForm[`${filterKey}${CONST.SEARCH.AMOUNT_MODIFIERS.LESS_THAN}`],
+    };
+    return {
+        PopoverComponent: (props) => (
+            <AmountPopup
+                filterKey={filterKey}
+                value={value}
+                closeOverlay={props.closeOverlay}
+                label={label}
+                updateFilterForm={updateFilterForm}
+            />
+        ),
+        sentryLabel: getFilterSentryLabel(filterKey),
+    };
+}
+
+function useSearchFiltersBar(queryJSON: SearchQueryJSON): UseSearchFiltersBarResult {
     const [searchAdvancedFiltersForm = getEmptyObject<Partial<SearchAdvancedFiltersForm>>()] = useOnyx(ONYXKEYS.FORMS.SEARCH_ADVANCED_FILTERS_FORM);
-    const {type: unsafeType, groupBy: unsafeGroupBy, status: unsafeStatus, view: unsafeView, flatFilters} = queryJSON;
-    const theme = useTheme();
+    const type = queryJSON.type;
     const styles = useThemeStyles();
     const {translate, localeCompare} = useLocalize();
 
     const {isOffline} = useNetwork();
-    const personalDetails = usePersonalDetails();
-    const filterFormValues = useFilterFormValues(queryJSON);
-    useSearchFilterSync(filterFormValues);
-    const {shouldUseNarrowLayout, isLargeScreenWidth} = useResponsiveLayout();
-    const {selectedTransactions, shouldShowActionsBarLoading: shouldShowFiltersBarLoading, currentSearchResults} = useSearchStateContext();
-    const {currencyList} = useCurrencyListState();
-    const {getCurrencySymbol} = useCurrencyListActions();
-
-    const [email] = useOnyx(ONYXKEYS.SESSION, {selector: emailSelector});
-    const [personalAndWorkspaceCards] = useOnyx(ONYXKEYS.DERIVED.PERSONAL_AND_WORKSPACE_CARD_LIST);
-    const [allPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {selector: typeOptionsPoliciesSelector});
-    const [hasMultipleOutputCurrency] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {selector: hasMultipleOutputCurrenciesSelector});
-    const [allFeeds] = useOnyx(ONYXKEYS.COLLECTION.SHARED_NVP_PRIVATE_DOMAIN_MEMBER);
-    const feedKeysWithCards = useFeedKeysWithAssignedCards();
-    const expensifyIcons = useMemoizedLazyExpensifyIcons(['Filter', 'Columns']);
-
-    const {typeFiltersKeys, workspaces, shouldShowWorkspaceSearchInput} = useAdvancedSearchFilters();
-
-    const shouldDisplayWorkspaceFilter = workspaces.some((section) => section.data.length > 1);
-
-    const workspaceOptions: Array<MultiSelectItem<string>> = workspaces
-        .flatMap((section) => section.data)
-        .filter((workspace): workspace is typeof workspace & {policyID: string; icons: Icon[]} => !!workspace.policyID && !!workspace.icons)
-        .map((workspace) => ({
-            text: workspace.text,
-            value: workspace.policyID,
-            icons: workspace.icons,
-        }));
-
-    const selectedTransactionsKeys = Object.keys(selectedTransactions ?? {});
-
-    const selectedWorkspaceOptions = (() => {
-        const policyIDs = searchAdvancedFiltersForm.policyID ?? queryJSON.policyID;
-        if (!policyIDs) {
-            return [];
-        }
-        const normalizedIDs = Array.isArray(policyIDs) ? policyIDs : [policyIDs];
-        return workspaceOptions.filter((option) => normalizedIDs.includes(option.value));
-    })();
+    const {shouldShowFiltersBarLoading, currentSearchResults} = useSearchStateContext();
 
     const hasErrors = Object.keys(currentSearchResults?.errors ?? {}).length > 0 && !isOffline;
-    const hasSelectedItems = selectedTransactionsKeys.length > 0;
-    const shouldShowSelectedDropdown = hasSelectedItems && (!shouldUseNarrowLayout || isMobileSelectionModeEnabled);
-
-    const typeOptions = getTypeOptions(translate, allPolicies, email);
-    const type = typeOptions.find((option) => option.value === unsafeType) ?? null;
-
-    const groupByOptions = getGroupByOptions(translate);
-    const groupBySections = getGroupBySections(translate);
-    const groupBy = groupByOptions.find((option) => option.value === unsafeGroupBy) ?? null;
-
-    const viewOptions = getViewOptions(translate);
-    const viewValue = viewOptions.find((option) => option.value === unsafeView) ?? viewOptions.at(0) ?? null;
-
-    const groupCurrencyOptions = getCurrencyOptions(currencyList, getCurrencySymbol);
-    const groupCurrency = groupCurrencyOptions.find((option) => option.value === searchAdvancedFiltersForm.groupCurrency) ?? null;
-
-    const feedFilterValues = flatFilters.find((filter) => filter.key === CONST.SEARCH.SYNTAX_FILTER_KEYS.FEED)?.filters?.map((filter) => filter.value);
-    const feedOptions = getFeedOptions(allFeeds, personalAndWorkspaceCards, translate, localeCompare, feedKeysWithCards);
-    const feed = feedFilterValues ? feedOptions.filter((option) => feedFilterValues.includes(option.value)) : [];
-
-    const statusOptions = type ? getStatusOptions(translate, type.value) : [];
-    const status = [
-        Array.isArray(unsafeStatus) ? statusOptions.filter((option) => unsafeStatus.includes(option.value)) : (statusOptions.find((option) => option.value === unsafeStatus) ?? []),
-    ].flat();
-
-    const hasFilterValues = flatFilters.find((filter) => filter.key === CONST.SEARCH.SYNTAX_FILTER_KEYS.HAS)?.filters?.map((filter) => filter.value);
-    const hasOptions = getHasOptions(translate, type?.value ?? CONST.SEARCH.DATA_TYPES.EXPENSE);
-    const has = hasFilterValues ? hasOptions.filter((option) => hasFilterValues.includes(option.value)) : [];
-
-    const isFilterValues = flatFilters.find((filter) => filter.key === CONST.SEARCH.SYNTAX_FILTER_KEYS.IS)?.filters?.map((filter) => filter.value);
-    const isOptions = Object.values(CONST.SEARCH.IS_VALUES).map((value) => ({text: translate(`common.${value}`), value}));
-    const is = isFilterValues ? isOptions.filter((option) => isFilterValues.includes(option.value)) : [];
-
-    const [date, displayDate] = createDateDisplayValue(
-        {
-            on: searchAdvancedFiltersForm.dateOn,
-            after: searchAdvancedFiltersForm.dateAfter,
-            before: searchAdvancedFiltersForm.dateBefore,
-            range: searchAdvancedFiltersForm.dateRange,
-        },
-        translate,
-    );
-
-    const [posted, displayPosted] = createDateDisplayValue(
-        {
-            on: searchAdvancedFiltersForm.postedOn,
-            after: searchAdvancedFiltersForm.postedAfter,
-            before: searchAdvancedFiltersForm.postedBefore,
-            range: searchAdvancedFiltersForm.postedRange,
-        },
-        translate,
-    );
-
-    const [withdrawn, displayWithdrawn] = createDateDisplayValue(
-        {
-            on: searchAdvancedFiltersForm.withdrawnOn,
-            after: searchAdvancedFiltersForm.withdrawnAfter,
-            before: searchAdvancedFiltersForm.withdrawnBefore,
-            range: searchAdvancedFiltersForm.withdrawnRange,
-        },
-        translate,
-    );
-
-    const withdrawalTypeOptions = getWithdrawalTypeOptions(translate);
-    const withdrawalType = withdrawalTypeOptions.find((option) => option.value === searchAdvancedFiltersForm.withdrawalType) ?? null;
 
     const updateFilterForm = (values: Partial<SearchAdvancedFiltersForm>) => {
         const updatedFilterFormValues: Partial<SearchAdvancedFiltersForm> = {
@@ -298,401 +181,192 @@ function useSearchFiltersBar(queryJSON: SearchQueryJSON, isMobileSelectionModeEn
         });
     };
 
-    const openAdvancedFilters = () => {
-        updateAdvancedFilters(filterFormValues, true);
-        Navigation.navigate(ROUTES.SEARCH_ADVANCED_FILTERS.getRoute());
-    };
-
-    const openSearchColumns = () => {
-        Navigation.navigate(ROUTES.SEARCH_COLUMNS);
-    };
-
-    const typeComponent = ({closeOverlay}: PopoverComponentProps) => (
-        <SingleSelectPopup
-            label={translate('common.type')}
-            value={type}
-            items={typeOptions}
-            closeOverlay={closeOverlay}
-            onChange={(item) => updateFilterForm({type: item?.value ?? CONST.SEARCH.DATA_TYPES.EXPENSE})}
-        />
-    );
-
-    const groupByComponent = ({closeOverlay}: PopoverComponentProps) => (
-        <GroupByPopup
-            label={translate('search.display.groupBy')}
-            sections={groupBySections}
-            value={groupBy}
-            closeOverlay={closeOverlay}
-            onChange={(item) => {
-                const newValue = item?.value;
-                if (!newValue) {
-                    updateFilterForm({groupBy: undefined, groupCurrency: undefined});
-                } else {
-                    updateFilterForm({groupBy: newValue});
-                }
-            }}
-        />
-    );
-
-    const viewComponent = ({closeOverlay}: PopoverComponentProps) => (
-        <SingleSelectPopup
-            label={translate('search.view.label')}
-            items={viewOptions}
-            value={viewValue}
-            closeOverlay={closeOverlay}
-            onChange={(item) => updateFilterForm({view: item?.value ?? CONST.SEARCH.VIEW.TABLE})}
-        />
-    );
-
-    const groupCurrencyComponent = ({closeOverlay}: PopoverComponentProps) => (
-        <SingleSelectPopup
-            label={translate('common.groupCurrency')}
-            items={groupCurrencyOptions}
-            value={groupCurrency}
-            closeOverlay={closeOverlay}
-            onChange={(item) => updateFilterForm({groupCurrency: item?.value})}
-            isSearchable
-            searchPlaceholder={translate('common.groupCurrency')}
-        />
-    );
-
-    const updateFeedFilterForm = (items: Array<MultiSelectItem<string>>) => {
-        updateFilterForm({feed: items.map((item) => item.value)});
-    };
-    const feedComponent = (props: PopoverComponentProps) => (
-        <FeedFilterPopup
-            isExpanded={props.isExpanded}
-            closeOverlay={props.closeOverlay}
-            items={feedOptions}
-            value={feed}
-            onChangeCallback={updateFeedFilterForm}
-        />
-    );
-
-    const datePickerComponent = (props: PopoverComponentProps) => (
-        <DatePickerFilterPopup
-            isExpanded={props.isExpanded}
-            closeOverlay={props.closeOverlay}
-            setPopoverWidth={props.setPopoverWidth}
-            filterKey={CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE}
-            value={date}
-            translationKey="common.date"
-            updateFilterForm={updateFilterForm}
-        />
-    );
-
-    const postedPickerComponent = (props: PopoverComponentProps) => (
-        <DatePickerFilterPopup
-            isExpanded={props.isExpanded}
-            closeOverlay={props.closeOverlay}
-            setPopoverWidth={props.setPopoverWidth}
-            filterKey={CONST.SEARCH.SYNTAX_FILTER_KEYS.POSTED}
-            value={posted}
-            translationKey="search.filters.posted"
-            updateFilterForm={updateFilterForm}
-        />
-    );
-
-    const withdrawnPickerComponent = (props: PopoverComponentProps) => (
-        <DatePickerFilterPopup
-            isExpanded={props.isExpanded}
-            closeOverlay={props.closeOverlay}
-            setPopoverWidth={props.setPopoverWidth}
-            filterKey={CONST.SEARCH.SYNTAX_FILTER_KEYS.WITHDRAWN}
-            value={withdrawn}
-            translationKey="search.filters.withdrawn"
-            updateFilterForm={updateFilterForm}
-        />
-    );
-
-    const withdrawalTypeComponent = ({closeOverlay}: PopoverComponentProps) => (
-        <SingleSelectPopup
-            label={translate('search.withdrawalType')}
-            items={withdrawalTypeOptions}
-            value={withdrawalType}
-            closeOverlay={closeOverlay}
-            onChange={(item) => updateFilterForm({withdrawalType: item?.value})}
-        />
-    );
-
-    const updateStatusFilterForm = (selectedItems: Array<MultiSelectItem<SingularSearchStatus>>) => {
-        const newStatus = selectedItems.length ? selectedItems.map((i) => i.value) : CONST.SEARCH.STATUS.EXPENSE.ALL;
-        updateFilterForm({status: newStatus});
-    };
-    const statusComponent = (props: PopoverComponentProps) => (
-        <MultiSelectFilterPopup
-            closeOverlay={props.closeOverlay}
-            translationKey="common.status"
-            items={statusOptions}
-            value={status}
-            onChangeCallback={updateStatusFilterForm}
-        />
-    );
-
-    const updateHasFilterForm = (selectedItems: Array<MultiSelectItem<HasFilterValue>>) => {
-        updateFilterForm({has: selectedItems.map((item) => item.value)});
-    };
-    const hasComponent = (props: PopoverComponentProps) => (
-        <MultiSelectFilterPopup
-            closeOverlay={props.closeOverlay}
-            translationKey="search.has"
-            items={hasOptions}
-            value={has}
-            onChangeCallback={updateHasFilterForm}
-        />
-    );
-
-    const updateIsFilterForm = (selectedItems: Array<MultiSelectItem<IsFilterValue>>) => {
-        updateFilterForm({is: selectedItems.map((item) => item.value)});
-    };
-    const isComponent = (props: PopoverComponentProps) => (
-        <MultiSelectFilterPopup
-            closeOverlay={props.closeOverlay}
-            translationKey="search.filters.is"
-            items={isOptions}
-            value={is}
-            onChangeCallback={updateIsFilterForm}
-        />
-    );
-
-    const userPickerComponent = ({closeOverlay}: PopoverComponentProps) => {
-        const value = searchAdvancedFiltersForm.from ?? [];
-
-        return (
-            <UserSelectPopup
-                value={value}
-                closeOverlay={closeOverlay}
-                onChange={(selectedUsers) => updateFilterForm({from: selectedUsers})}
-            />
-        );
-    };
-
-    const handleWorkspaceChange = (items: Array<MultiSelectItem<string>>) => {
-        updateFilterForm({policyID: items.map((item) => item.value)});
-    };
-
-    const workspaceComponent = ({closeOverlay}: PopoverComponentProps) => (
-        <MultiSelectPopup
-            label={translate('workspace.common.workspace')}
-            items={workspaceOptions}
-            value={selectedWorkspaceOptions}
-            closeOverlay={closeOverlay}
-            onChange={handleWorkspaceChange}
-            isSearchable={shouldShowWorkspaceSearchInput}
-        />
-    );
-
-    const workspaceValue = selectedWorkspaceOptions.map((option) => option.text);
-
-    const fromValue = searchAdvancedFiltersForm.from?.map((currentAccountID) => getDisplayNameOrDefault(personalDetails?.[currentAccountID], currentAccountID, false)) ?? [];
-
-    const shouldDisplayGroupByFilter = !!groupBy?.value;
-    const shouldDisplayGroupCurrencyFilter = shouldDisplayGroupByFilter && hasMultipleOutputCurrency;
-    const shouldDisplayFeedFilter = feedOptions.length > 1 && !!searchAdvancedFiltersForm.feed;
-    const shouldDisplayPostedFilter =
-        !!searchAdvancedFiltersForm.feed &&
-        (!!searchAdvancedFiltersForm.postedOn || !!searchAdvancedFiltersForm.postedAfter || !!searchAdvancedFiltersForm.postedBefore || !!searchAdvancedFiltersForm.postedRange);
-    const shouldDisplayWithdrawalTypeFilter = !!searchAdvancedFiltersForm.withdrawalType;
-    const shouldDisplayWithdrawnFilter =
-        !!searchAdvancedFiltersForm.withdrawnOn || !!searchAdvancedFiltersForm.withdrawnAfter || !!searchAdvancedFiltersForm.withdrawnBefore || !!searchAdvancedFiltersForm.withdrawnRange;
-
-    const filters: FilterItem[] = [
-        {
-            label: translate('common.type'),
-            PopoverComponent: typeComponent,
-            value: type?.text ?? null,
-            filterKey: FILTER_KEYS.TYPE,
-            sentryLabel: CONST.SENTRY_LABEL.SEARCH.FILTER_TYPE,
-        },
-        ...(shouldDisplayGroupByFilter
-            ? [
-                  {
-                      label: translate('search.display.groupBy'),
-                      PopoverComponent: groupByComponent,
-                      value: groupBy?.text ?? null,
-                      filterKey: FILTER_KEYS.GROUP_BY,
-                      sentryLabel: CONST.SENTRY_LABEL.SEARCH.FILTER_GROUP_BY,
-                  },
-              ]
-            : []),
-        ...(shouldDisplayGroupCurrencyFilter
-            ? [
-                  {
-                      label: translate('common.groupCurrency'),
-                      PopoverComponent: groupCurrencyComponent,
-                      value: groupCurrency?.value ?? null,
-                      filterKey: FILTER_KEYS.GROUP_CURRENCY,
-                      sentryLabel: CONST.SENTRY_LABEL.SEARCH.FILTER_GROUP_CURRENCY,
-                  },
-              ]
-            : []),
-        ...(shouldDisplayFeedFilter
-            ? [
-                  {
-                      label: translate('search.filters.feed'),
-                      PopoverComponent: feedComponent,
-                      value: feed.map((option) => option.text),
-                      filterKey: FILTER_KEYS.FEED,
-                      sentryLabel: CONST.SENTRY_LABEL.SEARCH.FILTER_FEED,
-                  },
-              ]
-            : []),
-        ...(shouldDisplayPostedFilter
-            ? [
-                  {
-                      label: translate('search.filters.posted'),
-                      PopoverComponent: postedPickerComponent,
-                      value: displayPosted,
-                      filterKey: FILTER_KEYS.POSTED_ON,
-                      sentryLabel: CONST.SENTRY_LABEL.SEARCH.FILTER_POSTED,
-                  },
-              ]
-            : []),
-        ...(shouldDisplayWithdrawalTypeFilter
-            ? [
-                  {
-                      label: translate('search.withdrawalType'),
-                      PopoverComponent: withdrawalTypeComponent,
-                      value: withdrawalType?.text ?? null,
-                      filterKey: FILTER_KEYS.WITHDRAWAL_TYPE,
-                      sentryLabel: CONST.SENTRY_LABEL.SEARCH.FILTER_WITHDRAWAL_TYPE,
-                  },
-              ]
-            : []),
-        ...(shouldDisplayWithdrawnFilter
-            ? [
-                  {
-                      label: translate('search.filters.withdrawn'),
-                      PopoverComponent: withdrawnPickerComponent,
-                      value: displayWithdrawn,
-                      filterKey: FILTER_KEYS.WITHDRAWN_ON,
-                      sentryLabel: CONST.SENTRY_LABEL.SEARCH.FILTER_WITHDRAWN,
-                  },
-              ]
-            : []),
-        {
-            label: translate('common.status'),
-            PopoverComponent: statusComponent,
-            value: status.map((option) => option.text),
-            filterKey: FILTER_KEYS.STATUS,
-            sentryLabel: CONST.SENTRY_LABEL.SEARCH.FILTER_STATUS,
-        },
-        ...(type?.value === CONST.SEARCH.DATA_TYPES.CHAT
-            ? [
-                  {
-                      label: translate('search.has'),
-                      PopoverComponent: hasComponent,
-                      value: has.map((option) => option.text),
-                      filterKey: FILTER_KEYS.HAS,
-                      sentryLabel: CONST.SENTRY_LABEL.SEARCH.FILTER_HAS,
-                  },
-              ]
-            : []),
-        ...(type?.value === CONST.SEARCH.DATA_TYPES.CHAT
-            ? [
-                  {
-                      label: translate('search.filters.is'),
-                      PopoverComponent: isComponent,
-                      value: is.map((option) => option.text),
-                      filterKey: FILTER_KEYS.IS,
-                      sentryLabel: CONST.SENTRY_LABEL.SEARCH.FILTER_IS,
-                  },
-              ]
-            : []),
-        {
-            label: translate('common.date'),
-            PopoverComponent: datePickerComponent,
-            value: displayDate,
-            filterKey: FILTER_KEYS.DATE_ON,
-            sentryLabel: CONST.SENTRY_LABEL.SEARCH.FILTER_DATE,
-        },
-        {
-            label: translate('common.from'),
-            PopoverComponent: userPickerComponent,
-            value: fromValue,
-            filterKey: FILTER_KEYS.FROM,
-            sentryLabel: CONST.SENTRY_LABEL.SEARCH.FILTER_FROM,
-        },
-        ...(shouldDisplayWorkspaceFilter
-            ? [
-                  {
-                      label: translate('workspace.common.workspace'),
-                      PopoverComponent: workspaceComponent,
-                      value: workspaceValue,
-                      filterKey: FILTER_KEYS.POLICY_ID,
-                      sentryLabel: CONST.SENTRY_LABEL.SEARCH.FILTER_WORKSPACE,
-                  },
-              ]
-            : []),
-        ...(shouldDisplayGroupByFilter
-            ? [
-                  {
-                      label: translate('search.view.label'),
-                      PopoverComponent: viewComponent,
-                      value: viewValue?.text ?? null,
-                      filterKey: FILTER_KEYS.VIEW,
-                      sentryLabel: CONST.SENTRY_LABEL.SEARCH.FILTER_VIEW,
-                  },
-              ]
-            : []),
-    ].filter((filterItem) => isFilterSupported(filterItem.filterKey, type?.value ?? CONST.SEARCH.DATA_TYPES.EXPENSE));
+    const filters = mapFiltersFormToLabelValueList<FilterItem>(searchAdvancedFiltersForm, queryJSON.policyID, SKIPPED_FILTERS, translate, localeCompare, (filterKey) => {
+        const groupConfig = FILTER_GROUP_MAP[filterKey];
+        if (groupConfig) {
+            if (isAmountFilterKey(groupConfig.syntax)) {
+                return makeAmountFilterItem(groupConfig.syntax, translate(groupConfig.label), searchAdvancedFiltersForm, updateFilterForm);
+            }
+            return makeDateFilterItem(groupConfig.syntax, groupConfig.label, searchAdvancedFiltersForm, updateFilterForm);
+        }
 
-    const hiddenSelectedFilters = (() => {
-        const advancedSearchFiltersKeys = typeFiltersKeys.flat();
-        const exposedFiltersKeys = new Set<string>(
-            filters.flatMap((filter) => {
-                const dateFilterKey = DATE_FILTER_KEYS.find((key) => filter.filterKey.startsWith(key));
-                if (dateFilterKey) {
-                    return dateFilterKey;
-                }
-                return filter.filterKey;
-            }),
-        );
+        if (filterKey.startsWith(CONST.SEARCH.REPORT_FIELD.GLOBAL_PREFIX)) {
+            return {
+                PopoverComponent: ({closeOverlay}) => (
+                    <ReportFieldPopup
+                        closeOverlay={closeOverlay}
+                        updateFilterForm={updateFilterForm}
+                    />
+                ),
+                sentryLabel: getFilterSentryLabel(filterKey),
+            };
+        }
 
-        const hiddenFilters = advancedSearchFiltersKeys.filter((key) => !exposedFiltersKeys.has(key));
-        const hasReportFields = Object.keys(filterFormValues).some((key) => key.startsWith(CONST.SEARCH.REPORT_FIELD.GLOBAL_PREFIX) && !key.startsWith(CONST.SEARCH.REPORT_FIELD.NOT_PREFIX));
+        const label = FILTER_LABEL_MAP[filterKey];
+        if (!label) {
+            return {PopoverComponent: () => null};
+        }
 
-        return hiddenFilters.filter((key) => {
-            const dateFilterKey = DATE_FILTER_KEYS.find((dateKey) => key === dateKey);
-            if (dateFilterKey) {
-                return hasDateFilterValue(filterFormValues, dateFilterKey);
+        switch (filterKey) {
+            case FILTER_KEYS.IN:
+            case FILTER_KEYS.TAX_RATE:
+            case FILTER_KEYS.EXPORTED_TO:
+            case FILTER_KEYS.TAG:
+            case FILTER_KEYS.CATEGORY: {
+                const PopupComponent = {
+                    [FILTER_KEYS.TAX_RATE]: TaxRateSelectPopup,
+                    [FILTER_KEYS.EXPORTED_TO]: ExportedToSelectPopup,
+                    [FILTER_KEYS.TAG]: TagSelectPopup,
+                    [FILTER_KEYS.CATEGORY]: CategorySelectPopup,
+                    [FILTER_KEYS.IN]: InSelectPopup,
+                }[filterKey];
+                return {
+                    PopoverComponent: ({closeOverlay}) => (
+                        <PopupComponent
+                            updateFilterForm={updateFilterForm}
+                            closeOverlay={closeOverlay}
+                        />
+                    ),
+                    sentryLabel: getFilterSentryLabel(filterKey),
+                };
             }
-
-            if (key === CONST.SEARCH.SYNTAX_FILTER_KEYS.REPORT_FIELD) {
-                return hasReportFields;
+            case FILTER_KEYS.FEED:
+            case FILTER_KEYS.CARD_ID: {
+                return {
+                    PopoverComponent: ({closeOverlay, isExpanded}) => (
+                        <CardSelectPopup
+                            isExpanded={isExpanded}
+                            updateFilterForm={updateFilterForm}
+                            closeOverlay={closeOverlay}
+                        />
+                    ),
+                    sentryLabel: getFilterSentryLabel(filterKey),
+                };
             }
-
-            const amountFilterKey = AMOUNT_FILTER_KEYS.find((amountKey) => key === amountKey);
-            if (amountFilterKey) {
-                return (
-                    filterFormValues[`${amountFilterKey}${CONST.SEARCH.AMOUNT_MODIFIERS.EQUAL_TO}`] ??
-                    filterFormValues[`${amountFilterKey}${CONST.SEARCH.AMOUNT_MODIFIERS.GREATER_THAN}`] ??
-                    filterFormValues[`${amountFilterKey}${CONST.SEARCH.AMOUNT_MODIFIERS.LESS_THAN}`]
+            case FILTER_KEYS.MERCHANT:
+            case FILTER_KEYS.DESCRIPTION:
+            case FILTER_KEYS.REPORT_ID:
+            case FILTER_KEYS.KEYWORD:
+            case FILTER_KEYS.TITLE:
+            case FILTER_KEYS.WITHDRAWAL_ID: {
+                return {
+                    PopoverComponent: ({closeOverlay}) => (
+                        <TextInputPopup
+                            placeholder={translate(label)}
+                            label={translate(label)}
+                            defaultValue={searchAdvancedFiltersForm[filterKey] ?? ''}
+                            closeOverlay={closeOverlay}
+                            onChange={(value) => updateFilterForm({[filterKey]: value})}
+                        />
+                    ),
+                    sentryLabel: getFilterSentryLabel(filterKey),
+                };
+            }
+            case FILTER_KEYS.CURRENCY:
+            case FILTER_KEYS.PURCHASE_CURRENCY: {
+                return {
+                    PopoverComponent: ({closeOverlay}) => (
+                        <CurrencySelectPopup
+                            closeOverlay={closeOverlay}
+                            translationKey={label}
+                            value={searchAdvancedFiltersForm[filterKey] ?? []}
+                            onChange={(selectedItems) => {
+                                const update: Partial<SearchAdvancedFiltersForm> = {};
+                                update[filterKey] = selectedItems.map((item) => item.value);
+                                updateFilterForm(update);
+                            }}
+                        />
+                    ),
+                    sentryLabel: getFilterSentryLabel(filterKey),
+                };
+            }
+            case FILTER_KEYS.BILLABLE:
+            case FILTER_KEYS.REIMBURSABLE:
+            case FILTER_KEYS.WITHDRAWAL_TYPE: {
+                const formValue = searchAdvancedFiltersForm[filterKey];
+                const items = getSingleSelectFilterOptions(filterKey, translate);
+                const value = items.find((option) => option.value === formValue) ?? null;
+                const singleSelectComponent = ({closeOverlay}: PopoverComponentProps) => (
+                    <SingleSelectPopup
+                        label={translate(label)}
+                        items={items}
+                        value={value}
+                        closeOverlay={closeOverlay}
+                        onChange={(item) => updateFilterForm({[filterKey]: item?.value})}
+                    />
                 );
+                return {PopoverComponent: singleSelectComponent, sentryLabel: getFilterSentryLabel(filterKey)};
             }
+            case FILTER_KEYS.HAS:
+            case FILTER_KEYS.IS:
+            case FILTER_KEYS.EXPENSE_TYPE:
+            case FILTER_KEYS.STATUS: {
+                const formValues = searchAdvancedFiltersForm[filterKey];
+                const formValuesAsArray = Array.isArray(formValues) ? formValues : [formValues];
+                const items = getMultiSelectFilterOptions(filterKey, type, translate);
+                const value = items.filter((item) => formValuesAsArray.includes(item.value));
+
+                const multiSelectComponent = ({closeOverlay}: PopoverComponentProps) => (
+                    <MultiSelectFilterPopup
+                        closeOverlay={closeOverlay}
+                        translationKey={label}
+                        items={items}
+                        value={value}
+                        onChangeCallback={(selectedItems) => {
+                            if (filterKey === FILTER_KEYS.STATUS) {
+                                updateFilterForm({status: selectedItems.length ? selectedItems.map((item) => item.value) : CONST.SEARCH.STATUS.EXPENSE.ALL});
+                                return;
+                            }
+                            const update: Partial<SearchAdvancedFiltersForm> = {};
+                            update[filterKey] = selectedItems.map((item) => item.value) as ExpenseTypeValues & HasFilterValues & IsFilterValues;
+                            updateFilterForm(update);
+                        }}
+                    />
+                );
 
-            return filterFormValues[key as SearchAdvancedFiltersKey];
-        });
-    })();
-
-    const shouldShowColumnsButton = isLargeScreenWidth && (queryJSON.type === CONST.SEARCH.DATA_TYPES.EXPENSE || queryJSON.type === CONST.SEARCH.DATA_TYPES.EXPENSE_REPORT);
-
-    const filterButtonText = translate('search.filtersHeader') + (hiddenSelectedFilters.length > 0 ? ` (${hiddenSelectedFilters.length})` : '');
+                return {PopoverComponent: multiSelectComponent, sentryLabel: getFilterSentryLabel(filterKey)};
+            }
+            case FILTER_KEYS.ASSIGNEE:
+            case FILTER_KEYS.ATTENDEE:
+            case FILTER_KEYS.TO:
+            case FILTER_KEYS.FROM:
+                return {
+                    PopoverComponent: ({closeOverlay}) => (
+                        <UserSelectPopup
+                            value={searchAdvancedFiltersForm[filterKey] ?? []}
+                            label={translate(label)}
+                            closeOverlay={closeOverlay}
+                            onChange={(selectedUsers) => {
+                                const update: Partial<SearchAdvancedFiltersForm> = {};
+                                update[filterKey] = selectedUsers;
+                                updateFilterForm(update);
+                            }}
+                        />
+                    ),
+                    sentryLabel: getFilterSentryLabel(filterKey),
+                };
+            case FILTER_KEYS.POLICY_ID:
+                return {
+                    PopoverComponent: ({closeOverlay}) => (
+                        <WorkspaceSelectPopup
+                            policyIDQuery={queryJSON.policyID}
+                            updateFilterForm={updateFilterForm}
+                            closeOverlay={closeOverlay}
+                        />
+                    ),
+                    sentryLabel: getFilterSentryLabel(filterKey),
+                };
+            default:
+                // This should be unreachable
+                return {PopoverComponent: () => null};
+        }
+    });
 
     return {
         filters,
-        hiddenSelectedFilters,
         hasErrors,
         shouldShowFiltersBarLoading,
-        shouldShowSelectedDropdown,
-        shouldShowColumnsButton,
-        shouldUseNarrowLayout,
-        filterButtonText,
         queryJSON,
-        openAdvancedFilters,
-        openSearchColumns,
-        expensifyIcons,
-        theme,
         styles,
         translate,
     };
@@ -700,4 +374,4 @@ function useSearchFiltersBar(queryJSON: SearchQueryJSON, isMobileSelectionModeEn
 
 export default useSearchFiltersBar;
 export type {FilterItem};
-export {createDateDisplayValue, hasDateFilterValue, typeOptionsPoliciesSelector};
+export {typeOptionsPoliciesSelector, SKIPPED_FILTERS};
diff --git a/src/components/Search/SearchRouter/SearchRouter.tsx b/src/components/Search/SearchRouter/SearchRouter.tsx
index a3d8f2e2d08f..c2f285504d7c 100644
--- a/src/components/Search/SearchRouter/SearchRouter.tsx
+++ b/src/components/Search/SearchRouter/SearchRouter.tsx
@@ -337,7 +337,7 @@ function SearchRouter({onRouterClose, shouldHideInputCaret, isSearchRouterDispla
                     }}
                     caretHidden={shouldHideInputCaret}
                     shouldShowOfflineMessage
-                    wrapperStyle={{...styles.searchRouterBorder, ...styles.alignItemsCenter}}
+                    wrapperStyle={styles.searchRouterBorder}
                     wrapperFocusedStyle={styles.borderColorFocus}
                     isSearchingForReports={!!isSearchingForReports}
                     selection={selection}
diff --git a/src/components/Search/hooks/useFilterFeedValue.tsx b/src/components/Search/hooks/useFilterFeedValue.tsx
deleted file mode 100644
index 36104359c16a..000000000000
--- a/src/components/Search/hooks/useFilterFeedValue.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-import useFeedKeysWithAssignedCards from '@hooks/useFeedKeysWithAssignedCards';
-import useLocalize from '@hooks/useLocalize';
-import useOnyx from '@hooks/useOnyx';
-import {getCardFeedsForDisplay} from '@libs/CardFeedUtils';
-import type {SearchFilter} from '@libs/SearchUIUtils';
-import ONYXKEYS from '@src/ONYXKEYS';
-
-function useFilterFeedValue(feedIDs: SearchFilter['value']): string {
-    const {translate} = useLocalize();
-    const feedKeysWithCards = useFeedKeysWithAssignedCards();
-    const [personalAndWorkspaceCards] = useOnyx(ONYXKEYS.DERIVED.PERSONAL_AND_WORKSPACE_CARD_LIST);
-    const [allFeeds] = useOnyx(ONYXKEYS.COLLECTION.SHARED_NVP_PRIVATE_DOMAIN_MEMBER);
-
-    if (!Array.isArray(feedIDs)) {
-        return '';
-    }
-
-    const feedsForDisplay = getCardFeedsForDisplay(allFeeds, personalAndWorkspaceCards, translate, feedKeysWithCards);
-    return feedIDs.reduce((acc, feedID) => {
-        const feedName = feedsForDisplay[feedID]?.name;
-        if (!feedName) {
-            return acc;
-        }
-        if (!acc) {
-            return feedName;
-        }
-        return `${acc}, ${feedName}`;
-    }, '');
-}
-
-export default useFilterFeedValue;
diff --git a/src/components/Search/hooks/useFilterFromValue.tsx b/src/components/Search/hooks/useFilterFromValue.tsx
deleted file mode 100644
index cf2f6cad933b..000000000000
--- a/src/components/Search/hooks/useFilterFromValue.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-import type {OnyxEntry} from 'react-native-onyx';
-import useOnyx from '@hooks/useOnyx';
-import {getDisplayNameOrDefault} from '@libs/PersonalDetailsUtils';
-import type {SearchFilter} from '@libs/SearchUIUtils';
-import ONYXKEYS from '@src/ONYXKEYS';
-import type {PersonalDetailsList} from '@src/types/onyx';
-
-function useFilterFromValue(fromAccountIDs: SearchFilter['value']): string {
-    const filterFromSelector = (personalDetails: OnyxEntry<PersonalDetailsList>) => {
-        if (!Array.isArray(fromAccountIDs) || !personalDetails) {
-            return null;
-        }
-        return fromAccountIDs.map((currentAccountID) => getDisplayNameOrDefault(personalDetails[currentAccountID], currentAccountID, false));
-    };
-
-    const [fromDisplayNames] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST, {selector: filterFromSelector});
-    return fromDisplayNames?.join(', ') ?? '';
-}
-
-export default useFilterFromValue;
diff --git a/src/components/Search/hooks/useFilterUserValue.tsx b/src/components/Search/hooks/useFilterUserValue.tsx
new file mode 100644
index 000000000000..2818f5f54c34
--- /dev/null
+++ b/src/components/Search/hooks/useFilterUserValue.tsx
@@ -0,0 +1,20 @@
+import type {OnyxEntry} from 'react-native-onyx';
+import useOnyx from '@hooks/useOnyx';
+import {getDisplayNameOrDefault} from '@libs/PersonalDetailsUtils';
+import type {SearchFilter} from '@libs/SearchUIUtils';
+import ONYXKEYS from '@src/ONYXKEYS';
+import type {PersonalDetailsList} from '@src/types/onyx';
+
+function useFilterUserValue(accountIDs: SearchFilter['value']): string {
+    const filterUserSelector = (personalDetails: OnyxEntry<PersonalDetailsList>) => {
+        if (!Array.isArray(accountIDs) || !personalDetails) {
+            return null;
+        }
+        return accountIDs.map((currentAccountID) => getDisplayNameOrDefault(personalDetails[currentAccountID], currentAccountID, false));
+    };
+
+    const [displayNames] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST, {selector: filterUserSelector});
+    return displayNames?.join(', ') ?? '';
+}
+
+export default useFilterUserValue;
diff --git a/src/components/Search/index.tsx b/src/components/Search/index.tsx
index 9112660a5489..4a78c31f9e23 100644
--- a/src/components/Search/index.tsx
+++ b/src/components/Search/index.tsx
@@ -82,6 +82,7 @@ import type {SearchColumnType, SearchParams, SearchQueryJSON, SelectedTransactio
 
 type SearchProps = {
     queryJSON: SearchQueryJSON;
+    hasFilterBars?: boolean;
     onSearchListScroll?: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;
     contentContainerStyle?: StyleProp<ViewStyle>;
     searchResults?: SearchResults;
@@ -212,6 +213,7 @@ function prepareTransactionsList(
 
 function Search({
     queryJSON,
+    hasFilterBars,
     searchResults,
     onSearchListScroll,
     contentContainerStyle,
@@ -300,7 +302,7 @@ function Search({
         suggestedSearches,
     } = useSearchStateContext();
 
-    const {setSelectedTransactions, clearSelectedTransactions, setShouldShowActionsBarLoading, setShouldShowSelectAllMatchingItems, selectAllMatchingItems, setShouldResetSearchQuery} =
+    const {setSelectedTransactions, clearSelectedTransactions, setShouldShowFiltersBarLoading, setShouldShowSelectAllMatchingItems, selectAllMatchingItems, setShouldResetSearchQuery} =
         useSearchActionsContext();
     const [offset, setOffset] = useState(0);
 
@@ -638,8 +640,8 @@ function Search({
 
     useEffect(() => {
         /** We only want to display the skeleton for the status filters the first time we load them for a specific data type */
-        setShouldShowActionsBarLoading(shouldShowLoadingState && lastSearchType !== type);
-    }, [lastSearchType, setShouldShowActionsBarLoading, shouldShowLoadingState, type]);
+        setShouldShowFiltersBarLoading(shouldShowLoadingState && lastSearchType !== type);
+    }, [lastSearchType, setShouldShowFiltersBarLoading, shouldShowLoadingState, type]);
 
     const shouldRetrySearchWithTotalsOrGroupedRef = useRef(false);
 
@@ -1507,7 +1509,7 @@ function Search({
             <SearchRowSkeleton
                 shouldAnimate
                 onLayout={onSkeletonLayout}
-                containerStyle={shouldUseNarrowLayout ? styles.searchListContentContainerStyles : styles.mt3}
+                containerStyle={shouldUseNarrowLayout ? styles.searchListContentContainerStyles(!!hasFilterBars) : styles.mt3}
                 reasonAttributes={deferredWorkReasonAttributes}
             />
         );
@@ -1523,7 +1525,7 @@ function Search({
         const isInvalidQuery = searchRequestResponseStatusCode === CONST.JSON_CODE.INVALID_SEARCH_QUERY;
         cancelNavigationSpans();
         return (
-            <View style={[shouldUseNarrowLayout ? styles.searchListContentContainerStyles : styles.mt3, styles.flex1]}>
+            <View style={[shouldUseNarrowLayout ? styles.searchListContentContainerStyles(!!hasFilterBars) : styles.mt3, styles.flex1]}>
                 <FullPageErrorView
                     shouldShow
                     containerStyle={styles.searchBlockingErrorViewContainer}
@@ -1550,14 +1552,14 @@ function Search({
     ) {
         cancelNavigationSpans();
         return (
-            <View style={[styles.flex1, isInLandscapeMode ? undefined : [shouldUseNarrowLayout ? styles.searchListContentContainerStyles : styles.mt3]]}>
+            <View style={[styles.flex1, isInLandscapeMode ? undefined : [shouldUseNarrowLayout ? styles.searchListContentContainerStyles(!!hasFilterBars) : styles.mt3]]}>
                 <EmptySearchView
                     similarSearchHash={similarSearchHash}
                     type={type}
                     hasResults={searchResults?.search?.hasResults}
                     queryJSON={queryJSON}
                     onScroll={onSearchListScroll}
-                    contentContainerStyle={isInLandscapeMode ? styles.searchListContentContainerStyles : undefined}
+                    contentContainerStyle={isInLandscapeMode ? styles.searchListContentContainerStyles(!!hasFilterBars) : undefined}
                 />
             </View>
         );
@@ -1596,7 +1598,7 @@ function Search({
                     onLayout={onLayoutChart}
                     scrollEventThrottle={CONST.TIMING.MIN_SMOOTH_SCROLL_EVENT_THROTTLE}
                 >
-                    <View style={[shouldUseNarrowLayout ? styles.searchListContentContainerStyles : styles.mt3, styles.mh4, styles.mb4, styles.flex1]}>
+                    <View style={[shouldUseNarrowLayout ? styles.searchListContentContainerStyles(!!hasFilterBars) : styles.mt3, styles.mh4, styles.mb4, styles.flex1]}>
                         <SearchChartWrapper
                             title={chartTitle}
                             groupBy={validGroupBy}
@@ -1654,7 +1656,7 @@ function Search({
                         )
                     }
                     contentContainerStyle={[styles.pb3, contentContainerStyle]}
-                    containerStyle={[styles.pv0, !tableHeaderVisible && !isSmallScreenWidth && styles.pt3]}
+                    containerStyle={[styles.pv0, !tableHeaderVisible && !isSmallScreenWidth && styles.pt1]}
                     shouldPreventDefaultFocusOnSelectRow={!canUseTouchScreen()}
                     onScroll={onSearchListScroll}
                     onEndReachedThreshold={0.75}
diff --git a/src/components/Search/types.ts b/src/components/Search/types.ts
index 3713260cd1a1..69e4b2dced4f 100644
--- a/src/components/Search/types.ts
+++ b/src/components/Search/types.ts
@@ -185,7 +185,7 @@ type SearchStateContextValue = SearchContextData & {
     currentSearchResults: SearchResults | undefined;
     /** Whether we're on a main to-do search and should use live Onyx data instead of snapshots */
     shouldUseLiveData: boolean;
-    shouldShowActionsBarLoading: boolean;
+    shouldShowFiltersBarLoading: boolean;
     lastSearchType: string | undefined;
     shouldShowSelectAllMatchingItems: boolean;
     areAllMatchingItemsSelected: boolean;
@@ -204,7 +204,7 @@ type SearchActionsContextValue = {
         (clearIDs: true, unused?: undefined): void;
     };
     removeTransaction: (transactionID: string | undefined) => void;
-    setShouldShowActionsBarLoading: (shouldShow: boolean) => void;
+    setShouldShowFiltersBarLoading: (shouldShow: boolean) => void;
     setLastSearchType: (type: string | undefined) => void;
     setShouldShowSelectAllMatchingItems: (shouldShow: boolean) => void;
     selectAllMatchingItems: (on: boolean) => void;
diff --git a/src/components/Skeletons/SearchActionsSkeleton.tsx b/src/components/Skeletons/SearchFiltersSkeleton.tsx
similarity index 88%
rename from src/components/Skeletons/SearchActionsSkeleton.tsx
rename to src/components/Skeletons/SearchFiltersSkeleton.tsx
index fd4b77b9953a..9171ebabf454 100644
--- a/src/components/Skeletons/SearchActionsSkeleton.tsx
+++ b/src/components/Skeletons/SearchFiltersSkeleton.tsx
@@ -15,7 +15,7 @@ const DEFAULT_CONTAINER_HEIGHT = 28;
 const DEFAULT_PILL_HEIGHT = 8;
 const PILL_HEIGHT_RATIO = DEFAULT_PILL_HEIGHT / DEFAULT_CONTAINER_HEIGHT;
 
-type SearchActionsSkeletonProps = {
+type SearchFiltersSkeletonProps = {
     shouldAnimate?: boolean;
     itemCount?: number;
     width?: number;
@@ -23,15 +23,15 @@ type SearchActionsSkeletonProps = {
     reasonAttributes: SkeletonSpanReasonAttributes;
 };
 
-function SearchActionsSkeleton({shouldAnimate = true, itemCount = 5, width = 84, height = 28, reasonAttributes}: SearchActionsSkeletonProps) {
+function SearchFiltersSkeleton({shouldAnimate = true, itemCount = 5, width = 84, height = 28, reasonAttributes}: SearchFiltersSkeletonProps) {
     const theme = useTheme();
     const styles = useThemeStyles();
-    useSkeletonSpan('SearchActionsSkeleton', reasonAttributes);
+    useSkeletonSpan('SearchFiltersSkeleton', reasonAttributes);
 
     const skeletonCount = new Array(itemCount).fill(0);
 
     return (
-        <View style={[styles.mh5, styles.mb4, styles.mt2]}>
+        <View style={[styles.mh5, styles.mb4, styles.mt3]}>
             <SkeletonViewContentLoader
                 animate={shouldAnimate}
                 width={width}
@@ -73,4 +73,4 @@ function SearchActionsSkeleton({shouldAnimate = true, itemCount = 5, width = 84,
     );
 }
 
-export default SearchActionsSkeleton;
+export default SearchFiltersSkeleton;
diff --git a/src/components/Skeletons/SearchInputSelectionSkeleton.tsx b/src/components/Skeletons/SearchInputSelectionSkeleton.tsx
index ce9701727fa3..5fc13b566967 100644
--- a/src/components/Skeletons/SearchInputSelectionSkeleton.tsx
+++ b/src/components/Skeletons/SearchInputSelectionSkeleton.tsx
@@ -18,7 +18,7 @@ function SearchInputSelectionSkeleton({reasonAttributes}: SearchInputSelectionSk
     useSkeletonSpan('SearchInputSelectionSkeleton', reasonAttributes);
 
     return (
-        <View style={[styles.searchRouterTextInputContainer, styles.searchAutocompleteInputResults, styles.br2, styles.justifyContentCenter]}>
+        <View style={[styles.searchRouterTextInputContainer, styles.searchAutocompleteInputResults, styles.searchInputSkeleton]}>
             <SkeletonViewContentLoader
                 height={variables.searchAutocompleteInputSkeletonHeight}
                 backgroundColor={theme.skeletonLHNIn}
diff --git a/src/hooks/useAdvancedSearchFilters.ts b/src/hooks/useAdvancedSearchFilters.ts
index 1473da91944b..07038026f240 100644
--- a/src/hooks/useAdvancedSearchFilters.ts
+++ b/src/hooks/useAdvancedSearchFilters.ts
@@ -26,11 +26,7 @@ const typeFiltersKeys = {
             CONST.SEARCH.SYNTAX_FILTER_KEYS.KEYWORD,
             CONST.SEARCH.SYNTAX_FILTER_KEYS.STATUS,
             CONST.SEARCH.SYNTAX_FILTER_KEYS.POLICY_ID,
-            CONST.SEARCH.SYNTAX_ROOT_KEYS.GROUP_BY,
-            CONST.SEARCH.SYNTAX_ROOT_KEYS.VIEW,
-            CONST.SEARCH.SYNTAX_FILTER_KEYS.GROUP_CURRENCY,
             CONST.SEARCH.SYNTAX_FILTER_KEYS.HAS,
-            CONST.SEARCH.SYNTAX_ROOT_KEYS.LIMIT,
         ],
         [
             CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPENSE_TYPE,
@@ -69,7 +65,6 @@ const typeFiltersKeys = {
             CONST.SEARCH.SYNTAX_FILTER_KEYS.KEYWORD,
             CONST.SEARCH.SYNTAX_FILTER_KEYS.STATUS,
             CONST.SEARCH.SYNTAX_FILTER_KEYS.POLICY_ID,
-            CONST.SEARCH.SYNTAX_FILTER_KEYS.GROUP_CURRENCY,
         ],
         [
             CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE,
@@ -132,8 +127,6 @@ const typeFiltersKeys = {
             CONST.SEARCH.SYNTAX_FILTER_KEYS.KEYWORD,
             CONST.SEARCH.SYNTAX_FILTER_KEYS.STATUS,
             CONST.SEARCH.SYNTAX_FILTER_KEYS.POLICY_ID,
-            CONST.SEARCH.SYNTAX_ROOT_KEYS.GROUP_BY,
-            CONST.SEARCH.SYNTAX_FILTER_KEYS.GROUP_CURRENCY,
         ],
         [
             CONST.SEARCH.SYNTAX_FILTER_KEYS.MERCHANT,
@@ -335,8 +328,6 @@ function useAdvancedSearchFilters() {
     const shouldDisplayCardFilter = shouldDisplayFilter(Object.keys(searchCards ?? {}).length, true);
     const shouldDisplayTaxFilter = shouldDisplayFilter(policyDerived?.hasAnyTaxRates ? 1 : 0, policyDerived?.areTaxEnabled ?? false);
     const shouldDisplayWorkspaceFilter = workspaces.some((section) => section.data.length > 1);
-    const shouldDisplayGroupCurrencyFilter = !!searchAdvancedFilters.groupBy;
-    const shouldDisplayViewFilter = !!searchAdvancedFilters.groupBy;
 
     let currentType = searchAdvancedFilters?.type ?? CONST.SEARCH.DATA_TYPES.EXPENSE;
 
@@ -370,12 +361,6 @@ function useAdvancedSearchFilters() {
                         if (key === CONST.SEARCH.SYNTAX_FILTER_KEYS.POLICY_ID && !shouldDisplayWorkspaceFilter) {
                             return;
                         }
-                        if (key === CONST.SEARCH.SYNTAX_FILTER_KEYS.GROUP_CURRENCY && !shouldDisplayGroupCurrencyFilter) {
-                            return;
-                        }
-                        if (key === CONST.SEARCH.SYNTAX_ROOT_KEYS.VIEW && !shouldDisplayViewFilter) {
-                            return;
-                        }
                         if (key === CONST.SEARCH.SYNTAX_FILTER_KEYS.ATTENDEE && !(policyDerived?.isAttendeeTrackingEnabled ?? true)) {
                             return;
                         }
diff --git a/src/hooks/useSearchFilterSync.ts b/src/hooks/useSearchFilterSync.ts
index b785d3181921..fc870981c3a8 100644
--- a/src/hooks/useSearchFilterSync.ts
+++ b/src/hooks/useSearchFilterSync.ts
@@ -5,7 +5,7 @@ import type {SearchAdvancedFiltersForm} from '@src/types/form';
 
 /**
  * Syncs computed filter form values to the SEARCH_ADVANCED_FILTERS_FORM Onyx key
- * whenever they change. Call from SearchFiltersBar which already computes formValues
+ * whenever they change. Call from SearchAdvanceFiltersButton which already computes formValues
  * via useFilterFormValues.
  *
  * The isFocused guard prevents the blurred (previous) SearchPage instance—kept
diff --git a/src/languages/de.ts b/src/languages/de.ts
index a0d35dd3fc9e..9c0a9a30b847 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -7655,6 +7655,10 @@ Fügen Sie weitere Ausgabelimits hinzu, um den Cashflow Ihres Unternehmens zu sc
             billable: 'Abrechenbar',
             reimbursable: 'Erstattungsfähig',
             purchaseCurrency: 'Kaufwährung',
+            sortOrder: {
+                [CONST.SEARCH.SORT_ORDER.ASC]: 'Aufsteigend',
+                [CONST.SEARCH.SORT_ORDER.DESC]: 'Absteigend',
+            },
             groupBy: {
                 [CONST.SEARCH.GROUP_BY.FROM]: 'Von',
                 [CONST.SEARCH.GROUP_BY.CARD]: 'Karte',
@@ -7683,6 +7687,7 @@ Fügen Sie weitere Ausgabelimits hinzu, um den Cashflow Ihres Unternehmens zu sc
         display: {
             label: 'Anzeige',
             sortBy: 'Sortieren nach',
+            sortOrder: 'Sortierreihenfolge',
             groupBy: 'Gruppieren nach',
             limitResults: 'Ergebnisse einschränken',
         },
@@ -7718,7 +7723,7 @@ Fügen Sie weitere Ausgabelimits hinzu, um den Cashflow Ihres Unternehmens zu sc
         recentSearches: 'Letzte Suchen',
         recentChats: 'Neueste Chats',
         searchIn: 'Suchen in',
-        searchPlaceholder: 'Nach etwas suchen',
+        searchPlaceholder: 'Nach etwas suchen...',
         suggestions: 'Vorschläge',
         suggestionsAvailable: (
             {
diff --git a/src/languages/en.ts b/src/languages/en.ts
index 19db4eeb6b20..0e97f79f121a 100644
--- a/src/languages/en.ts
+++ b/src/languages/en.ts
@@ -7647,6 +7647,10 @@ const translations = {
             billable: 'Billable',
             reimbursable: 'Reimbursable',
             purchaseCurrency: 'Purchase currency',
+            sortOrder: {
+                [CONST.SEARCH.SORT_ORDER.ASC]: 'Ascending',
+                [CONST.SEARCH.SORT_ORDER.DESC]: 'Descending',
+            },
             groupBy: {
                 [CONST.SEARCH.GROUP_BY.FROM]: 'From',
                 [CONST.SEARCH.GROUP_BY.CARD]: 'Card',
@@ -7675,6 +7679,7 @@ const translations = {
         display: {
             label: 'Display',
             sortBy: 'Sort by',
+            sortOrder: 'Sort order',
             groupBy: 'Group by',
             limitResults: 'Limit results',
         },
@@ -7710,7 +7715,7 @@ const translations = {
         recentSearches: 'Recent searches',
         recentChats: 'Recent chats',
         searchIn: 'Search in',
-        searchPlaceholder: 'Search for something',
+        searchPlaceholder: 'Search for something...',
         suggestions: 'Suggestions',
         suggestionsAvailable: ({count}: {count: number}, query = '') => ({
             one: `Suggestions available${query ? ` for ${query}` : ''}. ${count} result.`,
diff --git a/src/languages/es.ts b/src/languages/es.ts
index b9f836a3c2d7..cb0b243f3538 100644
--- a/src/languages/es.ts
+++ b/src/languages/es.ts
@@ -7434,6 +7434,7 @@ ${amount} para ${merchant} - ${date}`,
         display: {
             label: 'Mostrar',
             sortBy: 'Ordenar por',
+            sortOrder: 'Orden de clasificación',
             groupBy: 'Agrupar por',
             limitResults: 'Limitar resultados',
         },
@@ -7510,6 +7511,10 @@ ${amount} para ${merchant} - ${date}`,
             billable: 'Facturable',
             reimbursable: 'Reembolsable',
             purchaseCurrency: 'Moneda de compra',
+            sortOrder: {
+                [CONST.SEARCH.SORT_ORDER.ASC]: 'Ascendente',
+                [CONST.SEARCH.SORT_ORDER.DESC]: 'Descendente',
+            },
             groupBy: {
                 [CONST.SEARCH.GROUP_BY.FROM]: 'De',
                 [CONST.SEARCH.GROUP_BY.CARD]: 'Tarjeta',
@@ -7560,7 +7565,7 @@ ${amount} para ${merchant} - ${date}`,
         recentSearches: 'Búsquedas recientes',
         recentChats: 'Chats recientes',
         searchIn: 'Buscar en',
-        searchPlaceholder: 'Busca algo',
+        searchPlaceholder: 'Busca algo...',
         suggestions: 'Sugerencias',
         suggestionsAvailable: ({count}: {count: number}, query = '') => ({
             one: `Sugerencias disponibles${query ? ` para ${query}` : ''}. ${count} resultado.`,
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index c393872e6db5..91e1c31e63ee 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -7677,6 +7677,10 @@ Ajoutez davantage de règles de dépenses pour protéger la trésorerie de l’e
             billable: 'Facturable',
             reimbursable: 'Remboursable',
             purchaseCurrency: 'Devise d’achat',
+            sortOrder: {
+                [CONST.SEARCH.SORT_ORDER.ASC]: 'Croissant',
+                [CONST.SEARCH.SORT_ORDER.DESC]: 'Descendant',
+            },
             groupBy: {
                 [CONST.SEARCH.GROUP_BY.FROM]: 'De',
                 [CONST.SEARCH.GROUP_BY.CARD]: 'Carte',
@@ -7705,6 +7709,7 @@ Ajoutez davantage de règles de dépenses pour protéger la trésorerie de l’e
         display: {
             label: 'Affichage',
             sortBy: 'Trier par',
+            sortOrder: 'Ordre de tri',
             groupBy: 'Regrouper par',
             limitResults: 'Limiter les résultats',
         },
@@ -7740,7 +7745,7 @@ Ajoutez davantage de règles de dépenses pour protéger la trésorerie de l’e
         recentSearches: 'Recherches récentes',
         recentChats: 'Discussions récentes',
         searchIn: 'Rechercher dans',
-        searchPlaceholder: 'Rechercher quelque chose',
+        searchPlaceholder: 'Rechercher quelque chose...',
         suggestions: 'Suggestions',
         suggestionsAvailable: (
             {
diff --git a/src/languages/it.ts b/src/languages/it.ts
index d7fcd225b0f7..50d7133a5623 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -7643,6 +7643,10 @@ Aggiungi altre regole di spesa per proteggere il flusso di cassa aziendale.`,
             billable: 'Fatturabile',
             reimbursable: 'Rimborsabile',
             purchaseCurrency: 'Valuta di acquisto',
+            sortOrder: {
+                [CONST.SEARCH.SORT_ORDER.ASC]: 'In ordine crescente',
+                [CONST.SEARCH.SORT_ORDER.DESC]: 'In discesa',
+            },
             groupBy: {
                 [CONST.SEARCH.GROUP_BY.FROM]: 'Da',
                 [CONST.SEARCH.GROUP_BY.CARD]: 'Carta',
@@ -7671,6 +7675,7 @@ Aggiungi altre regole di spesa per proteggere il flusso di cassa aziendale.`,
         display: {
             label: 'Visualizza',
             sortBy: 'Ordina per',
+            sortOrder: 'Ordine di visualizzazione',
             groupBy: 'Raggruppa per',
             limitResults: 'Limita i risultati',
         },
@@ -7706,7 +7711,7 @@ Aggiungi altre regole di spesa per proteggere il flusso di cassa aziendale.`,
         recentSearches: 'Ricerche recenti',
         recentChats: 'Chat recenti',
         searchIn: 'Cerca in',
-        searchPlaceholder: 'Cerca qualcosa',
+        searchPlaceholder: 'Cerca qualcosa...',
         suggestions: 'Suggerimenti',
         suggestionsAvailable: (
             {
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index fe49baa29081..b8fd8e112e7b 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -7553,6 +7553,10 @@ ${reportName}
             billable: '請求可能',
             reimbursable: '払い戻し対象',
             purchaseCurrency: '購入通貨',
+            sortOrder: {
+                [CONST.SEARCH.SORT_ORDER.ASC]: '昇順',
+                [CONST.SEARCH.SORT_ORDER.DESC]: '降順',
+            },
             groupBy: {
                 [CONST.SEARCH.GROUP_BY.FROM]: '差出人',
                 [CONST.SEARCH.GROUP_BY.CARD]: 'カード',
@@ -7581,6 +7585,7 @@ ${reportName}
         display: {
             label: '表示',
             sortBy: '並べ替え',
+            sortOrder: '並べ替え順',
             groupBy: 'グループ化基準',
             limitResults: '結果の絞り込み',
         },
@@ -7610,7 +7615,7 @@ ${reportName}
         recentSearches: '最近の検索',
         recentChats: '最近のチャット',
         searchIn: '検索対象',
-        searchPlaceholder: '何かを検索',
+        searchPlaceholder: '何かを検索...',
         suggestions: '提案',
         suggestionsAvailable: (
             {
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index ee2433470bc4..c606bef5681f 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -7620,6 +7620,10 @@ Voeg meer bestedingsregels toe om de kasstroom van het bedrijf te beschermen.`,
             billable: 'Factureerbaar',
             reimbursable: 'Vergoedbaar',
             purchaseCurrency: 'Aankoopvaluta',
+            sortOrder: {
+                [CONST.SEARCH.SORT_ORDER.ASC]: 'Oplopend',
+                [CONST.SEARCH.SORT_ORDER.DESC]: 'Aflopend',
+            },
             groupBy: {
                 [CONST.SEARCH.GROUP_BY.FROM]: 'Van',
                 [CONST.SEARCH.GROUP_BY.CARD]: 'Kaart',
@@ -7648,6 +7652,7 @@ Voeg meer bestedingsregels toe om de kasstroom van het bedrijf te beschermen.`,
         display: {
             label: 'Weergave',
             sortBy: 'Sorteren op',
+            sortOrder: 'Sorteervolgorde',
             groupBy: 'Groeperen op',
             limitResults: 'Resultaten beperken',
         },
@@ -7671,7 +7676,7 @@ Voeg meer bestedingsregels toe om de kasstroom van het bedrijf te beschermen.`,
         recentSearches: 'Recente zoekopdrachten',
         recentChats: 'Recente chats',
         searchIn: 'Zoeken in',
-        searchPlaceholder: 'Zoek iets',
+        searchPlaceholder: 'Zoek iets...',
         suggestions: 'Suggesties',
         suggestionsAvailable: (
             {
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index ce555dd8433d..ffb0076a8489 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -7610,6 +7610,10 @@ Dodaj więcej zasad wydatków, żeby chronić płynność finansową firmy.`,
             billable: 'Fakturowalne',
             reimbursable: 'Podlegające zwrotowi',
             purchaseCurrency: 'Waluta zakupu',
+            sortOrder: {
+                [CONST.SEARCH.SORT_ORDER.ASC]: 'Rosnąco',
+                [CONST.SEARCH.SORT_ORDER.DESC]: 'Zstępujący',
+            },
             groupBy: {
                 [CONST.SEARCH.GROUP_BY.FROM]: 'Od',
                 [CONST.SEARCH.GROUP_BY.CARD]: 'Karta',
@@ -7638,6 +7642,7 @@ Dodaj więcej zasad wydatków, żeby chronić płynność finansową firmy.`,
         display: {
             label: 'Wyświetl',
             sortBy: 'Sortuj według',
+            sortOrder: 'Kolejność sortowania',
             groupBy: 'Grupuj według',
             limitResults: 'Ogranicz wyniki',
         },
@@ -7673,7 +7678,7 @@ Dodaj więcej zasad wydatków, żeby chronić płynność finansową firmy.`,
         recentSearches: 'Ostatnie wyszukiwania',
         recentChats: 'Ostatnie czaty',
         searchIn: 'Szukaj w',
-        searchPlaceholder: 'Wyszukaj coś',
+        searchPlaceholder: 'Wyszukaj coś...',
         suggestions: 'Sugestie',
         suggestionsAvailable: (
             {
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index 6a0897c0eeac..3218eb05fdcc 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -7613,6 +7613,10 @@ Adicione mais regras de gasto para proteger o fluxo de caixa da empresa.`,
             billable: 'Faturável',
             reimbursable: 'Reembolsável',
             purchaseCurrency: 'Moeda de compra',
+            sortOrder: {
+                [CONST.SEARCH.SORT_ORDER.ASC]: 'Ascendente',
+                [CONST.SEARCH.SORT_ORDER.DESC]: 'Descendo',
+            },
             groupBy: {
                 [CONST.SEARCH.GROUP_BY.FROM]: 'De',
                 [CONST.SEARCH.GROUP_BY.CARD]: 'Cartão',
@@ -7641,6 +7645,7 @@ Adicione mais regras de gasto para proteger o fluxo de caixa da empresa.`,
         display: {
             label: 'Exibir',
             sortBy: 'Ordenar por',
+            sortOrder: 'Ordem de classificação',
             groupBy: 'Agrupar por',
             limitResults: 'Limitar resultados',
         },
@@ -7660,7 +7665,7 @@ Adicione mais regras de gasto para proteger o fluxo de caixa da empresa.`,
         recentSearches: 'Pesquisas recentes',
         recentChats: 'Chats recentes',
         searchIn: 'Pesquisar em',
-        searchPlaceholder: 'Pesquisar algo',
+        searchPlaceholder: 'Pesquisar algo...',
         suggestions: 'Sugestões',
         suggestionsAvailable: (
             {
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index e3c4cc136f66..e831eb2e6785 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -7425,6 +7425,10 @@ ${reportName}
             billable: '可计费',
             reimbursable: '可报销',
             purchaseCurrency: '购买货币',
+            sortOrder: {
+                [CONST.SEARCH.SORT_ORDER.ASC]: '升序',
+                [CONST.SEARCH.SORT_ORDER.DESC]: '降序',
+            },
             groupBy: {
                 [CONST.SEARCH.GROUP_BY.FROM]: '来自',
                 [CONST.SEARCH.GROUP_BY.CARD]: '卡片',
@@ -7453,6 +7457,7 @@ ${reportName}
         display: {
             label: '显示',
             sortBy: '按排序',
+            sortOrder: '排序顺序',
             groupBy: '分组依据',
             limitResults: '限制结果',
         },
@@ -7482,7 +7487,7 @@ ${reportName}
         recentSearches: '最近搜索',
         recentChats: '最近聊天',
         searchIn: '搜索范围',
-        searchPlaceholder: '搜索内容',
+        searchPlaceholder: '搜索内容...',
         suggestions: '建议',
         suggestionsAvailable: (
             {
diff --git a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx
index ea8908f199a8..076059582079 100644
--- a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx
+++ b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx
@@ -1038,8 +1038,6 @@ const SearchReportActionsModalStackNavigator = createModalStackNavigator<SearchR
 const SearchAdvancedFiltersModalStackNavigator = createModalStackNavigator<SearchAdvancedFiltersParamList>({
     [SCREENS.SEARCH.ADVANCED_FILTERS_RHP]: () => require<ReactComponentModule>('../../../../pages/Search/SearchAdvancedFiltersPage').default,
     [SCREENS.SEARCH.ADVANCED_FILTERS_TYPE_RHP]: () => require<ReactComponentModule>('../../../../pages/Search/SearchAdvancedFiltersPage/SearchFiltersTypePage').default,
-    [SCREENS.SEARCH.ADVANCED_FILTERS_GROUP_BY_RHP]: () => require<ReactComponentModule>('../../../../pages/Search/SearchAdvancedFiltersPage/SearchFiltersGroupByPage').default,
-    [SCREENS.SEARCH.ADVANCED_FILTERS_VIEW_RHP]: () => require<ReactComponentModule>('../../../../pages/Search/SearchAdvancedFiltersPage/SearchFiltersViewPage').default,
     [SCREENS.SEARCH.ADVANCED_FILTERS_STATUS_RHP]: () => require<ReactComponentModule>('../../../../pages/Search/SearchAdvancedFiltersPage/SearchFiltersStatusPage').default,
     [SCREENS.SEARCH.ADVANCED_FILTERS_DATE_RHP]: () => require<ReactComponentModule>('../../../../pages/Search/SearchAdvancedFiltersPage/SearchFiltersDatePage').default,
     [SCREENS.SEARCH.ADVANCED_FILTERS_SUBMITTED_RHP]: () => require<ReactComponentModule>('../../../../pages/Search/SearchAdvancedFiltersPage/SearchFiltersSubmittedPage').default,
@@ -1050,7 +1048,6 @@ const SearchAdvancedFiltersModalStackNavigator = createModalStackNavigator<Searc
     [SCREENS.SEARCH.ADVANCED_FILTERS_POSTED_RHP]: () => require<ReactComponentModule>('../../../../pages/Search/SearchAdvancedFiltersPage/SearchFiltersPostedPage').default,
     [SCREENS.SEARCH.ADVANCED_FILTERS_WITHDRAWN_RHP]: () => require<ReactComponentModule>('../../../../pages/Search/SearchAdvancedFiltersPage/SearchFiltersWithdrawnPage').default,
     [SCREENS.SEARCH.ADVANCED_FILTERS_CURRENCY_RHP]: () => require<ReactComponentModule>('../../../../pages/Search/SearchAdvancedFiltersPage/SearchFiltersCurrencyPage').default,
-    [SCREENS.SEARCH.ADVANCED_FILTERS_GROUP_CURRENCY_RHP]: () => require<ReactComponentModule>('../../../../pages/Search/SearchAdvancedFiltersPage/SearchFiltersGroupCurrencyPage').default,
     [SCREENS.SEARCH.ADVANCED_FILTERS_DESCRIPTION_RHP]: () => require<ReactComponentModule>('../../../../pages/Search/SearchAdvancedFiltersPage/SearchFiltersDescriptionPage').default,
     [SCREENS.SEARCH.ADVANCED_FILTERS_MERCHANT_RHP]: () => require<ReactComponentModule>('../../../../pages/Search/SearchAdvancedFiltersPage/SearchFiltersMerchantPage').default,
     [SCREENS.SEARCH.ADVANCED_FILTERS_REPORT_ID_RHP]: () => require<ReactComponentModule>('../../../../pages/Search/SearchAdvancedFiltersPage/SearchFiltersReportIDPage').default,
@@ -1065,7 +1062,6 @@ const SearchAdvancedFiltersModalStackNavigator = createModalStackNavigator<Searc
     [SCREENS.SEARCH.ADVANCED_FILTERS_IS_RHP]: () => require<ReactComponentModule>('../../../../pages/Search/SearchAdvancedFiltersPage/SearchFiltersIsPage').default,
     [SCREENS.SEARCH.ADVANCED_FILTERS_TAG_RHP]: () => require<ReactComponentModule>('../../../../pages/Search/SearchAdvancedFiltersPage/SearchFiltersTagPage').default,
     [SCREENS.SEARCH.ADVANCED_FILTERS_HAS_RHP]: () => require<ReactComponentModule>('../../../../pages/Search/SearchAdvancedFiltersPage/SearchFiltersHasPage').default,
-    [SCREENS.SEARCH.ADVANCED_FILTERS_LIMIT_RHP]: () => require<ReactComponentModule>('../../../../pages/Search/SearchAdvancedFiltersPage/SearchFiltersLimitPage').default,
     [SCREENS.SEARCH.ADVANCED_FILTERS_FROM_RHP]: () => require<ReactComponentModule>('@pages/Search/SearchAdvancedFiltersPage/SearchFiltersFromPage').default,
     [SCREENS.SEARCH.ADVANCED_FILTERS_TO_RHP]: () => require<ReactComponentModule>('@pages/Search/SearchAdvancedFiltersPage/SearchFiltersToPage').default,
     [SCREENS.SEARCH.ADVANCED_FILTERS_IN_RHP]: () => require<ReactComponentModule>('@pages/Search/SearchAdvancedFiltersPage/SearchFiltersInPage').default,
diff --git a/src/libs/Navigation/AppNavigator/Navigators/RightModalNavigator.tsx b/src/libs/Navigation/AppNavigator/Navigators/RightModalNavigator.tsx
index 9a519b59e881..0ca41139bfef 100644
--- a/src/libs/Navigation/AppNavigator/Navigators/RightModalNavigator.tsx
+++ b/src/libs/Navigation/AppNavigator/Navigators/RightModalNavigator.tsx
@@ -100,6 +100,7 @@ function SecondaryOverlay() {
 
 const loadRHPReportScreen = () => require<ReactComponentModule>('../../../../pages/inbox/RHPReportScreen').default;
 const loadSearchMoneyRequestReportPage = () => require<ReactComponentModule>('../../../../pages/Search/SearchMoneyRequestReportPage').default;
+const loadSearchSavePage = () => require<ReactComponentModule>('../../../../pages/Search/SearchSavePage').default;
 
 function RightModalNavigator({navigation, route}: RightModalNavigatorProps) {
     // eslint-disable-next-line rulesdir/prefer-shouldUseNarrowLayout-instead-of-isSmallScreenWidth
@@ -401,6 +402,10 @@ function RightModalNavigator({navigation, route}: RightModalNavigatorProps) {
                                     name={SCREENS.RIGHT_MODAL.RESTRICTED_ACTION}
                                     component={ModalStackNavigators.RestrictedActionModalStackNavigator}
                                 />
+                                <Stack.Screen
+                                    name={SCREENS.RIGHT_MODAL.SEARCH_SAVE}
+                                    getComponent={loadSearchSavePage}
+                                />
                                 <Stack.Screen
                                     name={SCREENS.RIGHT_MODAL.SEARCH_ADVANCED_FILTERS}
                                     component={ModalStackNavigators.SearchAdvancedFiltersModalStackNavigator}
diff --git a/src/libs/Navigation/linkingConfig/RELATIONS/SEARCH_TO_RHP.ts b/src/libs/Navigation/linkingConfig/RELATIONS/SEARCH_TO_RHP.ts
index 895c189f02c6..3d4e5636e0b5 100644
--- a/src/libs/Navigation/linkingConfig/RELATIONS/SEARCH_TO_RHP.ts
+++ b/src/libs/Navigation/linkingConfig/RELATIONS/SEARCH_TO_RHP.ts
@@ -6,8 +6,6 @@ const SEARCH_TO_RHP: Partial<Record<keyof SearchFullscreenNavigatorParamList, st
     [SCREENS.SEARCH.ROOT]: [
         SCREENS.SEARCH.ROOT_VERIFY_ACCOUNT,
         SCREENS.SEARCH.ADVANCED_FILTERS_TYPE_RHP,
-        SCREENS.SEARCH.ADVANCED_FILTERS_GROUP_BY_RHP,
-        SCREENS.SEARCH.ADVANCED_FILTERS_VIEW_RHP,
         SCREENS.SEARCH.ADVANCED_FILTERS_STATUS_RHP,
         SCREENS.SEARCH.REPORT_VERIFY_ACCOUNT,
         SCREENS.SEARCH.TRANSACTION_HOLD_REASON_RHP,
@@ -17,7 +15,6 @@ const SEARCH_TO_RHP: Partial<Record<keyof SearchFullscreenNavigatorParamList, st
         SCREENS.SEARCH.COLUMNS_RHP,
         SCREENS.SEARCH.ADVANCED_FILTERS_RHP,
         SCREENS.SEARCH.ADVANCED_FILTERS_CURRENCY_RHP,
-        SCREENS.SEARCH.ADVANCED_FILTERS_GROUP_CURRENCY_RHP,
         SCREENS.SEARCH.ADVANCED_FILTERS_DATE_RHP,
         SCREENS.SEARCH.ADVANCED_FILTERS_SUBMITTED_RHP,
         SCREENS.SEARCH.ADVANCED_FILTERS_APPROVED_RHP,
@@ -39,7 +36,6 @@ const SEARCH_TO_RHP: Partial<Record<keyof SearchFullscreenNavigatorParamList, st
         SCREENS.SEARCH.ADVANCED_FILTERS_IS_RHP,
         SCREENS.SEARCH.ADVANCED_FILTERS_TAG_RHP,
         SCREENS.SEARCH.ADVANCED_FILTERS_HAS_RHP,
-        SCREENS.SEARCH.ADVANCED_FILTERS_LIMIT_RHP,
         SCREENS.SEARCH.ADVANCED_FILTERS_FROM_RHP,
         SCREENS.SEARCH.ADVANCED_FILTERS_TO_RHP,
         SCREENS.SEARCH.ADVANCED_FILTERS_IN_RHP,
diff --git a/src/libs/Navigation/linkingConfig/config.ts b/src/libs/Navigation/linkingConfig/config.ts
index 1bcfce944eed..84ab31dd4531 100644
--- a/src/libs/Navigation/linkingConfig/config.ts
+++ b/src/libs/Navigation/linkingConfig/config.ts
@@ -1962,8 +1962,6 @@ const config: LinkingOptions<RootNavigatorParamList>['config'] = {
                     screens: {
                         [SCREENS.SEARCH.ADVANCED_FILTERS_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(),
                         [SCREENS.SEARCH.ADVANCED_FILTERS_TYPE_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SYNTAX_FILTER_KEYS.TYPE),
-                        [SCREENS.SEARCH.ADVANCED_FILTERS_GROUP_BY_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SEARCH_USER_FRIENDLY_KEYS.GROUP_BY),
-                        [SCREENS.SEARCH.ADVANCED_FILTERS_VIEW_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SEARCH_USER_FRIENDLY_KEYS.VIEW),
                         [SCREENS.SEARCH.ADVANCED_FILTERS_STATUS_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SYNTAX_FILTER_KEYS.STATUS),
                         [SCREENS.SEARCH.ADVANCED_FILTERS_DATE_RHP]: `${ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE)}/:subPage?`,
                         [SCREENS.SEARCH.ADVANCED_FILTERS_SUBMITTED_RHP]: `${ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SYNTAX_FILTER_KEYS.SUBMITTED)}/:subPage?`,
@@ -1974,7 +1972,6 @@ const config: LinkingOptions<RootNavigatorParamList>['config'] = {
                         [SCREENS.SEARCH.ADVANCED_FILTERS_WITHDRAWN_RHP]: `${ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SYNTAX_FILTER_KEYS.WITHDRAWN)}/:subPage?`,
                         [SCREENS.SEARCH.ADVANCED_FILTERS_EXPORTED_TO_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SEARCH_USER_FRIENDLY_KEYS.EXPORTED_TO),
                         [SCREENS.SEARCH.ADVANCED_FILTERS_CURRENCY_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SYNTAX_FILTER_KEYS.CURRENCY),
-                        [SCREENS.SEARCH.ADVANCED_FILTERS_GROUP_CURRENCY_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SEARCH_USER_FRIENDLY_KEYS.GROUP_CURRENCY),
                         [SCREENS.SEARCH.ADVANCED_FILTERS_MERCHANT_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SYNTAX_FILTER_KEYS.MERCHANT),
                         [SCREENS.SEARCH.ADVANCED_FILTERS_DESCRIPTION_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SYNTAX_FILTER_KEYS.DESCRIPTION),
                         [SCREENS.SEARCH.ADVANCED_FILTERS_REPORT_ID_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SEARCH_USER_FRIENDLY_KEYS.REPORT_ID),
@@ -1998,7 +1995,6 @@ const config: LinkingOptions<RootNavigatorParamList>['config'] = {
                         [SCREENS.SEARCH.ADVANCED_FILTERS_REIMBURSABLE_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SYNTAX_FILTER_KEYS.REIMBURSABLE),
                         [SCREENS.SEARCH.ADVANCED_FILTERS_WORKSPACE_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SEARCH_USER_FRIENDLY_KEYS.POLICY_ID),
                         [SCREENS.SEARCH.ADVANCED_FILTERS_HAS_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SEARCH_USER_FRIENDLY_KEYS.HAS),
-                        [SCREENS.SEARCH.ADVANCED_FILTERS_LIMIT_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SEARCH_USER_FRIENDLY_KEYS.LIMIT),
                         [SCREENS.SEARCH.ADVANCED_FILTERS_PURCHASE_AMOUNT_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SEARCH_USER_FRIENDLY_KEYS.PURCHASE_AMOUNT),
                         [SCREENS.SEARCH.ADVANCED_FILTERS_PURCHASE_CURRENCY_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SEARCH_USER_FRIENDLY_KEYS.PURCHASE_CURRENCY),
                         [SCREENS.SEARCH.ADVANCED_FILTERS_ATTENDEE_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SEARCH_USER_FRIENDLY_KEYS.ATTENDEE),
diff --git a/src/libs/SearchUIUtils.ts b/src/libs/SearchUIUtils.ts
index f1c9b9bb1b1b..ff6972e33494 100644
--- a/src/libs/SearchUIUtils.ts
+++ b/src/libs/SearchUIUtils.ts
@@ -38,6 +38,7 @@ import type {
     GroupedItem,
     QueryFilters,
     SearchAction,
+    SearchAmountFilterKeys,
     SearchColumnType,
     SearchCustomColumnIds,
     SearchDateFilterKeys,
@@ -99,7 +100,7 @@ import type {CardFeedForDisplay} from './CardFeedUtils';
 import {getCardFeedsForDisplay} from './CardFeedUtils';
 import {doesCardFeedExist, getCardDescriptionForSearchTable, getFeedNameForDisplay} from './CardUtils';
 import {getDecodedCategoryName} from './CategoryUtils';
-import {convertToDisplayString} from './CurrencyUtils';
+import {convertToDisplayString, convertToDisplayStringWithoutCurrency} from './CurrencyUtils';
 import DateUtils from './DateUtils';
 import interceptAnonymousUser from './interceptAnonymousUser';
 import isSearchTopmostFullScreenRoute from './Navigation/helpers/isSearchTopmostFullScreenRoute';
@@ -109,6 +110,7 @@ import {getDisplayNameOrDefault} from './PersonalDetailsUtils';
 import {
     arePaymentsEnabled,
     canSendInvoice,
+    getCleanedTagName,
     getCommaSeparatedTagNameWithSanitizedColons,
     getSubmitToAccountID,
     isPaidGroupPolicy,
@@ -164,8 +166,11 @@ import {
     buildSearchQueryJSON,
     buildSearchQueryString,
     getCurrentSearchQueryJSON,
+    getDateRangeDisplayValueFromFormValue,
+    isAmountFilterKey,
     isFilterSupported,
     isSearchDatePreset,
+    sortOptionsWithEmptyValue,
 } from './SearchQueryUtils';
 import StringUtils from './StringUtils';
 import {getIOUPayerAndReceiver} from './TransactionPreviewUtils';
@@ -173,6 +178,7 @@ import {
     getCategory,
     getDescription,
     getExchangeRate,
+    getExpenseTypeTranslationKey,
     getOriginalAmountForDisplay,
     getTag,
     getTaxAmount,
@@ -4465,6 +4471,10 @@ function getSortByOptions(columns: SearchColumnType[], translate: LocalizedTrans
     return sortableColumns;
 }
 
+function getSortOrderOptions(translate: LocalizedTranslate) {
+    return Object.values(CONST.SEARCH.SORT_ORDER).map<SingleSelectItem<SortOrder>>((value) => ({text: translate(`search.filters.sortOrder.${value}`), value}));
+}
+
 function getGroupBySections(translate: LocalizedTranslate): GroupBySection[] {
     const getOption = (groupBy: SearchGroupBy): SingleSelectItem<SearchGroupBy> => ({
         text: translate(`search.filters.groupBy.${groupBy}`),
@@ -4678,162 +4688,378 @@ type SearchFilter = {
     value: string | string[] | null;
 };
 
+type FilterGroupConfig = {
+    label: TranslationPaths;
+    syntax: SearchDateFilterKeys | SearchAmountFilterKeys;
+};
+
+const FILTER_GROUP_MAP: Partial<Record<SearchAdvancedFiltersKey, FilterGroupConfig>> = {
+    [FILTER_KEYS.DATE_ON]: {label: 'common.date', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE},
+    [FILTER_KEYS.DATE_AFTER]: {label: 'common.date', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE},
+    [FILTER_KEYS.DATE_BEFORE]: {label: 'common.date', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE},
+    [FILTER_KEYS.DATE_RANGE]: {label: 'common.date', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE},
+
+    [FILTER_KEYS.SUBMITTED_ON]: {label: 'search.filters.submitted', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.SUBMITTED},
+    [FILTER_KEYS.SUBMITTED_AFTER]: {label: 'search.filters.submitted', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.SUBMITTED},
+    [FILTER_KEYS.SUBMITTED_BEFORE]: {label: 'search.filters.submitted', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.SUBMITTED},
+    [FILTER_KEYS.SUBMITTED_RANGE]: {label: 'search.filters.submitted', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.SUBMITTED},
+
+    [FILTER_KEYS.APPROVED_ON]: {label: 'search.filters.approved', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.APPROVED},
+    [FILTER_KEYS.APPROVED_AFTER]: {label: 'search.filters.approved', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.APPROVED},
+    [FILTER_KEYS.APPROVED_BEFORE]: {label: 'search.filters.approved', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.APPROVED},
+    [FILTER_KEYS.APPROVED_RANGE]: {label: 'search.filters.approved', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.APPROVED},
+
+    [FILTER_KEYS.PAID_ON]: {label: 'search.filters.paid', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.PAID},
+    [FILTER_KEYS.PAID_AFTER]: {label: 'search.filters.paid', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.PAID},
+    [FILTER_KEYS.PAID_BEFORE]: {label: 'search.filters.paid', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.PAID},
+    [FILTER_KEYS.PAID_RANGE]: {label: 'search.filters.paid', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.PAID},
+
+    [FILTER_KEYS.EXPORTED_ON]: {label: 'search.filters.exported', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPORTED},
+    [FILTER_KEYS.EXPORTED_AFTER]: {label: 'search.filters.exported', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPORTED},
+    [FILTER_KEYS.EXPORTED_BEFORE]: {label: 'search.filters.exported', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPORTED},
+    [FILTER_KEYS.EXPORTED_RANGE]: {label: 'search.filters.exported', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPORTED},
+
+    [FILTER_KEYS.POSTED_ON]: {label: 'search.filters.posted', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.POSTED},
+    [FILTER_KEYS.POSTED_AFTER]: {label: 'search.filters.posted', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.POSTED},
+    [FILTER_KEYS.POSTED_BEFORE]: {label: 'search.filters.posted', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.POSTED},
+    [FILTER_KEYS.POSTED_RANGE]: {label: 'search.filters.posted', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.POSTED},
+
+    [FILTER_KEYS.WITHDRAWN_ON]: {label: 'search.filters.withdrawn', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.WITHDRAWN},
+    [FILTER_KEYS.WITHDRAWN_AFTER]: {label: 'search.filters.withdrawn', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.WITHDRAWN},
+    [FILTER_KEYS.WITHDRAWN_BEFORE]: {label: 'search.filters.withdrawn', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.WITHDRAWN},
+    [FILTER_KEYS.WITHDRAWN_RANGE]: {label: 'search.filters.withdrawn', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.WITHDRAWN},
+
+    [FILTER_KEYS.AMOUNT_EQUAL_TO]: {label: 'iou.amount', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.AMOUNT},
+    [FILTER_KEYS.AMOUNT_LESS_THAN]: {label: 'iou.amount', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.AMOUNT},
+    [FILTER_KEYS.AMOUNT_GREATER_THAN]: {label: 'iou.amount', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.AMOUNT},
+
+    [FILTER_KEYS.TOTAL_EQUAL_TO]: {label: 'common.total', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.TOTAL},
+    [FILTER_KEYS.TOTAL_LESS_THAN]: {label: 'common.total', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.TOTAL},
+    [FILTER_KEYS.TOTAL_GREATER_THAN]: {label: 'common.total', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.TOTAL},
+
+    [FILTER_KEYS.PURCHASE_AMOUNT_EQUAL_TO]: {label: 'common.purchaseAmount', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.PURCHASE_AMOUNT},
+    [FILTER_KEYS.PURCHASE_AMOUNT_LESS_THAN]: {label: 'common.purchaseAmount', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.PURCHASE_AMOUNT},
+    [FILTER_KEYS.PURCHASE_AMOUNT_GREATER_THAN]: {label: 'common.purchaseAmount', syntax: CONST.SEARCH.SYNTAX_FILTER_KEYS.PURCHASE_AMOUNT},
+};
+
+const FILTER_LABEL_MAP: Partial<Record<SearchAdvancedFiltersKey, TranslationPaths>> = {
+    [FILTER_KEYS.ASSIGNEE]: 'task.assignee',
+    [FILTER_KEYS.ATTENDEE]: 'iou.attendees',
+    [FILTER_KEYS.BILLABLE]: 'search.filters.billable',
+    [FILTER_KEYS.CARD_ID]: 'common.card',
+    [FILTER_KEYS.CATEGORY]: 'common.category',
+    [FILTER_KEYS.CURRENCY]: 'common.currency',
+    [FILTER_KEYS.DESCRIPTION]: 'common.description',
+    [FILTER_KEYS.EXPENSE_TYPE]: 'search.expenseType',
+    [FILTER_KEYS.EXPORTED_TO]: 'search.exportedTo',
+    [FILTER_KEYS.FEED]: 'search.filters.feed',
+    [FILTER_KEYS.FROM]: 'common.from',
+    [FILTER_KEYS.GROUP_CURRENCY]: 'common.groupCurrency',
+    [FILTER_KEYS.HAS]: 'search.has',
+    [FILTER_KEYS.IN]: 'common.in',
+    [FILTER_KEYS.IS]: 'search.filters.is',
+    [FILTER_KEYS.KEYWORD]: 'search.filters.keyword',
+    [FILTER_KEYS.MERCHANT]: 'common.merchant',
+    [FILTER_KEYS.POLICY_ID]: 'workspace.common.workspace',
+    [FILTER_KEYS.PURCHASE_CURRENCY]: 'search.filters.purchaseCurrency',
+    [FILTER_KEYS.REIMBURSABLE]: 'common.reimbursable',
+    [FILTER_KEYS.REPORT_ID]: 'common.reportID',
+    [FILTER_KEYS.STATUS]: 'common.status',
+    [FILTER_KEYS.TAG]: 'common.tag',
+    [FILTER_KEYS.TAX_RATE]: 'workspace.taxes.taxRate',
+    [FILTER_KEYS.TO]: 'common.to',
+    [FILTER_KEYS.TITLE]: 'common.title',
+    [FILTER_KEYS.WITHDRAWAL_ID]: 'common.withdrawalID',
+    [FILTER_KEYS.WITHDRAWAL_TYPE]: 'search.withdrawalType',
+};
+
+function getDateDisplayValue(syntaxKey: SearchDateFilterKeys, form: Partial<SearchAdvancedFiltersForm>, translate: LocalizedTranslate): string {
+    const on = form[`${syntaxKey}${CONST.SEARCH.DATE_MODIFIERS.ON}`];
+    const after = form[`${syntaxKey}${CONST.SEARCH.DATE_MODIFIERS.AFTER}`];
+    const before = form[`${syntaxKey}${CONST.SEARCH.DATE_MODIFIERS.BEFORE}`];
+    const range = form[`${syntaxKey}${CONST.SEARCH.DATE_MODIFIERS.RANGE}`];
+    const parts: string[] = [];
+
+    if (on) {
+        parts.push(isSearchDatePreset(on) ? translate(`search.filters.date.presets.${on}`) : `${translate('common.on')} ${DateUtils.formatToReadableString(on)}`);
+    }
+
+    if (after) {
+        parts.push(`${translate('common.after')} ${DateUtils.formatToReadableString(after)}`);
+    }
+
+    if (before) {
+        parts.push(`${translate('common.before')} ${DateUtils.formatToReadableString(before)}`);
+    }
+
+    if (range) {
+        const rangeDisplay = getDateRangeDisplayValueFromFormValue(range, undefined, undefined, true);
+        if (rangeDisplay) {
+            parts.push(rangeDisplay);
+        }
+    }
+
+    return parts.join(', ');
+}
+
+function getAmountDisplayValue(syntaxKey: SearchAmountFilterKeys, form: Partial<SearchAdvancedFiltersForm>, translate: LocalizedTranslate): string | undefined {
+    const lessThan = form[`${syntaxKey}${CONST.SEARCH.AMOUNT_MODIFIERS.LESS_THAN}`];
+    const greaterThan = form[`${syntaxKey}${CONST.SEARCH.AMOUNT_MODIFIERS.GREATER_THAN}`];
+    const equalTo = form[`${syntaxKey}${CONST.SEARCH.AMOUNT_MODIFIERS.EQUAL_TO}`];
+
+    const formatAmount = (val: string) => convertToDisplayStringWithoutCurrency(Number(val));
+
+    if (equalTo) {
+        return translate('search.filters.amount.equalTo', formatAmount(equalTo));
+    }
+    if (lessThan && greaterThan) {
+        return translate('search.filters.amount.between', formatAmount(greaterThan), formatAmount(lessThan));
+    }
+    if (lessThan) {
+        return translate('search.filters.amount.lessThan', formatAmount(lessThan));
+    }
+    if (greaterThan) {
+        return translate('search.filters.amount.greaterThan', formatAmount(greaterThan));
+    }
+    return undefined;
+}
+
+function getReportFieldDisplayValue(form: Partial<SearchAdvancedFiltersForm>, translate: LocalizedTranslate): string {
+    const values: string[] = [];
+
+    for (const [fieldKey, fieldValue] of Object.entries(form)) {
+        if (fieldKey.startsWith(CONST.SEARCH.REPORT_FIELD.NOT_PREFIX) || !fieldValue || !fieldKey.startsWith(CONST.SEARCH.REPORT_FIELD.GLOBAL_PREFIX)) {
+            continue;
+        }
+
+        const fieldName = fieldKey
+            .replace(CONST.SEARCH.REPORT_FIELD.ON_PREFIX, '')
+            .replace(CONST.SEARCH.REPORT_FIELD.AFTER_PREFIX, '')
+            .replace(CONST.SEARCH.REPORT_FIELD.BEFORE_PREFIX, '')
+            .replace(CONST.SEARCH.REPORT_FIELD.DEFAULT_PREFIX, '')
+            .split('-')
+            .map((word, index) => (index === 0 ? word.charAt(0).toUpperCase() + word.slice(1) : word))
+            .join(' ');
+
+        if (fieldKey.startsWith(CONST.SEARCH.REPORT_FIELD.ON_PREFIX)) {
+            const dateString = isSearchDatePreset(fieldValue as string)
+                ? translate(`search.filters.date.presets.${fieldValue as SearchDatePreset}`)
+                : translate('search.filters.date.on', fieldValue as string);
+
+            values.push(translate('search.filters.reportField', fieldName, dateString.toLowerCase()));
+        }
+
+        if (fieldKey.startsWith(CONST.SEARCH.REPORT_FIELD.AFTER_PREFIX)) {
+            const dateString = translate('search.filters.date.after', fieldValue as string).toLowerCase();
+            values.push(translate('search.filters.reportField', fieldName, dateString.toLowerCase()));
+        }
+
+        if (fieldKey.startsWith(CONST.SEARCH.REPORT_FIELD.BEFORE_PREFIX)) {
+            const dateString = translate('search.filters.date.before', fieldValue as string).toLowerCase();
+            values.push(translate('search.filters.reportField', fieldName, dateString.toLowerCase()));
+        }
+
+        if (fieldKey.startsWith(CONST.SEARCH.REPORT_FIELD.DEFAULT_PREFIX)) {
+            const valueString = translate('search.filters.reportField', fieldName, fieldValue as string);
+            values.push(valueString);
+        }
+    }
+
+    return values.join(', ');
+}
+
+function getDisplayValue(
+    key: SearchAdvancedFiltersKey,
+    form: Partial<SearchAdvancedFiltersForm>,
+    type: SearchDataTypes,
+    policyIDQuery: string[] | undefined,
+    translate: LocalizedTranslate,
+    localeCompare: LocaleContextProps['localeCompare'],
+) {
+    if (key === FILTER_KEYS.TAG || key === FILTER_KEYS.CATEGORY) {
+        const mapFn =
+            key === FILTER_KEYS.TAG
+                ? (value: string) => (value === CONST.SEARCH.TAG_EMPTY_VALUE ? translate('search.noTag') : getCleanedTagName(value))
+                : (value: string) => (value === CONST.SEARCH.CATEGORY_EMPTY_VALUE ? translate('search.noCategory') : value);
+
+        return form[key]
+            ?.sort((a, b) => sortOptionsWithEmptyValue(a, b, localeCompare))
+            .map(mapFn)
+            .join(', ');
+    }
+
+    if (key === FILTER_KEYS.CURRENCY || key === FILTER_KEYS.PURCHASE_CURRENCY) {
+        return form[key]?.sort(localeCompare).join(', ');
+    }
+
+    if (key === FILTER_KEYS.BILLABLE || key === FILTER_KEYS.REIMBURSABLE) {
+        const formValue = form[key];
+        return formValue ? translate(`common.${formValue}`) : undefined;
+    }
+
+    if (key === FILTER_KEYS.WITHDRAWAL_TYPE) {
+        const withdrawalType = form[key];
+        return withdrawalType ? translate(`search.filters.withdrawalType.${withdrawalType}`) : undefined;
+    }
+
+    if (key === FILTER_KEYS.STATUS) {
+        const status = form[key];
+        if (!status?.length) {
+            return;
+        }
+        const statusOptions = getStatusOptions(translate, type);
+        return statusOptions
+            .filter((option) => status.includes(option.value))
+            .map((option) => option.text)
+            .join(', ');
+    }
+
+    if (key === FILTER_KEYS.IS || key === FILTER_KEYS.HAS) {
+        const formValue = form[key];
+        return formValue?.map((option) => translate(`common.${option}`)).join(', ');
+    }
+
+    if (key === FILTER_KEYS.FROM || key === FILTER_KEYS.TO || key === FILTER_KEYS.ATTENDEE || key === FILTER_KEYS.ASSIGNEE || key === FILTER_KEYS.TAX_RATE || key === FILTER_KEYS.IN) {
+        return form[key];
+    }
+
+    if (key === FILTER_KEYS.POLICY_ID) {
+        const policyID = form[key];
+        const policyIDs = policyID ?? policyIDQuery;
+        if (policyIDs) {
+            return Array.isArray(policyIDs) ? policyIDs : [policyIDs];
+        }
+        return undefined;
+    }
+
+    if (key === FILTER_KEYS.EXPENSE_TYPE) {
+        return form[key]?.map((expenseType) => translate(getExpenseTypeTranslationKey(expenseType))).join(', ');
+    }
+
+    const formValue = form[key];
+    return Array.isArray(formValue) ? formValue.join(', ') : formValue;
+}
+
+function shouldShowFilter(skipFilters: Set<SearchAdvancedFiltersKey> | undefined, key: SearchAdvancedFiltersKey, value: ValueOf<SearchAdvancedFiltersForm>, type: SearchDataTypes) {
+    return !skipFilters?.has(key) && isFilterSupported(key, type) && value && (!Array.isArray(value) || value.length > 0);
+}
+
 function mapFiltersFormToLabelValueList<T extends Record<string, unknown>>(
     searchAdvancedFiltersForm: Partial<SearchAdvancedFiltersForm>,
     policyIDQuery: string[] | undefined,
+    skipFilters: Set<SearchAdvancedFiltersKey> | undefined,
     translate: LocalizedTranslate,
+    localeCompare: LocaleContextProps['localeCompare'],
     mapper?: (filterKey: SearchAdvancedFiltersKey) => T,
 ): Array<SearchFilter & T> {
     const filters: Array<SearchFilter & T> = [];
-    const hasAddedFilter = {
-        posted: false,
-        withdrawn: false,
-        date: false,
-    };
-
+    const addedGroups = new Set<SearchDateFilterKeys | SearchAmountFilterKeys | typeof CONST.SEARCH.REPORT_FIELD.GLOBAL_PREFIX | typeof FILTER_KEYS.FEED | typeof FILTER_KEYS.CARD_ID>();
     const type = searchAdvancedFiltersForm.type ?? CONST.SEARCH.DATA_TYPES.EXPENSE;
 
-    const createDateDisplayValue = (filterValues: {on?: string; after?: string; before?: string}): string => {
-        const displayText: string[] = [];
-        if (filterValues.on) {
-            displayText.push(
-                isSearchDatePreset(filterValues.on)
-                    ? translate(`search.filters.date.presets.${filterValues.on}`)
-                    : `${translate('common.on')} ${DateUtils.formatToReadableString(filterValues.on)}`,
-            );
-        }
-        if (filterValues.after) {
-            displayText.push(`${translate('common.after')} ${DateUtils.formatToReadableString(filterValues.after)}`);
-        }
-        if (filterValues.before) {
-            displayText.push(`${translate('common.before')} ${DateUtils.formatToReadableString(filterValues.before)}`);
-        }
-
-        return displayText.join(', ');
-    };
-
     for (const filterKey of Object.keys(searchAdvancedFiltersForm)) {
         const key = filterKey as SearchAdvancedFiltersKey;
-        if (key === FILTER_KEYS.TYPE || !isFilterSupported(key, type)) {
+        if (!shouldShowFilter(skipFilters, key, searchAdvancedFiltersForm[key], type)) {
             continue;
         }
+
         const extra = mapper?.(key) ?? ({} as T);
-        switch (key) {
-            case FILTER_KEYS.GROUP_CURRENCY: {
-                const groupCurrency = searchAdvancedFiltersForm[key];
-                filters.push({key, label: translate('common.groupCurrency'), value: groupCurrency ?? null, ...extra});
-                break;
-            }
-            case FILTER_KEYS.FEED: {
-                const feedFilterValues = searchAdvancedFiltersForm[key];
-                filters.push({key, label: translate('search.filters.feed'), value: feedFilterValues ?? null, ...extra});
-                break;
-            }
-            case FILTER_KEYS.POSTED_ON:
-            case FILTER_KEYS.POSTED_AFTER:
-            case FILTER_KEYS.POSTED_BEFORE: {
-                if (hasAddedFilter.posted) {
-                    continue;
-                }
-                const displayPosted = createDateDisplayValue({
-                    on: searchAdvancedFiltersForm.postedOn,
-                    after: searchAdvancedFiltersForm.postedAfter,
-                    before: searchAdvancedFiltersForm.postedBefore,
-                });
-                filters.push({key, label: translate('search.filters.posted'), value: displayPosted, ...extra});
-                hasAddedFilter.posted = true;
-                break;
-            }
-            case FILTER_KEYS.WITHDRAWAL_TYPE: {
-                const withdrawalType = searchAdvancedFiltersForm[key];
-                if (!withdrawalType) {
-                    continue;
-                }
-                filters.push({key, label: translate('search.withdrawalType'), value: translate(`search.filters.withdrawalType.${withdrawalType}`), ...extra});
-                break;
-            }
-            case FILTER_KEYS.WITHDRAWN_ON:
-            case FILTER_KEYS.WITHDRAWN_AFTER:
-            case FILTER_KEYS.WITHDRAWN_BEFORE: {
-                if (hasAddedFilter.withdrawn) {
-                    continue;
-                }
-                const displayWithdrawn = createDateDisplayValue({
-                    on: searchAdvancedFiltersForm.withdrawnOn,
-                    after: searchAdvancedFiltersForm.withdrawnAfter,
-                    before: searchAdvancedFiltersForm.withdrawnBefore,
-                });
-                filters.push({key, label: translate('search.filters.withdrawn'), value: displayWithdrawn, ...extra});
-                hasAddedFilter.withdrawn = true;
-                break;
-            }
-            case FILTER_KEYS.STATUS: {
-                const status = searchAdvancedFiltersForm[key];
-                if (!status?.length) {
-                    continue;
-                }
 
-                const statusOptions = type ? getStatusOptions(translate, type) : [];
-                const statusValue = statusOptions.filter((option) => status?.includes(option.value));
-                filters.push({key, label: translate('common.status'), value: statusValue.map((option) => option.text).join(', '), ...extra});
-                break;
+        // Handle grouped filters (date, amount) - only add once per group
+        const groupConfig = FILTER_GROUP_MAP[key];
+        if (groupConfig) {
+            if (addedGroups.has(groupConfig.syntax)) {
+                continue;
             }
-            case FILTER_KEYS.HAS: {
-                const hasFilterValues = searchAdvancedFiltersForm[key];
-                if (!hasFilterValues?.length) {
-                    continue;
-                }
-                filters.push({key, label: translate('search.has'), value: hasFilterValues.map((option) => translate(`common.${option}`)).join(', '), ...extra});
-                break;
+
+            const displayValue = isAmountFilterKey(groupConfig.syntax)
+                ? getAmountDisplayValue(groupConfig.syntax, searchAdvancedFiltersForm, translate)
+                : getDateDisplayValue(groupConfig.syntax, searchAdvancedFiltersForm, translate);
+
+            if (displayValue) {
+                addedGroups.add(groupConfig.syntax);
+                filters.push({key, label: translate(groupConfig.label), value: displayValue, ...extra});
             }
-            case FILTER_KEYS.IS: {
-                const isFilterValues = searchAdvancedFiltersForm[key];
-                if (!isFilterValues?.length) {
-                    continue;
-                }
-                filters.push({key, label: translate('search.filters.is'), value: isFilterValues.map((option) => translate(`common.${option}`)).join(', '), ...extra});
-                break;
+            continue;
+        }
+
+        // Handle report field filters - only add once
+        if (key.startsWith(CONST.SEARCH.REPORT_FIELD.GLOBAL_PREFIX)) {
+            if (addedGroups.has(CONST.SEARCH.REPORT_FIELD.GLOBAL_PREFIX)) {
+                continue;
             }
-            case FILTER_KEYS.DATE_ON:
-            case FILTER_KEYS.DATE_AFTER:
-            case FILTER_KEYS.DATE_BEFORE: {
-                if (hasAddedFilter.date) {
-                    continue;
-                }
-                const displayDate = createDateDisplayValue({
-                    on: searchAdvancedFiltersForm.dateOn,
-                    after: searchAdvancedFiltersForm.dateAfter,
-                    before: searchAdvancedFiltersForm.dateBefore,
-                });
-                filters.push({key, label: translate('common.date'), value: displayDate, ...extra});
-                hasAddedFilter.date = true;
-                break;
+
+            const value = getReportFieldDisplayValue(searchAdvancedFiltersForm, translate);
+            if (value) {
+                addedGroups.add(CONST.SEARCH.REPORT_FIELD.GLOBAL_PREFIX);
+                filters.push({key, label: translate('workspace.common.reportField'), value, ...extra});
             }
-            case FILTER_KEYS.FROM: {
-                const from = searchAdvancedFiltersForm[key];
-                filters.push({key, label: translate('common.from'), value: from ?? null, ...extra});
-                break;
+            continue;
+        }
+
+        // Handle card feeds and individual cards - only add once
+        if (key === FILTER_KEYS.FEED || key === FILTER_KEYS.CARD_ID) {
+            if (addedGroups.has(FILTER_KEYS.FEED) || addedGroups.has(FILTER_KEYS.CARD_ID)) {
+                continue;
             }
-            case FILTER_KEYS.POLICY_ID: {
-                const policyID = searchAdvancedFiltersForm[key];
-                const selectedPolicyIDs = (() => {
-                    const policyIDs = policyID ?? policyIDQuery;
-                    if (!policyIDs) {
-                        return [];
-                    }
-                    return Array.isArray(policyIDs) ? policyIDs : [policyIDs];
-                })();
-                filters.push({key, label: translate('workspace.common.workspace'), value: selectedPolicyIDs, ...extra});
-                break;
+
+            const feedValue = searchAdvancedFiltersForm[FILTER_KEYS.FEED] ?? [];
+            const cardIDvalue = searchAdvancedFiltersForm[FILTER_KEYS.CARD_ID] ?? [];
+
+            if (feedValue.length > 0 || cardIDvalue.length > 0) {
+                addedGroups.add(key);
+                filters.push({key, label: translate('common.card'), value: cardIDvalue.concat(feedValue), ...extra});
             }
-            default:
-                break;
+
+            continue;
+        }
+
+        // Handle regular filters
+        const label = FILTER_LABEL_MAP[key];
+        const value = getDisplayValue(key, searchAdvancedFiltersForm, type, policyIDQuery, translate, localeCompare);
+
+        if (label && value && !(Array.isArray(value) && value.length === 0)) {
+            filters.push({key, label: translate(label), value, ...extra});
         }
     }
 
     return filters;
 }
 
+function getSingleSelectFilterOptions(filterKey: SearchAdvancedFiltersKey, translate: LocalizedTranslate) {
+    if (filterKey === FILTER_KEYS.BILLABLE || filterKey === FILTER_KEYS.REIMBURSABLE) {
+        return Object.values(CONST.SEARCH.BOOLEAN).map((value) => ({value, text: translate(`common.${value}`)}));
+    }
+
+    if (filterKey === FILTER_KEYS.WITHDRAWAL_TYPE) {
+        return getWithdrawalTypeOptions(translate);
+    }
+
+    return [];
+}
+
+function getMultiSelectFilterOptions(filterKey: SearchAdvancedFiltersKey, type: SearchDataTypes, translate: LocalizedTranslate) {
+    if (filterKey === FILTER_KEYS.HAS) {
+        return getHasOptions(translate, type);
+    }
+
+    if (filterKey === FILTER_KEYS.IS) {
+        return Object.values(CONST.SEARCH.IS_VALUES).map((value) => ({text: translate(`common.${value}`), value}));
+    }
+
+    if (filterKey === FILTER_KEYS.EXPENSE_TYPE) {
+        return Object.values(CONST.SEARCH.TRANSACTION_TYPE).map((expenseType) => {
+            const expenseTypeName = translate(getExpenseTypeTranslationKey(expenseType));
+            return {text: expenseTypeName, value: expenseType};
+        });
+    }
+
+    if (filterKey === FILTER_KEYS.STATUS) {
+        return type ? getStatusOptions(translate, type) : [];
+    }
+
+    return [];
+}
+
 function getWithdrawalTypeOptions(translate: LocaleContextProps['translate']) {
     return Object.values(CONST.SEARCH.WITHDRAWAL_TYPE).map<SingleSelectItem<SearchWithdrawalType>>((value) => ({text: translate(`search.filters.withdrawalType.${value}`), value}));
 }
@@ -5589,6 +5815,7 @@ export {
     getTypeOptions,
     getGroupByOptions,
     getSortByOptions,
+    getSortOrderOptions,
     getGroupBySections,
     getViewOptions,
     getCurrencyOptions,
@@ -5619,10 +5846,15 @@ export {
     isTodoSearch,
     getActiveGroupSearchHashes,
     adjustTimeRangeToDateFilters,
+    shouldShowFilter,
     mapFiltersFormToLabelValueList,
+    getSingleSelectFilterOptions,
+    getMultiSelectFilterOptions,
     isEligibleForApproveSuggestion,
     applySelectionToItem,
     GENERIC_SEARCH_KEYS,
+    FILTER_GROUP_MAP,
+    FILTER_LABEL_MAP,
     doesSearchItemMatchSort,
     isPolicyEligibleForSpendOverTime,
 };
diff --git a/src/pages/Search/AdvancedSearchFilters.tsx b/src/pages/Search/AdvancedSearchFilters.tsx
index 5f3b1b8174ef..d5f8eddf0a0c 100644
--- a/src/pages/Search/AdvancedSearchFilters.tsx
+++ b/src/pages/Search/AdvancedSearchFilters.tsx
@@ -2,7 +2,6 @@ import React, {useMemo} from 'react';
 import {View} from 'react-native';
 import type {ValueOf} from 'react-native-gesture-handler/lib/typescript/typeUtils';
 import type {OnyxCollection} from 'react-native-onyx';
-import Button from '@components/Button';
 import FormAlertWithSubmitButton from '@components/FormAlertWithSubmitButton';
 import type {LocaleContextProps} from '@components/LocaleContextProvider';
 import MenuItemWithTopDescription from '@components/MenuItemWithTopDescription';
@@ -18,7 +17,6 @@ import useSingleExecution from '@hooks/useSingleExecution';
 import useThemeStyles from '@hooks/useThemeStyles';
 import useWaitForNavigation from '@hooks/useWaitForNavigation';
 import type {WorkspaceListItem} from '@hooks/useWorkspaceList';
-import {saveSearch} from '@libs/actions/Search';
 import {createCardFeedKey, getCardFeedKey, getCardFeedNamesWithType, getWorkspaceCardFeedKey} from '@libs/CardFeedUtils';
 import {getCardDescription} from '@libs/CardUtils';
 import {convertToDisplayStringWithoutCurrency} from '@libs/CurrencyUtils';
@@ -32,7 +30,6 @@ import {
     buildSearchQueryJSON,
     getCurrentSearchQueryJSON,
     getDateRangeDisplayValueFromFormValue,
-    isCannedSearchQuery,
     isSearchDatePreset,
     sortOptionsWithEmptyValue,
 } from '@libs/SearchQueryUtils';
@@ -64,16 +61,6 @@ const baseFilterConfig = {
         description: 'common.type' as const,
         route: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SYNTAX_FILTER_KEYS.TYPE),
     },
-    groupBy: {
-        getTitle: getFilterDisplayTitle,
-        description: 'search.display.groupBy' as const,
-        route: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SEARCH_USER_FRIENDLY_KEYS.GROUP_BY),
-    },
-    view: {
-        getTitle: getFilterViewDisplayTitle,
-        description: 'search.view.label' as const,
-        route: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SEARCH_USER_FRIENDLY_KEYS.VIEW),
-    },
     status: {
         getTitle: getStatusFilterDisplayTitle,
         description: 'common.status' as const,
@@ -124,11 +111,6 @@ const baseFilterConfig = {
         description: 'common.currency' as const,
         route: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SYNTAX_FILTER_KEYS.CURRENCY),
     },
-    groupCurrency: {
-        getTitle: getFilterDisplayTitle,
-        description: 'common.groupCurrency' as const,
-        route: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SEARCH_USER_FRIENDLY_KEYS.GROUP_CURRENCY),
-    },
     merchant: {
         getTitle: getFilterDisplayTitle,
         description: 'common.merchant' as const,
@@ -199,11 +181,6 @@ const baseFilterConfig = {
         description: 'search.has' as const,
         route: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SYNTAX_FILTER_KEYS.HAS),
     },
-    limit: {
-        getTitle: getFilterDisplayTitle,
-        description: 'search.filters.limit' as const,
-        route: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SYNTAX_ROOT_KEYS.LIMIT),
-    },
     is: {
         getTitle: getFilterDisplayTitle,
         description: 'search.filters.is' as const,
@@ -513,11 +490,6 @@ function getFilterDisplayTitle(
         return filterValue ? translate(`search.filters.action.${filterValue as ValueOf<typeof CONST.SEARCH.ACTION_FILTERS>}`) : undefined;
     }
 
-    if (key === CONST.SEARCH.SYNTAX_ROOT_KEYS.GROUP_BY) {
-        const filterValue = filters[key];
-        return filterValue ? translate(`search.filters.groupBy.${filterValue}`) : undefined;
-    }
-
     if (key === CONST.SEARCH.SYNTAX_FILTER_KEYS.WITHDRAWAL_TYPE) {
         const filterValue = filters[key];
         return filterValue ? translate(`search.filters.withdrawalType.${filterValue}`) : undefined;
@@ -545,14 +517,6 @@ function getFilterDisplayTitle(
     return Array.isArray(filterValue) ? filterValue.join(', ') : filterValue;
 }
 
-function getFilterViewDisplayTitle(filters: Partial<SearchAdvancedFiltersForm>, translate: LocaleContextProps['translate']) {
-    const filterValue = filters[CONST.SEARCH.SYNTAX_ROOT_KEYS.VIEW];
-    if (!filterValue) {
-        return translate('search.view.table');
-    }
-    return translate(`search.view.${filterValue as ValueOf<typeof CONST.SEARCH.VIEW>}`);
-}
-
 function getStatusFilterDisplayTitle(filters: Partial<SearchAdvancedFiltersForm>, type: SearchDataTypes, translate: LocaleContextProps['translate']) {
     const statusOptions = getStatusOptions(translate, type).concat({text: translate('common.all'), value: CONST.SEARCH.STATUS.EXPENSE.ALL});
     let filterValue = filters?.status;
@@ -621,7 +585,6 @@ function AdvancedSearchFilters() {
     const {singleExecution} = useSingleExecution();
     const waitForNavigate = useWaitForNavigation();
     const [reports] = useOnyx(ONYXKEYS.COLLECTION.REPORT);
-    const [savedSearches] = useOnyx(ONYXKEYS.SAVED_SEARCHES);
     const [searchAdvancedFilters = getEmptyObject<SearchAdvancedFiltersForm>()] = useOnyx(ONYXKEYS.FORMS.SEARCH_ADVANCED_FILTERS_FORM);
     const personalDetails = usePersonalDetails();
     const [reportAttributes] = useOnyx(ONYXKEYS.DERIVED.REPORT_ATTRIBUTES);
@@ -649,21 +612,6 @@ function AdvancedSearchFilters() {
         );
     };
 
-    const onSaveSearch = () => {
-        const savedSearchKeys = Object.keys(savedSearches ?? {});
-        if (!queryJSON || (savedSearches && savedSearchKeys.includes(String(queryJSON.hash)))) {
-            // If the search is already saved, we only display the results as we don't need to save it.
-            applyFiltersAndNavigate();
-            return;
-        }
-
-        saveSearch({
-            queryJSON,
-        });
-
-        Navigation.setNavigationActionToMicrotaskQueue(() => applyFiltersAndNavigate());
-    };
-
     const filters = typeFiltersKeys.map((section) => {
         return section.map((key) => {
             const onPress = singleExecution(waitForNavigate(() => Navigation.navigate(baseFilterConfig[key].route)));
@@ -688,8 +636,6 @@ function AdvancedSearchFilters() {
                 filterTitle = baseFilterConfig[key].getTitle(searchAdvancedFilters, workspacesData);
             } else if (key === CONST.SEARCH.SYNTAX_FILTER_KEYS.STATUS) {
                 filterTitle = baseFilterConfig[key].getTitle(searchAdvancedFilters, currentType, translate);
-            } else if (key === CONST.SEARCH.SYNTAX_ROOT_KEYS.VIEW) {
-                filterTitle = baseFilterConfig[key].getTitle(searchAdvancedFilters, translate);
             } else {
                 filterTitle = baseFilterConfig[key].getTitle(searchAdvancedFilters, key, translate, localeCompare);
             }
@@ -703,8 +649,6 @@ function AdvancedSearchFilters() {
         });
     });
 
-    const displaySearchButton = queryJSON && !isCannedSearchQuery(queryJSON);
-
     const sections: SectionType[] = [
         {
             titleTranslationKey: 'common.general',
@@ -774,15 +718,6 @@ function AdvancedSearchFilters() {
                     })}
                 </View>
             </ScrollView>
-            {!!displaySearchButton && (
-                <Button
-                    text={translate('search.saveSearch')}
-                    onPress={onSaveSearch}
-                    style={[styles.mh4, styles.mt4]}
-                    large
-                    sentryLabel={CONST.SENTRY_LABEL.SEARCH.SAVE_SEARCH_BUTTON}
-                />
-            )}
             <FormAlertWithSubmitButton
                 buttonText={translate('search.viewResults')}
                 containerStyles={[styles.m4, styles.mb5]}
diff --git a/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersGroupByPage.tsx b/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersGroupByPage.tsx
deleted file mode 100644
index f1b94835f6f9..000000000000
--- a/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersGroupByPage.tsx
+++ /dev/null
@@ -1,93 +0,0 @@
-import React, {useCallback, useMemo, useState} from 'react';
-import {View} from 'react-native';
-import Button from '@components/Button';
-import FixedFooter from '@components/FixedFooter';
-import HeaderWithBackButton from '@components/HeaderWithBackButton';
-import ScreenWrapper from '@components/ScreenWrapper';
-import type {SearchGroupBy} from '@components/Search/types';
-import SingleSelectListItem from '@components/SelectionList/ListItem/SingleSelectListItem';
-import SelectionListWithSections from '@components/SelectionList/SelectionListWithSections';
-import type {ListItem} from '@components/SelectionList/types';
-import useLocalize from '@hooks/useLocalize';
-import useOnyx from '@hooks/useOnyx';
-import useThemeStyles from '@hooks/useThemeStyles';
-import {updateAdvancedFilters} from '@libs/actions/Search';
-import Navigation from '@libs/Navigation/Navigation';
-import {getGroupBySections} from '@libs/SearchUIUtils';
-import ONYXKEYS from '@src/ONYXKEYS';
-import ROUTES from '@src/ROUTES';
-
-function SearchFiltersGroupByPage() {
-    const styles = useThemeStyles();
-    const {translate} = useLocalize();
-    const [searchAdvancedFiltersForm] = useOnyx(ONYXKEYS.FORMS.SEARCH_ADVANCED_FILTERS_FORM);
-    const [selectedItem, setSelectedItem] = useState(searchAdvancedFiltersForm?.groupBy);
-
-    const sections = useMemo(() => {
-        return getGroupBySections(translate).map((section) => ({
-            sectionIndex: section.sectionIndex,
-            ...(section.sectionIndex > 0 ? {customHeader: <View style={styles.dividerLine} />} : {}),
-            data: section.options.map<ListItem<SearchGroupBy>>((groupOption) => ({
-                text: groupOption.text,
-                keyForList: groupOption.value,
-                isSelected: selectedItem === groupOption.value,
-            })),
-        }));
-    }, [selectedItem, styles.dividerLine, translate]);
-    const updateSelectedItem = useCallback((type: ListItem<SearchGroupBy>) => {
-        setSelectedItem(type?.keyForList ?? undefined);
-    }, []);
-
-    const resetChanges = useCallback(() => {
-        setSelectedItem(undefined);
-    }, []);
-
-    const applyChanges = useCallback(() => {
-        // When groupBy is cleared, also clear the view since view is only valid when groupBy is set
-        const updates = selectedItem ? {groupBy: selectedItem} : {groupBy: null, view: null};
-        updateAdvancedFilters(updates);
-        Navigation.goBack(ROUTES.SEARCH_ADVANCED_FILTERS.getRoute());
-    }, [selectedItem]);
-
-    return (
-        <ScreenWrapper
-            testID="SearchFiltersGroupByPage"
-            shouldShowOfflineIndicatorInWideScreen
-            offlineIndicatorStyle={styles.mtAuto}
-            shouldEnableMaxHeight
-        >
-            <HeaderWithBackButton
-                title={translate('search.display.groupBy')}
-                onBackButtonPress={() => {
-                    Navigation.goBack(ROUTES.SEARCH_ADVANCED_FILTERS.getRoute());
-                }}
-            />
-            <View style={[styles.flex1]}>
-                <SelectionListWithSections
-                    shouldSingleExecuteRowSelect
-                    sections={sections}
-                    ListItem={SingleSelectListItem}
-                    onSelectRow={updateSelectedItem}
-                />
-            </View>
-            <FixedFooter style={styles.mtAuto}>
-                <Button
-                    large
-                    style={[styles.mt4]}
-                    text={translate('common.reset')}
-                    onPress={resetChanges}
-                />
-                <Button
-                    large
-                    success
-                    pressOnEnter
-                    style={[styles.mt4]}
-                    text={translate('common.save')}
-                    onPress={applyChanges}
-                />
-            </FixedFooter>
-        </ScreenWrapper>
-    );
-}
-
-export default SearchFiltersGroupByPage;
diff --git a/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersGroupCurrencyPage.tsx b/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersGroupCurrencyPage.tsx
deleted file mode 100644
index 8b30efe222a6..000000000000
--- a/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersGroupCurrencyPage.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-import React from 'react';
-import SearchFiltersCurrencyBase from '@components/Search/SearchFiltersCurrencyBase';
-import CONST from '@src/CONST';
-
-function SearchFiltersGroupCurrencyPage() {
-    return (
-        <SearchFiltersCurrencyBase
-            title="common.groupCurrency"
-            filterKey={CONST.SEARCH.SYNTAX_FILTER_KEYS.GROUP_CURRENCY}
-        />
-    );
-}
-
-export default SearchFiltersGroupCurrencyPage;
diff --git a/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersLimitPage.tsx b/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersLimitPage.tsx
deleted file mode 100644
index 5820ab042ae8..000000000000
--- a/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersLimitPage.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import React from 'react';
-import SearchFiltersTextBase from '@components/Search/SearchFiltersTextBase';
-import CONST from '@src/CONST';
-
-function SearchFiltersLimitPage() {
-    return (
-        <SearchFiltersTextBase
-            filterKey={CONST.SEARCH.SYNTAX_ROOT_KEYS.LIMIT}
-            titleKey="search.filters.limit"
-            descriptionKey="search.filters.limitDescription"
-            testID="SearchFiltersLimitPage"
-        />
-    );
-}
-
-export default SearchFiltersLimitPage;
diff --git a/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersViewPage.tsx b/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersViewPage.tsx
deleted file mode 100644
index 27a6f8dea63e..000000000000
--- a/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersViewPage.tsx
+++ /dev/null
@@ -1,91 +0,0 @@
-import React, {useCallback, useMemo, useState} from 'react';
-import {View} from 'react-native';
-import Button from '@components/Button';
-import FixedFooter from '@components/FixedFooter';
-import HeaderWithBackButton from '@components/HeaderWithBackButton';
-import ScreenWrapper from '@components/ScreenWrapper';
-import type {SearchView} from '@components/Search/types';
-import SelectionList from '@components/SelectionList';
-import SingleSelectListItem from '@components/SelectionList/ListItem/SingleSelectListItem';
-import type {ListItem} from '@components/SelectionList/types';
-import useLocalize from '@hooks/useLocalize';
-import useOnyx from '@hooks/useOnyx';
-import useThemeStyles from '@hooks/useThemeStyles';
-import {updateAdvancedFilters} from '@libs/actions/Search';
-import Navigation from '@libs/Navigation/Navigation';
-import {getViewOptions} from '@libs/SearchUIUtils';
-import CONST from '@src/CONST';
-import ONYXKEYS from '@src/ONYXKEYS';
-import ROUTES from '@src/ROUTES';
-
-function SearchFiltersViewPage() {
-    const styles = useThemeStyles();
-    const {translate} = useLocalize();
-    const [searchAdvancedFiltersForm] = useOnyx(ONYXKEYS.FORMS.SEARCH_ADVANCED_FILTERS_FORM);
-
-    // Default to 'table' if no view is set
-    const [selectedItem, setSelectedItem] = useState(searchAdvancedFiltersForm?.view ?? CONST.SEARCH.VIEW.TABLE);
-
-    const listData: Array<ListItem<SearchView>> = useMemo(() => {
-        return getViewOptions(translate).map((viewOption) => ({
-            text: viewOption.text,
-            keyForList: viewOption.value,
-            isSelected: selectedItem === viewOption.value,
-        }));
-    }, [translate, selectedItem]);
-
-    const updateSelectedItem = useCallback((item: ListItem<SearchView>) => {
-        setSelectedItem(item?.keyForList ?? CONST.SEARCH.VIEW.TABLE);
-    }, []);
-
-    const resetChanges = useCallback(() => {
-        setSelectedItem(CONST.SEARCH.VIEW.TABLE);
-    }, []);
-
-    const applyChanges = useCallback(() => {
-        updateAdvancedFilters({view: selectedItem});
-        Navigation.goBack(ROUTES.SEARCH_ADVANCED_FILTERS.getRoute());
-    }, [selectedItem]);
-
-    return (
-        <ScreenWrapper
-            testID="SearchFiltersViewPage"
-            shouldShowOfflineIndicatorInWideScreen
-            offlineIndicatorStyle={styles.mtAuto}
-            shouldEnableMaxHeight
-        >
-            <HeaderWithBackButton
-                title={translate('search.view.label')}
-                onBackButtonPress={() => {
-                    Navigation.goBack(ROUTES.SEARCH_ADVANCED_FILTERS.getRoute());
-                }}
-            />
-            <View style={[styles.flex1]}>
-                <SelectionList
-                    shouldSingleExecuteRowSelect
-                    data={listData}
-                    ListItem={SingleSelectListItem}
-                    onSelectRow={updateSelectedItem}
-                />
-            </View>
-            <FixedFooter style={styles.mtAuto}>
-                <Button
-                    large
-                    style={[styles.mt4]}
-                    text={translate('common.reset')}
-                    onPress={resetChanges}
-                />
-                <Button
-                    large
-                    success
-                    pressOnEnter
-                    style={[styles.mt4]}
-                    text={translate('common.save')}
-                    onPress={applyChanges}
-                />
-            </FixedFooter>
-        </ScreenWrapper>
-    );
-}
-
-export default SearchFiltersViewPage;
diff --git a/src/pages/Search/SearchPage.tsx b/src/pages/Search/SearchPage.tsx
index e92c78ba6e40..08eadbdd13ba 100644
--- a/src/pages/Search/SearchPage.tsx
+++ b/src/pages/Search/SearchPage.tsx
@@ -140,6 +140,7 @@ function SearchPage({route}: SearchPageProps) {
                     isMobileSelectionModeEnabled={isMobileSelectionModeEnabled}
                     footerData={footerData}
                     shouldShowFooter={shouldShowFooter}
+                    onSortPressedCallback={onSortPressedCallback}
                 />
             ) : (
                 <SearchPageWide
diff --git a/src/pages/Search/SearchPageNarrow/StaticFiltersBar.tsx b/src/pages/Search/SearchPageNarrow/StaticFiltersBar.tsx
deleted file mode 100644
index b8ec540bec60..000000000000
--- a/src/pages/Search/SearchPageNarrow/StaticFiltersBar.tsx
+++ /dev/null
@@ -1,102 +0,0 @@
-// Static twin of SearchFiltersBarNarrow - used for fast perceived performance.
-// Keep hooks and Onyx subscriptions to an absolute minimum; add new ones only
-// when strictly necessary. UI must stay visually identical to the interactive version.
-import React, {useMemo} from 'react';
-import {FlatList, View} from 'react-native';
-import Button from '@components/Button';
-import CaretWrapper from '@components/CaretWrapper';
-import type {SearchQueryJSON} from '@components/Search/types';
-import Text from '@components/Text';
-import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset';
-import useLocalize from '@hooks/useLocalize';
-import useOnyx from '@hooks/useOnyx';
-import useTheme from '@hooks/useTheme';
-import useThemeStyles from '@hooks/useThemeStyles';
-import variables from '@styles/variables';
-import CONST from '@src/CONST';
-import ONYXKEYS from '@src/ONYXKEYS';
-import staticPolicyInfoSelector from './staticPolicyInfoSelector';
-
-function StaticDropdownChip({label}: {label: string}) {
-    const styles = useThemeStyles();
-
-    return (
-        <Button
-            small
-            isDisabled
-            shouldStayNormalOnDisable
-        >
-            <CaretWrapper
-                style={[styles.flex1, styles.mw100]}
-                caretWidth={variables.iconSizeExtraSmall}
-                caretHeight={variables.iconSizeExtraSmall}
-                isActive={false}
-            >
-                <Text
-                    numberOfLines={1}
-                    style={[styles.textMicroBold, styles.flexShrink1]}
-                >
-                    {label}
-                </Text>
-            </CaretWrapper>
-        </Button>
-    );
-}
-
-/**
- * In the submit-and-navigate flow we only ever land on `type:expense` or `type:invoice`
- * with default status and no extra filters, so the chips are mostly hardcoded.
- * The only conditional chip is "Workspaces" (shown when the user has >1 workspace),
- * resolved via a cheap boolean Onyx selector.
- */
-function StaticFiltersBar({queryJSON}: {queryJSON: SearchQueryJSON}) {
-    const styles = useThemeStyles();
-    const theme = useTheme();
-    const {translate} = useLocalize();
-    const expensifyIcons = useMemoizedLazyExpensifyIcons(['Filter'] as const);
-    const [policyInfo] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {selector: staticPolicyInfoSelector});
-    const hasMultipleWorkspaces = policyInfo?.hasMultipleWorkspaces ?? false;
-
-    const typeLabel = queryJSON.type === CONST.SEARCH.DATA_TYPES.INVOICE ? translate('common.invoice') : translate('common.expense');
-
-    const chips = useMemo(
-        () => [
-            {key: 'type', label: `${translate('common.type')}: ${typeLabel}`},
-            {key: 'status', label: translate('common.status')},
-            {key: 'date', label: translate('common.date')},
-            {key: 'from', label: translate('common.from')},
-            ...(hasMultipleWorkspaces ? [{key: 'workspace', label: translate('workspace.common.workspace')}] : []),
-        ],
-        [translate, typeLabel, hasMultipleWorkspaces],
-    );
-
-    return (
-        <View style={[styles.mb2, styles.searchFiltersBarContainer]}>
-            <FlatList
-                horizontal
-                style={[styles.flexRow, styles.overflowScroll, styles.flexGrow0]}
-                contentContainerStyle={[styles.flexRow, styles.flexGrow0, styles.gap2, styles.ph5]}
-                showsHorizontalScrollIndicator={false}
-                data={chips}
-                keyExtractor={(item) => item.key}
-                renderItem={({item}) => <StaticDropdownChip label={item.label} />}
-                ListFooterComponent={
-                    <Button
-                        link
-                        small
-                        shouldUseDefaultHover={false}
-                        text={translate('search.filtersHeader')}
-                        iconFill={theme.link}
-                        iconHoverFill={theme.linkHover}
-                        icon={expensifyIcons.Filter}
-                        textStyles={[styles.textMicroBold]}
-                        isDisabled
-                        shouldStayNormalOnDisable
-                    />
-                }
-            />
-        </View>
-    );
-}
-
-export default StaticFiltersBar;
diff --git a/src/pages/Search/SearchPageNarrow/StaticSearchActionsBar.tsx b/src/pages/Search/SearchPageNarrow/StaticSearchActionsBar.tsx
new file mode 100644
index 000000000000..c5f2b9a4857f
--- /dev/null
+++ b/src/pages/Search/SearchPageNarrow/StaticSearchActionsBar.tsx
@@ -0,0 +1,40 @@
+// Static twin of SearchActionsBarNarrow - used for fast perceived performance.
+// Keep hooks and Onyx subscriptions to an absolute minimum; add new ones only
+// when strictly necessary. UI must stay visually identical to the interactive version.
+import React from 'react';
+import {View} from 'react-native';
+import Icon from '@components/Icon';
+import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset';
+import useTheme from '@hooks/useTheme';
+import useThemeStyles from '@hooks/useThemeStyles';
+
+function StaticSearchActionsBar() {
+    const styles = useThemeStyles();
+    const expensifyIcons = useMemoizedLazyExpensifyIcons(['Filter', 'Bookmark', 'Gear']);
+    const theme = useTheme();
+
+    return (
+        <View style={[styles.flexRow, styles.alignItemsCenter, styles.mr5, styles.mb4]}>
+            <Icon
+                additionalStyles={[styles.touchableButtonImage]}
+                src={expensifyIcons.Filter}
+                fill={theme.icon}
+                small
+            />
+            <Icon
+                additionalStyles={[styles.touchableButtonImage]}
+                src={expensifyIcons.Bookmark}
+                fill={theme.icon}
+                small
+            />
+            <Icon
+                additionalStyles={[styles.touchableButtonImage]}
+                src={expensifyIcons.Gear}
+                fill={theme.icon}
+                small
+            />
+        </View>
+    );
+}
+
+export default StaticSearchActionsBar;
diff --git a/src/pages/Search/SearchPageNarrow/StaticSearchPageHeader.tsx b/src/pages/Search/SearchPageNarrow/StaticSearchPageHeader.tsx
deleted file mode 100644
index 8b40ddf6b832..000000000000
--- a/src/pages/Search/SearchPageNarrow/StaticSearchPageHeader.tsx
+++ /dev/null
@@ -1,40 +0,0 @@
-// Static twin of SearchPageHeader - used for fast perceived performance.
-// Keep hooks and Onyx subscriptions to an absolute minimum; add new ones only
-// when strictly necessary. UI must stay visually identical to the interactive version.
-import React from 'react';
-import {View} from 'react-native';
-import Text from '@components/Text';
-import useLocalize from '@hooks/useLocalize';
-import useTheme from '@hooks/useTheme';
-import useThemeStyles from '@hooks/useThemeStyles';
-import variables from '@styles/variables';
-
-function StaticSearchPageHeader() {
-    const styles = useThemeStyles();
-    const theme = useTheme();
-    const {translate} = useLocalize();
-
-    return (
-        <View
-            dataSet={{dragArea: false}}
-            style={[styles.flex1]}
-        >
-            <View style={[styles.appBG, styles.flex1]}>
-                <View style={[styles.flexRow, styles.mh5, styles.mb3, styles.alignItemsCenter, styles.justifyContentCenter, {height: variables.searchTopBarHeight}]}>
-                    <View style={[styles.flex1, styles.zIndex10]}>
-                        <View style={[styles.searchRouterTextInputContainer, styles.searchAutocompleteInputResults, styles.br2, styles.justifyContentCenter]}>
-                            <Text
-                                style={[styles.pl1, {color: theme.textSupporting}]}
-                                numberOfLines={1}
-                            >
-                                {translate('search.searchPlaceholder')}
-                            </Text>
-                        </View>
-                    </View>
-                </View>
-            </View>
-        </View>
-    );
-}
-
-export default StaticSearchPageHeader;
diff --git a/src/pages/Search/SearchPageNarrow/StaticSearchPageInput.tsx b/src/pages/Search/SearchPageNarrow/StaticSearchPageInput.tsx
new file mode 100644
index 000000000000..577fddd6a046
--- /dev/null
+++ b/src/pages/Search/SearchPageNarrow/StaticSearchPageInput.tsx
@@ -0,0 +1,37 @@
+// Static twin of SearchPageInputNarrow - used for fast perceived performance.
+// Keep hooks and Onyx subscriptions to an absolute minimum; add new ones only
+// when strictly necessary. UI must stay visually identical to the interactive version.
+import React from 'react';
+import {View} from 'react-native';
+import Text from '@components/Text';
+import useLocalize from '@hooks/useLocalize';
+import useTheme from '@hooks/useTheme';
+import useThemeStyles from '@hooks/useThemeStyles';
+
+function StaticSearchPageInput() {
+    const styles = useThemeStyles();
+    const theme = useTheme();
+    const {translate} = useLocalize();
+
+    return (
+        <View
+            dataSet={{dragArea: false}}
+            style={[styles.flex1, styles.appBG]}
+        >
+            <View style={[styles.flexRow, styles.ml5, styles.mb4, styles.mr3]}>
+                <View style={[styles.flex1, styles.zIndex10]}>
+                    <View style={[styles.searchRouterTextInputContainer, styles.searchAutocompleteInputResults, styles.br2, styles.justifyContentCenter, styles.searchInputSkeleton]}>
+                        <Text
+                            style={[{color: theme.textSupporting}]}
+                            numberOfLines={1}
+                        >
+                            {translate('search.searchPlaceholder')}
+                        </Text>
+                    </View>
+                </View>
+            </View>
+        </View>
+    );
+}
+
+export default StaticSearchPageInput;
diff --git a/src/pages/Search/SearchPageNarrow/StaticTabSelector.tsx b/src/pages/Search/SearchPageNarrow/StaticSearchTypeMenu.tsx
similarity index 89%
rename from src/pages/Search/SearchPageNarrow/StaticTabSelector.tsx
rename to src/pages/Search/SearchPageNarrow/StaticSearchTypeMenu.tsx
index fabfcb36ad87..f8f3294beaed 100644
--- a/src/pages/Search/SearchPageNarrow/StaticTabSelector.tsx
+++ b/src/pages/Search/SearchPageNarrow/StaticSearchTypeMenu.tsx
@@ -1,4 +1,4 @@
-// Static twin of SearchPageTabSelector - used for fast perceived performance.
+// Static twin of SearchTypeMenuNarrow - used for fast perceived performance.
 // Keep hooks and Onyx subscriptions to an absolute minimum; add new ones only
 // when strictly necessary. UI must stay visually identical to the interactive version.
 import React, {useMemo} from 'react';
@@ -8,7 +8,7 @@ import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset';
 import useLocalize from '@hooks/useLocalize';
 import useOnyx from '@hooks/useOnyx';
 import {getSuggestedSearches} from '@libs/SearchUIUtils';
-import {SearchPageTabSelectorContent} from '@pages/Search/SearchPageTabSelector';
+import {SearchTypeMenuNarrowContent} from '@pages/Search/SearchTypeMenuNarrow';
 import CONST from '@src/CONST';
 import ONYXKEYS from '@src/ONYXKEYS';
 import staticPolicyInfoSelector from './staticPolicyInfoSelector';
@@ -24,7 +24,7 @@ function getActiveKey(similarSearchHash: number, hasPaidGroupPolicy: boolean): s
     return candidates.find((entry) => similarSearchHash === entry.similarSearchHash)?.key ?? reportsSearch.key;
 }
 
-function StaticTabSelector({queryJSON}: {queryJSON: SearchQueryJSON}) {
+function StaticSearchTypeMenu({queryJSON}: {queryJSON: SearchQueryJSON}) {
     const {translate} = useLocalize();
     const expensifyIcons = useMemoizedLazyExpensifyIcons(['Receipt', 'Document', 'ChatBubbles', 'Send'] as const);
     const [policyInfo] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {selector: staticPolicyInfoSelector});
@@ -47,11 +47,11 @@ function StaticTabSelector({queryJSON}: {queryJSON: SearchQueryJSON}) {
     const activeKey = useMemo(() => getActiveKey(queryJSON.similarSearchHash, hasPaidGroupPolicy), [queryJSON.similarSearchHash, hasPaidGroupPolicy]);
 
     return (
-        <SearchPageTabSelectorContent
+        <SearchTypeMenuNarrowContent
             tabs={tabs}
             activeTabKey={activeKey}
         />
     );
 }
 
-export default StaticTabSelector;
+export default StaticSearchTypeMenu;
diff --git a/src/pages/Search/SearchPageNarrow/Switches.tsx b/src/pages/Search/SearchPageNarrow/Switches.tsx
index ce345fc4fce7..c5624c133b38 100644
--- a/src/pages/Search/SearchPageNarrow/Switches.tsx
+++ b/src/pages/Search/SearchPageNarrow/Switches.tsx
@@ -6,66 +6,59 @@
  * the `showStatic` prop.
  *
  * IMPORTANT - keeping visual parity:
- *  • If you change the UI of an interactive component (SearchPageTabSelector,
- *    SearchPageHeader, SearchFiltersBar), verify the matching Static* version
+ *  • If you change the UI of an interactive component (SearchTypeMenuNarrow,
+ *    SearchPageInputNarrow, SearchActionsBarNarrow), verify the matching Static* version
  *    still looks visually identical.
  *  • Static components intentionally avoid expensive hooks and Onyx reads.
  *    Do NOT add new subscriptions unless absolutely necessary for correctness.
  */
 import React from 'react';
-import SearchFiltersBar from '@components/Search/SearchPageHeader/SearchFiltersBar';
-import SearchPageHeader from '@components/Search/SearchPageHeader/SearchPageHeader';
-import type {SearchQueryJSON} from '@components/Search/types';
-import SearchPageTabSelector from '@pages/Search/SearchPageTabSelector';
-import StaticFiltersBar from './StaticFiltersBar';
-import StaticSearchPageHeader from './StaticSearchPageHeader';
-import StaticTabSelector from './StaticTabSelector';
+import SearchActionsBarNarrow from '@components/Search/SearchPageHeader/SearchActionsBarNarrow';
+import type {SearchActionsBarNarrowProps} from '@components/Search/SearchPageHeader/SearchActionsBarNarrow';
+import SearchFiltersBarNarrow from '@components/Search/SearchPageHeader/SearchFiltersBarNarrow';
+import type {SearchFiltersBarNarrowProps} from '@components/Search/SearchPageHeader/SearchFiltersBarNarrow';
+import SearchPageInputNarrow from '@components/Search/SearchPageHeader/SearchPageInputNarrow';
+import type {SearchPageInputNarrowProps} from '@components/Search/SearchPageHeader/SearchPageInputNarrow';
+import SearchTypeMenuNarrow from '@pages/Search/SearchTypeMenuNarrow';
+import type {SearchTypeMenuNarrowProps} from '@pages/Search/SearchTypeMenuNarrow';
+import StaticSearchActionsBar from './StaticSearchActionsBar';
+import StaticSearchPageInput from './StaticSearchPageInput';
+import StaticSearchTypeMenu from './StaticSearchTypeMenu';
 
-type SearchPageTabSelectorProps = {
-    queryJSON?: SearchQueryJSON;
-    onTabPress?: () => void;
-};
-
-type SearchPageHeaderProps = {
-    queryJSON: SearchQueryJSON;
-    searchRouterListVisible?: boolean;
-    hideSearchRouterList?: () => void;
-    onSearchRouterFocus?: () => void;
-    handleSearch: (value: string) => void;
-    isMobileSelectionModeEnabled: boolean;
-    skipInputSkeleton?: boolean;
-};
-
-type SearchFiltersBarProps = {
-    queryJSON: SearchQueryJSON;
-    isMobileSelectionModeEnabled: boolean;
-};
-
-const TabSelectorSwitch = React.memo(({showStatic, ...props}: SearchPageTabSelectorProps & {showStatic: boolean}) => {
+const SearchTypeMenuSwitch = React.memo(({showStatic, ...props}: SearchTypeMenuNarrowProps & {showStatic: boolean}) => {
     if (showStatic) {
-        return props.queryJSON ? <StaticTabSelector queryJSON={props.queryJSON} /> : null;
+        return props.queryJSON ? <StaticSearchTypeMenu queryJSON={props.queryJSON} /> : null;
     }
     // eslint-disable-next-line react/jsx-props-no-spreading -- thin wrapper forwarding exact SearchPageTabSelectorProps
-    return <SearchPageTabSelector {...props} />;
+    return <SearchTypeMenuNarrow {...props} />;
 });
-TabSelectorSwitch.displayName = 'TabSelectorSwitch';
+SearchTypeMenuSwitch.displayName = 'SearchTypeMenuSwitch';
 
-const SearchPageHeaderSwitch = React.memo(({showStatic, ...props}: SearchPageHeaderProps & {showStatic: boolean}) => {
+const SearchPageInputSwitch = React.memo(({showStatic, ...props}: SearchPageInputNarrowProps & {showStatic: boolean}) => {
     if (showStatic) {
-        return <StaticSearchPageHeader />;
+        return <StaticSearchPageInput />;
     }
     // eslint-disable-next-line react/jsx-props-no-spreading -- thin wrapper forwarding exact SearchPageHeaderProps
-    return <SearchPageHeader {...props} />;
+    return <SearchPageInputNarrow {...props} />;
 });
-SearchPageHeaderSwitch.displayName = 'SearchPageHeaderSwitch';
+SearchPageInputSwitch.displayName = 'SearchPageInputSwitch';
 
-const FiltersBarSwitch = React.memo(({showStatic, ...props}: SearchFiltersBarProps & {showStatic: boolean}) => {
+const SearchFiltersBarSwitch = React.memo(({showStatic, ...props}: SearchFiltersBarNarrowProps & {showStatic: boolean}) => {
     if (showStatic) {
-        return <StaticFiltersBar queryJSON={props.queryJSON} />;
+        return null;
     }
     // eslint-disable-next-line react/jsx-props-no-spreading -- thin wrapper forwarding exact SearchFiltersBarProps
-    return <SearchFiltersBar {...props} />;
+    return <SearchFiltersBarNarrow {...props} />;
+});
+SearchFiltersBarSwitch.displayName = 'SearchFiltersBarSwitch';
+
+const SearchActionsBarSwitch = React.memo(({showStatic, ...props}: SearchActionsBarNarrowProps & {showStatic: boolean}) => {
+    if (showStatic) {
+        return <StaticSearchActionsBar />;
+    }
+    // eslint-disable-next-line react/jsx-props-no-spreading -- thin wrapper forwarding exact SearchPageHeaderProps
+    return <SearchActionsBarNarrow {...props} />;
 });
-FiltersBarSwitch.displayName = 'FiltersBarSwitch';
+SearchActionsBarSwitch.displayName = 'SearchActionsBarSwitch';
 
-export {TabSelectorSwitch, SearchPageHeaderSwitch, FiltersBarSwitch};
+export {SearchTypeMenuSwitch, SearchPageInputSwitch, SearchFiltersBarSwitch, SearchActionsBarSwitch};
diff --git a/src/pages/Search/SearchPageNarrow/index.tsx b/src/pages/Search/SearchPageNarrow/index.tsx
index 01283a09004a..ea900afe482b 100644
--- a/src/pages/Search/SearchPageNarrow/index.tsx
+++ b/src/pages/Search/SearchPageNarrow/index.tsx
@@ -1,6 +1,7 @@
 import {useFocusEffect, useNavigation, useRoute} from '@react-navigation/native';
 import React, {useCallback, useContext, useEffect, useRef, useState, useTransition} from 'react';
 import {StyleSheet, View} from 'react-native';
+import type {OnyxEntry} from 'react-native-onyx';
 import Animated, {clamp, useAnimatedScrollHandler, useAnimatedStyle, useSharedValue, withTiming} from 'react-native-reanimated';
 import {scheduleOnRN} from 'react-native-worklets';
 import FullPageNotFoundView from '@components/BlockingViews/FullPageNotFoundView';
@@ -8,7 +9,6 @@ import {useFullScreenBlockingViewActions} from '@components/FullScreenBlockingVi
 import HeaderWithBackButton from '@components/HeaderWithBackButton';
 import NavigationTabBar from '@components/Navigation/NavigationTabBar';
 import NAVIGATION_TABS from '@components/Navigation/NavigationTabBar/NAVIGATION_TABS';
-import TopBar from '@components/Navigation/TopBar';
 import PulsingView from '@components/PulsingView';
 import ReceiptScanDropZone from '@components/ReceiptScanDropZone';
 import ScreenWrapper from '@components/ScreenWrapper';
@@ -17,12 +17,15 @@ import Search from '@components/Search';
 import {useSearchActionsContext, useSearchStateContext} from '@components/Search/SearchContext';
 import SearchLoadingSkeleton from '@components/Search/SearchLoadingSkeleton';
 import SearchPageFooter from '@components/Search/SearchPageFooter';
+import SearchPageHeaderNarrow from '@components/Search/SearchPageHeader/SearchPageHeaderNarrow';
+import {SKIPPED_FILTERS} from '@components/Search/SearchPageHeader/useSearchFiltersBar';
 import SearchStaticList from '@components/Search/SearchStaticList';
 import type {SearchParams, SearchQueryJSON} from '@components/Search/types';
 import useAndroidBackButtonHandler from '@hooks/useAndroidBackButtonHandler';
 import useLoadingBarVisibility from '@hooks/useLoadingBarVisibility';
 import useLocalize from '@hooks/useLocalize';
 import useNetwork from '@hooks/useNetwork';
+import useOnyx from '@hooks/useOnyx';
 import useResponsiveLayout from '@hooks/useResponsiveLayout';
 import useScrollEventEmitter from '@hooks/useScrollEventEmitter';
 import useSearchLoadingState from '@hooks/useSearchLoadingState';
@@ -32,16 +35,19 @@ import useWindowDimensions from '@hooks/useWindowDimensions';
 import {turnOffMobileSelectionMode} from '@libs/actions/MobileSelectionMode';
 import Navigation from '@libs/Navigation/Navigation';
 import {buildCannedSearchQuery} from '@libs/SearchQueryUtils';
-import {isSearchDataLoaded} from '@libs/SearchUIUtils';
+import {isSearchDataLoaded, shouldShowFilter} from '@libs/SearchUIUtils';
 import {endSubmitFollowUpActionSpan, getPendingSubmitFollowUpAction} from '@libs/telemetry/submitFollowUpAction';
 import variables from '@styles/variables';
 import {searchInServer} from '@userActions/Report';
 import {search} from '@userActions/Search';
 import CONST from '@src/CONST';
+import ONYXKEYS from '@src/ONYXKEYS';
 import ROUTES from '@src/ROUTES';
+import type {SearchAdvancedFiltersForm} from '@src/types/form';
+import type {SearchAdvancedFiltersKey} from '@src/types/form/SearchAdvancedFiltersForm';
 import type {SearchResults} from '@src/types/onyx';
 import type {SearchResultsInfo} from '@src/types/onyx/SearchResults';
-import {FiltersBarSwitch, SearchPageHeaderSwitch, TabSelectorSwitch} from './Switches';
+import {SearchActionsBarSwitch, SearchFiltersBarSwitch, SearchPageInputSwitch, SearchTypeMenuSwitch} from './Switches';
 
 const TOO_CLOSE_TO_TOP_DISTANCE = 10;
 const TOO_CLOSE_TO_BOTTOM_DISTANCE = 10;
@@ -58,9 +64,15 @@ type SearchPageNarrowProps = {
         currency: string | undefined;
     };
     shouldShowFooter: boolean;
+    onSortPressedCallback: () => void;
 };
 
-function SearchPageNarrow({queryJSON, searchResults, isMobileSelectionModeEnabled, metadata, footerData, shouldShowFooter}: SearchPageNarrowProps) {
+function hasFilterBarsSelector(searchAdvancedFiltersForm: OnyxEntry<SearchAdvancedFiltersForm>) {
+    const type = searchAdvancedFiltersForm?.type ?? CONST.SEARCH.DATA_TYPES.EXPENSE;
+    return !!Object.entries(searchAdvancedFiltersForm ?? {}).filter(([key, value]) => shouldShowFilter(SKIPPED_FILTERS, key as SearchAdvancedFiltersKey, value, type)).length;
+}
+
+function SearchPageNarrow({queryJSON, searchResults, isMobileSelectionModeEnabled, metadata, footerData, shouldShowFooter, onSortPressedCallback}: SearchPageNarrowProps) {
     const shouldShowLoadingSkeleton = useSearchLoadingState(queryJSON, searchResults);
     const {translate} = useLocalize();
     const {shouldUseNarrowLayout} = useResponsiveLayout();
@@ -80,6 +92,7 @@ function SearchPageNarrow({queryJSON, searchResults, isMobileSelectionModeEnable
     const receiptDropTargetRef = useRef<View>(null);
 
     const [searchRequestResponseStatusCode, setSearchRequestResponseStatusCode] = useState<number | null>(null);
+    const [hasFilterBars = false] = useOnyx(ONYXKEYS.FORMS.SEARCH_ADVANCED_FILTERS_FORM, {selector: hasFilterBarsSelector});
 
     const scrollOffset = useSharedValue(0);
     const topBarOffset = useSharedValue<number>(StyleUtils.searchHeaderDefaultOffset);
@@ -116,14 +129,20 @@ function SearchPageNarrow({queryJSON, searchResults, isMobileSelectionModeEnable
                 scheduleOnRN(saveScrollOffset, route, currentOffset);
 
                 if (isScrollingDown && contentOffset.y > TOO_CLOSE_TO_TOP_DISTANCE) {
-                    topBarOffset.set(clamp(topBarOffset.get() - distanceScrolled, variables.minimalTopBarOffset, StyleUtils.searchHeaderDefaultOffset));
+                    topBarOffset.set(
+                        clamp(
+                            topBarOffset.get() - distanceScrolled,
+                            hasFilterBars ? variables.minimalTopBarWithFiltersOffset : variables.minimalTopBarOffset,
+                            StyleUtils.searchHeaderDefaultOffset,
+                        ),
+                    );
                 } else if (!isScrollingDown && distanceScrolled < 0 && contentOffset.y + layoutMeasurement.height < contentSize.height - TOO_CLOSE_TO_BOTTOM_DISTANCE) {
                     topBarOffset.set(withTiming(StyleUtils.searchHeaderDefaultOffset, {duration: ANIMATION_DURATION_IN_MS}));
                 }
                 scrollOffset.set(currentOffset);
             },
         },
-        [windowHeight],
+        [hasFilterBars, windowHeight],
     );
 
     const handleOnBackButtonPress = () => Navigation.goBack(ROUTES.SEARCH_ROOT.getRoute({query: buildCannedSearchQuery()}));
@@ -249,7 +268,7 @@ function SearchPageNarrow({queryJSON, searchResults, isMobileSelectionModeEnable
 
     const isDataLoaded = shouldUseLiveData || isSearchDataLoaded(searchResults, queryJSON);
     const shouldShowLoadingState = !isOffline && (!isDataLoaded || !!metadata?.isLoading);
-    const contentContainerStyle = !isMobileSelectionModeEnabled ? styles.searchListContentContainerStyles : undefined;
+    const contentContainerStyle = !isMobileSelectionModeEnabled ? styles.searchListContentContainerStyles(hasFilterBars) : undefined;
 
     // Overlay pattern: SearchStaticList renders as an absolute-fill sibling on
     // top of Search, so its native views are never unmounted by a tree-structure
@@ -271,6 +290,7 @@ function SearchPageNarrow({queryJSON, searchResults, isMobileSelectionModeEnable
                     searchRequestResponseStatusCode={searchRequestResponseStatusCode}
                     onDestinationVisible={endSubmitNavigationSpans}
                     onContentReady={onSearchContentReady}
+                    hasFilterBars={hasFilterBars}
                 />
             )}
             {showStaticOverlay && (
@@ -291,7 +311,7 @@ function SearchPageNarrow({queryJSON, searchResults, isMobileSelectionModeEnable
         if (shouldShowLoadingSkeleton) {
             return (
                 <SearchLoadingSkeleton
-                    containerStyle={styles.searchListContentContainerStyles}
+                    containerStyle={styles.searchListContentContainerStyles(hasFilterBars)}
                     reasonAttributes={{
                         context: 'SearchPage',
                         isOffline,
@@ -337,11 +357,10 @@ function SearchPageNarrow({queryJSON, searchResults, isMobileSelectionModeEnable
                     {!isMobileSelectionModeEnabled ? (
                         <View style={[StyleUtils.getSearchPageNarrowHeaderStyles(), searchRouterListVisible && styles.flex1, styles.mh100]}>
                             <View style={[styles.zIndex10, styles.appBG]}>
-                                <TopBar
+                                <SearchPageHeaderNarrow
+                                    queryJSON={queryJSON}
                                     shouldShowLoadingBar={shouldShowLoadingState || shouldShowLoadingBarForReports}
-                                    breadcrumbLabel={translate('common.reports')}
-                                    shouldDisplaySearch={false}
-                                    shouldDisplayHelpButton
+                                    isMobileSelectionModeEnabled={false}
                                     cancelSearch={shouldDisplayCancelSearch ? cancelSearchCallback : undefined}
                                 />
                             </View>
@@ -351,7 +370,7 @@ function SearchPageNarrow({queryJSON, searchResults, isMobileSelectionModeEnable
                                         topBarAnimatedStyle,
                                         !searchRouterListVisible && styles.narrowSearchRouterInactiveStyle,
                                         styles.flex1,
-                                        styles.bgTransparent,
+                                        styles.appBG,
                                         styles.searchTopBarZIndexStyle,
                                     ]}
                                 >
@@ -360,15 +379,15 @@ function SearchPageNarrow({queryJSON, searchResults, isMobileSelectionModeEnable
                                         style={styles.flex1}
                                         wrapperStyle={[styles.flex1, styles.appBG]}
                                     >
-                                        <TabSelectorSwitch
+                                        <SearchTypeMenuSwitch
                                             showStatic={!isHeaderInteractive}
                                             queryJSON={queryJSON}
                                             onTabPress={() => {
                                                 setSearchRouterListVisible(false);
                                             }}
                                         />
-                                        <View style={[styles.flex1, styles.pt2, styles.appBG]}>
-                                            <SearchPageHeaderSwitch
+                                        <View style={[styles.flex1, styles.flexRow, styles.pt1]}>
+                                            <SearchPageInputSwitch
                                                 showStatic={!isHeaderInteractive}
                                                 queryJSON={queryJSON}
                                                 searchRouterListVisible={searchRouterListVisible}
@@ -380,19 +399,23 @@ function SearchPageNarrow({queryJSON, searchResults, isMobileSelectionModeEnable
                                                     setSearchRouterListVisible(true);
                                                 }}
                                                 handleSearch={handleSearchAction}
-                                                isMobileSelectionModeEnabled={isMobileSelectionModeEnabled}
-                                                skipInputSkeleton={useStaticRendering}
+                                                skipSkeleton={useStaticRendering}
                                             />
-                                        </View>
-                                        <View style={[styles.appBG]}>
                                             {!searchRouterListVisible && (
-                                                <FiltersBarSwitch
+                                                <SearchActionsBarSwitch
                                                     showStatic={!isHeaderInteractive}
                                                     queryJSON={queryJSON}
-                                                    isMobileSelectionModeEnabled={isMobileSelectionModeEnabled}
+                                                    searchResults={searchResults}
+                                                    onSort={onSortPressedCallback}
                                                 />
                                             )}
                                         </View>
+                                        {!searchRouterListVisible && (
+                                            <SearchFiltersBarSwitch
+                                                showStatic={!isHeaderInteractive}
+                                                queryJSON={queryJSON}
+                                            />
+                                        )}
                                     </PulsingView>
                                 </Animated.View>
                             </View>
@@ -407,12 +430,10 @@ function SearchPageNarrow({queryJSON, searchResults, isMobileSelectionModeEnable
                                     turnOffMobileSelectionMode();
                                 }}
                             />
-                            <SearchPageHeaderSwitch
-                                showStatic={!isHeaderInteractive}
+                            <SearchPageHeaderNarrow
                                 queryJSON={queryJSON}
-                                handleSearch={handleSearchAction}
-                                isMobileSelectionModeEnabled={isMobileSelectionModeEnabled}
-                                skipInputSkeleton={useStaticRendering}
+                                shouldShowLoadingBar={false}
+                                isMobileSelectionModeEnabled
                             />
                         </>
                     )}
diff --git a/src/pages/Search/SearchPageWide.tsx b/src/pages/Search/SearchPageWide.tsx
index 3e7a0980d2b2..92c60343523c 100644
--- a/src/pages/Search/SearchPageWide.tsx
+++ b/src/pages/Search/SearchPageWide.tsx
@@ -10,8 +10,8 @@ import Search from '@components/Search';
 import {useSearchStateContext} from '@components/Search/SearchContext';
 import SearchLoadingSkeleton from '@components/Search/SearchLoadingSkeleton';
 import SearchPageFooter from '@components/Search/SearchPageFooter';
-import SearchFiltersBar from '@components/Search/SearchPageHeader/SearchFiltersBar';
-import SearchPageHeader from '@components/Search/SearchPageHeader/SearchPageHeader';
+import SearchActionsBarWide from '@components/Search/SearchPageHeader/SearchActionsBarWide';
+import SearchPageHeaderWide from '@components/Search/SearchPageHeader/SearchPageHeaderWide';
 import type {SearchParams, SearchQueryJSON} from '@components/Search/types';
 import useNetwork from '@hooks/useNetwork';
 import useSearchLoadingState from '@hooks/useSearchLoadingState';
@@ -114,14 +114,12 @@ function SearchPageWide({
                 >
                     {!!queryJSON && (
                         <>
-                            <SearchPageHeader
+                            <SearchPageHeaderWide queryJSON={queryJSON} />
+                            <SearchActionsBarWide
                                 queryJSON={queryJSON}
+                                searchResults={searchResults}
+                                onSort={onSortPressedCallback}
                                 handleSearch={handleSearchAction}
-                                isMobileSelectionModeEnabled={isMobileSelectionModeEnabled}
-                            />
-                            <SearchFiltersBar
-                                queryJSON={queryJSON}
-                                isMobileSelectionModeEnabled={isMobileSelectionModeEnabled}
                             />
                             {shouldShowLoadingSkeleton ? (
                                 <SearchLoadingSkeleton
diff --git a/src/pages/Search/SearchSavePage.tsx b/src/pages/Search/SearchSavePage.tsx
index df7989da8c3c..fcfd05c1c2ce 100644
--- a/src/pages/Search/SearchSavePage.tsx
+++ b/src/pages/Search/SearchSavePage.tsx
@@ -1,10 +1,13 @@
 import React, {useState} from 'react';
+import {View} from 'react-native';
 import FormProvider from '@components/Form/FormProvider';
 import InputWrapper from '@components/Form/InputWrapper';
 import HeaderWithBackButton from '@components/HeaderWithBackButton';
 import ScreenWrapper from '@components/ScreenWrapper';
-import useFilterFeedValue from '@components/Search/hooks/useFilterFeedValue';
-import useFilterFromValue from '@components/Search/hooks/useFilterFromValue';
+import useFilterCardValue from '@components/Search/hooks/useFilterCardValue';
+import useFilterReportValue from '@components/Search/hooks/useFilterReportValue';
+import useFilterTaxRateValue from '@components/Search/hooks/useFilterTaxRateValue';
+import useFilterUserValue from '@components/Search/hooks/useFilterUserValue';
 import useFilterWorkspaceValue from '@components/Search/hooks/useFilterWorkspaceValue';
 import {useSearchStateContext} from '@components/Search/SearchContext';
 import Text from '@components/Text';
@@ -33,29 +36,45 @@ type FilterValueWithKeyProps = FilterValueProps & {
     filterKey: SearchAdvancedFiltersKey;
 };
 
-function FilterFromValue({value}: FilterValueProps) {
-    return useFilterFromValue(value);
+function FilterUserValue({value}: FilterValueProps) {
+    return useFilterUserValue(value);
 }
 
 function FilterWorkspaceValue({value}: FilterValueProps) {
     return useFilterWorkspaceValue(value);
 }
 
-function FilterFeedValue({value}: FilterValueProps) {
-    return useFilterFeedValue(value);
+function FilterCardValue() {
+    return useFilterCardValue();
+}
+
+function FilterTaxRateValue() {
+    return useFilterTaxRateValue();
+}
+
+function FilterReportValue({value}: FilterValueProps) {
+    return useFilterReportValue(value);
 }
 
 function FilterValue({filterKey, value}: FilterValueWithKeyProps) {
-    if (filterKey === FILTER_KEYS.FROM) {
-        return <FilterFromValue value={value} />;
+    if (filterKey === FILTER_KEYS.FROM || filterKey === FILTER_KEYS.TO || filterKey === FILTER_KEYS.ATTENDEE || filterKey === FILTER_KEYS.ASSIGNEE) {
+        return <FilterUserValue value={value} />;
     }
 
     if (filterKey === FILTER_KEYS.POLICY_ID) {
         return <FilterWorkspaceValue value={value} />;
     }
 
-    if (filterKey === FILTER_KEYS.FEED) {
-        return <FilterFeedValue value={value} />;
+    if (filterKey === FILTER_KEYS.FEED || filterKey === FILTER_KEYS.CARD_ID) {
+        return <FilterCardValue />;
+    }
+
+    if (filterKey === FILTER_KEYS.TAX_RATE) {
+        return <FilterTaxRateValue />;
+    }
+
+    if (filterKey === FILTER_KEYS.IN) {
+        return <FilterReportValue value={value} />;
     }
 
     return value;
@@ -63,7 +82,7 @@ function FilterValue({filterKey, value}: FilterValueWithKeyProps) {
 
 function SearchSavePage() {
     const styles = useThemeStyles();
-    const {translate} = useLocalize();
+    const {translate, localeCompare} = useLocalize();
     const [savedSearches] = useOnyx(ONYXKEYS.SAVED_SEARCHES);
     const [searchAdvancedFiltersForm = getEmptyObject<Partial<SearchAdvancedFiltersForm>>()] = useOnyx(ONYXKEYS.FORMS.SEARCH_ADVANCED_FILTERS_FORM);
     const [name, setName] = useState('');
@@ -86,7 +105,7 @@ function SearchSavePage() {
         Navigation.goBack();
     };
 
-    const appliedFilters = mapFiltersFormToLabelValueList(searchAdvancedFiltersForm, undefined, translate);
+    const appliedFilters = mapFiltersFormToLabelValueList(searchAdvancedFiltersForm, undefined, undefined, translate, localeCompare);
 
     const {inputCallbackRef} = useAutoFocusInput();
 
@@ -118,17 +137,19 @@ function SearchSavePage() {
                 <Text style={[styles.textLabelSupporting, styles.mb2, styles.mt5]}>{translate('search.appliedFilters')}:</Text>
                 {appliedFilters.length > 0 ? (
                     appliedFilters.map((filter) => (
-                        <Text
+                        <View
+                            style={[styles.flexRow]}
                             key={filter.key}
-                            style={[styles.label]}
                         >
                             <Text style={[styles.label, styles.ph2]}>{CONST.DOT_SEPARATOR}</Text>
-                            <Text style={[styles.labelStrong]}>{filter.label}: </Text>
-                            <FilterValue
-                                filterKey={filter.key}
-                                value={filter.value}
-                            />
-                        </Text>
+                            <Text style={[styles.label]}>
+                                <Text style={[styles.labelStrong]}>{filter.label}: </Text>
+                                <FilterValue
+                                    filterKey={filter.key}
+                                    value={filter.value}
+                                />
+                            </Text>
+                        </View>
                     ))
                 ) : (
                     <Text>{translate('common.none')}</Text>
diff --git a/src/pages/Search/SearchPageTabSelector.tsx b/src/pages/Search/SearchTypeMenuNarrow.tsx
similarity index 94%
rename from src/pages/Search/SearchPageTabSelector.tsx
rename to src/pages/Search/SearchTypeMenuNarrow.tsx
index bb5b45b27ed8..40a25fe7ae26 100644
--- a/src/pages/Search/SearchPageTabSelector.tsx
+++ b/src/pages/Search/SearchTypeMenuNarrow.tsx
@@ -1,4 +1,4 @@
-// NOTE: This component has a static twin in SearchPageNarrow/StaticTabSelector.tsx
+// NOTE: This component has a static twin in SearchPageNarrow/StaticSearchTypeMenu.tsx
 // used for fast perceived performance. If you change the UI here, verify the
 // static version still looks visually identical.
 import {useNavigation} from '@react-navigation/native';
@@ -31,14 +31,14 @@ import ONYXKEYS from '@src/ONYXKEYS';
 import {accountIDSelector} from '@src/selectors/Session';
 import todosReportCountsSelector from '@src/selectors/Todos';
 
-type SearchPageTabSelectorProps = {
+type SearchTypeMenuNarrowProps = {
     /** Search query JSON */
     queryJSON?: SearchQueryJSON;
     /** Function to call when a tab is pressed */
     onTabPress?: () => void;
 };
 
-type SearchPageTabSelectorContentProps = {
+type SearchTypeMenuNarrowContentProps = {
     tabs: TabSelectorBaseItem[];
     activeTabKey: string;
     onActiveTabPress?: (key: string) => void;
@@ -48,7 +48,7 @@ type SearchPageTabSelectorContentProps = {
     children?: React.ReactNode;
 };
 
-function SearchPageTabSelectorContent({tabs, activeTabKey, onActiveTabPress, onTabPress: onTabPressContent, onLongTabPress, containerRef, children}: SearchPageTabSelectorContentProps) {
+function SearchTypeMenuNarrowContent({tabs, activeTabKey, onActiveTabPress, onTabPress: onTabPressContent, onLongTabPress, containerRef, children}: SearchTypeMenuNarrowContentProps) {
     const styles = useThemeStyles();
 
     return (
@@ -70,7 +70,7 @@ function SearchPageTabSelectorContent({tabs, activeTabKey, onActiveTabPress, onT
     );
 }
 
-function SearchPageTabSelector({queryJSON, onTabPress}: SearchPageTabSelectorProps) {
+function SearchTypeMenuNarrow({queryJSON, onTabPress}: SearchTypeMenuNarrowProps) {
     const {translate} = useLocalize();
     const {isOffline} = useNetwork();
     const navigation = useNavigation();
@@ -227,7 +227,7 @@ function SearchPageTabSelector({queryJSON, onTabPress}: SearchPageTabSelectorPro
     };
 
     return (
-        <SearchPageTabSelectorContent
+        <SearchTypeMenuNarrowContent
             tabs={tabItems}
             activeTabKey={activeKey}
             onActiveTabPress={handleActiveTabPress}
@@ -255,9 +255,10 @@ function SearchPageTabSelector({queryJSON, onTabPress}: SearchPageTabSelectorPro
                 shouldEnableNewFocusManagement
                 restoreFocusType={restoreFocusType}
             />
-        </SearchPageTabSelectorContent>
+        </SearchTypeMenuNarrowContent>
     );
 }
 
-export {SearchPageTabSelectorContent};
-export default SearchPageTabSelector;
+export {SearchTypeMenuNarrowContent};
+export default SearchTypeMenuNarrow;
+export type {SearchTypeMenuNarrowProps};
diff --git a/src/styles/index.ts b/src/styles/index.ts
index a56842f90a91..3c15a5d448b3 100644
--- a/src/styles/index.ts
+++ b/src/styles/index.ts
@@ -2558,15 +2558,6 @@ const staticStyles = (theme: ThemeColors) =>
         },
 
         searchResultsHeaderBar: {
-            display: 'flex',
-            height: variables.contentHeaderDesktopHeight,
-            zIndex: variables.popoverZIndex,
-            position: 'relative',
-            paddingLeft: 20,
-            paddingRight: 12,
-        },
-
-        newSearchResultsHeaderBar: {
             display: 'flex',
             position: 'relative',
         },
@@ -3492,12 +3483,6 @@ const staticStyles = (theme: ThemeColors) =>
         searchAutocompleteInputResults: {
             borderWidth: 1,
             borderColor: theme.bordersBold,
-            height: 54,
-        },
-
-        newSearchAutocompleteInputResults: {
-            borderWidth: 1,
-            borderColor: theme.border,
         },
 
         searchAutocompleteInputResultsFocused: {
@@ -3505,6 +3490,11 @@ const staticStyles = (theme: ThemeColors) =>
             borderColor: theme.success,
         },
 
+        searchInputSkeleton: {
+            height: 54,
+            justifyContent: 'center',
+        },
+
         searchTableHeaderActive: {
             fontWeight: FontUtils.fontWeight.bold,
         },
@@ -3517,10 +3507,6 @@ const staticStyles = (theme: ThemeColors) =>
             height: 16,
         },
 
-        searchListContentContainerStyles: {
-            paddingTop: variables.searchListContentMarginTop,
-        },
-
         searchListHeaderContainerStyle: {
             flexDirection: 'row',
             alignItems: 'center',
@@ -4909,38 +4895,36 @@ const staticStyles = (theme: ThemeColors) =>
             minHeight: variables.componentSizeSmall,
         },
 
+        searchBulkActionsButton: {
+            marginVertical: 3,
+        },
+
         filtersBar: {
             flexDirection: 'row',
             gap: 8,
             marginTop: 3,
         },
 
-        searchFiltersBarContainer: {
-            marginTop: 8,
-            flexDirection: 'row',
-            alignItems: 'center',
-        },
-
         searchActionsBarContainer: {
-            marginTop: 12,
             marginBottom: 16,
             paddingHorizontal: 20,
             flexDirection: 'row',
+            alignItems: 'flex-start',
             justifyContent: 'space-between',
             zIndex: 10,
         },
 
         searchActionsBarCreateButton: {
-            marginLeft: 'auto',
             alignSelf: 'flex-start',
         },
 
-        searchPageInputTouchableWrapper: {height: 32, width: 200},
-        searchPageInputPlaceholder: {
+        searchPageInputWideTouchableWrapper: {height: 32, width: 200},
+        searchPageInputWidePlaceholder: {
             // Extra 2 to account for the borders
             height: 34,
             width: 202,
         },
+        searchPageInputNarrowTouchableWrapper: {height: variables.componentSizeLarge},
 
         walletStaticIllustration: {
             width: 262,
@@ -6289,11 +6273,10 @@ const dynamicStyles = (theme: ThemeColors) =>
             const SEARCHBAR_HEIGHT = isSearchable ? 52 : 0;
             const SEARCHBAR_PADDING = isSearchable ? 12 : 0;
             const PADDING = 32;
-            const LIST_BOTTOM_PADDING = 12;
             const GAP = 8;
             const BUTTON_HEIGHT = 40;
             const LABEL_HEIGHT = 26;
-            const ESTIMATED_LIST_HEIGHT = itemCount * variables.optionRowHeightCompact + SEARCHBAR_HEIGHT + SEARCHBAR_PADDING + LIST_BOTTOM_PADDING;
+            const ESTIMATED_LIST_HEIGHT = itemCount * variables.optionRowHeightCompact + SEARCHBAR_HEIGHT + SEARCHBAR_PADDING;
             const popoverHeight = isInLandscapeMode ? CONST.MODAL_MAX_HEIGHT_TO_WINDOW_HEIGHT_RATIO_LANDSCAPE_MODE * windowHeight : CONST.POPOVER_DROPDOWN_MAX_HEIGHT;
             const MAX_HEIGHT = popoverHeight - (PADDING + GAP + BUTTON_HEIGHT) - (shouldShowLabel ? LABEL_HEIGHT + GAP : 0);
 
@@ -6305,20 +6288,27 @@ const dynamicStyles = (theme: ThemeColors) =>
             return {height};
         },
 
-        getUserSelectionListPopoverHeight: (itemCount: number, windowHeight: number, shouldUseNarrowLayout: boolean, isInLandscapeMode: boolean, isSearchable = true) => {
-            const BUTTON_HEIGHT = 40;
-            const SEARCHBAR_HEIGHT = isSearchable ? 50 : 0;
-            const SEARCHBAR_MARGIN = isSearchable ? 14 : 0;
-            const PADDING = 44 - (shouldUseNarrowLayout ? 32 : 0);
+        getCommonSelectionListPopoverHeight: (
+            itemCount: number,
+            itemHeight: number,
+            windowHeight: number,
+            shouldUseNarrowLayout: boolean,
+            isInLandscapeMode: boolean,
+            isSearchable = true,
+        ) => {
             const MODAL_PADDING = 32;
-            const ESTIMATED_LIST_HEIGHT = itemCount * variables.optionRowHeightCompact + SEARCHBAR_HEIGHT + SEARCHBAR_MARGIN + BUTTON_HEIGHT + PADDING;
+            const BUTTON_HEIGHT = 48;
+            const SEARCHBAR_HEIGHT = isSearchable ? 64 : 0;
+            const TITLE_HEIGHT = shouldUseNarrowLayout ? 34 : 0;
+            const PADDING = shouldUseNarrowLayout ? 0 : MODAL_PADDING;
+            const ESTIMATED_LIST_HEIGHT = itemCount * itemHeight + SEARCHBAR_HEIGHT + BUTTON_HEIGHT + TITLE_HEIGHT + PADDING;
 
-            const popoverHeight = isInLandscapeMode ? CONST.MODAL_MAX_HEIGHT_TO_WINDOW_HEIGHT_RATIO_LANDSCAPE_MODE * windowHeight : CONST.POPOVER_DROPDOWN_MAX_HEIGHT;
+            const popoverHeight = isInLandscapeMode ? CONST.MODAL_MAX_HEIGHT_TO_WINDOW_HEIGHT_RATIO_LANDSCAPE_MODE * windowHeight - MODAL_PADDING : CONST.POPOVER_DROPDOWN_MAX_HEIGHT;
 
             // Native platforms don't support maxHeight in the way thats expected, so lets manually set the height to either
             // the listHeight, the max height of the popover, or 90% of the window height, such that we never overflow the screen
             // and never expand over the max height
-            const height = Math.min(ESTIMATED_LIST_HEIGHT, popoverHeight - MODAL_PADDING, windowHeight * 0.9);
+            const height = Math.min(ESTIMATED_LIST_HEIGHT, popoverHeight, windowHeight * 0.9);
             const width = shouldUseNarrowLayout ? sizing.w100 : {width: CONST.POPOVER_DROPDOWN_WIDTH};
 
             return {height, ...width};
@@ -6369,6 +6359,10 @@ const dynamicStyles = (theme: ThemeColors) =>
 
         getEmptyStateCompanyCardsIllustration: (shouldUseNarrowLayout: boolean) => (shouldUseNarrowLayout ? {width: 680, height: 220} : {}),
 
+        searchListContentContainerStyles: (hasFilterBars: boolean) => ({
+            paddingTop: hasFilterBars ? variables.searchListContentWithFiltersMarginTop : variables.searchListContentMarginTop,
+        }),
+
         sectionMenuItem: (shouldUseNarrowLayout: boolean) => ({
             borderRadius: 8,
             paddingHorizontal: 16,
@@ -6376,6 +6370,15 @@ const dynamicStyles = (theme: ThemeColors) =>
             height: shouldUseNarrowLayout ? variables.sectionMenuItemHeight : variables.sectionMenuItemHeightCompact,
             alignItems: 'center',
         }),
+
+        searchActionsBar: (shouldUseNarrowLayout: boolean) => ({
+            alignItems: 'center',
+            height: shouldUseNarrowLayout ? variables.componentSizeNormal : variables.h28,
+            justifyContent: 'center',
+            width: shouldUseNarrowLayout ? variables.componentSizeNormal : variables.h28,
+            backgroundColor: shouldUseNarrowLayout ? undefined : theme.buttonDefaultBG,
+            borderRadius: 999,
+        }),
     }) satisfies DynamicStyles;
 
 // Styles that cannot be wrapped in StyleSheet.create because they eg. must be passed to 3rd party libraries as JS objects
diff --git a/src/styles/variables.ts b/src/styles/variables.ts
index 0270e262ab76..107d72dc07c3 100644
--- a/src/styles/variables.ts
+++ b/src/styles/variables.ts
@@ -338,12 +338,12 @@ export default {
     inlineImagePreviewMinSize: 64,
     inlineImagePreviewMaxSize: 148,
 
-    minimalTopBarOffset: -176,
+    minimalTopBarOffset: -126,
+    minimalTopBarWithFiltersOffset: -170,
     searchHeaderDefaultOffset: 0,
-    searchListContentMarginTop: 176,
+    searchListContentMarginTop: 126,
+    searchListContentWithFiltersMarginTop: 170,
     searchTopBarZIndex: 9,
-    searchTopBarHeight: 52,
-    searchRouterInputMargin: 52,
 
     scrollToNewTransactionOffset: 300,
 
diff --git a/src/types/form/SearchAdvancedFiltersForm.ts b/src/types/form/SearchAdvancedFiltersForm.ts
index 97b8b3b4192b..286e57745c84 100644
--- a/src/types/form/SearchAdvancedFiltersForm.ts
+++ b/src/types/form/SearchAdvancedFiltersForm.ts
@@ -200,6 +200,7 @@ const ALLOWED_TYPE_FILTERS: Record<string, Set<string>> = {
         FILTER_KEYS.DATE_NOT,
         FILTER_KEYS.DATE_AFTER,
         FILTER_KEYS.DATE_BEFORE,
+        FILTER_KEYS.DATE_RANGE,
         FILTER_KEYS.AMOUNT_EQUAL_TO,
         FILTER_KEYS.AMOUNT_NOT,
         FILTER_KEYS.AMOUNT_GREATER_THAN,
@@ -227,12 +228,14 @@ const ALLOWED_TYPE_FILTERS: Record<string, Set<string>> = {
         FILTER_KEYS.POSTED_BEFORE,
         FILTER_KEYS.POSTED_ON,
         FILTER_KEYS.POSTED_NOT,
+        FILTER_KEYS.POSTED_RANGE,
         FILTER_KEYS.WITHDRAWAL_TYPE,
         FILTER_KEYS.WITHDRAWAL_TYPE_NOT,
         FILTER_KEYS.WITHDRAWN_AFTER,
         FILTER_KEYS.WITHDRAWN_BEFORE,
         FILTER_KEYS.WITHDRAWN_ON,
         FILTER_KEYS.WITHDRAWN_NOT,
+        FILTER_KEYS.WITHDRAWN_RANGE,
         FILTER_KEYS.TAX_RATE,
         FILTER_KEYS.TAX_RATE_NOT,
         FILTER_KEYS.REIMBURSABLE,
@@ -245,18 +248,22 @@ const ALLOWED_TYPE_FILTERS: Record<string, Set<string>> = {
         FILTER_KEYS.SUBMITTED_NOT,
         FILTER_KEYS.SUBMITTED_AFTER,
         FILTER_KEYS.SUBMITTED_BEFORE,
+        FILTER_KEYS.SUBMITTED_RANGE,
         FILTER_KEYS.APPROVED_ON,
         FILTER_KEYS.APPROVED_NOT,
         FILTER_KEYS.APPROVED_AFTER,
         FILTER_KEYS.APPROVED_BEFORE,
+        FILTER_KEYS.APPROVED_RANGE,
         FILTER_KEYS.PAID_ON,
         FILTER_KEYS.PAID_NOT,
         FILTER_KEYS.PAID_AFTER,
         FILTER_KEYS.PAID_BEFORE,
+        FILTER_KEYS.PAID_RANGE,
         FILTER_KEYS.EXPORTED_ON,
         FILTER_KEYS.EXPORTED_NOT,
         FILTER_KEYS.EXPORTED_AFTER,
         FILTER_KEYS.EXPORTED_BEFORE,
+        FILTER_KEYS.EXPORTED_RANGE,
         FILTER_KEYS.EXPORTER,
         FILTER_KEYS.EXPORTER_NOT,
         FILTER_KEYS.EXPORTED_TO,
@@ -296,6 +303,7 @@ const ALLOWED_TYPE_FILTERS: Record<string, Set<string>> = {
         FILTER_KEYS.DATE_NOT,
         FILTER_KEYS.DATE_AFTER,
         FILTER_KEYS.DATE_BEFORE,
+        FILTER_KEYS.DATE_RANGE,
         FILTER_KEYS.TOTAL_EQUAL_TO,
         FILTER_KEYS.TOTAL_NOT,
         FILTER_KEYS.TOTAL_GREATER_THAN,
@@ -311,24 +319,29 @@ const ALLOWED_TYPE_FILTERS: Record<string, Set<string>> = {
         FILTER_KEYS.WITHDRAWN_BEFORE,
         FILTER_KEYS.WITHDRAWN_ON,
         FILTER_KEYS.WITHDRAWN_NOT,
+        FILTER_KEYS.WITHDRAWN_RANGE,
         FILTER_KEYS.REPORT_ID,
         FILTER_KEYS.REPORT_ID_NOT,
         FILTER_KEYS.SUBMITTED_ON,
         FILTER_KEYS.SUBMITTED_NOT,
         FILTER_KEYS.SUBMITTED_AFTER,
         FILTER_KEYS.SUBMITTED_BEFORE,
+        FILTER_KEYS.SUBMITTED_RANGE,
         FILTER_KEYS.APPROVED_AFTER,
         FILTER_KEYS.APPROVED_BEFORE,
         FILTER_KEYS.APPROVED_ON,
+        FILTER_KEYS.APPROVED_RANGE,
         FILTER_KEYS.APPROVED_NOT,
         FILTER_KEYS.PAID_AFTER,
         FILTER_KEYS.PAID_BEFORE,
         FILTER_KEYS.PAID_ON,
+        FILTER_KEYS.PAID_RANGE,
         FILTER_KEYS.PAID_NOT,
         FILTER_KEYS.EXPORTED_AFTER,
         FILTER_KEYS.EXPORTED_BEFORE,
         FILTER_KEYS.EXPORTED_ON,
         FILTER_KEYS.EXPORTED_NOT,
+        FILTER_KEYS.EXPORTED_RANGE,
         FILTER_KEYS.EXPORTER,
         FILTER_KEYS.EXPORTED_TO,
         FILTER_KEYS.EXPORTED_TO_NOT,
@@ -356,6 +369,7 @@ const ALLOWED_TYPE_FILTERS: Record<string, Set<string>> = {
         FILTER_KEYS.DATE_NOT,
         FILTER_KEYS.DATE_AFTER,
         FILTER_KEYS.DATE_BEFORE,
+        FILTER_KEYS.DATE_RANGE,
         FILTER_KEYS.AMOUNT_EQUAL_TO,
         FILTER_KEYS.AMOUNT_NOT,
         FILTER_KEYS.AMOUNT_GREATER_THAN,
@@ -382,12 +396,14 @@ const ALLOWED_TYPE_FILTERS: Record<string, Set<string>> = {
         FILTER_KEYS.POSTED_BEFORE,
         FILTER_KEYS.POSTED_ON,
         FILTER_KEYS.POSTED_NOT,
+        FILTER_KEYS.POSTED_RANGE,
         FILTER_KEYS.WITHDRAWAL_TYPE,
         FILTER_KEYS.WITHDRAWAL_TYPE_NOT,
         FILTER_KEYS.WITHDRAWN_AFTER,
         FILTER_KEYS.WITHDRAWN_BEFORE,
         FILTER_KEYS.WITHDRAWN_ON,
         FILTER_KEYS.WITHDRAWN_NOT,
+        FILTER_KEYS.WITHDRAWN_RANGE,
         FILTER_KEYS.TAX_RATE,
         FILTER_KEYS.TAX_RATE_NOT,
         FILTER_KEYS.REPORT_ID,
@@ -396,18 +412,22 @@ const ALLOWED_TYPE_FILTERS: Record<string, Set<string>> = {
         FILTER_KEYS.SUBMITTED_NOT,
         FILTER_KEYS.SUBMITTED_AFTER,
         FILTER_KEYS.SUBMITTED_BEFORE,
+        FILTER_KEYS.SUBMITTED_RANGE,
         FILTER_KEYS.APPROVED_ON,
         FILTER_KEYS.APPROVED_NOT,
         FILTER_KEYS.APPROVED_AFTER,
         FILTER_KEYS.APPROVED_BEFORE,
+        FILTER_KEYS.APPROVED_RANGE,
         FILTER_KEYS.PAID_ON,
         FILTER_KEYS.PAID_NOT,
         FILTER_KEYS.PAID_AFTER,
         FILTER_KEYS.PAID_BEFORE,
+        FILTER_KEYS.PAID_RANGE,
         FILTER_KEYS.EXPORTED_ON,
         FILTER_KEYS.EXPORTED_NOT,
         FILTER_KEYS.EXPORTED_AFTER,
         FILTER_KEYS.EXPORTED_BEFORE,
+        FILTER_KEYS.EXPORTED_RANGE,
         FILTER_KEYS.EXPORTER,
         FILTER_KEYS.EXPORTER_NOT,
         FILTER_KEYS.ACTION,
@@ -441,6 +461,7 @@ const ALLOWED_TYPE_FILTERS: Record<string, Set<string>> = {
         FILTER_KEYS.DATE_NOT,
         FILTER_KEYS.DATE_AFTER,
         FILTER_KEYS.DATE_BEFORE,
+        FILTER_KEYS.DATE_RANGE,
         FILTER_KEYS.AMOUNT_EQUAL_TO,
         FILTER_KEYS.AMOUNT_NOT,
         FILTER_KEYS.AMOUNT_GREATER_THAN,
@@ -468,6 +489,7 @@ const ALLOWED_TYPE_FILTERS: Record<string, Set<string>> = {
         FILTER_KEYS.POSTED_BEFORE,
         FILTER_KEYS.POSTED_ON,
         FILTER_KEYS.POSTED_NOT,
+        FILTER_KEYS.POSTED_RANGE,
         FILTER_KEYS.TAX_RATE,
         FILTER_KEYS.TAX_RATE_NOT,
         FILTER_KEYS.REPORT_ID,
@@ -476,18 +498,22 @@ const ALLOWED_TYPE_FILTERS: Record<string, Set<string>> = {
         FILTER_KEYS.SUBMITTED_NOT,
         FILTER_KEYS.SUBMITTED_AFTER,
         FILTER_KEYS.SUBMITTED_BEFORE,
+        FILTER_KEYS.SUBMITTED_RANGE,
         FILTER_KEYS.APPROVED_ON,
         FILTER_KEYS.APPROVED_NOT,
         FILTER_KEYS.APPROVED_AFTER,
         FILTER_KEYS.APPROVED_BEFORE,
+        FILTER_KEYS.APPROVED_RANGE,
         FILTER_KEYS.PAID_ON,
         FILTER_KEYS.PAID_NOT,
         FILTER_KEYS.PAID_AFTER,
         FILTER_KEYS.PAID_BEFORE,
+        FILTER_KEYS.PAID_RANGE,
         FILTER_KEYS.EXPORTED_ON,
         FILTER_KEYS.EXPORTED_NOT,
         FILTER_KEYS.EXPORTED_AFTER,
         FILTER_KEYS.EXPORTED_BEFORE,
+        FILTER_KEYS.EXPORTED_RANGE,
         FILTER_KEYS.EXPORTER,
         FILTER_KEYS.EXPORTER_NOT,
         FILTER_KEYS.EXPORTED_TO,
@@ -519,6 +545,7 @@ const ALLOWED_TYPE_FILTERS: Record<string, Set<string>> = {
         FILTER_KEYS.DATE_AFTER,
         FILTER_KEYS.DATE_BEFORE,
         FILTER_KEYS.DATE_ON,
+        FILTER_KEYS.DATE_RANGE,
         FILTER_KEYS.DATE_NOT,
         FILTER_KEYS.IS,
         FILTER_KEYS.IS_NOT,
@@ -543,6 +570,7 @@ const ALLOWED_TYPE_FILTERS: Record<string, Set<string>> = {
         FILTER_KEYS.DATE_NOT,
         FILTER_KEYS.DATE_AFTER,
         FILTER_KEYS.DATE_BEFORE,
+        FILTER_KEYS.DATE_RANGE,
     ]),
 };
 
diff --git a/tests/perf-test/useFilterFormValues.perf-test.tsx b/tests/perf-test/useFilterFormValues.perf-test.tsx
index 14d777864d28..b8db4246be39 100644
--- a/tests/perf-test/useFilterFormValues.perf-test.tsx
+++ b/tests/perf-test/useFilterFormValues.perf-test.tsx
@@ -3,7 +3,7 @@ import {View} from 'react-native';
 // eslint-disable-next-line no-restricted-imports
 import Onyx, {useOnyx} from 'react-native-onyx';
 import {measureFunction, measureRenders} from 'reassure';
-import {typeOptionsPoliciesSelector} from '@components/Search/SearchPageHeader/useSearchActionsBar';
+import {typeOptionsPoliciesSelector} from '@components/Search/SearchPageHeader/useSearchFiltersBar';
 import {advancedSearchPoliciesSelector} from '@hooks/useAdvancedSearchFilters';
 import {exportedToPoliciesSelector} from '@hooks/useExportedToFilterOptions';
 import {policiesSelector, policyCategoriesSelector, policyTagsSelector, reportsSelector} from '@hooks/useFilterFormValues';
diff --git a/tests/ui/CategoryListItemHeaderTest.tsx b/tests/ui/CategoryListItemHeaderTest.tsx
index f17d4d2f3480..765f486aebb5 100644
--- a/tests/ui/CategoryListItemHeaderTest.tsx
+++ b/tests/ui/CategoryListItemHeaderTest.tsx
@@ -36,7 +36,7 @@ const mockSearchStateContext = {
     lastSearchType: undefined,
     areAllMatchingItemsSelected: false,
     shouldShowSelectAllMatchingItems: false,
-    shouldShowActionsBarLoading: false,
+    shouldShowFiltersBarLoading: false,
     shouldUseLiveData: false,
     currentSimilarSearchHash: -1,
     suggestedSearches: {} as SearchStateContextValue['suggestedSearches'],
@@ -48,7 +48,7 @@ const mockSearchActionsContext = {
     setSelectedTransactions: jest.fn(),
     removeTransaction: jest.fn(),
     clearSelectedTransactions: jest.fn(),
-    setShouldShowActionsBarLoading: jest.fn(),
+    setShouldShowFiltersBarLoading: jest.fn(),
     setShouldShowSelectAllMatchingItems: jest.fn(),
     selectAllMatchingItems: jest.fn(),
     setShouldResetSearchQuery: jest.fn(),
diff --git a/tests/ui/MerchantListItemHeaderTest.tsx b/tests/ui/MerchantListItemHeaderTest.tsx
index d889847b8d8f..37ef6be627c3 100644
--- a/tests/ui/MerchantListItemHeaderTest.tsx
+++ b/tests/ui/MerchantListItemHeaderTest.tsx
@@ -36,7 +36,7 @@ const mockSearchStateContext = {
     lastSearchType: undefined,
     areAllMatchingItemsSelected: false,
     shouldShowSelectAllMatchingItems: false,
-    shouldShowActionsBarLoading: false,
+    shouldShowFiltersBarLoading: false,
     shouldUseLiveData: false,
     currentSimilarSearchHash: -1,
     suggestedSearches: {} as SearchStateContextValue['suggestedSearches'],
@@ -48,7 +48,7 @@ const mockSearchActionsContext = {
     setSelectedTransactions: jest.fn(),
     removeTransaction: jest.fn(),
     clearSelectedTransactions: jest.fn(),
-    setShouldShowActionsBarLoading: jest.fn(),
+    setShouldShowFiltersBarLoading: jest.fn(),
     setShouldShowSelectAllMatchingItems: jest.fn(),
     selectAllMatchingItems: jest.fn(),
     setShouldResetSearchQuery: jest.fn(),
diff --git a/tests/ui/MonthListItemHeaderTest.tsx b/tests/ui/MonthListItemHeaderTest.tsx
index 9661aa998407..034ea2520198 100644
--- a/tests/ui/MonthListItemHeaderTest.tsx
+++ b/tests/ui/MonthListItemHeaderTest.tsx
@@ -36,7 +36,7 @@ const mockSearchStateContext = {
     lastSearchType: undefined,
     areAllMatchingItemsSelected: false,
     shouldShowSelectAllMatchingItems: false,
-    shouldShowActionsBarLoading: false,
+    shouldShowFiltersBarLoading: false,
     shouldUseLiveData: false,
     currentSimilarSearchHash: -1,
     suggestedSearches: {} as SearchStateContextValue['suggestedSearches'],
@@ -48,7 +48,7 @@ const mockSearchActionsContext = {
     setSelectedTransactions: jest.fn(),
     removeTransaction: jest.fn(),
     clearSelectedTransactions: jest.fn(),
-    setShouldShowActionsBarLoading: jest.fn(),
+    setShouldShowFiltersBarLoading: jest.fn(),
     setShouldShowSelectAllMatchingItems: jest.fn(),
     selectAllMatchingItems: jest.fn(),
     setShouldResetSearchQuery: jest.fn(),
diff --git a/tests/ui/ReportListItemHeaderTest.tsx b/tests/ui/ReportListItemHeaderTest.tsx
index 7a0c203ebd11..adc20091ebe0 100644
--- a/tests/ui/ReportListItemHeaderTest.tsx
+++ b/tests/ui/ReportListItemHeaderTest.tsx
@@ -32,7 +32,7 @@ const mockSearchStateContext = {
     currentSearchResults: undefined,
     currentSelectedTransactionReportID: undefined,
     shouldShowSelectAllMatchingItems: false,
-    shouldShowActionsBarLoading: false,
+    shouldShowFiltersBarLoading: false,
     shouldUseLiveData: false,
     currentSimilarSearchHash: -1,
     suggestedSearches: {} as SearchStateContextValue['suggestedSearches'],
@@ -43,7 +43,7 @@ const mockSearchActionsContext = {
     setLastSearchType: jest.fn(),
     setCurrentSelectedTransactionReportID: jest.fn(),
     setSelectedTransactions: jest.fn(),
-    setShouldShowActionsBarLoading: jest.fn(),
+    setShouldShowFiltersBarLoading: jest.fn(),
     setShouldShowSelectAllMatchingItems: jest.fn(),
     selectAllMatchingItems: jest.fn(),
     setShouldResetSearchQuery: jest.fn(),
diff --git a/tests/ui/WeekListItemHeaderTest.tsx b/tests/ui/WeekListItemHeaderTest.tsx
index 718eab8b47a4..06836aa5e2a3 100644
--- a/tests/ui/WeekListItemHeaderTest.tsx
+++ b/tests/ui/WeekListItemHeaderTest.tsx
@@ -35,7 +35,7 @@ const mockSearchStateContext = {
     lastSearchType: undefined,
     areAllMatchingItemsSelected: false,
     shouldShowSelectAllMatchingItems: false,
-    shouldShowActionsBarLoading: false,
+    shouldShowFiltersBarLoading: false,
     shouldUseLiveData: false,
     currentSimilarSearchHash: -1,
     suggestedSearches: {} as SearchStateContextValue['suggestedSearches'],
@@ -47,7 +47,7 @@ const mockSearchActionsContext = {
     setSelectedTransactions: jest.fn(),
     removeTransaction: jest.fn(),
     clearSelectedTransactions: jest.fn(),
-    setShouldShowActionsBarLoading: jest.fn(),
+    setShouldShowFiltersBarLoading: jest.fn(),
     setShouldShowSelectAllMatchingItems: jest.fn(),
     selectAllMatchingItems: jest.fn(),
     setShouldResetSearchQuery: jest.fn(),
diff --git a/tests/ui/YearListItemHeaderTest.tsx b/tests/ui/YearListItemHeaderTest.tsx
index 43286c746381..970d6baddccf 100644
--- a/tests/ui/YearListItemHeaderTest.tsx
+++ b/tests/ui/YearListItemHeaderTest.tsx
@@ -36,7 +36,7 @@ const mockSearchStateContext = {
     lastSearchType: undefined,
     areAllMatchingItemsSelected: false,
     shouldShowSelectAllMatchingItems: false,
-    shouldShowActionsBarLoading: false,
+    shouldShowFiltersBarLoading: false,
     shouldUseLiveData: false,
     currentSimilarSearchHash: -1,
     suggestedSearches: {} as SearchStateContextValue['suggestedSearches'],
@@ -48,7 +48,7 @@ const mockSearchActionsContext = {
     setSelectedTransactions: jest.fn(),
     removeTransaction: jest.fn(),
     clearSelectedTransactions: jest.fn(),
-    setShouldShowActionsBarLoading: jest.fn(),
+    setShouldShowFiltersBarLoading: jest.fn(),
     setShouldShowSelectAllMatchingItems: jest.fn(),
     selectAllMatchingItems: jest.fn(),
     setShouldResetSearchQuery: jest.fn(),
diff --git a/tests/unit/hooks/useFilterFormValues.test.ts b/tests/unit/hooks/useFilterFormValues.test.ts
index 12c06bc2a178..3b4e3f6c5e07 100644
--- a/tests/unit/hooks/useFilterFormValues.test.ts
+++ b/tests/unit/hooks/useFilterFormValues.test.ts
@@ -1,5 +1,5 @@
 import type {OnyxCollection} from 'react-native-onyx';
-import {typeOptionsPoliciesSelector} from '@components/Search/SearchPageHeader/useSearchActionsBar';
+import {typeOptionsPoliciesSelector} from '@components/Search/SearchPageHeader/useSearchFiltersBar';
 import {advancedSearchPoliciesSelector} from '@hooks/useAdvancedSearchFilters';
 import {exportedToPoliciesSelector} from '@hooks/useExportedToFilterOptions';
 import {policiesSelector, policyCategoriesSelector, policyTagsSelector, reportsSelector} from '@hooks/useFilterFormValues';
diff --git a/tests/unit/hooks/useSearchFiltersBarHelpers.test.ts b/tests/unit/hooks/useSearchFiltersBarHelpers.test.ts
deleted file mode 100644
index f9ad4a1ed39f..000000000000
--- a/tests/unit/hooks/useSearchFiltersBarHelpers.test.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import type {LocalizedTranslate} from '@components/LocaleContextProvider';
-import {createDateDisplayValue, hasDateFilterValue} from '@components/Search/SearchPageHeader/useSearchFiltersBar';
-import CONST from '@src/CONST';
-
-describe('useSearchFiltersBar helpers', () => {
-    it('includes a readable range display value when range is set', () => {
-        const translate = ((path: string) => path) as unknown as LocalizedTranslate;
-
-        const [dateValues, displayValues] = createDateDisplayValue(
-            {
-                range: '2026-03-01,2026-03-31',
-            },
-            translate,
-        );
-
-        expect(dateValues[CONST.SEARCH.DATE_MODIFIERS.RANGE]).toBe('2026-03-01,2026-03-31');
-        expect(displayValues.length).toBe(1);
-    });
-
-    it('prefers range when on/after/before are empty for hidden date filter checks', () => {
-        const filterFormValues = {
-            postedRange: '2026-02-01,2026-02-28',
-        };
-
-        expect(hasDateFilterValue(filterFormValues, CONST.SEARCH.SYNTAX_FILTER_KEYS.POSTED)).toBe('2026-02-01,2026-02-28');
-    });
-});
