diff --git a/pkg/vpn/bonafide/bonafide.go b/pkg/vpn/bonafide/bonafide.go
index c6d07cb89fc89e50a9d4aa3665d38100a484878b..6c2b3517a47bff38466f8247869f70603f1d899b 100644
--- a/pkg/vpn/bonafide/bonafide.go
+++ b/pkg/vpn/bonafide/bonafide.go
@@ -30,6 +30,7 @@ import (
 
 	"github.com/rs/zerolog/log"
 
+	"0xacab.org/leap/bitmask-core/pkg/introducer"
 	"0xacab.org/leap/bitmask-vpn/pkg/config"
 	"0xacab.org/leap/bitmask-vpn/pkg/snowflake"
 )
@@ -100,6 +101,25 @@ func New() *Bonafide {
 		},
 		Timeout: time.Second * 30,
 	}
+
+	// experimental introducer
+	if introURL := os.Getenv("LEAP_INTRODUCER_URL"); introURL != "" {
+		inr, err := introducer.NewIntroducerFromURL(introURL)
+		if err != nil {
+			log.Debug().
+				Err(err).
+				Str("introducer URL", introURL).
+				Msg("failed to create introducer from URL")
+		}
+
+		client, err = introducer.NewHTTPClientFromIntroducer(inr)
+		if err != nil {
+			log.Debug().
+				Err(err).
+				Msg("failed to create http client from introducer")
+		}
+	}
+	client.Timeout = time.Minute
 	_, tzOffsetSeconds := time.Now().Zone()
 	tzOffsetHours := tzOffsetSeconds / secondsPerHour
 
diff --git a/pkg/vpn/menshen/init.go b/pkg/vpn/menshen/init.go
index 809aafa38985411bb1f9a88b9ad8cc272dde22e6..90f9989deb01c6fcc45df530889b4f816fd06560 100644
--- a/pkg/vpn/menshen/init.go
+++ b/pkg/vpn/menshen/init.go
@@ -41,6 +41,11 @@ func New() (*Menshen, error) {
 	cfg.STUNServers = config.STUNServers
 	cfg.CountryCodeLookupURL = config.CountryCodeLookupURL
 
+	// experimental introducer
+	if introURL := os.Getenv("LEAP_INTRODUCER_URL"); introURL != "" {
+		cfg.Introducer = introURL
+	}
+
 	api, err := bootstrap.NewAPI(cfg)
 	if err != nil {
 		return nil, err