diff --git a/sendgrid-proxy/Makefile b/sendgrid-proxy/Makefile
deleted file mode 100644
index 55aa404..0000000
--- a/sendgrid-proxy/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-build:
-	bazelisk build //sendgrid-proxy/...
-
-# The keys from SendGrid are managed at
-# https://app.sendgrid.com/settings/api_keys.
-#
-# The sendgrid-proxy application only loads the API Key on startup, so if the
-# API Key gets updated make sure to restart all sendgrid-proxy pods.
-update-sendgrid-api-key-secret:
-	bazelisk run //kube/go/secrets:secrets -- update skia-public sendgrid-proxy
diff --git a/sendgrid-proxy/go/sendgrid-proxy/BUILD.bazel b/sendgrid-proxy/go/sendgrid-proxy/BUILD.bazel
deleted file mode 100644
index a040d5e..0000000
--- a/sendgrid-proxy/go/sendgrid-proxy/BUILD.bazel
+++ /dev/null
@@ -1,33 +0,0 @@
-load("//bazel/go:go_test.bzl", "go_test")
-load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
-
-go_library(
-    name = "sendgrid-proxy_lib",
-    srcs = ["main.go"],
-    importpath = "go.skia.org/infra/sendgrid-proxy/go/sendgrid-proxy",
-    visibility = ["//visibility:private"],
-    deps = [
-        "//go/common",
-        "//go/httputils",
-        "//go/metrics2",
-        "//go/secret",
-        "//go/sklog",
-    ],
-)
-
-go_binary(
-    name = "sendgrid-proxy",
-    embed = [":sendgrid-proxy_lib"],
-    visibility = ["//visibility:public"],
-)
-
-go_test(
-    name = "sendgrid-proxy_test",
-    srcs = ["main_test.go"],
-    embed = [":sendgrid-proxy_lib"],
-    deps = [
-        "//go/metrics2",
-        "//go/testutils/unittest",
-        "@com_github_stretchr_testify//require",
-    ],
-)
diff --git a/sendgrid-proxy/go/sendgrid-proxy/main.go b/sendgrid-proxy/go/sendgrid-proxy/main.go
deleted file mode 100644
index 41f0655..0000000
--- a/sendgrid-proxy/go/sendgrid-proxy/main.go
+++ /dev/null
@@ -1,81 +0,0 @@
-// A reverse proxy for SendGrid that attaches the SendGrid API Key to every
-// request.
-package main
-
-import (
-	"context"
-	"flag"
-	"fmt"
-	"net/http"
-	"net/http/httputil"
-	"net/url"
-
-	"go.skia.org/infra/go/common"
-	"go.skia.org/infra/go/httputils"
-	"go.skia.org/infra/go/metrics2"
-	"go.skia.org/infra/go/secret"
-	"go.skia.org/infra/go/sklog"
-)
-
-const (
-	secretName = "sendgrid-proxy"
-
-	requestsMetricName = "sendgrid_proxy_requests"
-	errorsMetricName   = "sendgrid_proxy_errors"
-)
-
-var (
-	port      = flag.String("port", ":8000", "HTTP service address (e.g., ':8000')")
-	project   = flag.String("project", "skia-public", "The GCP project that contains the API Key in GCP Secret manager.")
-	promPort  = flag.String("prom_port", ":20000", "Metrics service address (e.g., ':10110')")
-	targetURL = flag.String("target_url", "https://api.sendgrid.com", "The URL we are proxying to.")
-)
-
-func newProxy(target *url.URL, sendGridAPIKey string) *httputil.ReverseProxy {
-	numRequests := metrics2.GetCounter(requestsMetricName)
-	numErrors := metrics2.GetCounter(errorsMetricName)
-	authHeaderValue := []string{fmt.Sprintf("Bearer: %s", sendGridAPIKey)}
-
-	reverseProxy := httputil.NewSingleHostReverseProxy(target)
-	reverseProxy.Director = func(r *http.Request) {
-		r.Header["Authorization"] = authHeaderValue
-		numRequests.Inc(1)
-	}
-	reverseProxy.ErrorHandler = func(w http.ResponseWriter, r *http.Request, err error) {
-		numErrors.Inc(1)
-		httputils.ReportError(w, err, "failed to proxy request", http.StatusInternalServerError)
-	}
-
-	return reverseProxy
-}
-
-func main() {
-	common.InitWithMust(
-		"sendmail-proxy",
-		common.PrometheusOpt(promPort),
-		common.MetricsLoggingOpt(),
-	)
-
-	ctx := context.Background()
-	secretClient, err := secret.NewClient(context.Background())
-	if err != nil {
-		sklog.Fatal(err)
-	}
-	sendGridAPIKey, err := secretClient.Get(ctx, *project, secretName, secret.VersionLatest)
-	if err != nil {
-		sklog.Fatal(err)
-	}
-	sklog.Infof("SendGrid API Key retrieved.")
-
-	u, err := url.Parse(*targetURL)
-	if err != nil {
-		sklog.Fatal(err)
-	}
-
-	var h http.Handler = newProxy(u, sendGridAPIKey)
-	h = httputils.HealthzAndHTTPS(h)
-	http.Handle("/", h)
-
-	sklog.Info("Start listening.")
-	sklog.Fatal(http.ListenAndServe(*port, nil))
-}
diff --git a/sendgrid-proxy/go/sendgrid-proxy/main_test.go b/sendgrid-proxy/go/sendgrid-proxy/main_test.go
deleted file mode 100644
index 97db972..0000000
--- a/sendgrid-proxy/go/sendgrid-proxy/main_test.go
+++ /dev/null
@@ -1,100 +0,0 @@
-// Reverse proxy that handles SendGrid API requests and adds in the SendGrid API Key.
-package main
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"net/url"
-	"testing"
-
-	"github.com/stretchr/testify/require"
-	"go.skia.org/infra/go/metrics2"
-	"go.skia.org/infra/go/testutils/unittest"
-)
-
-const (
-	goodAPIKey = "123456"
-	badAPIKey  = "654321"
-)
-
-func setupForTest(t *testing.T, h http.HandlerFunc) *url.URL {
-	unittest.MediumTest(t)
-	// Create a stand-in for the SendGrid server.
-	sendGridAPIServer := httptest.NewServer(h)
-	t.Cleanup(func() {
-		sendGridAPIServer.Close()
-	})
-
-	metrics2.GetCounter(requestsMetricName).Reset()
-	metrics2.GetCounter(errorsMetricName).Reset()
-
-	sendGridAPIServerURL, err := url.Parse(sendGridAPIServer.URL)
-	require.NoError(t, err)
-	return sendGridAPIServerURL
-}
-
-func TestNewProxy_HappyPath(t *testing.T) {
-	sendGridAPIServerURL := setupForTest(t, func(w http.ResponseWriter, r *http.Request) {
-		require.Equal(t, fmt.Sprintf("Bearer: %s", goodAPIKey), r.Header.Get("Authorization"))
-	})
-
-	// Create our proxy and point to the server constructed above.
-	p := newProxy(sendGridAPIServerURL, goodAPIKey)
-
-	// Send it a request.
-	r := httptest.NewRequest("POST", sendGridAPIServerURL.String(), nil)
-	w := httptest.NewRecorder()
-	p.ServeHTTP(w, r)
-
-	// A 200 OK response means the Bearer token was passed along correctly.
-	require.Equal(t, http.StatusOK, w.Result().StatusCode)
-	require.Equal(t, int64(1), metrics2.GetCounter(requestsMetricName).Get())
-	require.Equal(t, int64(0), metrics2.GetCounter(errorsMetricName).Get())
-}
-
-func TestNewProxy_BadAPIKey_ResponseIsStatusUnauthorized(t *testing.T) {
-	sendGridAPIServerURL := setupForTest(t, func(w http.ResponseWriter, r *http.Request) {
-		// Test the test.
-		require.Equal(t, fmt.Sprintf("Bearer: %s", badAPIKey), r.Header.Get("Authorization"))
-		http.Error(w, "unauthorized", http.StatusUnauthorized)
-	})
-
-	// Create our proxy and point to the server constructed above.
-	p := newProxy(sendGridAPIServerURL, badAPIKey)
-
-	// Send it a request.
-	r := httptest.NewRequest("POST", sendGridAPIServerURL.String(), nil)
-	w := httptest.NewRecorder()
-	p.ServeHTTP(w, r)
-
-	// Confirm the StatusUnauthorized makes it back to the caller.
-	require.Equal(t, http.StatusUnauthorized, w.Result().StatusCode)
-	require.Equal(t, int64(1), metrics2.GetCounter(requestsMetricName).Get())
-	require.Equal(t, int64(0), metrics2.GetCounter(errorsMetricName).Get())
-}
-
-func TestNewProxy_BadURLForTarget_ReturnsInternalServiceError(t *testing.T) {
-	// Call setupForTest to reset the metrics.
-	_ = setupForTest(t, nil)
-
-	// Start with a bad target URL.
-	target := &url.URL{
-		Scheme: "http",
-		Host:   "dummy.tld",
-		Path:   "/",
-	}
-
-	// Point proxy to the bad URL.
-	p := newProxy(target, goodAPIKey)
-
-	// Send it a request.
-	r := httptest.NewRequest("POST", target.String(), nil)
-	w := httptest.NewRecorder()
-	p.ServeHTTP(w, r)
-
-	// Confirm StatusInternalServerError and error metric gets incremented.
-	require.Equal(t, http.StatusInternalServerError, w.Result().StatusCode)
-	require.Equal(t, int64(1), metrics2.GetCounter(requestsMetricName).Get())
-	require.Equal(t, int64(1), metrics2.GetCounter(errorsMetricName).Get())
-}
