diff --git a/packages/api/methods.ts b/packages/api/methods.ts
index 9770e9b75b344f46b1b46e57c40d2d7d1f04f551..06109bf8374bb20def85d4872d5ec85c84e3773e 100644
--- a/packages/api/methods.ts
+++ b/packages/api/methods.ts
@@ -165,6 +165,10 @@ export function deleteCategory(id, transferCategoryId?) {
   return send('api/category-delete', { id, transferCategoryId });
 }
 
+export function getCommonPayees() {
+  return send('api/common-payees-get');
+}
+
 export function getPayees() {
   return send('api/payees-get');
 }
diff --git a/packages/desktop-client/src/components/autocomplete/PayeeAutocomplete.tsx b/packages/desktop-client/src/components/autocomplete/PayeeAutocomplete.tsx
index ea3f58f197bfd17abb496677363e5587863e37b4..36343bc046a35d520955362556ac4d33101758b6 100644
--- a/packages/desktop-client/src/components/autocomplete/PayeeAutocomplete.tsx
+++ b/packages/desktop-client/src/components/autocomplete/PayeeAutocomplete.tsx
@@ -22,8 +22,8 @@ import {
 } from 'loot-core/src/types/models';
 
 import { useAccounts } from '../../hooks/useAccounts';
-import { usePayees } from '../../hooks/usePayees';
-import { SvgAdd } from '../../icons/v1';
+import { useCommonPayees, usePayees } from '../../hooks/usePayees';
+import { SvgAdd, SvgBookmark } from '../../icons/v1';
 import { useResponsive } from '../../ResponsiveProvider';
 import { type CSSProperties, theme, styles } from '../../style';
 import { Button } from '../common/Button';
@@ -39,11 +39,48 @@ import { ItemHeader } from './ItemHeader';
 
 type PayeeAutocompleteItem = PayeeEntity;
 
