diff --git a/internal/gapicgen/cmd/genbot/Dockerfile b/internal/gapicgen/cmd/genbot/Dockerfile
index f035d8c..8905df3 100644
--- a/internal/gapicgen/cmd/genbot/Dockerfile
+++ b/internal/gapicgen/cmd/genbot/Dockerfile
@@ -5,9 +5,6 @@
 # Install bash and ssh tools (needed to run regen.sh etc).
 RUN apk add bash openssh openssh-client
 RUN which bash
-# Install tools necessary for artman.
-RUN apk add alpine-sdk build-base openssl-dev
-RUN which gcc
 # Install protoc and protobuf-dev (common protos).
 RUN apk add protoc protobuf-dev
 RUN protoc --version
@@ -21,14 +18,6 @@
 ENV PATH /usr/local/go/bin:$PATH
 RUN go version
 
-# Install python and pip.
-RUN apk add python python3 py-pip py3-pip py-virtualenv py3-virtualenv python2-dev python3-dev libffi-dev
-RUN python --version
-RUN python3 --version
-RUN pip --version
-RUN pip3 --version
-RUN virtualenv --version
-
 # Install Go tools.
 RUN go get \
   github.com/golang/protobuf/protoc-gen-go \
@@ -45,12 +34,7 @@
 RUN echo -e '#!/bin/bash\n\
 set -ex\n\
 echo "https://$GITHUB_USERNAME:$GITHUB_ACCESS_TOKEN@github.com" > ~/.git-credentials \n\
-dockerd-entrypoint.sh &\n\
-unset DOCKER_HOST\n\
-go mod download & # download deps whilst we wait for dockerd to start \n\
-until docker ps; do sleep 1; done # wait for docker to start\n\
-docker ps\n\
-docker pull googleapis/artman:latest & # download latest artman whilst we wait for genbot to start \n\
+go mod download \n\
 go run cloud.google.com/go/internal/gapicgen/cmd/genbot \
     --githubAccessToken=$GITHUB_ACCESS_TOKEN \
     --githubUsername=$GITHUB_USERNAME \
diff --git a/internal/gapicgen/cmd/genbot/main.go b/internal/gapicgen/cmd/genbot/main.go
index e7d047b..e449e82 100644
--- a/internal/gapicgen/cmd/genbot/main.go
+++ b/internal/gapicgen/cmd/genbot/main.go
@@ -39,7 +39,7 @@
 )
 
 var (
-	toolsNeeded = []string{"git", "pip3", "virtualenv", "python3", "go", "protoc", "docker"}
+	toolsNeeded = []string{"git", "go", "protoc"}
 
 	githubAccessToken = flag.String("githubAccessToken", "", "Get an access token at https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line")
 	githubUsername    = flag.String("githubUsername", "", "ex -githubUsername=jadekler")
diff --git a/internal/gapicgen/cmd/genlocal/main.go b/internal/gapicgen/cmd/genlocal/main.go
index 68acc07..ea7a670 100644
--- a/internal/gapicgen/cmd/genlocal/main.go
+++ b/internal/gapicgen/cmd/genlocal/main.go
@@ -33,7 +33,7 @@
 )
 
 var (
-	toolsNeeded = []string{"pip3", "virtualenv", "python3", "go", "protoc", "docker"}
+	toolsNeeded = []string{"go", "protoc"}
 
 	usage = func() {
 		fmt.Fprintln(os.Stderr, "genlocal")
diff --git a/internal/gapicgen/generator/config.go b/internal/gapicgen/generator/config.go
index 1d32a3e..1842c82 100644
--- a/internal/gapicgen/generator/config.go
+++ b/internal/gapicgen/generator/config.go
@@ -631,8 +631,3 @@
 	"spanner/apiv1",
 	"trace/apiv1",
 }
-
-// Relative to googleapis dir.
-var artmanGapicConfigPaths = []string{}
-
-var artmanGapicManifestEntries = []manifestEntry{}
diff --git a/internal/gapicgen/generator/gapics.go b/internal/gapicgen/generator/gapics.go
index 1867a61..811127d 100644
--- a/internal/gapicgen/generator/gapics.go
+++ b/internal/gapicgen/generator/gapics.go
@@ -15,32 +15,19 @@
 package generator
 
 import (
-	"bytes"
 	"context"
 	"encoding/json"
 	"fmt"
-	"io"
 	"log"
 	"os"
 	"path/filepath"
-	"regexp"
 	"strings"
 
 	"gopkg.in/yaml.v2"
 )
 
-var dockerPullRegex = regexp.MustCompile("(googleapis/artman:[0-9]+.[0-9]+.[0-9]+)")
-
 // generateGapics generates gapics.
 func generateGapics(ctx context.Context, googleapisDir, protoDir, gocloudDir, genprotoDir string) error {
-	if err := artman(artmanGapicConfigPaths, googleapisDir); err != nil {
-		return err
-	}
-
-	if err := copyArtmanFiles(googleapisDir, gocloudDir); err != nil {
-		return err
-	}
-
 	for _, c := range microgenGapicConfigs {
 		if err := microgen(c, googleapisDir, protoDir, gocloudDir); err != nil {
 			return err
@@ -160,82 +147,6 @@
 	return c.Run()
 }
 
-// artman runs artman on a single artman gapic config path.
-func artman(gapicConfigPaths []string, googleapisDir string) error {
-	// Prepare virtualenv.
-	//
-	// TODO(deklerk): Why do we have to install cachetools at a specific
-	// version - doesn't virtualenv solve the diamond dependency issues?
-	//
-	// TODO(deklerk): Why do we have to create artman-genfiles?
-	// (pip install googleapis-artman fails with an "lstat file not found"
-	// without doing so)
-	c := command("bash", "-c", `
-set -ex
-
-python3 -m venv artman-venv
-source ./artman-venv/bin/activate
-mkdir artman-genfiles
-pip3 install cachetools==2.0.0
-pip3 install googleapis-artman`)
-	c.Stdout = os.Stdout
-	c.Stderr = os.Stderr
-	c.Stdin = os.Stdin // Prevents "the input device is not a TTY" error.
-	c.Dir = googleapisDir
-	if err := c.Run(); err != nil {
-		return nil
-	}
-
-	for _, config := range gapicConfigPaths {
-		log.Println("artman generating", config)
-
-		// Write command output to both os.Stderr and local, so that we can check
-		// for `Cannot find artman Docker image. Run `docker pull googleapis/artman:0.41.0` to pull the image.`.
-		inmem := bytes.NewBuffer([]byte{})
-		w := io.MultiWriter(os.Stderr, inmem)
-
-		c := command("bash", "-c", "./artman-venv/bin/artman --config "+config+" generate go_gapic")
-		c.Stdout = os.Stdout
-		c.Stderr = w
-		c.Stdin = os.Stdin // Prevents "the input device is not a TTY" error.
-		c.Dir = googleapisDir
-		err := c.Run()
-		if err == nil {
-			continue
-		}
-
-		// We got an error. Check if it's a need-to-docker-pull error (which we
-		// can fix here), or something else (which we'll need to panic on).
-		stderr := inmem.Bytes()
-		if dockerPullRegex.Match(stderr) {
-			artmanImg := dockerPullRegex.FindString(string(stderr))
-			c := command("docker", "pull", artmanImg)
-			c.Stdout = os.Stdout
-			c.Stderr = os.Stderr
-			c.Stdin = os.Stdin // Prevents "the input device is not a TTY" error.
-			if err := c.Run(); err != nil {
-				return err
-			}
-		} else {
-			return err
-		}
-
-		// If the last command failed, and we were able to fix it with `docker pull`,
-		// then let's try regenerating. When https://github.com/googleapis/artman/issues/732
-		// is solved, we won't have to do this.
-		c = command("bash", "-c", "./artman-venv/bin/artman --config "+config+" generate go_gapic")
-		c.Stdout = os.Stdout
-		c.Stderr = os.Stderr
-		c.Stdin = os.Stdin // Prevents "the input device is not a TTY" error.
-		c.Dir = googleapisDir
-		if err := c.Run(); err != nil {
-			return err
-		}
-	}
-
-	return nil
-}
-
 // microgen runs the microgenerator on a single microgen config.
 func microgen(conf *microgenConfig, googleapisDir, protoDir, gocloudDir string) error {
 	log.Println("microgen generating", conf.pkg)
@@ -391,9 +302,6 @@
 	for _, manual := range manualEntries {
 		entries[manual.DistributionName] = manual
 	}
-	for _, artman := range artmanGapicManifestEntries {
-		entries[artman.DistributionName] = artman
-	}
 	for _, conf := range confs {
 		yamlPath := filepath.Join(googleapisDir, conf.apiServiceConfigPath)
 		yamlFile, err := os.Open(yamlPath)
@@ -439,45 +347,3 @@
 	c.Dir = gocloudDir
 	return c.Run()
 }
-
-// gapiFolderRegex finds gapi folders, such as gapi-cloud-cel-go/cloud.google.com/go
-// in paths like [...]/artman-genfiles/gapi-cloud-cel-go/cloud.google.com/go/expr/apiv1alpha1/cel_client.go.
-var gapiFolderRegex = regexp.MustCompile("gapi-.+/cloud.google.com/go/")
-
-// copyArtmanFiles copies artman files from the generated googleapisDir location
-// to their appropriate spots in gocloudDir.
-func copyArtmanFiles(googleapisDir, gocloudDir string) error {
-	// For some reason os.Exec doesn't like to cp globs, so we can't do the
-	// much simpler cp -r <googleapisDir>/artman-genfiles/gapi-*/cloud.google.com/go/* <gocloudDir>.
-	//
-	// (Possibly only specific to /var/folders (os.Tmpdir()) on darwin?)
-	gapiFolders := make(map[string]struct{})
-	root := googleapisDir + "/artman-genfiles"
-	if err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
-		if err != nil {
-			return err
-		}
-		// Things like [...]/artman-genfiles/gapi-cloud-cel-go/cloud.google.com/go/expr/apiv1alpha1/cel_client.go
-		// become gapi-cloud-cel-go/cloud.google.com/go/.
-		//
-		// The period at the end is analagous to * (copy everything in this dir).
-		if gapiFolderRegex.MatchString(path) {
-			gapiFolders[root+"/"+gapiFolderRegex.FindString(path)+"."] = struct{}{}
-		}
-		return nil
-	}); err != nil {
-		return err
-	}
-
-	for f := range gapiFolders {
-		c := command("cp", "-R", f, gocloudDir)
-		c.Stdout = os.Stdout
-		c.Stderr = os.Stderr
-		c.Dir = googleapisDir
-		if err := c.Run(); err != nil {
-			return err
-		}
-	}
-
-	return nil
-}
