Synthetic data generation is widely known to boost the accuracy of neural\ngrammatical error correction (GEC) systems, but existing methods often lack\ndiversity or are too simplistic to generate the broad range of grammatical\nerrors made by human writers. In this work, we use error type tags from\nautomatic annotation tools such as ERRANT to guide synthetic data generation.\nWe compare several models that can produce an ungrammatical sentence given a\nclean sentence and an error type tag. We use these models to build a new, large\nsynthetic pre-training data set with error tag frequency distributions matching\na given development set. Our synthetic data set yields large and consistent\ngains, improving the state-of-the-art on the BEA-19 and CoNLL-14 test sets. We\nalso show that our approach is particularly effective in adapting a GEC system,\ntrained on mixed native and non-native English, to a native English test set,\neven surpassing real training data consisting of high-quality sentence pairs.\n