+const MAX_AUTO_SUGGESTIONS = 5;
+
 function getPayeeSuggestions(
+  commonPayees: PayeeAutocompleteItem[],
+  payees: PayeeAutocompleteItem[],
+): (PayeeAutocompleteItem & PayeeItemType)[] {
+  if (commonPayees?.length > 0) {
+    const favoritePayees = payees.filter(p => p.favorite);
+    let additionalCommonPayees: PayeeAutocompleteItem[] = [];
+    if (favoritePayees.length < MAX_AUTO_SUGGESTIONS) {
+      additionalCommonPayees = commonPayees
+        .filter(
+          p => !(p.favorite || favoritePayees.map(fp => fp.id).includes(p.id)),
+        )
+        .slice(0, MAX_AUTO_SUGGESTIONS - favoritePayees.length);
+    }
+    const frequentPayees: (PayeeAutocompleteItem & PayeeItemType)[] =
+      favoritePayees.concat(additionalCommonPayees).map(p => {
+        return { ...p, itemType: 'common_payee' };
+      });
+
+    const filteredPayees: (PayeeAutocompleteItem & PayeeItemType)[] = payees
+      .filter(p => !frequentPayees.find(fp => fp.id === p.id))
+      .map<PayeeAutocompleteItem & PayeeItemType>(p => {
+        return { ...p, itemType: determineItemType(p, false) };
+      });
+
+    return frequentPayees
+      .sort((a, b) => a.name.localeCompare(b.name))
+      .concat(filteredPayees);
+  }
+
+  return payees.map(p => {
+    return { ...p, itemType: determineItemType(p, false) };
+  });
+}
+
+function filterActivePayees(
   payees: PayeeAutocompleteItem[],
   focusTransferPayees: boolean,
   accounts: AccountEntity[],
-): PayeeAutocompleteItem[] {
+) {
   let activePayees = accounts ? getActivePayees(payees, accounts) : payees;
 
   if (focusTransferPayees && activePayees) {
@@ -70,7 +107,8 @@ function stripNew(value) {
 }
 
 type PayeeListProps = {
-  items: PayeeAutocompleteItem[];
+  items: (PayeeAutocompleteItem & PayeeItemType)[];
+  commonPayees: PayeeEntity[];
   getItemProps: (arg: {
     item: PayeeAutocompleteItem;
   }) => ComponentProps<typeof View>;
@@ -89,6 +127,25 @@ type PayeeListProps = {
   footer: ReactNode;
 };
 
+type ItemTypes = 'account' | 'payee' | 'common_payee';
+type PayeeItemType = {
+  itemType: ItemTypes;
+};
+
+function determineItemType(
+  item: PayeeAutocompleteItem,
+  isCommon: boolean,
+): ItemTypes {
+  if (item.transfer_acct) {
+    return 'account';
+  }
+  if (isCommon) {
+    return 'common_payee';
+  } else {
+    return 'payee';
+  }
+}
+
 function PayeeList({
   items,
   getItemProps,
@@ -133,16 +190,19 @@ function PayeeList({
           })}
 
         {items.map((item, idx) => {
-          const type = item.transfer_acct ? 'account' : 'payee';
+          const itemType = item.itemType;
           let title;
-          if (type === 'payee' && lastType !== type) {
+
+          if (itemType === 'common_payee' && lastType !== itemType) {
+            title = 'Suggested Payees';
+          } else if (itemType === 'payee' && lastType !== itemType) {
             title = 'Payees';
-          } else if (type === 'account' && lastType !== type) {
+          } else if (itemType === 'account' && lastType !== itemType) {
             title = 'Transfer To/From';
           }
           const showMoreMessage =
             idx === items.length - 1 && items.length > 100;
-          lastType = type;
+          lastType = itemType;
 
           return (
             <Fragment key={item.id}>
@@ -219,6 +279,7 @@ export function PayeeAutocomplete({
   payees,
   ...props
 }: PayeeAutocompleteProps) {
+  const commonPayees = useCommonPayees();
   const retrievedPayees = usePayees();
   if (!payees) {
     payees = retrievedPayees;
@@ -233,17 +294,21 @@ export function PayeeAutocomplete({
   const [rawPayee, setRawPayee] = useState('');
   const hasPayeeInput = !!rawPayee;
   const payeeSuggestions: PayeeAutocompleteItem[] = useMemo(() => {
-    const suggestions = getPayeeSuggestions(
-      payees,
+    const suggestions = getPayeeSuggestions(commonPayees, payees);
+    const filteredSuggestions = filterActivePayees(
+      suggestions,
       focusTransferPayees,
       accounts,
     );
 
     if (!hasPayeeInput) {
-      return suggestions;
+      return filteredSuggestions;
     }
-    return [{ id: 'new', name: '' }, ...suggestions];
-  }, [payees, focusTransferPayees, accounts, hasPayeeInput]);
+    filteredSuggestions.forEach(s => {
+      console.log(s.name + ' ' + s.id);
+    });
+    return [{ id: 'new', favorite: false, name: '' }, ...filteredSuggestions];
+  }, [commonPayees, payees, focusTransferPayees, accounts, hasPayeeInput]);
 
   const dispatch = useDispatch();
 
@@ -356,6 +421,7 @@ export function PayeeAutocomplete({
       renderItems={(items, getItemProps, highlightedIndex, inputValue) => (
         <PayeeList
           items={items}
+          commonPayees={commonPayees}
           getItemProps={getItemProps}
           highlightedIndex={highlightedIndex}
           inputValue={inputValue}
@@ -489,7 +555,19 @@ function PayeeItem({
         borderTop: `1px solid ${theme.pillBorder}`,
       }
     : {};
-
+  const iconSize = isNarrowWidth ? 14 : 8;
+  let paddingLeftOverFromIcon = 20;
+  let itemIcon = undefined;
+  if (item.favorite) {
+    itemIcon = (
+      <SvgBookmark
+        width={iconSize}
+        height={iconSize}
+        style={{ marginRight: 5, display: 'inline-block' }}
+      />
+    );
+    paddingLeftOverFromIcon -= iconSize + 5;
+  }
   return (
     <div
       // Downshift calls `setTimeout(..., 250)` in the `onMouseMove`
@@ -524,7 +602,7 @@ function PayeeItem({
             : theme.menuAutoCompleteItemText,
           borderRadius: embedded ? 4 : 0,
           padding: 4,
-          paddingLeft: 20,
+          paddingLeft: paddingLeftOverFromIcon,
           ...narrowStyle,
         },
       ])}`}
@@ -532,7 +610,10 @@ function PayeeItem({
       data-highlighted={highlighted || undefined}
       {...props}
     >
-      <TextOneLine>{item.name}</TextOneLine>
+      <TextOneLine>
+        {itemIcon}
+        {item.name}
+      </TextOneLine>
     </div>
   );
 }
diff --git a/packages/desktop-client/src/components/payees/ManagePayees.jsx b/packages/desktop-client/src/components/payees/ManagePayees.jsx
index 83f5bada3e331d9c6d7e20d324908c61bc2da3bf..1ec7fd9b545cb6632254be16a4198757bd0d3db0 100644
--- a/packages/desktop-client/src/components/payees/ManagePayees.jsx
+++ b/packages/desktop-client/src/components/payees/ManagePayees.jsx
@@ -198,6 +198,22 @@ export const ManagePayees = forwardRef(
       selected.dispatch({ type: 'select-none' });
     }
 
+    function onFavorite() {
+      const allFavorited = [...selected.items]
+        .map(id => payeesById[id].favorite)
+        .every(f => f === 1);
+      if (allFavorited) {
+        onBatchChange({
+          updated: [...selected.items].map(id => ({ id, favorite: 0 })),
+        });
+      } else {
+        onBatchChange({
+          updated: [...selected.items].map(id => ({ id, favorite: 1 })),
+        });
+      }
+      selected.dispatch({ type: 'select-none' });
+    }
+
     async function onMerge() {
       const ids = [...selected.items];
       await props.onMerge(ids);
@@ -262,6 +278,7 @@ export const ManagePayees = forwardRef(
                 onClose={() => setMenuOpen(false)}
                 onDelete={onDelete}
                 onMerge={onMerge}
+                onFavorite={onFavorite}
               />
             </Popover>
           </View>
diff --git a/packages/desktop-client/src/components/payees/PayeeMenu.tsx b/packages/desktop-client/src/components/payees/PayeeMenu.tsx
index 380f13ccaa57324b171a0beffc0b25c865a5c5ff..a2c3c12c66e91ef815055d393e52c90d4b2ab750 100644
--- a/packages/desktop-client/src/components/payees/PayeeMenu.tsx
+++ b/packages/desktop-client/src/components/payees/PayeeMenu.tsx
@@ -1,6 +1,7 @@
 import { type PayeeEntity } from 'loot-core/src/types/models';
 
 import { SvgDelete, SvgMerge } from '../../icons/v0';
+import { SvgBookmark } from '../../icons/v1';
 import { theme } from '../../style';
 import { Menu } from '../common/Menu';
 import { View } from '../common/View';
@@ -10,6 +11,7 @@ type PayeeMenuProps = {
   selectedPayees: Set<PayeeEntity['id']>;
   onDelete: () => void;
   onMerge: () => Promise<void>;
+  onFavorite: () => Promise<void>;
   onClose: () => void;
 };
 
@@ -18,6 +20,7 @@ export function PayeeMenu({
   selectedPayees,
   onDelete,
   onMerge,
+  onFavorite,
   onClose,
 }: PayeeMenuProps) {
   // Transfer accounts are never editable
@@ -36,6 +39,9 @@ export function PayeeMenu({
           case 'merge':
             onMerge();
             break;
+          case 'favorite':
+            onFavorite();
+            break;
           default:
         }
       }}
@@ -61,6 +67,13 @@ export function PayeeMenu({
           text: 'Delete',
           disabled: isDisabled,
         },
+        {
+          icon: SvgBookmark,
+          iconSize: 9,
+          name: 'favorite',
+          text: 'Favorite',
+          disabled: isDisabled,
+        },
         {
           icon: SvgMerge,
           iconSize: 9,
diff --git a/packages/desktop-client/src/components/payees/PayeeTableRow.tsx b/packages/desktop-client/src/components/payees/PayeeTableRow.tsx
index b7d2920ad11328d1c55cb251973bdc06d5208e05..657385c48734a8723c74102287a4446063bce852 100644
--- a/packages/desktop-client/src/components/payees/PayeeTableRow.tsx
+++ b/packages/desktop-client/src/components/payees/PayeeTableRow.tsx
@@ -4,10 +4,17 @@ import { memo } from 'react';
 import { type PayeeEntity } from 'loot-core/src/types/models';
 
 import { useSelectedDispatch } from '../../hooks/useSelected';
-import { SvgArrowThinRight } from '../../icons/v1';
+import { SvgArrowThinRight, SvgBookmark } from '../../icons/v1';
 import { type CSSProperties, theme } from '../../style';
 import { Text } from '../common/Text';
-import { Cell, CellButton, InputCell, Row, SelectCell } from '../table';
+import {
+  Cell,
+  CellButton,
+  CustomCell,
+  InputCell,
+  Row,
+  SelectCell,
+} from '../table';
 
 type RuleButtonProps = {
   ruleCount: number;
@@ -52,7 +59,7 @@ function RuleButton({ ruleCount, focused, onEdit, onClick }: RuleButtonProps) {
   );
 }
 
-type EditablePayeeFields = keyof Pick<PayeeEntity, 'name'>;
+type EditablePayeeFields = keyof Pick<PayeeEntity, 'name' | 'favorite'>;
 
 type PayeeTableRowProps = {
   payee: PayeeEntity;
@@ -126,6 +133,21 @@ export const PayeeTableRow = memo(
             dispatchSelected({ type: 'select', id: payee.id, event: e });
           }}
         />
+        <CustomCell
+          width={10}
+          exposed={!payee.transfer_acct}
+          onBlur={() => {}}
+          onUpdate={() => {}}
+          onClick={() => {}}
+        >
+          {() => {
+            if (payee.favorite) {
+              return <SvgBookmark />;
+            } else {
+              return;
+            }
+          }}
+        </CustomCell>
         <InputCell
           value={(payee.transfer_acct ? 'Transfer: ' : '') + payee.name}
           valueStyle={
diff --git a/packages/desktop-client/src/components/transactions/TransactionsTable.test.jsx b/packages/desktop-client/src/components/transactions/TransactionsTable.test.jsx
index e56ec8e06e89409c7a6da1781e608884190f7bfe..9debc52197d4630a0916c3047b64194541cb20bc 100644
--- a/packages/desktop-client/src/components/transactions/TransactionsTable.test.jsx
+++ b/packages/desktop-client/src/components/transactions/TransactionsTable.test.jsx
@@ -32,8 +32,8 @@ vi.mock('../../hooks/useFeatureFlag', () => vi.fn().mockReturnValue(false));
 
 const accounts = [generateAccount('Bank of America')];
 const payees = [
-  { id: 'payed-to', name: 'Payed To' },
-  { id: 'guy', name: 'This guy on the side of the road' },
+  { id: 'payed-to', favorite: true, name: 'Payed To' },
+  { id: 'guy', favorite: false, name: 'This guy on the side of the road' },
 ];
 const categoryGroups = generateCategoryGroups([
   {
@@ -130,6 +130,7 @@ function LiveTransactionTable(props) {
                 {...props}
                 transactions={transactions}
                 loadMoreTransactions={() => {}}
+                commonPayees={[]}
                 payees={payees}
                 addNotification={n => console.log(n)}
                 onSave={onSave}
diff --git a/packages/desktop-client/src/hooks/usePayees.ts b/packages/desktop-client/src/hooks/usePayees.ts
index cf51d6b9a7f1baf5977bdae3943596c5bbca3564..cffa9df0673367d839926aa103b32769bd1eedb3 100644
--- a/packages/desktop-client/src/hooks/usePayees.ts
+++ b/packages/desktop-client/src/hooks/usePayees.ts
@@ -1,9 +1,24 @@
 import { useEffect } from 'react';
 import { useDispatch, useSelector } from 'react-redux';
 
-import { getPayees } from 'loot-core/src/client/actions';
+import { getCommonPayees, getPayees } from 'loot-core/src/client/actions';
 import { type State } from 'loot-core/src/client/state-types';
 
+export function useCommonPayees() {
+  const dispatch = useDispatch();
+  const commonPayeesLoaded = useSelector(
+    (state: State) => state.queries.commonPayeesLoaded,
+  );
+
+  useEffect(() => {
+    if (!commonPayeesLoaded) {
+      dispatch(getCommonPayees());
+    }
+  }, []);
+
+  return useSelector(state => state.queries.commonPayees);
+}
+
 export function usePayees() {
   const dispatch = useDispatch();
   const payeesLoaded = useSelector(
diff --git a/packages/loot-core/migrations/1720664867241_add_payee_favorite.sql b/packages/loot-core/migrations/1720664867241_add_payee_favorite.sql
new file mode 100644
index 0000000000000000000000000000000000000000..0819ba0039e0a459f3b4230c037a4ce183effd3a
--- /dev/null
+++ b/packages/loot-core/migrations/1720664867241_add_payee_favorite.sql
@@ -0,0 +1,5 @@
+BEGIN TRANSACTION;
+
+ALTER TABLE payees ADD COLUMN favorite INTEGER DEFAULT 0 DEFAULT FALSE;
+
+COMMIT;
\ No newline at end of file
diff --git a/packages/loot-core/src/client/actions/queries.ts b/packages/loot-core/src/client/actions/queries.ts
index badb36f37cbe53bccb239025f51af356854a3fce..6e4c2111e8c8107ddc23b128a193f1839cf833f3 100644
--- a/packages/loot-core/src/client/actions/queries.ts
+++ b/packages/loot-core/src/client/actions/queries.ts
@@ -246,6 +246,17 @@ export function getPayees() {
   };
 }
 
+export function getCommonPayees() {
+  return async (dispatch: Dispatch) => {
+    const payees = await send('common-payees-get');
+    dispatch({
+      type: constants.LOAD_COMMON_PAYEES,
+      payees,
+    });
+    return payees;
+  };
+}
+
 export function initiallyLoadPayees() {
   return async (dispatch: Dispatch, getState: GetState) => {
     if (getState().queries.payees.length === 0) {
diff --git a/packages/loot-core/src/client/constants.ts b/packages/loot-core/src/client/constants.ts
index 03f0e5786307e1f4b9274d71658f5de67026d13b..272ca0a9e2720e331118b10e3b9b02616c08b598 100644
--- a/packages/loot-core/src/client/constants.ts
+++ b/packages/loot-core/src/client/constants.ts
@@ -5,6 +5,7 @@ export const MARK_ACCOUNT_READ = 'MARK_ACCOUNT_READ';
 export const LOAD_ACCOUNTS = 'LOAD_ACCOUNTS';
 export const UPDATE_ACCOUNT = 'UPDATE_ACCOUNT';
 export const LOAD_CATEGORIES = 'LOAD_CATEGORIES';
+export const LOAD_COMMON_PAYEES = 'LOAD_COMMON_PAYEES';
 export const LOAD_PAYEES = 'LOAD_PAYEES';
 export const SET_PREFS = 'SET_PREFS';
 export const MERGE_LOCAL_PREFS = 'MERGE_LOCAL_PREFS';
diff --git a/packages/loot-core/src/client/reducers/queries.ts b/packages/loot-core/src/client/reducers/queries.ts
index 84528cc12b8b2b7e568d8d1a0370ff981c519769..eb858f82491ab23c0a982bffa834da46f5a7c0e9 100644
--- a/packages/loot-core/src/client/reducers/queries.ts
+++ b/packages/loot-core/src/client/reducers/queries.ts
@@ -19,6 +19,8 @@ const initialState: QueriesState = {
     list: [],
   },
   categoriesLoaded: false,
+  commonPayees: [],
+  commonPayeesLoaded: false,
   payees: [],
   payeesLoaded: false,
   earliestTransaction: null,
@@ -84,6 +86,12 @@ export function update(state = initialState, action: Action): QueriesState {
         categories: action.categories,
         categoriesLoaded: true,
       };
+    case constants.LOAD_COMMON_PAYEES:
+      return {
+        ...state,
+        commonPayees: action.payees,
+        commonPayeesLoaded: true,
+      };
     case constants.LOAD_PAYEES:
       return {
         ...state,
diff --git a/packages/loot-core/src/client/state-types/queries.d.ts b/packages/loot-core/src/client/state-types/queries.d.ts
index 0d511868b39da8e2d1eeab25420dc2760fb7b26b..2b5138f41675357b8832042634a79866495d8857 100644
--- a/packages/loot-core/src/client/state-types/queries.d.ts
+++ b/packages/loot-core/src/client/state-types/queries.d.ts
@@ -11,6 +11,8 @@ export type QueriesState = {
   accountsLoaded: boolean;
   categories: Awaited<ReturnType<Handlers['get-categories']>>;
   categoriesLoaded: boolean;
+  commonPayeesLoaded: boolean;
+  commonPayees: Awaited<ReturnType<Handlers['common-payees-get']>>;
   payees: Awaited<ReturnType<Handlers['payees-get']>>;
   payeesLoaded: boolean;
   earliestTransaction: unknown | null;
@@ -58,6 +60,11 @@ type LoadPayeesAction = {
   payees: State['payees'];
 };
 
+type LoadCommonPayeesAction = {
+  type: typeof constants.LOAD_COMMON_PAYEES;
+  payees: State['common_payees'];
+};
+
 export type QueriesActions =
   | SetNewTransactionsAction
   | UpdateNewTransactionsAction
@@ -66,4 +73,5 @@ export type QueriesActions =
   | LoadAccountsAction
   | UpdateAccountAction
   | LoadCategoriesAction
+  | LoadCommonPayeesAction
   | LoadPayeesAction;
diff --git a/packages/loot-core/src/server/api.ts b/packages/loot-core/src/server/api.ts
index e99624982a956531c52a93ad2650978a73aff52a..84e53840501a301f6f3a253a226e26067874ea1e 100644
--- a/packages/loot-core/src/server/api.ts
+++ b/packages/loot-core/src/server/api.ts
@@ -630,6 +630,12 @@ handlers['api/category-delete'] = withMutation(async function ({
   });
 });
 
+handlers['api/common-payees-get'] = async function () {
+  checkFileOpen();
+  const payees = await handlers['common-payees-get']();
+  return payees.map(payeeModel.toExternal);
+};
+
 handlers['api/payees-get'] = async function () {
   checkFileOpen();
   const payees = await handlers['payees-get']();
diff --git a/packages/loot-core/src/server/aql/schema/index.ts b/packages/loot-core/src/server/aql/schema/index.ts
index 490d243b54e085edd3650a1a77a0f5f8d0a08a4e..5fa4f519aa0909783175ac516647c08252c170ca 100644
--- a/packages/loot-core/src/server/aql/schema/index.ts
+++ b/packages/loot-core/src/server/aql/schema/index.ts
@@ -61,6 +61,7 @@ export const schema = {
     name: f('string', { required: true }),
     transfer_acct: f('id', { ref: 'accounts' }),
     tombstone: f('boolean'),
+    favorite: f('boolean'),
   },
   accounts: {
     id: f('id'),
diff --git a/packages/loot-core/src/server/db/index.ts b/packages/loot-core/src/server/db/index.ts
index a578b408c0dda9a0ff4854559da3d402846125c0..46fa73423619747b02e144f3dbbf36f723cad5cf 100644
--- a/packages/loot-core/src/server/db/index.ts
+++ b/packages/loot-core/src/server/db/index.ts
@@ -536,6 +536,25 @@ export function getPayees() {
   `);
 }
 
+export function getCommonPayees() {
+  const threeMonthsAgo = '20240201';
+  const limit = 10;
+  return all(`
+    SELECT 	p.id as id, p.name as name, p.favorite as favorite, 
+      p.category as category, TRUE as common, NULL as transfer_acct,
+    count(*) as c, 
+    max(t.date) as latest
+    FROM payees p
+    LEFT JOIN v_transactions t on t.payee == p.id
+    WHERE LENGTH(p.name) > 0
+    GROUP BY p.id
+    HAVING latest > ${threeMonthsAgo}
+    ORDER BY c DESC ,p.transfer_acct IS NULL DESC, p.name 
+    COLLATE NOCASE
+    LIMIT ${limit}
+  `);
+}
+
 export function syncGetOrphanedPayees() {
   return all(`
   SELECT p.id FROM payees p
diff --git a/packages/loot-core/src/server/main.ts b/packages/loot-core/src/server/main.ts
index f6c98e88b4ff5ab2a4700f2be9a7bf1aae66b401..10441970929d6a82074b99554d8fde80679772ae 100644
--- a/packages/loot-core/src/server/main.ts
+++ b/packages/loot-core/src/server/main.ts
@@ -446,6 +446,10 @@ handlers['payee-create'] = mutator(async function ({ name }) {
   });
 });
 
+handlers['common-payees-get'] = async function () {
+  return db.getCommonPayees();
+};
+
 handlers['payees-get'] = async function () {
   return db.getPayees();
 };
diff --git a/packages/loot-core/src/types/api-handlers.d.ts b/packages/loot-core/src/types/api-handlers.d.ts
index db221089c76acee588d6c54f978fe646c9c9027b..2b9bd088081dac7802b24b069489a6d5436124e9 100644
--- a/packages/loot-core/src/types/api-handlers.d.ts
+++ b/packages/loot-core/src/types/api-handlers.d.ts
@@ -148,6 +148,8 @@ export interface ApiHandlers {
 
   'api/payees-get': () => Promise<APIPayeeEntity[]>;
 
+  'api/common-payees-get': () => Promise<APIPayeeEntity[]>;
+
   'api/payee-create': (arg: { payee }) => Promise<string>;
 
   'api/payee-update': (arg: { id; fields }) => Promise<unknown>;
diff --git a/packages/loot-core/src/types/models/payee.d.ts b/packages/loot-core/src/types/models/payee.d.ts
index 5d84bc16bcf5147f9afdc13f899157765bdadeb2..1d95d00c93d7aaab9fb34360e663845b099bf298 100644
--- a/packages/loot-core/src/types/models/payee.d.ts
+++ b/packages/loot-core/src/types/models/payee.d.ts
@@ -2,6 +2,7 @@ export interface NewPayeeEntity {
   id?: string;
   name: string;
   transfer_acct?: string;
+  favorite?: boolean;
   tombstone?: boolean;
 }
 
diff --git a/packages/loot-core/src/types/server-handlers.d.ts b/packages/loot-core/src/types/server-handlers.d.ts
index 9e3b91fb60fe9b4836ad592197255fc2437cab5d..3bea94101c1133982257367610942d7cee0ed20f 100644
--- a/packages/loot-core/src/types/server-handlers.d.ts
+++ b/packages/loot-core/src/types/server-handlers.d.ts
@@ -105,6 +105,8 @@ export interface ServerHandlers {
 
   'payee-create': (arg: { name }) => Promise<string>;
 
+  'common-payees-get': () => Promise<PayeeEntity[]>;
+
   'payees-get': () => Promise<PayeeEntity[]>;
 
   'payees-get-rule-counts': () => Promise<unknown>;
diff --git a/upcoming-release-notes/2814.md b/upcoming-release-notes/2814.md
new file mode 100644
index 0000000000000000000000000000000000000000..1057298df2b71107eaa150468f2b5140599a5f0d
--- /dev/null
+++ b/upcoming-release-notes/2814.md
@@ -0,0 +1,6 @@
+---
+category: Enhancements
+authors: [qedi-r]
+---
+
+Shows favourite and up to the top 5 most frequently used payees in the payee dropdown menu in a section at the top.