diff --git a/src/myaktion/go.mod b/src/myaktion/go.mod
index 7f521935d32fa41fd590ecb0a169b1c95f8830f8..0c7df4320f2d34b20670ca39544cd5b3902e2a78 100644
--- a/src/myaktion/go.mod
+++ b/src/myaktion/go.mod
@@ -2,4 +2,9 @@ module gitlab.reutlingen-university.de/yesildas/myaktion-go/src/myaktion
 
 go 1.20
 
-require github.com/gorilla/mux v1.8.0
+require (
+	github.com/gorilla/mux v1.8.0
+	github.com/sirupsen/logrus v1.9.0
+)
+
+require golang.org/x/sys v0.7.0 // indirect
diff --git a/src/myaktion/go.sum b/src/myaktion/go.sum
index 535028803d222b0e4e9174f56529c0ed9fece4e0..ee6c613ad34b39d2dfedbbacf0317974e70f00e9 100644
--- a/src/myaktion/go.sum
+++ b/src/myaktion/go.sum
@@ -1,2 +1,18 @@
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
 github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
+github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU=
+golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/src/myaktion/handler/campaign.go b/src/myaktion/handler/campaign.go
index 7d136c51527cccb3e3e9f88d18fb1d3fcdb26478..2689fbf456bbb301fed7f27a6a79012fdd00f804 100644
--- a/src/myaktion/handler/campaign.go
+++ b/src/myaktion/handler/campaign.go
@@ -9,6 +9,20 @@ import (
 	"gitlab.reutlingen-university.de/yesildas/myaktion-go/src/myaktion/service"
 )
 
+func GetCampaigns(w http.ResponseWriter, _ *http.Request) {
+	campaigns, err := service.GetCampaigns()
+	if err != nil {
+		log.Printf("Error calling service GetCampaigns: %v", err)
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+	w.Header().Set("Content-Type", "application/json")
+	if err := json.NewEncoder(w).Encode(campaigns); err != nil {
+		log.Printf("Failure encoding value to JSON: %v", err)
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+	}
+}
+
 func CreateCampaign(w http.ResponseWriter, r *http.Request) {
 	var campaign model.Campaign
 	err := json.NewDecoder(r.Body).Decode(&campaign)
diff --git a/src/myaktion/main.go b/src/myaktion/main.go
index 3e31ead86a5bc3d69ab259e74e774682a85d50f9..db230eb20e5e3515883db5996ce97749d44ca456 100644
--- a/src/myaktion/main.go
+++ b/src/myaktion/main.go
@@ -2,14 +2,28 @@ package main
 
 import (
 	"fmt"
-	"log"
 	"net/http"
+	"os"
 
 	"github.com/gorilla/mux"
+	log "github.com/sirupsen/logrus"
 	"gitlab.reutlingen-university.de/yesildas/myaktion-go/src/myaktion/handler"
 	"gitlab.reutlingen-university.de/yesildas/myaktion-go/src/myaktion/model"
 )
 
+func init() {
+	// init logger
+	log.SetFormatter(&log.TextFormatter{})
+	log.SetReportCaller(true)
+	level, err := log.ParseLevel(os.Getenv("LOG_LEVEL"))
+	if err != nil {
+		log.Info("Log level not specified, set default to: INFO")
+		log.SetLevel(log.InfoLevel)
+		return
+	}
+	log.SetLevel(level)
+}
+
 func main() {
 	campaign := model.Campaign{
 		Name:               "Spenden für eine bessere Note",
@@ -40,6 +54,7 @@ func main() {
 	log.Printf("Starting MyAktion API server on port %v.\n", port)
 	router := mux.NewRouter()
 	router.HandleFunc("/health", handler.Health).Methods("GET")
+	router.HandleFunc("/campaigns", handler.GetCampaigns).Methods("GET")
 	router.HandleFunc("/campaign", handler.CreateCampaign).Methods("POST")
 	if err := http.ListenAndServe(fmt.Sprintf(":%v", port), router); err != nil {
 		log.Fatal(err)
diff --git a/src/myaktion/service/campaign.go b/src/myaktion/service/campaign.go
index 41b681242eba7683a665eb9345bbb8909697e7af..f03182dc9917e7e2f1aec418146c68b531dd4244 100644
--- a/src/myaktion/service/campaign.go
+++ b/src/myaktion/service/campaign.go
@@ -15,6 +15,16 @@ func init() {
 	campaignStore = make(map[uint]*model.Campaign)
 }
 
+func GetCampaigns() ([]model.Campaign, error) {
+	var campaigns []model.Campaign
+	for _, campaign := range campaignStore {
+		campaigns = append(campaigns, *campaign)
+	}
+	log.Printf("Retrieved: %v", campaigns)
+
+	return campaigns, nil
+}
+
 func CreateCampaign(campaign *model.Campaign) error {
 	campaign.ID = actCampaignId
 	campaignStore[actCampaignId] = campaign