diff --git a/src/Mtlstats/Prompt.hs b/src/Mtlstats/Prompt.hs
index bc7e87f..0b02a25 100644
--- a/src/Mtlstats/Prompt.hs
+++ b/src/Mtlstats/Prompt.hs
@@ -227,7 +227,25 @@ selectGoaliePrompt
   -- ^ The callback to run (takes the index number of the goalie as
   -- input)
   -> Prompt
-selectGoaliePrompt = undefined
+selectGoaliePrompt pStr callback = selectPrompt SelectParams
+  { spPrompt       = pStr
+  , spSearchHeader = "Goalie select:"
+  , spSearch       = \sStr db -> goalieSearch sStr (db^.dbGoalies)
+  , spSearchExact  = \sStr db -> fst <$> goalieSearchExact sStr (db^.dbGoalies)
+  , spElemDesc     = goalieSummary
+  , spCallback     = callback
+  , spNotFound     = \sStr -> do
+    mode <- gets (^.progMode)
+    let
+      cgs = newCreateGoalieState
+        & cgsName .~ sStr
+        & cgsSuccessCallback .~ do
+          modify $ progMode .~ mode
+          index <- pred . length <$> gets (^.database.dbGoalies)
+          callback $ Just index
+        & cgsFailureCallback .~ modify (progMode .~ mode)
+    modify $ progMode .~ CreateGoalie cgs
+  }
 
 -- | Prompts for the player who scored the goal
 recordGoalPrompt
@@ -287,7 +305,7 @@ goalieNamePrompt = strPrompt "Goalie name: " $
 
 -- | Prompts for a goalie who played in the game
 selectGameGoaliePrompt :: Prompt
-selectGameGoaliePrompt = selectGoaliePrompt "Select goalie: " $
+selectGameGoaliePrompt = selectGoaliePrompt "Which goalie played this game: " $
   \case
     Nothing -> modify $ progMode.gameStateL.goaliesRecorded .~ True
     Just n  -> modify $ progMode.gameStateL.gameSelectedGoalie  ?~ n
diff --git a/src/Mtlstats/Types.hs b/src/Mtlstats/Types.hs
index 2c5b4a9..a74618a 100644
--- a/src/Mtlstats/Types.hs
+++ b/src/Mtlstats/Types.hs
@@ -149,7 +149,11 @@ module Mtlstats.Types (
   playerIsActive,
   -- ** PlayerStats Helpers
   psPoints,
-  addPlayerStats
+  addPlayerStats,
+  -- ** Goalie Helpers
+  goalieSearch,
+  goalieSearchExact,
+  goalieSummary
 ) where
 
 import Control.Monad.Trans.State (StateT)
@@ -830,3 +834,27 @@ addPlayerStats s1 s2 = newPlayerStats
   & psGoals   .~ s1^.psGoals + s2^.psGoals
   & psAssists .~ s1^.psAssists + s2^.psAssists
   & psPMin    .~ s1^.psPMin + s2^.psPMin
+
+-- | Searches a list of goalies
+goalieSearch
+  :: String
+  -- ^ The search string
+  -> [Goalie]
+  -- ^ The list to search
+  -> [(Int, Goalie)]
+  -- ^ The search results with their corresponding index numbers
+goalieSearch = undefined
+
+-- | Searches a list of goalies for an exact match
+goalieSearchExact
+  :: String
+  -- ^ The search string
+  -> [Goalie]
+  -- ^ The list to search
+  -> Maybe (Int, Goalie)
+  -- ^ The result with its index number
+goalieSearchExact = undefined
+
+-- | Provides a description string for a 'Goalie'
+goalieSummary :: Goalie -> String
+goalieSummary = undefined