diff --git a/main.go b/main.go
index a7368b06a80e630d5faccf20055414ce0b4450c7..d850bd5f32c3f3b52b3cd7f3e745a8f4eb4d0f24 100644
--- a/main.go
+++ b/main.go
@@ -13,12 +13,32 @@ import (
 )
 
 type config struct {
-	Db        bot.DbParams
-	Transport map[string]transportParams `yaml:"transports"`
+	Db         bot.DbParams
+	Transports map[string]transportParams `yaml:"transports"`
+	Readers    map[string]readerParams    `yaml:"sites"`
 }
 
+type readerParams map[string]interface{}
 type transportParams map[string]interface{}
 
+func getReader(name string, config map[string]interface{}) site.Reader {
+	var err error
+	var reader site.Reader
+
+	switch name {
+	case "youtube":
+		reader, err = site.NewYoutube(config["api_key"].(string))
+	default:
+		log.Fatalf("Unsupported site '%s'", name)
+	}
+
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	return reader
+}
+
 func startTransport(name string, config transportParams, factory bot.Factory) chan bool {
 	transportType, ok := config["type"]
 	if !ok {
@@ -54,19 +74,18 @@ func main() {
 
 	var config config
 	err = yaml.Unmarshal(file, &config)
+
 	quit := make(map[string](chan bool))
+	var readers []site.Reader
 
-	youtube, err := site.NewYoutube("AIzaSyD32EU9lb9cnNcEaSUBKCkKodk6rjl3HYc")
-	if err != nil {
-		log.Fatal(err)
-	}
-	readers := []site.Reader{
-		//&site.Youtube{},
-		youtube,
+	for name, readerCfg := range config.Readers {
+		reader := getReader(name, readerCfg)
+		readers = append(readers, reader)
 	}
+
 	factory := bot.NewPlayBotFactory(config.Db, readers)
 
-	for name, config := range config.Transport {
+	for name, config := range config.Transports {
 		c := startTransport(name, config, factory)
 		quit[name] = c
 	}