diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,10 @@
 
 `pagure-hs` uses [PVP Versioning](https://pvp.haskell.org).
 
+## 0.2.1 (2024-05-06)
+- add pagureGroupRepos
+- export getRepos helper
+
 ## 0.2.0 (2024-05-06)
 - queryPagureCountPaged replaces queryPagurePaged
 - warnings now go to stderr
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 Pagure REST client library.
 
 [Pagure](https://pagure.io/pagure) is an opensource git forge
-(ie somewhat like gitlab).
+(ie somewhat like Gitlab).
 
 A primary instance is https://pagure.io,
 but pagure is also used to host all current Fedora packages
diff --git a/pagure.cabal b/pagure.cabal
--- a/pagure.cabal
+++ b/pagure.cabal
@@ -1,8 +1,8 @@
 cabal-version:       1.22
 name:                pagure
-version:             0.2.0
+version:             0.2.1
 synopsis:            Pagure REST client library
-description:         A library for querying Pagure gitforges via REST.
+description:         A library for querying a Pagure gitforge via REST
 homepage:            https://github.com/juhp/pagure-hs
 bug-reports:         https://github.com/juhp/pagure-hs/issues
 license:             GPL-2
diff --git a/src/Fedora/Pagure.hs b/src/Fedora/Pagure.hs
--- a/src/Fedora/Pagure.hs
+++ b/src/Fedora/Pagure.hs
@@ -1,8 +1,8 @@
 {-# LANGUAGE CPP, OverloadedStrings #-}
 
 {- |
-Copyright: (c) 2020 Jens Petersen
-SPDX-License-Identifier: GPL-2.0-only
+Copyright: (c) 2020-2024 Jens Petersen
+SPDX-License-Identifier: GPL-2.0-or-later
 Maintainer: Jens Petersen <petersen@redhat.com>
 
 Pagure REST client library
@@ -23,6 +23,7 @@
   , pagureUserRepos
   , pagureListGroups
   , pagureGroupInfo
+  , pagureGroupRepos
   , pagureProjectGitURLs
   , queryPagure
   , queryPagureSingle
@@ -35,6 +36,7 @@
   , QueryItem
   , lookupKey
   , lookupKey'
+  , getRepos
   ) where
 
 import Control.Monad
@@ -266,8 +268,6 @@
     nextPage p =
       queryPagure server path (params ++ makeKey "per_page" "100" ++ makeKey paging (show p))
 
--- FIXME treat these as special cases/filters of userinfo
-
 -- | list user's repos
 pagureUserRepos :: String -- ^ server
                 -> String -- ^ user
@@ -286,16 +286,31 @@
   pages <- queryPagurePaged server path [] ("forks_pagination", "forkpage")
   return $ concatMap (getRepos "forks") pages
 
-getRepos :: Text -> Object -> [Text]
+-- | list group's repos
+pagureGroupRepos :: String -- ^ server
+                 -> Bool -- ^ count
+                 -> String -- ^ group
+                 -> IO [Text]
+pagureGroupRepos server count group = do
+  let path = "group" +/+ group
+      params = makeKey "projects" "1"
+  pages <- queryPagureCountPaged server count path params ("pagination", "page")
+  return $ concatMap (getRepos "projects") pages
+
+-- | helper to extract fullnames of repos
+getRepos :: Text   -- ^ field (eg "repos")
+         -> Object -- ^ results page
+         -> [Text]
 getRepos field obj =
   map (lookupKey' "fullname") $ lookupKey' field obj
 
+-- | Get count (with queryPagureCount) or full results (queryPagurePaged)
 queryPagureCountPaged :: String -- ^ server
-           -> Bool   -- ^ count
-           -> String -- ^ api path
-           -> Query  -- ^ parameters
-           -> (String,String) -- ^ pagination and paging names
-           -> IO [Object]
+                      -> Bool   -- ^ count
+                      -> String -- ^ api path
+                      -> Query  -- ^ parameters
+                      -> (String,String) -- ^ pagination and paging names
+                      -> IO [Object]
 queryPagureCountPaged server count path params (pagination,paging) =
   if count
     then do
